linux——TCPIP协议原理

一、铁律

  1. 三次握手 = 建立连接只能由客户端主动发起
  2. 四次挥手 = 断开连接客户端、服务器谁都可以先发起关闭

二、TCP 报文里必须认识的标志位

  • SYN :同步序号,用来发起连接
  • ACK:确认应答,表示 "我收到了"
  • FIN:结束,表示 "我要关闭连接"
  • seq :本方发送的序列号
  • ack :期望收到对方下一个字节的确认号

三、TCP 三次握手(建立连接)

角色:

  • 客户端(Client):主动发起连接
  • 服务器(Server):被动接受连接

完整流程(逐行解释)

第一次握手:客户端 → 服务器

  • 客户端发送:SYN = 1,seq = x
  • 含义:"喂,我想和你建立连接,我的起始序号是 x。"

第二次握手:服务器 → 客户端

  • 服务器回复:SYN = 1,ACK = 1,seq = y,ack = x + 1
  • 含义:"收到你的连接请求!我同意了。我的起始序号是 y,我期望你下一次发 x+1。"

第三次握手:客户端 → 服务器

  • 客户端发送:ACK = 1,seq = x + 1,ack = y + 1

  • 含义:"收到你的同意!我下一个发 y+1,连接正式建立!"

    客户端 服务器
    | |
    | SYN, seq=x |
    |------------------------------->|
    | |
    | SYN+ACK, seq=y, ack=x+1 |
    |<-------------------------------|
    | |
    | ACK, seq=x+1, ack=y+1 |
    |------------------------------->|
    | |
    连接建立

总结三次握手

  1. 客户端发 SYN:我要连你
  2. 服务器回 SYN+ACK:同意,我也准备好
  3. 客户端回 ACK:收到,连接成功

四、TCP 四次挥手(断开连接)

特点:

  • 双向独立关闭
  • 客户端、服务器谁都可以先发起关闭
  • 必须 4 步,因为双方都要确认 "我发完了""我收完了"

假设:客户端先发起关闭(服务器发起也一样)

第一次挥手:客户端 → 服务器

  • 发送:FIN = 1,seq = u
  • 含义:"我数据发完了,我要关闭发送方向。"

第二次挥手:服务器 → 客户端

  • 回复:ACK = 1,ack = u + 1,seq = v
  • 含义:"收到你要关闭。我确认,但我可能还有数据要发。"

第三次挥手:服务器 → 客户端

  • 服务器发完自己的数据后,发送:FIN = 1,ACK = 1,seq = w,ack = u + 1
  • 含义:"我也发完了,我也要关闭了。"

第四次挥手:客户端 → 服务器

  • 客户端回复:ACK = 1,ack = w + 1,seq = u + 1

  • 含义:"收到你关闭,连接彻底断开。"

    客户端 服务器
    | |
    | FIN, seq=u |
    |------------------------------->|
    | |
    | ACK, seq=v, ack=u+1 |
    |<-------------------------------|
    | |
    | FIN, seq=w, ack=u+1 |
    |<-------------------------------|
    | |
    | ACK, seq=u+1, ack=w+1 |
    |------------------------------->|
    | |
    连接关闭

总结四次挥手

  1. 一方发 FIN:我关了
  2. 对方回 ACK:知道了(但可能还在发数据)
  3. 对方发完再发 FIN:我也关了
  4. 一方回 ACK:收到,彻底断开

五、最关键的区别

三次握手(建连接)

  • 客户端主动发起
  • 3 步完成
  • SYN、ACK

四次挥手(断连接)

  • 双方都可发起
  • 必须 4 步
  • FIN、ACK
相关推荐
A小辣椒2 天前
TShark:Wireshark CLI 功能
linux
A小辣椒2 天前
TShark:基础知识
linux
AlfredZhao2 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334663 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪3 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 天前
Linux 11 动态监控指令top
linux
网络研究院3 天前
2026年网络安全
网络·安全·法律·法规·趋势·发展