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连接概述
不管建立连接还是断开连接,假如在超时时间外客户端或者 server没有收到回复,端口状态直接转换成 closed状态。客户端指定随机端口, server端指定固定端口。比较关注的的端口状态有 ESTABLISHED( client、 server都有)、 LISTEN(只有 server)、 TIME WAIT(主动关闭方)、 CLOSE WAIT(被动方)TCP长连接短连接:客户端和服务器通过3此握手建立连接,4次挥手断开连接。短连接指的是建立连接后,进行一次数据的读写就关闭。长连接指的是建立连接后,可以进行多次读写,连接可以长时间保持,减少了频繁的建立连接操作,但是会带来连接被占用的情况。所以可以服务端可以将超过一定时间没有进行读写操作的连接关闭
二、TCP建立连接三次握手
在这里插入图片描述
TCP建立连接三次手,必须发送确认信息(SYN),确定肯定对方回复(ACK),然后才可以连接建立( ESTABLISHED),传输数据(Wite、Read、Wite、Read、 Write、Read)。
状态解释:① CLOSED:虚拟出来的状态,实际不存在,你在 netstat ant I grep端口的时候是找不到的② LISTEN: server指定端口为监听状态,随时准备有 Client前来连线③ SYN SENT:只在 Client端出现,表示 Client发送过YN了,正在焦急地等待 Server的ACK,客户端指定的是随机端口和 server i端相连。④ SYN RCVD:只在 Server端出现,表示 Server I收到 Client的SYN了,并且已经发给 Client自己的ACK和SYN了,正在焦急地等待 Client的ACK 5. ESTABLISHED:在 Client端出现表示 Client把自己的ACK(第3次握手)发出去了, Client已经就绪;在 Server端出现表示 Server已经收到 Client的ACK(第3次握手)了, Server已经就绪注:只有在 Client和 Server同时ESTABLISHED时,即同时就绪时才可以进行数据传输。

Client端口状态转换1.应用层调用 connect,发送SYN到对端,等待对端的ACK和syn2.等待对端的ACK和SYN到来,接收到ACK和SYN后,发出自己的ACK,状态进入 ESTABLISHED;3.等待对端的ACK和SYN期间,端口状态一直为 SYN SENT,超时后进入 CLOSED

Server端口状态转换:1.应用层启动侦听,端口进入 LISTEN状态2.接收到 Client发来的SYN,发送自己的ACK和SYN,进入 SYN RCVD状态,等待 Client的ACK3.等待 Client的ACK到来,接收到ACK后,进入 ESTABLISHED:等待超时,进入 CLOSED
三、TCP断开连接一四次挥手
在这里插入图片描述
TCP通讯双方,不管是 Client还是 Server,都可以主动断开连接,所以下面我们只以主动方和被动方为标注。(实际情況一般由客户端主动关闭,服务端关闭的也有,看到服务端端口状态为 TIME WAIT时不要奇怪)。

状态解释:
① FIN WAIT1:仅出现在主动方,表示主动方想要断开连接,己经关闭了写通道,并向对端发送了FIN,等待对方的ACK到来
② CLOSE WATT:仅出现在被动方,表示被动方收到FN后,己经回复ACK,正在等自己的应用层调用 close方法关闭写通道,在CLOSE_WAT状态下,自己只能发送数据,但不能接收数据
③ FIN WAIT2:仅出现在主动方,表示主动方已收到对端的ACK,等待对端的FN
此时无法再发送数据,但是可以接收数据
④ LAST ACK:仅出现在被动方,表示被动方缓冲区数据己经发送完毕,并且经
发送FIN到对端,等待对端的ACK;如果应用层写的比较垃圾,没有调用 close关闭 socket,
则会一直停留在 CLOSE WAIT
5 TIME WAIT:仅出现在主动方,表示主动方已经发出ACK了,本次通讯完事了,
双方都不能再读写了,但是主动方不确定对方能不能收到最后一个ACK,为了保证这个端
口释放后,不被后来的连接马上使用被当成是新连接,通俗地讲,为了不乱套,这个状态会直等待,等多久呢,等2XMSL( Maximum Segment Lifetime,catproc/ sys/net/ipv4 /tcp fin timeout这是配置是MSL,默认是60s)个时间,这个MSL是操作系统配置的,有默认参数,可以改。
⑥ CLOSED:虚拟出来的状态,同建立连接的时候状态。实际不存在,你在 netstat-ant
grep端口的时候是找不到的

主动方端口状态转换:
1.应用层调用 close方法发起关闭连接
2.发送FN到对端,关闭写通道,端口进入 FIN WAIT1状态
3.等待对端的确认ACK到来,接收到ACK后进入 FIN WAIT2状:如果在超时时
间内没有收到ACK则直接进入 CLOSED状态
4.如果在 FIN WAIT1状态时收到了对端的FIN,则进入 CLOSING状态(双发都发
出了关闭连接请求,异口同声说“分手”)
5.如果在 FIN WAII2状态时收到了对端的FIN,则进入 TIME WAIT状态:如果在超时时间内没有收这个FN则直接进入 CLOSED状态:
6.在 TIME WAIT状态等待2个MSL(报文最长存活周期)后进入 CLOSED状态

被动方端状态转换
1.收到对端的FIN后,关闭读通道,自己进入 CLOSE WAIT状态
2.在 CLOSE WAIT状态等待应用层调用 close方法关闭sock连接
3.如果在超时时间内没调用 close,则直接进入 CLOSED状态
4.如果在超时时间内调用了 close,则向对端发送FIN,自己进入 LAST ACK状态,等
待对端的ACK
5.等待对端的ACK,如果在超时时间内收到了ACK则直接进入 CLOSED状态,否则
超时后进入 CLOSED状态

四、TCP调优

服务端有时也会主动关闭连接,应该是为了避免有些不地道的 Client不关闭 socket连接,
一直占用服务器资源,所以有些服务器也会无情地主动关闭连接。
在高并发场景下,服务器主动关闭连接的情况,在服务端会出现大量的 TIME WAIT状
态的端口,会占用操作系统文件句柄资源,导致新的连接可能无法建立,影响高并发性能。在 Linux服务器上,/etc/ sysctl. conf文件中修改 time wait缺省值(默认240秒): net. ipv4. tcp fin timeout=30

注:记得用roo修改,修改后执行 sysctl-p使参数立即生效。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-07-30 13:06:15  更:2021-07-30 13:07:34 
 
开发: 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 18:55:29-

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