tcp/ip 详解杂记

滑动窗口

 当一个数据段到达时,该数据段最初会被网卡的驱动处理,然后被按序放到ip模块的输入队列中,如果是本机数据,ip层再按序传送给tcp,放置在tcp的接受缓冲区中。
 tcp 数据交互过程中,这个是动态的,每次都不一样的,这取决于tcp的接受和发生模块的实现/接受数据的进程,而进程又收操作系统调度的影响,所以每次连接数据交互都是动态的,都是不一样的。
这里写图片描述
 从left 到 right , left是向右移动的,right也是向右移动的,left 的移动受着对端的控制,如果对端确认了,那滑动窗口就可以向右移动了。
 right的向右移动,也取决于对端,当对端应用读取了确认的数据后释放了自己的tcp缓冲区后,对端tcp缓冲区可以容纳更多的数据时,此时发生端的窗户right边就可以向右移动增加发生端窗口的大小。
 接受确认数据和读取数据是俩回事,接受数据,数据被放到了 tcp缓冲区内,而读取数据是应用从tcp缓冲区中读取,所以接受了数据,发生确定ack 时windows的值不一定会往大调,因为 tcp缓冲区的数据不变,当缓冲区的数据被应用读取走了后,才可以增大窗口的大小。

MTU

概念

MTU 就是最大单元 (对于数据链路层来看的,数据帧中最大有效数据的大小,如果大于这个需要分片,如果IP层设置DF选项就会收到 ICMP 错误)
IP层的 最小重组缓冲区大小 IPV4 576字节 (对于网络层来看,发生分片后,在目的端重组的每个分片最大值)
MSS就是最大载荷 从应用层算的。(它是 MTU - IP+TCP头部的大小,以太网是1460 ,它就是为了减少分片的收到)
MTU 跟数据链路有关,以太网是1500,所以最大以太网帧是 1518。(具体分不分片都看MTU的大小)

路径MTU

这个就是主要通过ip 包头 中的不分段选项,然后应用icmp 不断报错最终确定 通信路径上 的最小MTU。那么为什么要路径MTU呢?
因为每个数据链路层 都有一个队列,这个队列满了,就会把从ip层得到的数据包丢弃,然后从路由器/主机 协议栈上向返回一个错误给 发送方。 这样就会造成无谓的开销。
所以如果我们没有路径MTU的话,传递的数据段过大,到了IP 层就会被分成很多 数据包,这些过多的数据包在传送的时候,会占据大量的队列,那么这样就会造成严重的丢包,这个开销在应用层是看不到的,这个属于内核协议栈。
如果我们使用了路径MTU,根据tcp/ip 的规则,未收到ack 前是不会再次发送数据的,这样即使每次传递的数据可能变少了,但是丢包就不那么严重了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值