TCP三次握手的过程

一、什么是TCP

TCP是面向连接的、可靠的、基于字节流的传输层通信协议。

二、TCP的头部格式

序列号 :在建立连接时由计算机生成的随机数作为其初始值,通过SYN包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。用来解决网络包乱序问题
确认应答号 :指下一次「期望」收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。用来解决丢包的问题
控制位:

  • ACK:该位为1时,「确认应答」的字段变为有效,TCP规定除了最初建立连接时的sN包之外该位必须设置为1 。
  • RST:该位为1时,表示TCP连接中出现异常必须强制断开连接。
  • SYN:该位为1时,表示希望建立连接,并在其「序列号」的字段进行序列号初始值的设定。
  • FIN:该位为1时,表示今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换FIN位为1的TCP 段。

三、三次握手的过程

我们在上面知道了序列号、确认应答号、以及控制位,那么我们下面就描述一下三次握手的过程!

解释:

  • 一开始,客户端和服务端都处于cLose 状态。先是服务端主动监听某个端口,处于LISTEN状态
  • 客户端会随机初始化序号( x ),将此序号置于TCP首部的「序号」字段中,同时把SYN标志位置为1,表示 SYN报文。接着把第一个SYN 报文发送给服务端,表示向服务端发起连接,该报文不包含应用层数据,之后客户端处于SYN-SENT状态。
  • 服务端收到客户端的SYN报文后,首先服务端也随机初始化自己的序号( y ),将此序号填入TCP首部的「序号」字段中,其次把TCP首部的「确认应答号」字段填入x + 1,接着把SYN和ACK标志位置为1。最后把该报文发给客户端,该报文也不包含应用层数据,之后服务端处于SYN-RCVD状态。
  • 客户端收到服务端报文后,还要向服务端回应最后一个应答报文,首先该应答报文TCP首部ACK标志位置为1,其次「确认应答号」字段填入y + 1,最后把报文发送给服务端,这次报文可以携带客户到服务端的数据,之后客户端处于ESTABLISHED状态。
  • 服务端收到客户端的应答报文后,也进入ESTABLISHED状态。
  • 从上面的过程可以发现第三次握手是可以携带数据的,前两次握手是不可以携带数据的。
  • 一旦完成三次握手,双方都处于ESTABLTSHED状态,此时连接就已建立完成,客户端和服务端就可以相互发送数据了。

四、在Linux系统中查看连接状态

可以通过netstat - napt命令进行查看:

Tcp协议 源地址+源端口 目标地址+目标端口 连接状态 进程pid和进程名字

五、结语

希望可以通过这篇文章让您对TCP的三次握手有一个初步的理解,后续会更新三次握手的细节问题欢迎查看!

相关推荐
深耕AI2 小时前
【完整教程】宝塔面板FTP配置与FileZilla连接服务器
运维·服务器
无聊的小坏坏3 小时前
从单 Reactor 线程池到 OneThreadOneLoop:高性能网络模型的演进
服务器·网络·一个线程一个事件循环
AI智域边界 - Alvin Cho4 小时前
Bloomberg、LSEG 与 MCP 缺口:为什么尚未发布完整的 MCP 服务器,以及多智能体系统如何解決这问题
运维·服务器
还下着雨ZG4 小时前
TCP/IP协议族详细介绍
网络·网络协议·tcp/ip·计算机网络
国服第二切图仔4 小时前
Rust开发之Trait 定义通用行为——实现形状面积计算系统
开发语言·网络·rust
蒙奇D索大4 小时前
【计算机网络】[特殊字符] 408高频考点 | 数据链路层组帧:从字符计数到违规编码,一文学透四大实现方法
网络·笔记·学习·计算机网络·考研
_OP_CHEN5 小时前
Linux网络编程:(七)Vim 编辑器完全指南:从入门到精通的全方位实战教程
linux·运维·服务器·编辑器·vim·linux生态·linux软件
Maple_land5 小时前
第1篇:Linux工具复盘上篇:yum与vim
linux·运维·服务器·c++·centos
奋斗的牛马5 小时前
OFDM理解
网络·数据库·单片机·嵌入式硬件·fpga开发·信息与通信
忧郁的橙子.6 小时前
一、Rabbit MQ 初级
服务器·网络·数据库