TCP/IP(八)TCP的连接管理(五)四次握手

一  tcp连接断开

每一个TCP报文的'超时重传'都由一个'特定的内核参数'来控制

①  四次握手的过程

遗留: 谁先发送'FIN'包,一定是'client'吗?  --> 'upload'和'download'

补充: '主动'和'被动'断开连接的场景

TCP/IP(八)TCP的连接管理(五)四次握手_第1张图片

+++++++++++ "四次握手过程描述" +++++++++++

F  --> 'FIN'  --> 'Finish'

关注: 发送'报文'后,发送方所处的'TCP'状态

四次挥手对应'4'个报文

+++++++++++++++ "正常四次挥手TCP状态变迁" +++++++++++++++

client: ESTABLISHED --> FIN-WAIT-1 --> FIN-WAIT-2 --> TIME-WAIT  --> CLOSE

server: ESTABLISHED --> CLOSE-WAIT --> LAST-ACK   --> CLOSE

补充: 处于不同'TCP'状态的时间取决于丢包下'重试'的次数

TCP/IP(八)TCP的连接管理(五)四次握手_第2张图片

②  为什么挥手需要四次

TCP/IP(八)TCP的连接管理(五)四次握手_第3张图片

TCP/IP(八)TCP的连接管理(五)四次握手_第4张图片

TCP三次握手

特殊'三次'挥手: 把 '第二次' 的 ack报文方在 '第三次'fin报文一起发送

二   四次挥手报文丢失探究

明确: 通信哪一方'关闭'连接

①   第一次挥手丢失

关键: 客户端迟迟'收不到'被动方的 ACK 的话,也就会'触发'超时重传机制,重传 'FIN' 报文

内核参数: tcp_orphan_retries

参数含义: 如果一直都'收不到针对FIN的ACK',那么在彻底销毁这个FIN_WAIT1的连接前,等待几轮RTO

/proc/sys/net/ipv4/tcp_orphan_retries   --> 'Centos7.7' 默认是 0

TCP/IP(八)TCP的连接管理(五)四次握手_第5张图片

案例: 假设 'tcp_orphan_retries = 3',当第'一'次挥手'一直丢失'时,发生的'过程图'

思考: 这种'算'异常断开连接吗? --> 这种和'正常的四次挥手'断开连接的区别?
​
强调: TCP'每一次超时',都会对下一次超时时间进行'指数退避'

TCP/IP(八)TCP的连接管理(五)四次握手_第6张图片

原理图的具体'过程'描述

②  第二次挥手丢失了,会发生什么?

备注: 第二次'握手'是server端发起的'ACK'确认包

强调: 第'一、二'次握手'客户端感知'的都是'没有'收到服务端的'ACK'包

 1、第'一'次是客户端发起的'FIN'包丢失,导致服务端'没有'收到FIN包,服务端更不可能发送'ACK'包

 2、第'二'次是客户端发起的'FIN'包到服务端,服务端回的'ACK'包丢失,导致客户端'没有'收到ACK包

TCP/IP(八)TCP的连接管理(五)四次握手_第7张图片

案例: 假设 'tcp_orphan_retries 参数值为 2',当第'二'次'一直丢失'时,发生的'过程图'

ACK 报文 '不会重传',所以重传 'FIN' 报文

client: ESTABLISHED --> FIN-WAIT-1  --> CLOSE

TCP/IP(八)TCP的连接管理(五)四次握手_第8张图片

原理图的具体'过程'描述

③  第二次握手和第三次握手间隔

/proc/sys/net/ipv4/tcp_fin_timeout --> 缺省值是'60秒' --> 控制'FIN_WAIT2'状态时间

重点: 'tcp_fin_timeout' 可以控制'close'关闭连接,但是'无法'控制'shutdown'关闭的连接

TCP/IP(八)TCP的连接管理(五)四次握手_第9张图片

1、client 调用 'close函数' 图谱

调用 close 关闭的连接,如果在 60 秒后还没有收到'服务端的FIN' 报文,客户端连接就会直接关闭

TCP/IP(八)TCP的连接管理(五)四次握手_第10张图片

2、client 调用 'shutdowne函数' 图谱

TCP/IP(八)TCP的连接管理(五)四次握手_第11张图片

④  第三次挥手丢失了,会发生什么?

TCP/IP(八)TCP的连接管理(五)四次握手_第12张图片

案例: 假设 'tcp_orphan_retries 参数值为 3',当第'三'次'一直丢失'时,发生的'过程图'

TCP/IP(八)TCP的连接管理(五)四次握手_第13张图片

重传: 客户端'重传'第'三'次握手的'FIN 报文'

TCP/IP(八)TCP的连接管理(五)四次握手_第14张图片

⑤  第四次挥手丢失了,会发生什么?

TCP/IP(八)TCP的连接管理(五)四次握手_第15张图片

案例: 假设 'tcp_orphan_retries 参数值为 2',当第'四'次'一直丢失'时,发生的'过程图'

细节: 'ACK'报文丢失,不会重传'ACK'报文,而是重传上次的'FIN'报文

TCP/IP(八)TCP的连接管理(五)四次握手_第16张图片

原理图的具体'过程'描述

TCP/IP(八)TCP的连接管理(五)四次握手_第17张图片

你可能感兴趣的:(TCP/IP,orphan_retries)