TCP/IP 教程

以下是通俗易懂、从零开始的 TCP/IP 完整教程,适合初学者到进阶开发者,内容按层次结构组织,你可以按需跳着看。

一、TCP/IP 是什么?

TCP/IP 不是一个协议,而是一整套协议族(Protocol Suite)的简称,全称是 Transmission Control Protocol / Internet Protocol。

简单来说:

  • IP 负责把数据包从 A 送到 B(寻址和路由)
  • TCP 在 IP 之上提供可靠、可靠、有序、面向连接的传输(类似于打电话)
  • 还有 UDP 提供无连接、不可靠但快速的传输(类似于寄明信片)

整个互联网实际上跑的就是 TCP/IP 协议族。

二、TCP/IP 五层模型(实际工程中最常用)

层级名称对应 OSI 模型典型协议和设备主要功能
5应用层应用/表示/会话层HTTP、HTTPS、FTP、SMTP、DNS、SSH直接为应用程序提供服务
4传输层传输层TCP、UDP端到端通信(进程到进程)
3网络层网络层IP、ICMP、ARP、路由器逻辑寻址和路由
2数据链路层数据链路层Ethernet、Wi-Fi、交换机、MAC 地址相邻节点之间可靠传输帧
1物理层物理层网线、光纤、Wi-Fi 无线电、网卡把比特流变成电信号/光信号/无线电波

三、关键协议详解

  1. IP(Internet Protocol)
  • IPv4:32 位,例如 192.168.1.1
  • IPv6:128 位,例如 240e:390:1f2c:1234::1
  • 无连接、不可靠、尽最大努力交付(Best Effort)
  • IP 数据包头部最重要字段:源 IP、目的 IP、TTL、协议号(6=TCP,17=UDP)
  1. TCP(Transmission Control Protocol)
    特点:面向连接、三次握手、四次挥手、可靠传输、流量控制、拥塞控制、有序

TCP 头部关键字段:

  • 源端口、目的端口(16位)
  • 序列号 Seq(32位)
  • 确认号 Ack(32位)
  • 标志位:SYN、ACK、FIN、RST、PSH、URG
  • 窗口大小(流量控制)
  • 校验和

三次握手(建立连接)

客户端              服务端
  SYN (seq=x)   →
                ←  SYN+ACK (seq=y, ack=x+1)
  ACK (ack=y+1) →
连接建立,可以传输数据

四次挥手(断开连接)

客户端              服务端
  FIN           →
                ←  ACK
                ←  FIN
  ACK           →
连接彻底关闭
  1. UDP(User Datagram Protocol)
  • 无连接、无序、不可靠、开销极小
  • 仅8字节头部
  • 适合视频直播、DNS、游戏、IoT
  1. 其他重要协议
  • DNS:域名 → IP(端口 53(UDP为主)
  • HTTP/HTTPS:80 / 443(TCP)
  • FTP:20(数据)、21(控制)
  • SSH:22
  • SMTP:25 / 465 / 587
  • ICMP:ping、traceroute 用

四、一个数据包的完整旅程(举例:你打开 www.baidu.com)

  1. 浏览器向 DNS 服务器发 UDP 查询 www.baidu.com 的 A 记录 → 得到 220.181.38.148
  2. 浏览器向 220.181.38.148:443 发起 TCP 三次握手
  3. 握手成功后发送 HTTPS 请求(基于 TLS 加密的 HTTP)
  4. 服务器返回 HTML、图片等资源
  5. 浏览器渲染页面
  6. TCP 四次挥手关闭连接(或保持长连接)

五、常用工具实战命令(Linux/macOS/Windows 都可用)

# 查看本机 IP
ip addr show          # Linux
ifconfig              # macOS/old Linux
ipconfig              # Windows

# 测试连通性
ping www.baidu.com

# 查看路由路径
traceroute www.baidu.com        # Linux/macOS
tracert www.baidu.com           # Windows

# 查看端口监听
netstat -tunlp                  # Linux
netstat -an | find "LISTEN"     # Windows

# 抓包神器(需要管理员权限)
tcpdump -i eth0 tcp port 80 -n
# 或者用 Wireshark 图形化更直观

# 测试端口是否开放
nc -zv www.baidu.com 443
telnet www.baidu.com 80

六、常见面试/实战问题

  1. TCP 和 UDP 的区别?什么时候用哪个?
  2. 三次握手为什么要三次?两次行不行?
    → 防止已失效的连接请求突然又传到了服务器
  3. 四次挥手为什么要四次?
    → 因为 TCP 是全双工,双方都要确认对方不再发送数据
  4. TIME_WAIT 状态有什么作用?为什么是 2MSL?
  5. TCP 如何保证可靠传输?(序号、确认、重传、校验和、流量控制、拥塞控制)
  6. HTTP 是基于 TCP 还是 UDP?HTTP/3 呢?
    → HTTP/1.1 和 HTTP/2 基于 TCP,HTTP/3 基于 QUIC(基于 UDP)

七、推荐学习资源(2025年最新)

免费:

  • 《图解TCP/IP》(第6版)——日本人写的,最通俗
  • 韩立刚《TCP/IP协议族详解》视频(B站)
  • Computer Networking: A Top-Down Approach(经典大学教材)

付费但极强:

  • 小林coding 的《图解网络》《图解TCP》(公众号+网站)
  • 云原生时代必学:深入理解 QUIC、HTTP/3、gRPC

动手实践:

  • 用 Python 写一个最简单的 TCP 服务器/客户端
  • 用 Wireshark 抓自己浏览网页的全过程

需要我给你贴一个「30分钟上手」的 Python TCP/UDP 示例代码吗?或者你想重点深入哪一部分(比如三次握手细节、拥塞控制算法、HTTP/3)?告诉我,我可以继续展开!

文章已创建 3927

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部