计算机网络 -面向连接的运输:TCP -运输层
一、TCP连接小知识点
- TCP连接前必须得先进行3次握手
- TCP是点对点的连接,且只作用在端系统上。
- TCP无法进行广播发送。
- 在前面的文章中有提到TCP的发送方需要先发送一个敲门分组给接收方(这是一次握手),然后接收方再发送一个正式的传送分组给发送方(这是第二次分组),发送方再返回给他第三个报文(可以承载有效负荷。(第三次握手)。
- TCP发送方和接收方都需要缓存,发送缓存需要缓存的是上层应用请求发送的套接字。而接收缓存需要缓存的是通过网络传输过来的套接字(这里有累积确认的知识点,后面会讲到)。
- **最大报文段长度(MSS)和最大传输单元(MTU)**的关系,MSS=MTU-TCP/IP首部长度。其中MSS不包含首部的TCP!!
二、TCP报文结构
2.1 序号
一个报文段的序号是该报文段首字节的字节流编号。这是说明意思呢,我们来举个栗子。假定数据流由一个包含500000字节的文件组成,其MSS为1000字节,数据流的首字节编号是0,第二个报文段分配的序号是1000,第三个是2000,以此类推。
2.2 确认号
主机A的确认号是主机A期望从主机B收到的下雨字节的序号。
在确认号这里有一个点非常重要,**TCP只确认该数据流中至第一个丢失字节为止的字节。**所以乱序先到达的分组需要在接收方的接收缓存中呆一会。等到前面的分组发上来之后才会一起确认。继续用上个例子进行说明,虽然序号2000已经到达了,但是由于序号1000还未到达,所以接收方对序号2000的回复是ACK 1000。
2.3 往返时间的估计与超时
我们对于每一个发送但未确认的分组有一个倒计时定时器。那我们如何确认这个倒计时的时间呢?
2.3.1 估计往返时间
因为网络的波动会导致往返时间的变化,所以往返时间往往不太一样,往返时间的估计是通过每一个已发送但未确认的分组时间进行统计,将其进行指数加权平均得到平均的往返时间(EstimatedRTT)。但是毕竟是平均的时间,有一些差一点点就传送完毕的被进行了不必要的重传。所以需要引入一个新的DevRTT(用于估计当前往返时间与加权平均时间的差值的加权平均)。
在实际应用中,使用
推荐的初始TimeoutInterval为1s,同时,出现超时后,TimeoutInterval将会加倍,一面后续的分组继续超时。但是当分组正确收到就会更新EstimatedRTT,然后就用上式对TimeoutInterval进行计算。