(网络)传输层:TCP协议特性——可靠传输详解(安全传输+避免丢包+提高性能)



可靠传输:确保数据安全到达对端,并且保证有序交付

安全有序传输

确保数据安全有序到达对端

  1. 可靠传输的前提:面向连接。这里不再细说,有兴趣的小伙伴可以戳(网络)传输层:TCP协议特性——面向连接详解(连接建立、断开详细过程+常见面试题)
  2. 确认应答机制:发送的每一条数据都要求接收方进行确认回复,收到确认回复则认为数据安全到达。
  3. 超时重传机制:等待超时后都没有收到数据的确认回复,则认为这条数据丢失,对数据进行重传。
  4. 包序管理:基于协议字段中的序号和确认序号实现
  5. 数据一致性校验:基于协议字段中的校验和实现,不一致则丢弃要求重传。

包序管理

序号:告诉对方本条数据的起始序号是多少

确认序号:接收方告诉发送方,确认序号之前的数据都已经收到,下次就从这个确认序号开始发送数据

数据不一定会有序到达,但是接收方会根据序号进行排序,保证向上交付的数据是有序的。

三次握手阶段,双方都会告诉对方自己的起始序号是多少。

在这里插入图片描述

下面给大家看一个抓包数据
在这里插入图片描述

可以看到过程确实就是图中的那样。

下面再给大家画图举例了解一下具体过程。a
在这里插入图片描述


避免丢包机制

1. 滑动窗口机制 ——流量控制

避免因为发送方发送数据过多过快,导致接收方接收缓冲区溢出,数据无处存放直接丢弃的丢包。

机制:接收方每接收一条数据进行回复时,会通过协议字段中的窗口大小字段,告诉发送方最多继续发送多少数据。(如果为0则表示不要再发了)

通常窗口大小不会超过当前接收缓冲区的剩余空间大小,否则将没有意义。

下面直接经典一图流来描述一个过程,帮助大家理解。

在这里插入图片描述

下面是理想状态的滑动窗口,不必考虑窗口大小。
在这里插入图片描述

窗口

窗口只是序号的一种概念。

发送方表示数据从多少序号开始发送,最多发送多少。
前沿-后沿=发送方最多发送多少数据。

接收方表示数据从多少序号开始接收,最多接收多少。
前沿-后沿=发送方最多接收多少数据。

后沿移动
发送窗口:后沿是发送数据的起始序号。当收到后沿数据的确认回复,则后沿会向前移动。
接收窗口:后沿是接收数据的起始序号。收到了后沿序号的数据,则后沿会向前移动。

前沿移动
发送窗口:前沿减去后沿不大于接收方的窗口大小,因此发送窗口前沿的移动随着接收方回复的窗口大小而定。
接收窗口:前沿减去后沿不大于缓冲区剩余空间大小,因此接收窗口前沿的移动随着缓冲区剩余空间而定。

滑动窗口机制中的协议

  1. 停等协议:每一条数据收到回复之后才会发送下一条,应用于网络状况极差的情况
  2. 回退n步协议:从丢包位置开始,往后的数据重新进行传输,用于网络状况一般的情况
  3. 选择重传协议:哪个包丢了就重传哪一个,用于网络状况较好的情况

2. 拥塞控制

一开始通信的时候不知道网络状况,避免发送数据的时候,由于网络状况很差,导致发送的数据丢失很多。

TCP引入一种慢启动快增长的形式进行数据传输

慢启动是为了在起始阶段进行网络探测

此处引入一个概念程为拥塞窗口,发送开始的时候,定义拥塞窗口大小为1,每次收到一个ACK应答, 拥塞窗口加1。
每次发送数据包的时候, 将拥塞窗口和接收端主机反馈的窗口大小做比较, 取较小的值作为实际发送的窗口;

快增长是指数级增长

为了不增长的那么快, 因此不能使拥塞窗口单纯的加倍,此处引入一个叫做慢启动的阈值,当拥塞窗口超过这个阈值的时候, 不再按照指数方式增长, 而是按照线性方式增长。

在这里插入图片描述

  • 当TCP开始启动的时候, 慢启动阈值等于窗口最大值
  • 在每次超时重发的时候, 慢启动阈值会变成原来的一半, 同时拥塞窗口置回1

少量的丢包, 我们仅仅是触发超时重传; 大量的丢包, 我们就认为网络拥塞;

当TCP通信开始后, 网络吞吐量会逐渐上升; 随着网络发生拥堵, 吞吐量会立刻下降;

拥塞控制, 归根结底是TCP协议想尽可能快的把数据传输给对方, 但是又要避免给网络造成太大压力的折中方案.


提高性能

1. 快速重传机制

任意一条数据丢失,发送方都要等到超时之后才重传,效率较低。因此引入快速重传机制。

接收方若是没有接收到前面数据的情况下,就接收到后面的数据,则认为前面数据有可能丢失,则会直接要求发送方对前面的数据进行重传。

将前面数据的重传请求连续发送三次,发送方接收到连续的三次重传请求,就会对数据进行重传

在这里插入图片描述

连续三次重传请求才重传是为了避免数据没有丢失,只是延迟到达


2. 捎带应答机制

接收方会为每一次接收到的数据进行确认回复,但是每一条确认回复都只是报头中的一些信息(有可能每一次回复都是单纯tcp报头的传输),如果在进行确认回复的时候,刚好有数据要发送给对方,那就顺便把确认回复消息与要发送的消息集合成一条数据进行发送

这样就能减少发送消息的次数,提高性能。


3. 延迟应答机制

当接收方为每一条收到的数据进行确认回复时,大概率这个数据在缓冲区中没有被取出,则窗口可能会变小,传输吞吐量降低。

延迟应答:收到数据之后,稍微延迟一小会儿,有可能在这个时间内上层就把数据取走了,窗口大小就不用减小,保持传输的吞吐量。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

殇&璃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值