您的位置:首页 > 理论基础 > 计算机网络

流重组讲解四部曲(一)- IP、TCP流重组概念理解

2018-02-09 15:48 579 查看

1、IP碎片重组的理解

  在TCP/IP分层中,数据链路层用MTU(最大传输单元)来限制所能传输的数据包大小,MTU是指一次传送的数据最大长度,不包括数据链路层数据帧的帧头。如以太网的MTU为1500字节。
  发送的IP数据报的大小超过了MTU时,IP层就需要对数据进行分片;网络传输中IP层不能保证包传输是有序进行的,IP协议可能出现将单个包传输多次的情况,因此可能出现分片丢失、重叠以及乱序到达等情况,最终在目的地进行碎片重组。
三个可能存在的疑问点:
1.1 MTU是不是越大越好?
  因为协议数据单元的包头和包尾的长度是固定的,MTU越大,则一个协议数据单元承载的有效数据就越长,通信效率也越高;而且传送相同的用户数据所需的数据包个数也越低。
  MTU也不是越大越好,因为MTU越大,传送一个数据包的延迟也越大;并且数据包中比特位发生错误的概率也越大。
  所以要权衡通信效率和传输延迟选择合适的MTU。
1.2 什么情况下可能出现IP分片乱序到达?
  IP层不能保证包传输是有序进行的。一方面同一数据报的不同分片可能经由不同路径到达相同的目的地,即传输链路的不同;另一方面对于高性能路由器而言,常采用并行数据链路,不同的处理延时也有可能导致IP分片乱序到达。
1.3 碎片重组只能发生在最终接收端,那么IP分片是否也只能发生在起始发送端?
  碎片重组只能发生在最终接收端原因有两点。第一个原因,在网络中不进行重组要比重组更能减轻路由器转发软件(或硬件)的负担。第二个原因,同一数据报的不同分片可能经由不同路径到达相同的目的地,如果发生这种情况,路径上的路由器通常没有能力来重组原始的数据报,因为它们都只能看到所有分片的一个子集。
  当IP层接收到一个要发送的IP数据报时,它会判断该数据报应该从哪个本地接口发送(通过查找一个转发表)以及要求的MTU是多少。IP比较外出接口的MTU和数据的大小,如果数据报太大则进行分片。IPv4中的分片可以在原始发送方主机和端到端路径上的任何中间路由器上进行。值得一提的是,数据报分片自身也可以被分片。IPv6中的分片有些不一样,它只允许源主机进行分片。

2、TCP重组的理解

  应用层向TCP层发送用于网间传输的数据流,TCP则把数据流分割成适当长度的报文段,最大报文段大小(MSS)通常受以太网MTU限制;对于TCP来说应尽量避免IP分片,TCP协议在实现的时候往往用MTU值减去IP数据包头部和TCP数据段头部长度代替MSS,一般为1460字节;所以通常TCP分段不会再出现IP分片的情况。
  MSS是TCP协议定义的一个选项,MSS选项用于在TCP连接建立时,收发双方协商通信时每一个报文段所能承载的最大数据长度。
  因为TCP使用IP来传递它的报文段,IP不提供重复消除和保证次序正确的功能,所以TCP重组主要处理包失序和包重复等问题。TCP是一个字节流协议,TCP绝不会以杂乱的次序给接收应用程序发送数据。因此,TCP接收端可能会被迫先保持大序列号的数据不交给应用程序,直到缺失的小序列号的报文段被填满,最终按序将数据提交给应用程序,这也是TCP重组的目的。
一个可能存在的疑问点:

2.1 TCP分段为什么要避免IP分片?
  因为如果在IP层进行分片的话,如果其中的某片数据丢失了,对于保证可靠性的TCP协议来说,会增大重传数据包的机率,而且只能重传整个TCP分组(进行IP分片前的数据包),因为TCP层是不知道IP层进行分片的细节的,也不关心。
2.2 TCP出现包部分重复的原因?

  当TCP超时重传,它并不需要完全重传相同的报文段。TCP允许执行重新组包,发送一个更大的报文段来提高性能,因此可能导致部分数据重复!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: