运输层TCP协议

协议格式

运输层TCP协议




TCP建连(三次握手)和TCP断连(四次挥手)

运输层TCP协议

运输层TCP协议



同时打开

运输层TCP协议


同时关闭

运输层TCP协议




TCP顺序性(流式)

原理:分片组包、***


TCP是流状态协议:不一定顺序接收,但是一定会顺序返回给应用层。比如A write 两次(123、456)。B Read了两次,可能一次过收到123456、也可能分两次接收12、3456


如果源主机使用同样的连接发送另一个报文段,那么这个报文段的***等于前一个报文段的***与前一个报文段中数据字节的数量之和。例如,假设源主机发送3个报文段,每个报文段有100字节的数据,且第一个报文段的***是1000,那么第二个报文段的***就是1100(1000+100),第三个报文段的***就是1200(1100+100)。



TCP可靠性

原理:超时重传,得不到ACK就重新发送数据,直到对方确认为止。


重传方式:

1、一个包对应一个ack

2、连续ARQ协议


累积确认:接收方一般采用累积确认的方式。即不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认,这样就表示:到这个分组为止的所有分组都已正确收到了。累积确认有的优点是:容易实现,即使确认丢失也不必重传。缺点是:不能向发送方反映出接收方已经正确收到的所有分组的信息。


Go-back-N:如果发送方发送了前 5 个分组,而中间的第 3 个分组丢失了。这时接收方只能对前两个分组发出确认。发送方无法知道后面三个分组的下落,而只好把后面的三个分组都再重传一次。这就叫做 Go-back-N(回退 N),表示需要再退回来重传已发送过的 N 个分组。可见当通信线路质量不好时,连续 ARQ 协议会带来负面的影响。

3、选择确认 SACK(Selective ACK)
如果这些字节的序号都在接收窗口之内,那么接收方就先收下这些数据,但要把这些信息准确地告诉发送方,使发送方不要再重复发送这些已收到的数据。如果要使用选择确认,那么在建立 TCP 连接时,就要在 TCP 首部的选项中加上“允许 SACK”的选项,而双方必须都事先商定好。如果使用选择确认,那么原来首部中的“确认号字段”的用法仍然不变。只是以后在 TCP 报文段的首部中都增加了 SACK 选项,以便报告收到的不连续的字节块的边界。由于首部选项的长度最多只有 40 字节,而指明一个边界就要用掉 4 字节,因此在选项中最多只能指明 4 个字节块的边界信息。

4、D-SACK(Duplicate SACK)告诉发送方有哪些数据被重复接收了

5、快速重传。发送方连续收到3次相同的ack,则启动快速重传。拥塞窗口下降一半,反应相对没那么激烈。




定时器

定时过长会造成网络利用率不高。太短会造成多次重传,网络拥塞。

1、坚持定时器
收到0滑动窗口报文时,启动定时器,超时后向对端查询窗口是否增大。如果仍然是0则再次开启定时器(定时时间间隔为指数退避1、2、4、8、16……64)

2、保活定时器
检测TCP连接是否可用

3、重传定时器
TCP 每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的重传时间到但还没有收到确认,就要重传这一报文段。

4、2MSL定时器
TimeWait相关。



提高发送效率和减轻网络负担的方法

1、回复数据附带ACK

2、Nagle算法

3、quick ack


tcp发送ack有两种方式:quick ack delayed ack 
quick ack
:收到数据包后,立即发送ACK给对端。
delayed ack
:收到数据包后,不会立即发送ACK,而是启动延时确认定时器,在此期间:
1.
本端有数据包要发送给对端。就在发送数据包的时候捎带上此ACK
2.
本端没有数据包要发送,定时器超时后发送ACK给对端。


Nagle算法的做法是先把第一个小包发送出去,后面的小包都缓存起来,直到收到前一个数据段的ack,或者缓存数据长度已经达到mss大小才发送。


根据算法的描述可以看到:nagle算法和delayed ack都是为了减少小数据包在网路中传输的数量,优化网络性能。

连接刚启动的时候,拥塞算法使用的是慢启动,必须尽快发送ack,发送方才可能尽快增大发送窗口,发送更多的数据。



滑动窗口(解决一条连接的网络问题)

本质描述接收方的TCP缓冲大小。如果发送方收到接收方的窗口大小为0的TCP数据包,那么发送方将停止发送数据。


运输层TCP协议



运输层TCP协议


拥塞窗口(解决广域网的网络问题)

运输层TCP协议
慢启动、拥塞避免、拥塞发生、快速重传和快速恢复。


上述是老的TCP拥塞控制算法。现已被其他算法取代
基于丢包反馈的TCP协议(Tahoe、Reno、New Reno、SACK)
基于延时反馈的TCP协议(Vegas、Westwood)
基于丢包反馈的高速带宽算法(HSTCP、STCP、BIC-TCP、CUBIC)


TCP 报文段的发送时机

第一种机制是 TCP 维持一个变量,它等于最大报文段长度 MSS。只要缓存中存放的数据达到 MSS 字节时,就组装成一个 TCP 报文段发送出去。
第二种机制是由发送方的应用进程指明要求发送报文段,即 TCP 支持的推送(push)操作。
第三种机制是发送方的一个计时器期限到了,这时就把当前已有的缓存数据装入报文段(但长度不能超过 MSS)发送出去。



运输层TCP协议