TCP/IP协议基础IP、TCP、UDP

IP协议

IP 协议(Internet Protocol,互联网协议)是 TCP/IP 协议族的核心协议之一,负责在互联网中实现数据包的路由和转发,是计算机之间跨网络通信的基础。以

一、IP 协议的核心作用

IP 协议的核心功能是定义数据在网络中的传输方式,具体包括:

  • 寻址:为网络中的设备分配唯一的 IP 地址,标识其在网络中的位置(类似现实中的 “地址”)。
  • 路由:确定数据包从源设备到目标设备的传输路径(通过路由器选择最优路线)。
  • 分片与重组:当数据包大小超过网络链路的最大传输单元(MTU)时,将其分割为小分片,到达目标后重组为完整数据。

二、IP 协议的版本:IPv4 与 IPv6

目前广泛使用的 IP 协议有两个版本,两者在地址格式、功能上有显著差异:

特性IPv4IPv6
地址长度32 位(4 个字节)128 位(16 个字节)
地址格式点分十进制(如192.168.1.1冒分十六进制(如2001:db8::1
地址数量约 43 亿个(已耗尽)约 3.4×10³⁸个(几乎无限)
安全性无内置安全机制内置 IPsec 加密和认证
广播支持支持广播地址取消广播,用多播替代
配置复杂度需手动或 DHCP 配置支持自动配置(SLAAC)

三、IP 数据包结构

IP 数据包由首部数据两部分组成,首部包含控制信息,常见字段如下:

  • 版本:标识 IPv4(4)或 IPv6(6)。
  • 首部长度:表示首部占多少个 32 位字(最小值 5,最大值 15)。
  • 总长度:数据包总大小(首部 + 数据),最大 65535 字节。
  • TTL(生存时间):限制数据包在网络中的转发次数(每经过一个路由器减 1,为 0 则丢弃,防止环路)。
  • 协议:标识上层协议(如 TCP=6,UDP=17,ICMP=1)。
  • 源 IP 地址目标 IP 地址:发送方和接收方的 IP 地址。
  • 校验和:用于检测首部在传输中是否损坏。

下图是IPv4的包头结构

四、IP分片

IP 分片是指当 IP 数据包的大小超过传输路径中某个网络设备(如路由器)的最大传输单元(MTU)时,将数据包分割成多个较小片段进行传输的过程。到达目的地后,这些片段会被重新组合成原始数据包。

为什么需要 IP 分片?

不同网络链路(如以太网、PPP 链路等)有不同的MTU(最大传输单元),即该链路能传输的最大数据帧大小(包含帧头,通常 IP 数据报的最大长度受 MTU 限制)。例如:

  • 以太网的 MTU 通常为 1500 字节(IP 数据报最大可包含 1500 字节,其中 IP 头占 20-60 字节,数据部分最大 1480-1440 字节)。
  • 如果一个 IP 数据包(如 1600 字节)要通过 MTU 为 1500 的链路,就必须分片后才能传输,否则会被直接丢弃。

IP 分片的关键规则(以 IPv4 为例)

  1. 分片依据
    发送方或中间路由器会根据路径中的最小 MTU(路径 MTU)对数据包分片,确保每个分片小于等于 MTU。

  2. 分片结构
    每个分片都包含完整的 IP 头(部分字段调整),并添加分片相关字段:

    • 标识(Identification):所有分片使用相同的标识,用于接收方识别属于同一个原始数据包。
    • 标志(Flags)
      • 第 1 位(保留):必须为 0。
      • 第 2 位(DF,Don't Fragment):0表示可分片,1表示禁止分片(若超过 MTU 则丢弃并返回错误)。
      • 第 3 位(MF,More Fragments):1表示后面还有分片,0表示最后一个分片。
    • 片偏移(Fragment Offset):每个分片的数据部分在原始数据包中的偏移量(以 8 字节为单位),用于接收方重组顺序。
  3. 分片大小限制
    每个分片的总长度(IP 头 + 数据)必须≤MTU,且分片数据部分的长度必须是 8 字节的整数倍(除最后一个分片外),因为片偏移以 8 字节为单位。

分片重组(接收方)

  1. 接收方通过标识字段识别同一原始数据包的所有分片。
  2. 根据片偏移MF 标志确定分片顺序,将数据部分按偏移量拼接。
  3. 当收到MF=0的最后一个分片,且所有分片都接收完整后,重组为原始 IP 数据包,再向上层协议(如 TCP、UDP)提交。

五、IP 路由过程

当一台设备向另一台设备发送数据时,IP 协议的路由流程如下:

  1. 发送方判断目标 IP 是否在同一局域网(通过子网掩码计算网络地址)。
    • 若在同一局域网:直接通过 MAC 地址发送(ARP 协议获取 MAC)。
    • 若不在同一局域网:将数据包发送到本地网关(路由器)。
  2. 路由器接收数据包后,根据路由表(记录网络地址与出口的映射)选择下一跳路由器。
  3. 数据包经过多台路由器转发,最终到达目标设备所在局域网的路由器。
  4. 目标局域网的路由器将数据包发送到目标设备。

六、IP 协议的局限性与补充协议

IP 协议本身是无连接、不可靠的:

  • 无连接:发送方和接收方无需预先建立连接,直接发送数据。
  • 不可靠:不保证数据包的顺序、完整性和到达性(可能丢失、重复或乱序)。

因此,需要其他协议补充:

  • TCP 协议:提供可靠传输(重传丢失的包、按序重组),适用于对可靠性要求高的场景(如文件传输、网页访问)。
  • UDP 协议:提供无可靠保证的快速传输,适用于实时性场景(如视频通话、游戏)。
  • ICMP 协议:用于诊断网络问题(如ping命令通过 ICMP 检测主机可达性)。

IP 协议是互联网的 “交通规则”,通过寻址和路由确保数据在全球网络中准确传输。

TCP协议

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层协议,位于 IP 协议之上,为应用程序提供稳定的数据传输服务。它解决了 IP 协议的 “无连接” 和 “不可靠” 问题,广泛应用于对可靠性要求高的场景(如网页浏览、文件传输、电子邮件等)。

一、TCP 的核心特性

  1. 面向连接
    通信前需通过 “三次握手” 建立连接,通信结束后通过 “四次挥手” 释放连接,确保双方状态同步。

  2. 可靠传输

    • 通过序列号(Sequence Number)和确认号(Acknowledgment Number)保证数据按序到达。
    • 超时重传机制:发送方在未收到确认时重新发送数据。
    • 校验和(Checksum):检测数据在传输过程中是否损坏。
  3. 流量控制
    接收方通过滑动窗口(Window Size)告知发送方自己的缓冲区大小,防止发送方发送过快导致接收方溢出。

  4. 拥塞控制
    动态调整发送速率,避免网络拥塞。常见算法包括慢启动、拥塞避免、快速重传和快速恢复。

  5. 全双工通信
    双方可同时发送和接收数据,通过独立的发送和接收缓冲区实现。

二、TCP 头部结构

TCP 数据包由头部数据部分组成,头部最小 20 字节,最大 60 字节(包含可选字段):

字段长度(位)作用描述
源端口(Source Port)16标识发送方应用程序的端口号
目标端口(Destination Port)16标识接收方应用程序的端口号
序列号(Sequence Number)32表示本报文段数据的第一个字节在整个数据流中的编号,用于按序重组
确认号(Acknowledgment Number)32期望收到对方下一个报文段的第一个数据字节的序列号,即已成功接收数据的下一个序号
数据偏移(Data Offset)4表示 TCP 头部长度(以 32 位字为单位),最小值 5(20 字节),最大值 15(60 字节)
保留位(Reserved)6保留字段,必须为 0
控制位(Flags)6- URG:紧急指针有效
- ACK:确认号有效
- PSH:尽快推送数据
- RST:重置连接
- SYN:建立连接
- FIN:关闭连接
窗口大小(Window Size)16接收方的接收窗口大小(字节),用于流量控制
校验和(Checksum)16覆盖 TCP 头部和数据部分,用于检测传输错误
紧急指针(Urgent Pointer)16当 URG=1 时有效,表示紧急数据的末尾在数据流中的位置
选项(Options)可变如 MSS(最大段大小)、窗口扩大因子、时间戳等可选参数

三、TCP 连接的建立与释放

1. 三次握手(Three-Way Handshake)建立连接

plaintext

客户端(Client)                服务器(Server)
  ┌───────────────┐            ┌───────────────┐
  │ 1. SYN=1      │            │               │
  │    Seq=x      ├───────────►│               │
  │               │            │               │
  │               │            │ 2. SYN=1      │
  │               │◄───────────┤    ACK=1      │
  │               │            │    Seq=y      │
  │ 3. ACK=1      │            │    Ack=x+1    │
  │    Seq=x+1    ├───────────►│               │
  │    Ack=y+1    │            │               │
  └───────────────┘            └───────────────┘

  1. 客户端向服务器发送 SYN 包(SYN=1,Seq=x),请求建立连接。
  2. 服务器收到后,返回 SYN+ACK 包(SYN=1,ACK=1,Seq=y,Ack=x+1),表示同意建立连接。
  3. 客户端发送 ACK 包(ACK=1,Seq=x+1,Ack=y+1),连接建立完成。
2. 四次挥手(Four-Way Handshake)释放连接

plaintext

客户端(Client)                服务器(Server)
  ┌───────────────┐            ┌───────────────┐
  │ 1. FIN=1      │            │               │
  │    Seq=u      ├───────────►│               │
  │               │            │               │
  │               │            │ 2. ACK=1      │
  │               │◄───────────┤    Seq=v      │
  │               │            │    Ack=u+1    │
  │ 3. ACK=1      │            │    FIN=1      │
  │    Seq=w      │            │    Seq=v      │
  │    Ack=v+1    │◄───────────┤               │
  │               │            │               │
  │ 4. ACK=1      │            │               │
  │    Seq=u+1    ├───────────►│               │
  │    Ack=v+1    │            │               │
  └───────────────┘            └───────────────┘

  1. 客户端向服务器发送 FIN 包(FIN=1,Seq=u),表示请求关闭连接。
  2. 服务器收到后,返回 ACK 包(ACK=1,Seq=v,Ack=u+1),表示同意关闭客户端到服务器的连接。
  3. 服务器向客户端发送 FIN 包(FIN=1,Seq=v),表示请求关闭服务器到客户端的连接。
  4. 客户端收到后,返回 ACK 包(ACK=1,Seq=u+1,Ack=v+1),连接彻底关闭。

四、TCP 可靠传输机制

  1. 序列号与确认应答

    • 发送方为每个字节分配序列号,接收方通过确认号告知发送方已成功接收的数据位置。
    • 例如:发送方发送 Seq=1000 的 100 字节数据,接收方返回 Ack=1100 表示已收到 1-1099 字节。
  2. 超时重传

    • 发送方设置定时器,若在指定时间内未收到确认,重新发送未确认的数据。
    • 超时时间动态调整,基于往返时间(RTT)估算。
  3. 滑动窗口

    • 接收方通过窗口大小字段告知发送方自己的接收缓冲区剩余空间,发送方根据窗口大小调整发送速率。
    • 窗口大小动态变化,避免接收方缓冲区溢出。

五、TCP 拥塞控制

TCP 通过拥塞窗口(cwnd)动态调整发送速率,避免网络拥塞:

  1. 慢启动:初始时 cwnd=1,每收到一个 ACK,cwnd 翻倍,直到达到慢启动阈值(ssthresh)。
  2. 拥塞避免:超过 ssthresh 后,每收到一个 ACK,cwnd 增加 1/cwnd,线性增长。
  3. 快速重传:当收到 3 个重复 ACK 时,立即重传丢失的数据包,无需等待超时。
  4. 快速恢复:重传后,将 ssthresh 减半,cwnd 设为 ssthresh,进入拥塞避免阶段。

六、TCP 的典型应用

  • HTTP/HTTPS:网页浏览,依赖 TCP 的可靠性确保完整传输。
  • FTP:文件传输协议,保证文件完整无误。
  • SMTP/POP3/IMAP:电子邮件传输和接收。
  • SSH/Telnet:远程登录,确保命令准确传输。
  • 数据库连接:如 MySQL、PostgreSQL 依赖 TCP 保证数据完整性。

TCP 通过面向连接、可靠传输、流量控制和拥塞控制等机制,为应用层提供了稳定的数据传输服务,是互联网中最核心的协议之一。但其引入的连接建立、重传机制等也带来了一定的延迟和开销,因此在实时性要求高的场景(如音视频)中,UDP 更为适用。理解 TCP 的工作原理对网络编程、故障排查和性能优化至关重要。

UDP协议

UDP(User Datagram Protocol,用户数据报协议)是一种无连接、不可靠的传输层协议,与 TCP 相比,它更轻量、传输速度更快,但不保证数据的可靠性。UDP 适用于对实时性要求高、对少量数据丢失容忍度较高的场景,如音视频流、实时游戏、DNS 等。

一、UDP 的核心特性

  1. 无连接
    通信前无需建立连接,发送方直接向接收方发送数据报(Datagram),接收方无需预先确认。

  2. 不可靠

    • 不保证数据按序到达(可能乱序)。
    • 不保证数据完整性(可能丢失)。
    • 无重传机制,需应用层自行处理。
  3. 高效性

    • 头部开销小(仅 8 字节,对比 TCP 的 20 字节)。
    • 无需维护连接状态(如三次握手、四次挥手),减少系统资源消耗。
  4. 面向数据报
    数据以独立的数据报为单位传输,接收方需按完整的数据报接收,不支持字节流。

二、UDP 头部结构

UDP 头部固定 8 字节,结构简单:

字段长度(位)作用描述
源端口(Source Port)16标识发送方应用程序的端口号
目标端口(Destination Port)16标识接收方应用程序的端口号
长度(Length)16UDP 数据报的总长度(头部 + 数据),最小值 8 字节(仅头部)
校验和(Checksum)16可选字段(某些实现可能忽略),覆盖 UDP 头部和数据部分,用于检测传输错误


三、UDP 的应用场景

  1. 实时音视频流

    • 如视频会议、直播、语音通话(如 Zoom、抖音直播)。
    • 少量丢包对用户体验影响较小,但延迟敏感。
  2. 实时游戏

    • 如《王者荣耀》《CS:GO》。
    • 需快速响应玩家操作,允许偶尔的画面抖动但不能接受高延迟。
  3. DNS 查询

    • DNS 请求通常使用 UDP(53 端口),单次查询数据量小,快速响应比可靠性更重要。
  4. IoT(物联网)

    • 传感器数据上报(如温度、湿度),数据量小且允许少量丢失。
  5. 广播 / 多播通信

    • UDP 支持向多个目标发送数据(如 DHCP 发现、网络设备发现)。

四、UDP 的优缺点

优点
  • 低延迟:无需连接建立和维护,适合实时性场景。
  • 资源占用少:无需维护大量连接状态,适合轻量级应用。
  • 简单灵活:协议设计简单,适合自定义应用层协议。
缺点
  • 不可靠:可能丢包、乱序,需应用层自行处理。
  • 无拥塞控制:可能导致网络拥塞(如 UDP 洪水攻击)。
  • 数据报大小限制:受限于 IP 层 MTU(通常≤1500 字节)。

五、UDP 的可靠性增强方案

虽然 UDP 本身不可靠,但应用层可通过以下方式增强可靠性:

  1. 应用层重传

    • 发送方记录已发送数据,超时未收到确认则重传(如 QUIC 协议)。
  2. 序列号与排序

    • 为数据添加序列号,接收方按序重组(如视频播放器缓冲机制)。
  3. 确认机制

    • 接收方返回 ACK 确认,类似 TCP 的确认应答(如实时游戏中的状态同步)。
  4. 丢包检测

    • 通过序列号间隙或时间戳检测丢包(如 RTP 协议中的丢包统计)。

六、UDP 相关协议与技术

  1. RTP(Real-time Transport Protocol)

    • 用于实时音视频传输,基于 UDP,提供时间戳和序列号支持。
  2. QUIC(Quick UDP Internet Connections)

    • 基于 UDP 的新一代传输协议,谷歌开发,集成了 TCP 的可靠性和 UDP 的低延迟,被 HTTP/3 采用。
  3. DHCP(Dynamic Host Configuration Protocol)

    • 基于 UDP 实现,用于自动分配 IP 地址。
  4. NTP(Network Time Protocol)

    • 基于 UDP 实现,用于网络时钟同步。

UDP 以其轻量、高效的特性,成为实时性应用的首选协议。虽然不可靠,但在允许少量数据丢失的场景中(如音视频、游戏),UDP 的性能优势远超其不足。对于需要可靠性的场景,应用层可通过自定义协议弥补 UDP 的缺陷(如 QUIC 协议)。理解 UDP 的工作原理,有助于根据业务需求选择合适的传输层协议。

UDP 与 TCP 的对比

特性UDPTCP
连接性无连接面向连接(三次握手)
可靠性不可靠(可能丢失、乱序)可靠(重传、排序、确认)
头部开销8 字节最小 20 字节
传输效率高(无连接建立 / 释放)低(需维护连接状态)
流控与拥塞控制不支持支持滑动窗口、拥塞控制
应用场景实时性要求高的场景可靠性要求高的场景

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值