当前位置: 首页 > news >正文

TCP/IP 传输层详解

TCP/IP 传输层详解

传输层(Transport Layer)是 TCP/IP 模型的第四层(对应 OSI 模型的传输层),核心功能是实现 端到端(进程到进程)的可靠通信。主要协议包括:

  • TCP(传输控制协议):面向连接、可靠传输
  • UDP(用户数据报协议):无连接、高效传输

核心功能
功能TCPUDP
连接管理三次握手建立连接,四次挥手断开无连接
可靠性确认应答、重传、排序无可靠性保证
流量控制滑动窗口机制
拥塞控制慢启动、拥塞避免等算法
数据单元段(Segment)数据报(Datagram)
头部开销20~60 字节8 字节

TCP 协议深度解析

1. TCP 段结构
 0                   1                   2                   3  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1  
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
|          Source Port          |       Destination Port        |  
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
|                        Sequence Number                        |  
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
|                     Acknowledgment Number                     |  
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
|  Data |           |U|A|P|R|S|F|                               |  
| Offset| Reserved  |R|C|S|S|Y|I|            Window             |  
|       |           |G|K|H|T|N|N|                               |  
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
|           Checksum            |         Urgent Pointer        |  
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
|                    Options (if any)           |    Padding    |  
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
|                             Data                              |  
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
  • 关键字段
    • 序列号(Seq):数据字节流的编号
    • 确认号(Ack):期望接收的下一个字节编号
    • 标志位:SYN(建立连接)、ACK(确认)、FIN(断开连接)、RST(重置连接)
    • 窗口大小(Window):流量控制参数

2. TCP 连接管理(三次握手与四次挥手)
ClientServerCLOSED → SYN_SENTSYN=1, Seq=xLISTEN → SYN_RCVDSYN=1, ACK=1, Seq=y, Ack=x+1ESTABLISHEDACK=1, Seq=x+1, Ack=y+1ESTABLISHEDFIN_WAIT_1FIN=1, Seq=uCLOSE_WAITACK=1, Seq=v, Ack=u+1LAST_ACKFIN=1, ACK=1, Seq=w, Ack=u+1TIME_WAIT (2MSL)ACK=1, Seq=u+1, Ack=w+1CLOSEDClientServer

为什么需要三次握手?
防止失效的连接请求突然传到服务器(网络延迟导致的历史连接问题)


3. TCP 可靠性机制
接收端
发送端
正确
错误
超时未收到ACK
ACK到达
校验和检查
接收数据
发送ACK
丢弃数据
按序列号重组
添加TCP头部
数据分段
启动定时器
重发数据
滑动窗口前移
  • 关键机制
    • 序列号/确认号:确保数据有序到达
    • 超时重传:RTT动态计算超时时间
    • 滑动窗口:动态调整发送速率(流量控制)
    • 选择性确认(SACK):高效重传丢失片段

4. TCP 拥塞控制

在这里插入图片描述

  • 阶段说明
    1. 慢启动:窗口从1 MSS开始指数增长
    2. 拥塞避免:窗口线性增长(加法增大)
    3. 快速重传:收到3个重复ACK立即重传
    4. 快速恢复:窗口减半后直接进入拥塞避免

UDP 协议解析

1. UDP 数据报结构
 0                   1                   2                   3  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1  
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
|          Source Port          |       Destination Port        |  
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
|            Length             |           Checksum            |  
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
|                             Data                              |  
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
  • 特点
    • 无连接:直接发送数据
    • 无可靠性机制:不保证顺序和到达
    • 低延迟:头部仅8字节
    • 支持广播/多播

2. UDP 通信流程
应用进程AUDP模块AUDP模块B应用进程B发送数据(带端口)封装UDP数据报解封装,按端口交付无确认/重传机制应用进程AUDP模块AUDP模块B应用进程B

端口(Port)机制

核心作用:区分同一主机上的不同应用程序
在这里插入图片描述

  • 常见端口
    • HTTP: 80, HTTPS: 443
    • FTP: 21, SSH: 22
    • DNS: 53, DHCP: 67/68

TCP/UDP 应用场景对比

场景推荐协议原因
网页浏览TCP需要可靠传输HTML/CSS/JS
视频直播UDP容忍丢包,追求低延迟
文件传输TCP数据完整性要求高
DNS查询UDP短报文,快速响应
在线游戏UDP实时性优先于可靠性
电子邮件TCP保证邮件内容完整到达

Mermaid 综合原理图

TCP 端到端通信全流程
接收主机
网络路径
发送主机
正确
错误
ACK
IP层解封装
TCP重组数据
校验序列号
发送ACK
丢弃等待重传
交付应用
路由器1
路由器2
路由器N
TCP分段
应用数据
添加TCP头部
传递给IP层

💡 传输层核心价值

  1. 为应用层屏蔽网络复杂性(丢包、乱序、拥塞)
  2. 通过端口机制实现多路复用
  3. TCP/UDP 互补满足不同场景需求
    “TCP提供可靠传输的管道,UDP提供高效的传输通道”
http://www.lryc.cn/news/603446.html

相关文章:

  • 【dropdown组件填坑指南】鼠标从触发元素到下拉框中间间隙时,下拉框消失,怎么解决?
  • 分布式链路追踪的实现原理
  • 查询mac 安装所有python 版本
  • 【Spring AI 1.0.0】Spring AI 1.0.0框架快速入门(5)——Tool Calling(工具调用)
  • 解决mac下git pull、push需要输入密码
  • 学习Scala语言的最佳实践有哪些?
  • 使用 Django REST Framework 构建强大的 API
  • CVE-2022-46169漏洞复现
  • Mysql Connect -- 详解
  • Ollama安装及使用Ollama部署大模型
  • 51c大模型~合集161
  • 【高级深度学习框架】lightning的使用记录
  • 番茄项目2:阶段性目标——用纯python完成这个项目
  • Vue3 状态管理新选择:Pinia 从入门到实战
  • 【JavaScript】手写 Object.prototype.toString()
  • 利用对称算法及非对称算法实现安全启动
  • C++异常捕获:为何推荐按引用(by reference)捕获?
  • 机器学习 线性回归算法及案例实现
  • Generative AI in Game Development
  • 信号上升沿时间与频谱分量的关系
  • 多线程--关于锁的一些知识考点
  • NumPy 2.x 完全指南【三十】整数数组索引
  • 5.1 动⼿实现⼀个 LLaMA2 ⼤模型
  • Effective C++ 条款10:令operator=返回一个reference to *this
  • 【Java面试题】面向对象
  • Kubernetes 高级调度 01
  • 实现多路标注截图
  • WMS仓储管理系统在不良品管理中的优化策略
  • OpenCL - study - code04 canny
  • C++基础:模拟实现priority_queue(堆),详细介绍仿函数