IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> tcp四次挥手 -> 正文阅读

[网络协议]tcp四次挥手

tcp四次挥手

四次挥手,其实整体而言用一个生活中的例子可以解释,a,b2个人是战友,正在执行任务,a,b2个人拿着对讲机交流了战术,交流完成之后,a对b说,我说完了,b收到了,b思考一下,看自己有没有说完,如果说完了,就也跟a说,我也说完了,如果没有继续说,一直到说完为止。

看图
在这里插入图片描述

注意不一定是客户端先向服务器发送fin断开,谁都可以是主动方。

以客户端为主动方为例

fin-wait-1:表示客户端要关闭连接,向服务器发送fin报文。

close-wait:表示在等待关闭,当客户端发送fin给自己,服务器也会回应一个ack,此时则进入到close-wait状态,
在这个状态,服务器也要考虑自己是否还有数据发送给客户端,如果没有,发送fin报文给客户端。

fin-wait-2:只要客户端收到服务器的ack确认之后,就会处于此状态,然后等待服务器发送fin报文。

last-ack:服务器在发送fin报文后,最后等待客户端的ack报文,当收到之后ack报文后,进入closed状态

time-wait:表示收到了服务器的fin报文,并发送了ack报文,就等2msl后即可进入closed状态。当然如果在fin-wait-1的状态下面收到了服务器带fin标志跟ack标志的报问时,客户端直接进入time-wait 不需要进入fin-wait-2

closed:关闭状态

CLOSING:一种比较特殊的状态
1.表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文
2.如果双方几乎在同时准备关闭连接的话,那么就出现了双方同时发送FIN报文的情况,也即会出现CLOSING状态
3.表示双方都正在关闭连接

也就是说我客户端与服务器都是主动方的时候

对于time-wait阶段的疑问

1.为什么要等2倍的msl?
首先msl是tcp报文在internet上的最长生存时间
也就是说 如果没有此阶段,上面的例子,客户端发送最后一个ack就关闭了,假设最后一个ack因为网络的原因,服务器没有收到ack,就会重新发送fin,这个时候可能出现的情况有以下几种
1.客户端可能有一个新的程序分配了同一个端口,如果收到fin后马上开始执行断开连接的操作,它可能是想跟服务器建立连接的。
2.客户端没有响应,服务器那边会重发多次fin。

总结一下,作用就是保证tcp传输的可靠性,防止本次连接的请求到下一次。

但是这里我有一个疑问?
假设服务端发送的FIN+ACK包在MSL的最后一个时刻传输到了客户端,而客户端回发了ACK包,此时客户端开始了TIME-WAIT;如果ACK经过MSL还未发送到,服务端就超时重传FIN+ACK包,FIN+ACK的存活时间是MSL,则在重发的(FIN+ACK包)+前一个ACK包,此时最极端情况为2MSL,则客户端要保持2MSL内能处理服务端重发的FIN+ACK包。
这里突然想,如果重发的FIN+ACK又丢失,那么已经经过2MSL,客户端发送过ACK包了,就默认服务器收到了ACK包关闭了连接,那么此时服务器不就关闭不了?

也就是如果重发的FIN+ACK又丢失,那么已经经过2MSL,客户端发送过ACK包了,就默认服务器收到了ACK包关闭了连接,那服务端不就无法正常关闭了?
我的答案就是,2msl只是防止,不是百分百的解决 ,可能响应rst,不然rst是干什么用的。

这里就不说为什么是四次挥手了,其实就是全双工的一个问题。

以上内容如果有不对请多多指教。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-31 15:49:47  更:2021-08-31 15:52:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:44:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码