2021-12-08
运输层
面向连接的运输:TCP
TCP报文段结构
序号和确认号
TCP报文段首部中最重要的字段是序号和确认号,他是TCP可靠传输的关键部分
序号:
TCP在传输数据的过程中,将数据看成一个无结构、有序的字节流,他会隐式地为数据流中的每一个字节编号,而报文首部中的序号就是传送的该报文中包含的数据的第一个字节的编号,例如当最大传输块(MSS)为1000字节,数据流为500000字节的时候:
则第一个报文段的序号是0,第二个是1000,以此类推
确认号:
确认号是接收方期待从发送方接收到下一串数据流的编号
例如:主机A已经接收到主机B发送的编号为0 ~ 535的所有字节,于是A在下一个发往B的报文中的确认号就是536
又或者:A已经接收到B发送的0 ~ 535和900 ~ 1000的字节,但是丢失了536 ~ 899,于是于是A在下一个发往B的报文中的确认号也是536
因为TCP只确认该流中第一个丢失的字节,于是TCP被称为提供累积确认
Telnet是运行在TCP上的,以其为一个例子,用户向服务器发送一个c,服务器接收到后给客户回显一个客户发送的字符
假设客户和服务器的起始序号为42和79
估计往返时间
TCP会为传输一次的报文测量SampleRTT,但是不会为重传的报文计算,显然,由于负载变化等其他原因,RTT是随着时间变化的,所以TCP会计算EstimatedRTT,公式如下:
EstimatedRTT=(1-a)* EstimatedRTT+a * SampleRTT
除了估算RTT外,也会测量RTT的偏差值
DevRTT=(1-β)* DevRTT+β * | SampleRTT-EstimatedRTT |