IP分片与TCP分段

来源:互联网 发布:静态编译 e源码 编辑:程序博客网 时间:2024/05/29 17:14

  最大传输单元(Maximum Transmission Unit, MTU)是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位)。数据链路层中的网络对数据帧的长度都有一个限制,不同网络的MTU值不同,常用的以太网为1500个字节。
  若在IP层要传输的数据报大小比链路层的MTU还大,那么IP层就会对这个数据报进行分片。一个数据报会被分为若干片,每个分片的大小都小于或等于链路层的MTU值。
  IP数据报分片以后,只有到达目的地才进行重新组装(这里的重新组装是达到目的地才组装,而不像其他网络协议在下一站就重新组装),IP数据报的分片和组装都是发生在网络层,其目的就是使分片和组装过程对传输层(TCP和UDP)是透明的,以及防止某些可能的性能降低。已经分片的数据报有可能会再次进行分片(即可多次分片)。
  当IP数据报被分片后,只有第一个分片存在运输层协议首部,其余分片都不包含运输层协议的首部。但是每个分片都具有IP首部,并且每一片都成为一个分组,在选择路由时每一组与其他分组相互独立。由于分组之间是独立的,所以分片传输的IP数据报不一定按照顺序到达目的地,但是每个分片的IP首部能够使接收端按照正确的顺序组装这些IP数据报分片。
  最大报文段长度(Maximum Segment Size, MSS)是TCP数据包每次能够传输的最大数据分段。当TCP报文段的长度大于MSS时,需要将TCP数据包进行分段传输。
  MSS是在TCP三次握手建立连接时,在两端主机之间被计算得出,会在TCP首部写入MSS选项,告诉对方自己的接口能够适应的MSS的大小。为了达到最佳的传输效能TCP协议在建立连接时通常要协商双方的MSS值,然后会在两者之间选择一个较小的值来限制传输数据的大小。TCP报文段的每个分段中都有TCP首部,到了端点后根据TCP首部的信息在传输层进行重组(即TCP的分段和重组都发生在传输层)。
  采用TCP协议进行数据传输是不会造成IP分片的,因为一旦TCP数据超过了MSS,则在传输层就会对TCP数据包进行分段,自然到了IP层的数据报肯定不会超过MTU,所以就不用分片了。而对于UDP数据报,如果UDP组成的IP数据报长度超过了MTU,那么IP数据报显然就要进行分片了,因为UDP不能像TCP一样自己进行分段。传输层中的TCP会分段,网络层中的IP会分片。IP层的分片更多的是为运输层的UDP服务的,由于TCP自己会避免IP的分片,所以使用TCP传输在IP层不会发生分片的现象。
  IP层没有超时重传机制,所以在IP数据报的分片丢失时,必须重传整个IP数据报。超时和重传机制由更高层来实现(TCP有超时重传机制,但UDP没有)。当来自TCP报文段的某一片丢失后,TCP在超时后重发整个TCP报文段,该报文段对应于一份IP数据报。没办法只重传数据报中的一个数据报片。

0 0
原创粉丝点击