【笔记】计网-传输层

TCP的可靠数据传输

TCP报文段结构

源端口、目的端口
本segment的序列号、希望得到的对方的ACK确认号
ACK:确认标志位
RST:重置位。例如sender发了一个port为80的segment给receiver,但是receiver没有这个端口号可以用,就返回RST为1的segment给sender,表示要求重置socket
SYN:请求发起连接的标志位
FIN:请求结束连接的标志位

MSS(Max Segment Size):最大报文段大小
是TCP的一个选项,只出现在三次握手的SYN包中。用于通知对方自己可以接收的数据大小(不包含IP和TCP报文首部)
同一个TCP连接中,双方的MSS可以不一样大。

快传和流量控制

快速重传(Fast Retransmit)

超时重传的问题是,有时候间隔重传的时长太长了,会导致端到端延时太长。比如sender发到receiver的segment已经丢了,但是sender可能会等半天才回重发一次。sender可以通过收到双重ACK来解决这个问题。receiver发送双重ACK的机制如下:

事件 receiver反应
按序收到segment 等500毫秒,如果没有收到新的segment就回复ACK(避免为每一个segment都返回ACK)
收到了高于当前期望序号的segment(出现segment空缺) 马上发送ACK,要求传回期望序号的segment
收到segment空缺部分的segment 马上发送ACK,要求继续填补segment空缺

当receiver收到累计4个相同ACK时,说明这个ACK里面要求的segment一直没收到,这时不等计时器结束就会马上重传重复ACK要求传过去的segment,如下图所示:


流量控制(Flow-control Service)

流量控制(Flow-control Service):有时候上层的application不会及时处理buffer中的数据,就会导致缓存溢出,这一般是因为sender发送得太快了导致的。
拥塞控制(Congestion Control):避免网络出现拥塞

方式:TCP是全双工的,都有一个缓存区。接收方会告诉发送方自己的缓存余量;发送方会确保已发送待ACK确认的数据量少于对方的缓存余量。


TCP连接管理(TCP Connection Management)

三次握手和四次挥手

在这里插入图片描述


TCP拥塞控制(TCP Congestion Control)

流量控制和拥塞控制

流量控制: 根据receiver的缓冲区大小,控制sender发送数据的速率,避免receiver来不及处理
实现方式: receiver将自己的缓冲区大小放入ACK中返回给sender
如果缓冲区满了,sender就不再发送数据,但是会定时发送0窗口探测数据来询问receiver是否可以继续发送数据

拥塞控制: 网络中的数据过多,使路由器或链路过载。需要避免。

扫描二维码关注公众号,回复: 9424412 查看本文章
拥塞控制原理

TCP处理拥塞控制问题的一些原则:

segment丢失时(现象为sender方需要超时重传或者sender受到重复的4个ACK)
TCKsender就知道网络出现了拥塞,会降低发包率

如果sender收到了超过当前期待值的ACK,就说明网络状态良好,可以增加发包率(例如sender发送了segment1、2、3、4,直接收到了receiver发过来的ACK4,说明前面的四个segment不仅传成功了,还传得挺快)

TCP处理拥塞控制就在收到ACK和发现segment丢失事件之间转换。持续收到ACK时会增加发包率,发现丢包之后(当sender需要超时重传或者收到4个相同的ACK时说明出现了丢包)又会降低发包率。


拥塞控制算法

TCP的拥塞控制也被称为AIMD控制(加性增,乘性减,Additive-Increase Multiplicative-Decrease)
算法由三个机制组成:慢启动、拥塞避免、快速恢复

慢启动:
sender刚开始拥塞窗口cwnd的大小设置为1MSS,每收到一个ACK,cwnd大小就增加一个MSS,总体呈指数增加

拥塞避免:
每经过一个RTT,拥塞窗口大小加1个MSS大小,总体呈线性增长

快速恢复:
收到3个重复的ACK时,把慢启动阈值设为当前cwnd窗口的一半,cwnd设置为ssthresh的值+3,然后重传丢失的segment

启动过程:
当拥塞窗口<慢启动阈值:使用慢启动方式,指数级增加拥塞窗口大小;
当拥塞窗口>慢启动阈值:使用拥塞避免机制,每经过一个RTT,拥塞窗口大小加1

出现超时重传的处理方式:
将慢启动阈值ssthresh(slow start threshold)设置为出现拥塞时的发送窗口大小的一半,同时将拥塞窗口改为1,重新开始启动过程

在这里插入图片描述
在这里插入图片描述

发布了390 篇原创文章 · 获赞 27 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/AXIMI/article/details/103779098