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

【TCP】对TCP三次握手的个人理解

三次握手

TCP 是面向连接的协议,所以使用 TCP 前必须先建立连接,而建立连接是通过三次握手来进行的。三次握手的过程如下图:

在这里插入图片描述

  • 一开始,客户端和服务端都处于 CLOSE 状态。先是服务端主动监听某个端口,处于 LISTEN 状态

第一个报文 —— SYN 报文

  • 客户端会随机初始化序号(client_isn),将此序号置于 TCP 首部的「序号」字段中,同时把 SYN 标志位置为 1,表示 SYN 报文。接着把第一个 SYN 报文发送给服务端,表示向服务端发起连接,该报文不包含应用层数据,之后客户端处于 SYN-SENT 状态。

第二个报文 —— SYN + ACK 报文

  • 服务端收到客户端的 SYN 报文后,首先服务端也随机初始化自己的序号(server_isn),将此序号填入 TCP 首部的「序号」字段中,其次把 TCP 首部的「确认应答号」字段填入 client_isn + 1, 接着把 SYNACK 标志位置为 1。最后把该报文发给客户端,该报文也不包含应用层数据,之后服务端处于 SYN-RCVD 状态。

第三个报文 —— ACK 报文

  • 客户端收到服务端报文后,还要向服务端回应最后一个应答报文,首先该应答报文 TCP 首部 ACK 标志位置为 1 ,其次「确认应答号」字段填入 server_isn + 1 ,最后把报文发送给服务端,这次报文可以携带客户到服务端的数据,之后客户端处于 ESTABLISHED 状态。
  • 服务端收到客户端的应答报文后,也进入 ESTABLISHED 状态。

我理解的过程:

确认序(ack)列号的含义:

  1. 确认收到对方的报文
  2. 期望下一次对方的序列号为我的确认序列号(比如说这次我(服务端)给客户端发过去7,客户端回给我的序号就是7.)

确认序列号等于对方发送过来的序列号+标志位长度SYN(1)+数据长度

seq(序列号)

ack 确认序列号

第一次握手:客户端SYN置成1 ACK还是0 设序列号seq = X ack = 0

第二次握手:服务端SYN置成1 ACK还是1 seq = y ack = x + 1 + 0(数据没有)

第三次握手:客户端SYN置成0 ACK还是1 seq = x +1 +0 ack = y+1

http://www.lryc.cn/news/69497.html

相关文章:

  • squid的基本代理
  • 【从零开始写视觉SLAM】v0.1基于特征点的简单VO
  • CentOS-7 安装 MariaDB-10.8
  • Packet Tracer – 对 VLAN 实施进行故障排除 – 方案 1
  • 五、c++学习(加餐1:汇编基础学习)
  • iOS正确获取图片参数深入探究及CGImageRef的使用(附源码)
  • Typescript 5.0 发布:快速概览
  • 【图像处理 】卡尔曼滤波器原理
  • YOLOv5 实例分割入门
  • 数字城市发展下的技术趋势,你知道多少?
  • linux 串口改为固定
  • 【SCI一区】考虑P2G和碳捕集设备的热电联供综合能源系统优化调度模型(Matlab代码实现)
  • Redis缓存数据库(四)
  • View中的滑动冲突
  • java boot项目基础配置之banner与日志配置演示 并教会你如何使用文档查看配置
  • 蓝鲸平台通过标准运维 API 安装 Agent
  • python 图片保存成视频
  • uniapp 引入 Less SCSS
  • Linux程序设计:文件操作
  • 【自制C++深度学习推理框架】Tensor模板类的设计思路
  • linux--systemd、systemctl
  • 加密解密软件VMProtect教程(七):主窗口之控制面板“详情”部分
  • 国产仪器 4945B/4945C 无线电通信综合测试仪
  • 数据库原理及应用上机实验一
  • 【操作系统】线程常用操作
  • C++编译预处理
  • Spring IOC 的理解
  • Linux 学习笔记(七):时间片
  • java并发-ReentrantLock
  • 21.模型的访问器和修改器