> 文章列表 > 笔记:关于TCP分段和IP分片的原因总结

笔记:关于TCP分段和IP分片的原因总结

笔记:关于TCP分段和IP分片的原因总结

一、前言:关于电路交换和分组交换

数据通信有电路交换分组交换两种。
电路交换:是指在通信双方之间建立一条物理链路,该链路只能被通信双方使用。

电路交换优点
1)数据到达有序,且链路之间的数据互不干扰。
电路交换缺点
1)双方未进行通信时仍然占用着链路资源,如:说话停顿期间。
2)双方流量达不到链路负载时仍然占用整个链路的资源,如:链路可以承载100mb/s,实际通信需求为10mb/s,该链路有90mb/s的空闲或者说是浪费。

分组交换:将数据分成一个一个分组,每个分组独立发送,到达顺序也是随机的。

1)分组交换优点:解决了上述电路交换的缺点。
2)分组交换缺点:每个分组需要带上额外的起始地址和目的地址信息,相当于降低了一定的信道利用率,且数据到达无序。

二、以太网采用的是分组交换

最为流行的以太网也是分组交换。且以太网位于网络层以下,及:七层模型中的数据链路层四层协议中的网络接入层
既然是分组交换,自然需要对分组做一定的约束。以太网单个分组的最大有效载荷为1500(即:最大传输单元MTU),为什么是1500?可以看成是硬性规定或者说是通过介质的物理特性计算而得。

三、IP分片存在的原因

既然位于数据链路层的以太网分组存在MTU限制,那么位于其上层的网络层每次发数据时,就得考虑数据大小了,若超过1500,就需要分成多个分组让以太网进行发送,这就是IP分片的原因。

四、TCP分段的原因

既然IP已经有了分片逻辑,可以解决大数据发送的问题,那么TCP为什么要分段呢?其实有两个原因:
1)我们知道IP协议是以包的形式发送的,IP包头中用于标识长度的字段只占2字节,所以单个IP包能承载的数据有限,而TCP是以流的形式发送,没有大小限制,故:TCP不得不进行分段。
2)TCP要分段,那么怎么分段比较合适?

由于TCP是可靠的传输协议, 但IP协议又是不可靠的,那么TCP必须负责丢包后的重传机制。
如果TCP塞给IP层的数据比较大,由于以太网MTU的限制,此时会触发IP层的分片逻辑。由于 每个分片都是独立发送的,一旦单个分片丢失会导致整个IP包的无效,进而导致TCP重传整个包,而不是重传丢失的单个分片。
故:为了尽可能的提高重传效率,TCP不得不考虑以太网的MTU(且是整个链路上的MTU中的最小值,称为路径MTU),尽量避免触发IP层分片,进而提高重传效率,这也是最大段大小(MSS)存在的原因。