计算机网络之快重传和快恢复以及TCP连接与释放的握手

快重传和快恢复

快重传可以让发送方尽早得知丢失消息,

当发送消息M1,M2,M3,M4,M5后,假如消息M2丢失,那么按照算法会发送对M2报文前一个报文M1的重复确认(M1正常接受到,已经发送了确认),然后之后收到M4,M5,也会发送两个重复确认,这样,规定只要收到3次重复确认,立即重传下一消息M3;

然后执行快恢复算法,发送方调整门限值为原来拥塞窗口值的一半,然后拥塞窗口值等于门限值,开始执行慢开始算法。这叫做乘法减少MD(multiplicative decrease),之前拥塞避免阶段拥塞窗口逐个增加一个报文段大小,叫做加法增大AI(addition increase),l两者合称AIMD算法。

之前假设接收方缓存足够大,接收方窗口rwnd(render window)实际有限,又叫做通知窗口.发送方发送窗口大小一定不能超过拥塞窗口和接收窗口大小。

即 发送窗口上限值=min(rwnd,cwnd)

主动队列管理AQM

路由器按照先进先出的队列处理分组,当队列满时候,后序排在队列尾部的分组会被丢弃,叫做尾部丢弃策略。

尾部丢弃会导致数据丢失,产生丢失重传现象,这时进入慢开始阶段,由于多条连接在IP层的复用,所以会让许多TCP连接同时进入慢开始状态。叫做全局同步。

主动队列管理AQM(active queue management)是在队列长度达到某个警戒值即开始丢弃新到达分组,提醒对方放慢发送速率。

实现方法可以采用随机早期检测RED(eandom early detection)法,路由器维持最小门限和最大门限两个参数。

按算法计算出平均队列长度,

平均队列长度小于最小门限,新到达分组排队。

平均队列长度大于最大门限,新到达分组丢弃。

平均队列长度在最小门限和最大门限之间,按照概率P丢弃新到达分组。

TCP连接的建立

采用客户服务器模式,主动发起连接一方叫客户,另一方叫服务器。

该过程也叫做握手,需要客户和服务器交换三个TCP报文段。

开始时候,服务器创建传输控制块TCB,准备接收客户请求,服务器进入LISTEN状态,等待客户连接。

三次握手:

(1)客户端创建传输控制块TCB,向服务器发出请求报文段,首部确认位SYN=1,同时选择一个初始序号seq=x;

SYN=1的报文段不带数据,消耗一个序号,

客户进入SYN-SENT(同步已发送)状态。

(2)服务器收到后,如果同意建立连接,发送确认,报文段中SYN同步位和ACK确认位都为1,并且选择一个初始序号y,这时进入服务器进入SYN-RCVD同步收到状态。

(3)客户端收到后,发出确认报文,ACK位为1,确认号ack=y+1;(服务器发送来的报文序列号加一)ACK报文段可以携带数据,如果不懈怠数据就不消耗序号,这样下一个数据序号seq=x+1;这样客户端进入established(已连接)状态,服务器收到确认报文后也进入(established)已连接状态

TCP的连接释放

(1)请求释放链接的一方A先发出连接释放报文段,该报文段FIN终止位为1,序号设为seq=u,u为已传输过的数据最后一个字节➕1,然后再停止发送数据,本身进入FIN-WAIT-1状态,等待接收方确认,规定FIN报文段即使不携带数据,也要好一个序列号。

(2)另一B方收到后发出确认,确认号ack=u+1;报文段序号为发送方前面传输的最后一个数据序号加1,接着TCP连接进入半关闭状态,即发起断开A到另一方B的发送已经被关闭。但B到A方向的发送还没有被关闭。

(3)发起断开一方A收到确认后,进入终止等待2状态(FIN-WAIT-2),等待另一方B释放连接。

(4)另一方如果不再发送数据,发出连接释放报文,将报文FIN终止位设为1,序号为问,(可能又崽半关闭期间发送了数据),而且要重复上次发送过的确认报文确认号ack=u+1;这时自身进入last-ack(最后确认状态),等待对方确认。

(5)A收到后,发出确认报文,确认位ACK为1,确认号ack=w+1,自身序号seq=u+1(前面的FIN报文消耗品个序号,进入时间等待(time-wait)阶段,经过时间等待计时器设置时间的2MSL后,A进入CLOSED状态,MSL叫做最长报文寿命,

设置时间2MSL原因:

(1)超时重传:丢失最后发出的确认报文段后,在2MSL时间内重传,

(2)本持续时间内所有报文都吃网络中消失。

TCP还设置了保活计时器,时间为2小时,如果建立TCP连接后出现了故障,无法响应,由于设置在每次收到消息后等待2H,之后如果还没有收到消息,发送探测报文段,以后每隔75秒发送一次,如果10次没有响应就关闭连接。

相关推荐
njnu@liyong15 分钟前
HTTP-http是什么?
网络·网络协议·http
李宥小哥1 小时前
结构型设计模式2
网络·数据库·设计模式
xian_wwq1 小时前
【学习笔记】《孙子兵法》与网络安全
网络·笔记·学习
猫头虎1 小时前
永久免费白嫖多个域名,一键托管Cloudflare,免费申请SSL加密证书,轻松建站、搭建线路伪装
服务器·开发语言·网络·数据库·python·网络协议·ssl
德迅云安全杨德俊1 小时前
服务器为何成为网络攻击的“重灾区“?
网络·安全·web安全·ddos
wyzqhhhh2 小时前
WebSocket
网络·websocket·网络协议
爱莉希雅&&&2 小时前
DNS分离解析案例
运维·网络·dns
铭哥的编程日记2 小时前
【Linux网络】五种IO模型与非阻塞IO
linux·服务器·网络·tcp/ip·udp
半熟的皮皮虾3 小时前
因需写了个内网运维专用的IP地址管理工具,有点不同
运维·服务器·tcp/ip