TCP/IP 网络模型
TCP/IP 模型是因特网协议族的实际分层模型,强调端到端的数据传输与互联互通。常见的简化四层划分如下:
- 应用层 (Application Layer):为最终用户的应用提供网络服务,包含 HTTP、FTP、SMTP、DNS、SSH、TLS/SSL 等协议。应用层同时承担了 OSI 模型中的表示层和会话层功能(如数据表示、加密、会话管理)。
- 传输层 (Transport Layer):提供端到端的进程间通信,负责端口管理、流量控制、差错检测与重传。主要协议有 TCP(面向连接、可靠、顺序传输)和 UDP(无连接、低延迟、不保证可靠性),以及基于 UDP 的现代传输协议如 QUIC(集成拥塞控制与多路复用)。
- 网际层 / 网络层 (Internet Layer):负责主机寻址与路由,将分组从源主机送达目的主机,核心协议为 IP(IPv4/IPv6)。该层还包括 ICMP(差错与诊断)、ARP(地址解析,在链路层上协作)等辅助协议。
- 网络接口层 / 网络接入层 (Network Interface Layer):处理主机与物理网络的交互,涉及以太网、Wi‑Fi、PPP 等链路协议,以及帧的封装/解封装、MAC 地址与物理传输介质。
OSI 七层模型(用于教学与分析)
- 物理层(Physical Layer)——比特级传输,定义电气、机械和功能接口(例如网线、光纤、电压、电气时序)。
- 数据链路层(Data Link Layer)——帧封装、链路控制与物理地址(如以太网 MAC、交换机转发、错误检测)。
- 网络层(Network Layer)——分组转发与路由(如 IP),负责主机间寻址与路径选择。
- 传输层(Transport Layer)——端到端通信、端口、可靠性(如 TCP/UDP)。
- 会话层(Session Layer)——会话建立、管理与终止(在实际协议中多数由应用层或传输层处理)。
- 表示层(Presentation Layer)——数据表示与编码、加密/解密(例如 TLS、字符编码),实际实现通常在应用层库中。
- 应用层(Application Layer)——为用户进程提供网络接口(例如 HTTP、SMTP、DNS)。
比较与实践要点:
- 层次映射:TCP/IP 的应用层涵盖了 OSI 的应用/表示/会话三层;网络接口层则覆盖 OSI 的数据链路层与物理层。OSI 的七层更细分,利于教学与协议设计,但并非实际互联网中严格一一对应的实现边界。
- 关注点不同:OSI 强调功能划分与接口规范,TCP/IP 强调可互操作的协议与工程实现;工程实践中常以 TCP/IP 模型为准。
- 常见误区:不要把每一项功能强行绑定到某一层——例如 ARP 在实现上运行于链路层以支持网络层的地址解析;TLS 在常被视为“传输层安全”,但它运行在应用层与传输层之间并由应用层触发。
- 现代演进:新协议(如 QUIC、HTTP/3)正在改变层与功能的界面(QUIC 在用户态实现拥塞控制与多路复用,减少对内核 TCP 的依赖)。
实际学习建议:从 TCP/IP 四层模型掌握基本概念,再用 OSI 七层深化对每个功能点的理解,结合抓包(tcpdump/wireshark)观察分层交互与协议头结构。
Wireshark数据包分析
虽然我们统称“报文”,但在网络工程(OSI 模型)中,不同层级的包裹有不同的“职衔”:
Segment(分段):在传输层(TCP),数据被切分。
Packet(分组/包):在网络层(IP),加上了 IP 地址。
Frame(帧):在链路层(以太网),加上了物理网卡(MAC)地址
在计算机网络中,几乎所有的报文都可以简化为 Header(报头) 和 Payload(有效载荷) 这两部分
抓包、帧与分组(Wireshark / tcpdump)
- 捕获的最底层是链路层帧(frame,例如以太网帧),帧的载荷通常是网络层报文(packet,例如 IPv4/IPv6),传输层段(TCP/UDP)承载应用层数据(例如 DNS、HTTP)。Wireshark 将这些按层解析并在“详解视图”中逐层显示字段。
- 名称区分:严格而言链路层为“帧”,网络层为“分组/报文”,传输层为“段/数据报”。但在实践中“包(packet)”常被泛指抓到的整个记录。
- MTU 与拆分:发送端由传输层(TCP)分段,网络层(IP)负责转发;若 IP 报文大于链路 MTU,IPv4 可进行分片(fragmentation),IPv6 则通常依赖发送端的分片或 Path MTU Discovery / TCP MSS 调整以避免路由器中间碎片。
- 硬件卸载影响:网卡的 TSO/GSO/LRO 等卸载会使抓包看到的分段/合并行为与内核实际发送的不同,分析时需注意抓包点(主机本地 vs 网口)与抓包工具的捕获长度设置(-s 0)。
- 常用分析技巧:查看各层的源/目的 MAC、IP、端口与标志;用过滤(例如 udp.port==53 或 tcp.port==80)或“Follow TCP/UDP Stream”追踪会话;检查 IP 片偏移与标志判断是否为 IP 分片。
SOCKS5 代理协议概述
SOCKS5 是一个在应用层运行的代理协议(RFC 1928),用于在客户端与目标服务器之间中继 TCP/UDP 流量,并支持可选的认证与多种地址类型。
- 流程:握手阶段(客户端发送支持的认证方法,服务器选择并回应;可选用户名/密码 RFC 1929)→ 请求阶段(客户端发送命令:CONNECT/BIND/UDP ASSOCIATE,ATYP 指明地址类型 IPv4/IPv6/域名,随后目标地址与端口;服务器回应带回复码及绑定地址/端口)。
- 特性与注意事项:SOCKS5 本身不提供加密(需在隧道/加密通道中使用以保护内容与凭据),支持 UDP 转发但需注意 NAT 与防火墙;部署时建议启用认证、访问控制并结合 TLS/SSH 隧道以保护隐私。
UDP ASSOCIATE(UDP 转发)
UDP ASSOCIATE 命令用于通过 SOCKS5 代理转发 UDP 流量:
- 建立顺序:客户端先与 SOCKS5 服务器建立 TCP 控制连接并完成握手,然后发送 UDP ASSOCIATE 请求;服务器响应会返回一个 IP:端口,客户端随后向该地址发送封装后的 SOCKS5 UDP 报文(通常通过 UDP 协议直接发送,而非通过 TCP 控制通道)。
- 报文封装:SOCKS5 UDP 报文以 3 字节 RSV(0x00 0x00 0x00) + 1 字节 FRAG + ATYP + DST.ADDR + DST.PORT 开头,后面跟着原始 UDP 载荷。FRAG 用于分片(在实际实现中通常为 0,表示未分片)。
- 会话与 NAT:TCP 控制连接需保持打开以维持会话状态与 NAT 映射;NAT、防火墙和路径 MTU 会影响 UDP 可达性和可靠性。代理服务器在收到封装的 UDP 数据报后,通常会解封装并把真实的 UDP 数据报发送到目标,收到目标响应后再按相同方式封装返回客户端。
- 实践要点:测试 UDP 转发时注意服务器返回的 IP:端口(可能与客户端看到的不同),使用抓包验证封装格式,考虑使用心跳或保持连接避免中间 NAT 映射过期。
常用网络协议
TCP/UDP QUIC HTTP 1/2/3
物联网协议
bluetooth wireless zigbee 红外 红外radio 4G/5G
底层网络
学习ebpf和gvisor