当前位置: 首页 > article >正文

【网络】详解TCP协议的“三次握手”/“四次挥手“

【网络】详解TCP协议的“三次握手”/“四次挥手”

  • 一. TCP协议段格式
  • 二. 三次握手
    • 1.基本模型
    • 2.状态转换
    • 3.“三次握手”的意义
  • 三. 四次挥手
    • 1.基本模型
    • 2.状态转换

一. TCP协议段格式

在这里插入图片描述
要实现“三次握手”这样的机制,主要依赖于6个标志位中的SYN(synchronize)、ACK(acknowledge)、FIN(finish)。

二. 三次握手

1.基本模型

在这里插入图片描述
所谓的“三次握手”就是让通信双方建立连接的过程(TCP有连接的特性),客户端为主动的一方,“三次握手”中的第一次交互一般是由客户端发起的。

  1. SYN报文
    SYN报文呢就是一个特殊的TCP数据段,没有载荷,六位标志位中的SYN为1,表示想要与对方建立连接。
  2. ACK报文
    ACK报文也是一个特殊的TCP数据段,没有载荷,六位标志位中的ACK为1,即应答报文。

建立连接的过程就是通信双方各自给对方发送一个SYN报文,各自给对方回应一个ACK报文。
由于中间服务器返回的ACK报文和SYN报文可以合并,故称为三次握手。(这主要是由于这两个报文都由系统内核控制发出,而且合并只需要ACK位和SYN位同时为1,不会发生冲突)
合并后的模型为
在这里插入图片描述

2.状态转换

在这里插入图片描述
这里主要关注服务器在没有收到SYN报文时的LISTEN状态,以及建立连接后服务器/客户端的ESTABLISHED状态。

3.“三次握手”的意义

  1. 针对通信路径,进行“投石问路”,初步确认通信链路是否畅通。[关注点在中间过程]
  2. 验证通信双方的发送能力和接收能力是否正常。[关注点在两端]
    服务端和客户端分别需要确认四个信息:即为自己的接收能力和发送能力是否正常,对方的接受能力和发送能力是否正常。(一定注意是分别
    在这里插入图片描述
    三次握手恰好完成了通信双方确认这四个信息的需求(两次不够,四次多余)。
  3. 协商一些必要的参数
    比如说通信序号的起始值,TCP在一次通信过程中,序号不是从 0/1 开始的,而是选一个比较大的数字,以这个数字开头。即使是同一个客户端/服务器,开始的序号也大不相同。
    ==这主要是为了防止“前朝的剑斩本朝的官”。==由于互联网上经常存在“后发先至/先发后至”的情况,就存在一种情况:
    在这里插入图片描述
    即上一次连接时发送的数据在新一次连接时才到达(客户端端口号虽然大概率不一样,但服务器的端口号大概率是一样的)。那这样的数据显然是应该被丢弃掉的。那如何判断出来这是上一次连接,通过序号来判断,两次连接的起始序号差别很大,通过序号很容易判断出这是不是本次连接的数据。
    再比如说滑动窗口的大小,也能由这个信息返回。

三. 四次挥手

1.基本模型

在这里插入图片描述
所谓的“四次挥手”就是让通信双方断开连接的过程。对于断开连接,客户端和服务端都可以成为主动发起的一方。

"四次挥手"并不像“三次握手”一样一定会将中间两个报文段合并,这主要是由于ACK报文段是由系统内核控制的,而FIN报文段是我们在调用socket.close()的时候触发的。但考虑到TCP具有延时应答和捎带应答的特征,这两个报文段有时候也可以合并。

2.状态转换

1
这里要注意TIME_WAIT状态,即主动要求关闭连接的一方在发送完FIN报文段并接收到ACK报文段后不会立即关闭,而是要进入TIME_WAIT状态(2MSL时间,MSL是TCP报文的最大生存时间),等待对方发送FIN报文段。

  1. 这样的设计考虑主要是为了防止最后一个ACK报文的丢失。
  2. 其次还会用于丢弃一些迟到的数据包。

http://www.kler.cn/news/343124.html

相关文章:

  • 自由学习记录(3)
  • DM原生JDBC,查询结果用Jackson序列化,字段为TEXT类型且存的json字符串时,报错“Infinite recursion“
  • 使用GPG学习非对称加密 信任公钥
  • nginx 资料整理(一)
  • TensorFlow与Pytorch的转换——1简单线性回归
  • C++Linux项目推荐-Web多人聊天+MySQL+Redis+Websocket+Json,可以写简历的C++项目
  • CompletionFormer 点云补全 学习笔记
  • 易泊:精准与高效的车牌识别解决方案
  • 黑马点评(更新中)
  • 网站设计公司怎么评估?2024网站定制公司哪家好
  • 大模型在问答领域的探索和实践
  • zabbix7.0配置中文界面
  • EXCELWPS工作表批量重命名(按照sheet1中A列内容)
  • Python 使用函数归纳判断回文质数
  • React父子组件,父组件状态更新,子组件的渲染状况
  • 浙江省发规院产业发展研究所调研组莅临迪捷软件考察调研
  • GR-ConvNet论文 学习笔记
  • 有什么方法可以保护ppt文件不被随意修改呢?
  • 从容应对DDoS攻击:小网站的防守之战
  • 【大数据】大数据治理的全面解析