计算机网络(第六版)复习提纲28

网络拥塞的判定:

1 超时重传计时器启动 2 重复确认3次

1 慢开始

目的:探测网络当前的负载情况

思路:由小到大逐渐增大拥塞窗口数值(每个RTT加倍增长)

2 拥塞避免

目的:让拥塞窗口cwnd缓慢增大

思路:拥塞窗口cwnd按线性规律缓慢增长(每个RTT加法增长)

3 快重传

目的:让发送方尽早知道发生了个别报文段的丢失并重传

思路:要求接收方立即对数据发送确认,收到了失序的报文段要立即对已收到的报文段重复确认,发送方一连收到3个重复确认就知道目前并未网络拥堵,因而立即重传丢失的报文以恢复次序

4 快恢复,两种执行方法:

①调整门限ssthresh=cwnd/2,然后cwnd=ssthresh(书上的方法)

②cwnd=ssthresh+3,即增大窗口+3个MSS(报文段)(书上提到的另一种方法,不建议真的使用)

AIMD算法:拥塞避免阶段,拥塞窗口按照线性规律增大,即加法增大AI,而一旦超时或出现三个重复确认,就把门限设置为当前拥塞窗口的一半,并大大减小拥塞窗口的数值,即乘法减小MD,二者合在一起就是所谓的AIMD算法

TCP拥塞控制流程

接收方窗口rwnd:又称为通知窗口,发送方的发送窗口一定不能超过对方给出的接收方窗口大小

9 TCP的运输连接管理

运输建立三阶段:连接建立、数据传送、连接释放

TCP连接的建立采用客户服务器方式,主动发起连接建立的应用进程叫客户,被动等待连接建立的应用进程叫服务器

A TCP连接建立(三报文握手)

1 服务器B进程处于LISTEN(监听)状态,等待客户连接请求

2 客户A 向B发送连接请求报文(SYN=1, 初始序号seq = x, )=》TCP客户进程进入SYN-SENT(同步已发送)状态

TCP规定,SYN报文不能携带数据,但要消耗一个序号。

3 服务器B收到连接请求报文段后,同意连接,向A发送确认报文段(SYN=1, ACK=1, 确认号ack=x+1, 初始序号seq=y)=》TCP服务器进程进入SYN-RCVD(同步收到)状态

4 TCP客户进程收到B的确认后,还要向B给出确认报文段(ACK=1, ack=y+1, seq=x+1)=》TCP连接已经建立,进入ESTABLISHED状态

第3步中,B发给A的报文段可以分两次发,第一次发一个确认报文段(ACK=1,ack=x+1),第二次发一个同步报文段(SYN=1,seq=y),由此变成了四报文握手,与三报文效果一样

为什么A最后还要进行一次确认?:为了防止已经失效的连接请求报文段突然又传送给了B

B TCP连接的释放(四报文握手)249

1 A和B都处于ESTABLISHED状态,A发出连接释放报文(FIN=1, seq=u【u即为前面已经传送过的数据的最后一个字节的序号+1】),并停止发送数据,主动关闭TCP连接=》进入FIN-WAIT-1状态,等待B 的确认

TCP规定:FIN即使不携带数据也要消耗一个序号

2 B收到连接释放报文,发出确认报文(确认号ACK=1, ack=u+1,seq=v【v即为前面已经传送过的数据的最后一个字节的序号+1】)=》B进入CLOSE-WAIT状态

此时TCP处于半关闭状态,A已经没有数据要发了,B到A方向的连接还未关闭

3 A收到来自B的确认=》进入FIN-WAIT-2状态,等待B发出连接释放报文段

4 B已经没有要向A发送的数据,应用进程通知释放TCP连接,B发送释放报文段(FIN=1,ack=u+1, seq=w【半关闭状态B可能还发了一些数据】,ACK=1)=》B进入LAST-ACK状态,等待A的确认

5 A收到B的连接释放报文段,发送确认报文(ACK=1, ack=w+1,seq=u+1)=》A进入TIME-WAIT状态(B收到确认后进入CLOSED状态),此时TCP连接还未完全释放,必须经过时间等待计时器设置的时间2MSL后,A才进入CLOSED状态

MSL:最长报文段寿命

等待2MSL才进入CLOSED状态的原因:

1 保证A发送最后一个ACK报文段能够到达B(若在2MSL时间里,再次接收B的FIN+ACK报文,则表明ACK报文丢失,需要重传)

2 防止已经失效的连接请求报文段出现在本连接中(A等2MSL后再彻底关闭,能让下一次连接时,网络上已经没有任何关于上次连接的内容)

保活计时器:服务器每收到一次客户的消息,就重新设置保活计时器,若两个小时未收到客户数据,就发送一个探测报文,以后每隔75s发送一次,如果连续十次未响应,则认为客户端出现故障,断开连接

相关推荐
BingoGo1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
DianSan_ERP5 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
呉師傅5 天前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑