老师好。学完TCP,IP,和数据链路层后,我对他们数据包的封装和最大传输长度的关系,以及对于大数据包(大于1500 bytes的数据)他们之间如何分片(packet) 很有兴趣。
首先,MTU长度是1500 (以下单位皆为byte字节),IP最大总长度是60000多,也就是说IP包的数据如果超过1500,就要在网络层进行分片。
然后,我在网上查到 https://www.cnblogs.com/jiangzhaowei/p/9273854.html
网络层分片不像传输层分片那样安全,容易丢包(这也是为什么UDP在传输层对数据报不做分片直接封装到网络层,网络层帮它分片容易丢失,所以UDP并不安全的原因?)
为了解决这个问题,TCP在传输层就给你分好片,也就是说窗口大概在1000左右(建立连接的三次握手的过程中,连接双方会相互通告MSS(Maximum Segment Size,最大报文段长度),MSS一般是MTU—IP首部(20)—TCP首部(20)~ 1460 B,每次发送的TCP数据都不会超过双方MSS的最小值,所以就保证了IP数据报不会超过MTU,避免了IP分片 —— 引自上面的链接),恰好分的和MTU差不多大,这样避免了网络层分片。这样理解正确吗?
但如此一来,如果用TCP传输,整个网络层65000多的最大长度就只塞了1000多Byte长度的数据。既然有那么多富足,并且不鼓励较大数据包在网络层分片,而鼓励传输层分片,那为何还要把IP协议里的最大长度设计的那么大呢?也设计成1500左右不是很好吗?
谢谢老师!!!