TCP、UDP、IP、RTP头长度

news/2024/5/18 13:00:19 标签: udp, tcp/ip, 网络

各种协议的数据包头长度如下:

  1. UDP 头(8 字节)

    • 源端口(2 字节)
    • 目标端口(2 字节)
    • UDP 数据包长度(2 字节)
    • 校验和(2 字节)
  2. RTP 头(12 字节或者24字节)

    • 版本号(2位)
    • 填充位(1位)
    • 扩展位(1位)
    • CSRC计数器(4位)
    • 标记位(1位)
    • 负载类型(7位)
    • 序列号(16位)
    • 时间戳(32位)
    • SSRC(32位)
    • CSRC列表(如果有,每个元素占32位)
  3. TCP头(20/40/60/80字节)

    • 源端口(2 字节)
    • 目标端口(2 字节)
    • 序列号(4 字节)
    • 确认号(4 字节)
    • 数据偏移和控制标志(4 字节)
    • 窗口大小(2 字节)
    • 校验和(2 字节)
    • 紧急指针(2 字节)(选项字段有时候不存在)
  4. IP 头(20 字节或 40 字节 或者 60 字节)

    • 版本号和首部长度(1 字节)
    • 服务类型(1 字节)
    • 总长度(2 字节)
    • 标识符(2 字节)
    • 标志和片位移(2 字节)
    • 生存时间(1 字节)
    • 协议类型(1 字节)
    • 首部校验和(2 字节)
    • 源 IP 地址(4 字节)
    • 目的 IP 地址(4 字节)
    • 选项信息(可选,每个选项至少有1字节

RTP 头在基本格式下是12个字节,但如果启用了RTP头部扩展,则RTP头的长度会增加为最多24个字节。在RTP头部扩展中,包含了一个扩展头和多个扩展字段,每个扩展字段占据4个字节。因此,启用RTP头部扩展时,RTP头的长度将增加12个字节(扩展头占用4个字节,至少需要一个扩展字段,占用4个字节)。因此,RTP头的长度可以是12或24个字节,具体取决于是否使用了RTP头部扩展。

TCP头在基本格式下是20个字节,但如果TCP头部选项被使用了,那么TCP头的长度将增加到40个字节。TCP头部选项可以用于传输可变长度的选项信息,例如MSS(Maximum Segment Size)和SACK(Selective Acknowledgement)等。当TCP头部选项被使用时,每个选项占用最少4个字节,包括2个字节的选项类型字段和2个字节的选项长度字段。因此,TCP头的长度将增加20个字节,从20个字节变为40个字节。因此,TCP头的长度可以是20或40个字节,具体取决于是否使用了TCP头部选项。

IP头在基本格式下是20个字节,但是如果启用了IP头部选项,则IP头的长度将增加到最多60个字节(每个选项占用最少1个字节,而选项长度字段占用1个字节,因此一个选项至少需要2个字节)。当IP头部选项被使用时,每个选项占据的长度可以是4的倍数。因此,如果选项长度是39个字节或以下,IP头的长度为20字节;如果选项长度是40个字节或更多,那么IP头的长度将增加到40或者更多字节。因此,IP头的长度可以是20、40或更多字节,取决于是否启用了IP头部选项以及选项的长度。


http://www.niftyadmin.cn/n/378762.html

相关文章

【前端】Node环境搭建与部署项目Linux

在Linux系统中,搭建Node.js环境的方法主要有两种: 使用官方发行版包管理器(如apt、yum等)安装Node.js 对于基于Debian/Ubuntu的系统,可以通过以下命令安装Node.js: sudo apt update sudo apt install nod…

SQL数据库的整体结构、索引、MVCC、锁、日志、查询优化,三大范式等

关系型数据库和非关系型数据库 SQL:关系型数据库指的是使用关系模型(二维表格模型)来组织数据的数据库。(mysql,sqlserver,sqllite,oracle) 关系数据库的优点: 容易理解,符合正常思维方式;都是用表格形式,格…

spring boot 单元测试JUnit5使用断言Assertions和假定Assumptions、嵌套、参数测试

spring boot 单元测试JUnit5使用断言Assertions和假定Assumptions、嵌套、参数测试 本文基于spirng boot 2.7.11, 大家注意自己的版本 Spring Boot 2.2.0 版本开始引入 JUnit 5 作为单元测试默认库 SpringBoot 2.4 以上版本移除了默认对 Vintage 的依赖 源码地址&am…

代码覆盖率

在做单元测试时,代码覆盖率常常被拿来作为衡量测试好坏的指标,甚至,用代码覆盖率来考核测试任务完成情况,比如,代码覆盖率必须达到80%或 90%。于是乎,测试人员费尽心思设计案例覆盖代…

cmd 杀掉 nginx后台进程 命令杀掉nginx后台 nginx 常用命令

winr 输入cmd打开dos窗口输入: taskkill /f /t /im nginx.exenginx 常用命令 start nginx #启动Nginxtaskkill /IM nginx.exe /F #杀死进程(尤其是修改nginx.conf文件后,加载不了修改之后的配置文件)killall nginx #杀死所有n…

Android的消息机制

Android的消息机制 Android的消息机制概述 Android的消息机制主要指的是Handler的运行机制以及Handler所附带的MessageQueue和Looper的工作机制 Handler的主要作用是将一个任务切换到某个指定的线程中执行。 它的主要用处就是当要更新UI界面的时候,我们不能在非UI线程进行更…

Office project 2021安装

哈喽,大家好。今天一起学习的是project 2021的安装,Microsoft Office project项目管理工具软件,凝集了许多成熟的项目管理现代理论和方法,可以帮助项目管理者实现时间、资源、成本计划、控制。有兴趣的小伙伴也可以来一起试试手。…

固态硬盘基础知识:M.2 NVMe PCIe SATA的含义及区别

SATA接口 固态硬盘开始流行于笔记本电脑上,使用SATA接口,尺寸与笔记本硬盘相同,为2.5英寸。 那个时候,如果台式机需要加装固态硬盘,需要使用硬盘架,将固态硬盘安装在硬盘架上,然后再安装与机箱…