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
相关推荐
oioihoii2 分钟前
CentOS 7单机部署Elasticsearch:这些坑和关键配置,生产环境踩过才知道
linux·elasticsearch·centos
愿天垂怜36 分钟前
【C++脚手架】gtest 单元测试库的介绍与使用
linux·服务器·c++·gitee·前端框架·gtest
IronMurphy38 分钟前
AI Agent 学习day5 MCP 协议入门与实践
网络·人工智能·学习
呉師傅1 小时前
联想ideapad 310-15ABR拔掉充电器使用电池工作花屏问题的解决方法【维修个例】
运维·服务器·网络·智能手机·电脑
农民小飞侠1 小时前
SandboxFusion搭建教程
linux·ubuntu
勇往直前plus1 小时前
Python 属性访问与操作全解析:内置函数、魔法方法与描述符深度指南
java·网络·python
Arenaschi1 小时前
关于GPT的版特点
java·网络·人工智能·windows·python·gpt
晚风吹红霞1 小时前
Vim编辑器从入门到熟练 —— 三种模式与常用命令详解
linux·编辑器·vim
MAXrxc2 小时前
ospf笔记
网络·笔记
薛定猫AI2 小时前
【深度解析】Hermes Agent Velocity Release:长期记忆、自进化技能与多智能体任务编排实践
网络·人工智能