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

  • TCP提供面向有连接的通信传输,面向有连接是指数据通信开始之前先做好两端之间的准备工作。

三次握手

  • 三次握手:是指建立一个TCP连接时需要客户端与服务端总共发送三次数据包以确认连接的建立。

在这里插入图片描述

  • 第一次握手:客户端将同步标志位 SYN 置为1,随机产生一个同步序列号 seq =J,并将该数据包发送给服务端,客户端进入一个 SYN_SENT 状态,等待服务端确认。
  • 第二次握手:服务端收到客户端的数据包,服务端将同步标志位 SYN置为1,确认标志位 ACK置为1,确认序列号 ack置为J+1 ,随机产生一个同步序列号 seq=k,发送给客户端以确认连接,自身进入一个 SYN_RCVD 状态。
  • 第三次握手:客户端收到服务端的数据包后,校验确认序列号ack是否为 J+1,确认标志位 ACK 是否为 1,都正确则将确认标志位 ACK置为1,确认序列号 ack置为 K+1 发送给服务端,服务端校验确认标志位 ACK是否置为1 ,确认序列号 ack是否为K+1,正确则连接成功,客户端和服务端进入ESTABLISHED状态,随后客户端和服务端即可以传输数据。

四次挥手

  • 四次挥手: TCP连接是全双工的,因此每个方向都必须要单独进行关闭,四次挥手即终止TCP连接,指:断开一个TCP连接时,需要客户端和服务端总共发送四次数据包以确认连接的断开。(中断连接,可以是客户端发起,也可以是服务端发起。)
    在这里插入图片描述
  • 第一次挥手:客户端将结束标志位 FIN置为M,用来关闭客户端与服务端的数据传输,数据包发送给服务端。客户端进入 FIN_WAIT_1 状态。意思即为:我客户端没有数据要发送给你了,若你服务端还有数据没有发送完成,则不必着急关闭连接,可以继续发送数据。
  • 第二次挥手:服务端收到客户端结束标志位 FIN 数据包,将数据包确认序列号 ack置为M+1 发送给客户端。意思即为:你的关闭请求我收到了,但我还没准备好,请继续等待我的消息。这时客户端进入 FIN_WAIT_2状态,继续等待服务端结束标志位 FIN 的数据包
  • 第三次挥手:服务端确认数据传输完毕,则将数据包结束标志位 FIN置为N 发送给客户端。意思即为:服务端数据传输完毕,准备好关闭连接了。服务端进入 LAST_ACK 状态。
  • 第四次挥手:客户端收到结束标志位FIN的数据包后,就知道可以关闭连接了,但是怕服务端不知道要关闭,所以将数据包确认标志位 ACK置为1,确认序列号 ack置为N+1,发送给服务端。客户端进入 TIME_WAIT状态 。如果服务器端没有收到ACK则可以重传。服务器端收到ACK后,就知道可以断开连接了(CLOSED状态)。客户端等待了2MSL(时间MSL叫做最长报文寿命,RFC建议设为2分钟)后依然没有收到回复,则证明服务器端已正常关闭,客户端也可以关闭连接了。最终完成了四次握手。

面试常问题

  • 为什么要三次握手:两次握手无法保证连接成功,四次握手浪费资源。第三次握手是为了防止已失效的请求报文段突然又传送到了服务端而产生连接的误判。
  • 为什么要四次挥手:TCP协议是一种面向连接的、可靠的字节流的传输层协议,TCP是全双工模式,意味着当客户端发起FIN时,仅代表客户端无数据传输,但任能收到服务端发来的数据。

TCP标志位

  1. SYN:同步标志位。该标志仅在三次握手建立TCP连接时有效。
  2. ACK:确认标志位。
  3. RST:复位标志位。用于复位相应的TCP连接,当RST=1时,表面出现严重错误,必须释放连接,然后再重建传输连接。还用来拒绝一个不法的报文段或拒绝打开一个连接。
  4. URG:紧急标志位。此标志表示TCP包的紧急指针域有效,用来保证TCP连接不被中断,并且督促中间层设备尽快处理这些数据。
  5. PSH:推标志位。
  6. FIN:结束标志位。用来释放一个连接,当FIN=1时,表明要发送的字节已发送完,并请求释放传输连接。带有该标志位的数据包用来结束一个TCP回话,但对应端口任处于开发状态,准备接收后续数据。
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-05-26 15:24:43  更:2022-05-26 15:24:47 
 
开发: 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年5日历 -2024/5/19 14:56:39-

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