July 4, 2021
TCP
TCP断开连接四次挥手
开始客户端和服务端都是处理【established】状态
客户端发送「FIN」报文之后,进入FIN-WAIT-1状态
服务端收到客户端的FIN之后,恢复一个ACK,同时进入CLOSE_WAIT状态
客户端接收到ACK之后,进入到FIN-WAIT-2状态
服务端接着 ...
Read more
July 4, 2021
TCP
快速重传和快速恢复快速重传
d 为何会接收到以个失序数据段?
若报文丢失,将会产生连续的失序ACK段
若网络路径与设备导致数据段失序,将会产生少量的失序ACK段
若报文重复,将会产生少量的失序ACK段
当发送端发送pkt0是正常的,由于滑动窗口为满,发送方可以继续发送pkt1 ...
Read more
July 4, 2021
TCP
由于TCP是面向字节流的传输协议,可以发送不定长的字节流数据,TCP连接发送数据时会“先天性”尝试占用整个带宽,而当所有的TCP连接都尝试占用网络带宽时,就会造成网络的堵塞,而TCP慢启动算法则是为了解决这一场景;
全局思考
拥塞控制要面向整体思考,如上👆网络拓扑图,当左边的网络节点通过 ...
Read more
July 4, 2021
TCP
如何减少小报文提升网络效率每一个TCP报文段都包含20字节的IP头部和20字节的TCP首部,如果报文段的数据部分很少的话,网络效率会很差;
SWS(Silly Window syndrome) 糊涂窗口综合症
如上图👆所示场景,在之前的滑动窗口已经了解过,随着服务端处理连接数据能力越来越 ...
Read more
July 4, 2021
TCP
滑动窗口
之前学习了PAR方式的TCP超时和重传,其实在考虑发送方发送数据报的同时,也应该考虑接收方对于数据的处理能力,由此引出本次学习的主题 – 滑动窗口
发送端窗口滑动窗口按照传输数据方向分为两种,发送端窗口和接收端窗口;下面先看一下发送端窗口👇:
上图分为四个部分:
已发送并 ...
Read more
July 4, 2021
TCP
之前的文章已经介绍了TCP超时重传的过程中使用了定时器的策略,当定时器规定时间内未收到确认报文之后,就会触发报文的重传,同时定时器复位;那么定时器超时时间(RTO Retramission Timeout)是如何计算的呢?
什么是RTT?了解RTO如何计算之前,首先明确一个概念「 RTT ...
Read more
July 4, 2021
TCP
背景
如上图👆所示,设备A向设备B发送消息,消息在网络中会由于各种各样的问题导致丢失,那么该如何解决上述问题呢?
采用定时器重传
PAR:Positive Acknowledgment with Retransmission
最简单的思路是在发送方设置「 定时器 」:
当设备A发 ...
Read more
July 4, 2021
TCP
MSS产生的背景我们都知道TCP协议是运输在传输层的协议,它是面向【字节流】的传输协议;它的上层,应用层传输的数据是无限制的,但是它的下层也就是网络层和链路层由于路由等转发设备有内存等限制是不可能无限制传输任何大小的报文的,它们一定会限制报文的长度,因此 TCP协议要完成的工作是将从应用层接 ...
Read more
July 4, 2021
TCP
握手🤝的目的
同步Sequence序列号
初始化序列号ISN (Inital Sequence Number)
交换TCP通讯的参数
比如最大报文段参数(MSS)、窗口比例因子(Window)、选择性确认(SACK)、制定校验和算法;
三次握手握手过程
TCP三次握手的大致流程 ...
Read more
July 4, 2021
TCP
带着问题学习
如何校验报文段是否损坏? 如何CRC校验
seq和ack是如何计算的?
tcp校验位都有那些? 6个 分别是什么含义?
tcp如何计算首部长度? 偏移量
TCP Retransmission 重传?
tcp spurious retransmission 又是什么呢?
t ...
Read more