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
相关推荐
雪落漂泊1 小时前
Linux进程(五):进程地址空间篇
linux·运维·服务器
QXWZ_IA2 小时前
定位数据怎么推给 IoT 平台?消息协议选型与接入准备
网络·人工智能·物联网·安全
AR-26710-2 小时前
Linux Day32——网络,ROCE-IB与以太网
linux·运维
wdeok3 小时前
Socket编程Tcp
服务器·网络·tcp
LongRunning17 小时前
【Linux】RK3568-OpenCV+YOLO(八)
linux·opencv·yolo
xiaoye-duck19 小时前
《C++ 项目:手写大模型接入 SDK》Ollama接口设计(上):初始化、全量响应实现和测试
开发语言·网络·c++·语言模型
民乐团扒谱机20 小时前
【微实验】NSGA-II(非支配排序遗传算法)——解决多目标优化问题的“自然选择模拟器”
linux·人工智能·算法
물の韜20 小时前
ZYNQ/FMQL系列Linux之I2C开发实战
linux·arm开发·嵌入式硬件·设备树·iic·zynq
qq_3718021121 小时前
Ubuntu Linux中安装WorkBuddy
linux·运维·服务器·ubuntu
无足鸟ICT21 小时前
【RHCA+】iptraf-ng(网络监控分析)
linux·网络