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

TCP/IP 模型每层的封装格式

TCP/IP 模型是一个四层网络架构,每一层在数据传输时都会对数据进行封装,添加相应的头部(和尾部)信息。以下是各层的封装格式及关键字段说明:


1. 应用层(Application Layer)

  • 封装格式:取决于具体应用协议(如 HTTP、FTP、DNS、SMTP 等)。

  • 示例

    • HTTP 请求
      GET /index.html HTTP/1.1
      Host: www.example.com
      User-Agent: Mozilla/5.0
      
    • DNS 查询
      包含查询域名、记录类型(A、AAAA、MX 等)和事务 ID。
  • 作用:定义数据内容和应用交互规则。


2. 传输层(Transport Layer)

  • 协议:TCP 或 UDP。
  • 封装格式
    • TCP 段(Segment)
      | 源端口 (16 bits) | 目的端口 (16 bits) |
      | 序列号 (32 bits)                 |
      | 确认号 (32 bits)                 |
      | 头部长度 | 保留 | 控制标志 (SYN/ACK/FIN等) | 窗口大小 (16 bits) |
      | 校验和 (16 bits) | 紧急指针 (16 bits)     |
      | 选项 (可选)                       |
      | 数据 (应用层数据)                 |
      
    • UDP 数据报(Datagram)
      | 源端口 (16 bits) | 目的端口 (16 bits) |
      | 长度 (16 bits)   | 校验和 (16 bits)    |
      | 数据 (应用层数据)                 |
      
  • 关键字段
    • 端口号:标识应用进程(如 80 用于 HTTP)。
    • TCP 特有:序列号、确认号、控制标志(可靠传输)。
    • UDP 更简单,无连接和可靠性保证。

3. 网络层(Internet Layer)

  • 协议:IP(IPv4 或 IPv6)。
  • 封装格式(IPv4 数据包)
    | 版本 (4 bits) | 头部长度 (4 bits) | 服务类型 (8 bits) | 总长度 (16 bits)      |
    | 标识 (16 bits)                | 标志 (3 bits) | 片偏移 (13 bits)    |
    | 生存时间 TTL (8 bits) | 协议 (8 bits, e.g., TCP=6, UDP=17) | 头部校验和 (16 bits) |
    | 源 IP 地址 (32 bits)                                           |
    | 目的 IP 地址 (32 bits)                                         |
    | 选项 (可选)                                                    |
    | 数据 (传输层段)                                                |
    
  • 关键字段
    • 源/目的 IP 地址:标识主机。
    • 协议字段:指示上层协议(TCP/UDP)。
    • TTL:防止数据包无限循环。

4. 网络接口层(Link Layer)

  • 协议:以太网(Ethernet)、Wi-Fi(802.11)、PPP 等。
  • 封装格式(以太网帧)
    | 前导码 (7 bytes) | 帧开始符 (1 byte) |
    | 目的 MAC 地址 (6 bytes) | 源 MAC 地址 (6 bytes) |
    | 类型 (2 bytes, e.g., IPv4=0x0800, ARP=0x0806)                  |
    | 数据 (IP 数据包)                                               |
    | 帧校验序列 FCS (4 bytes, CRC校验)                              |
    
  • 关键字段
    • MAC 地址:标识本地网络中的设备。
    • 类型字段:指示上层协议(如 IPv4 或 ARP)。
    • FCS:错误检测。

完整封装流程示例(HTTP over TCP/IP)

  1. 应用层:HTTP 请求 → 添加 HTTP 头部。
  2. 传输层:将 HTTP 数据封装为 TCP 段 → 添加源/目的端口、序列号等。
  3. 网络层:将 TCP 段封装为 IP 数据包 → 添加源/目的 IP 地址。
  4. 链路层:将 IP 数据包封装为以太网帧 → 添加源/目的 MAC 地址和 FCS。

最终数据通过物理介质(如网线)传输,接收方逐层解封装。


关键点总结

  • 分层封装:每层添加自己的头部,形成“洋葱式”结构。
  • 协议标识
    • 链路层通过类型字段标识网络层协议(如 IPv4)。
    • 网络层通过协议字段标识传输层协议(如 TCP)。
    • 传输层通过端口号标识应用层协议(如 HTTP 的 80 端口)。
  • MTU 限制:链路层帧大小有限(如以太网默认 1500 字节),超长的 IP 数据包会被分片。
http://www.xdnf.cn/news/5395.html

相关文章:

  • C++ stl中的set、multiset、map、multimap的相关函数用法
  • SQL语句的优化
  • 学习和测试WebApi项目限制客户端ip访问接口(基于中间件)
  • Python httpx库终极指南
  • 端口号被占用怎么解决
  • 《Effective Python》第1章 Pythonic 思维详解——深入理解 Python 条件表达式(Conditional Expressions)
  • JAVA EE_网络原理_网络层
  • PowerShell 脚本中文乱码处理
  • 《Linux命令行大全(第2版)》PDF下载
  • TAPIP3D:持久3D几何中跟踪任意点
  • Java--图书管理系统(简易版优化)
  • Oracle — 内置函数
  • Python Bug 修复案例分析:多线程数据竞争引发的bug 两种修复方法
  • Java多态详解
  • 图形学、人机交互、VR/AR领域文献速读【持续更新中...】
  • TypeScript 类型保护详解
  • 《Go小技巧易错点100例》第三十一篇
  • stm32week15
  • 轻量服务器与宝塔
  • 【递归、搜索与回溯算法】导论
  • 2025第九届御网杯网络安全大赛线上赛 区域赛WP (MISC和Crypto)(详解-思路-脚本)
  • [Java实战]Spring Boot 快速配置 HTTPS 并实现 HTTP 自动跳转(八)
  • Java反序列化漏洞
  • 第一章 初识Java
  • Kotlin Multiplatform--03:项目实战
  • 机器学习总结
  • C/C++实践(四)C++跨平台开发的系统性挑战与深度解决方案
  • 基于SpringBoot的小区停车位管理系统
  • 集合(1)
  • MATLAB中矩阵和数组的区别