TCP/IP 报文格式(IP数据包、TCP报头、UDP报头)

2023-10-26

TCP/IP 报文格式(IP数据包、TCP报头、UDP报头)

一、IP包格式

IP数据包,是一种可以变长的分组,由首部与数据负载组成。首部长度为20-60字节(Byte),后40字节是可选的,但长度不固定,前20字节格式为固定。数据负载部分的长度一般可变。
在这里插入图片描述
1、 版本
长度为4位,指IP协议的版本.通信双方使用的IP协议版本必须一致。目前广泛使用的 IP协议版本号为 4 (即 IPv4)。IPv6 目前还处于起步阶段。IP v4的值为0100,IP v6的值为0110。
2、首部长度
指的是IP包头长度,占 4 位,可表示的最大十进制数值是15。请注意,这个字段所表示数的单位是32位字 (1个32位字长是4 字节),因此,当 IP 的首部长度为 1111 时 (即十进制的 15),首部长度就达到 60字节。当 IP 分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充.因此数据部分永远在 4字节的整数倍开始,这样在实现 IP协议时较为方便。首部长度限制为 60字节的缺点是有时可能不够用.这样做的目的是希望用户尽量减少开销.最常用的首部长度就是 20 字节 (即首部长度为 0101),这时不使用任何选项。
3、服务
占 8 位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年IETF把这个字段改名为区分服务 DS(Differentiated Services)。只有在使用区分服务时,这个字段才起作用。其组成:前3位为优先级(Precedence),后4位标志位,最后1位保留未用。优先级主要用于QoS,表示从0(普通级别)到7(网络控制分组)的优先级。标志位可分别表示D(Delay更低的时延)、T(Throughput 更高的吞吐量)、R(Reliability更高的可靠性)、C(Cost 更低费用的路由)。
4、总长度
总长度指首都及数据之和的长度,单位为字节.因为总长度字段为 16位,所以数据报的最大长度为 216-1=65 535字节.在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,即最大传送单元 MTU (Maximum Transfer Unit).当一个数据报封装成链路层的帧时,此数据报的总长度 (即首部加上数据部分)一定不能超过下面的数据链路层的MTU值,否则要分片.
5、标识 (Identification)
占 16位.IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加 1,并将此值赋给标识字段.但这个"标识"并不是序号,因为 IP是无连接的服务,数据报不存在按序接收的问题.当数据报由于长度超过网络的 MTU 而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中.相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报.
6、标志 (Flag)
长度为3 位,但目前只有2位有意义. 标志字段中的最低位记为 MF(More Fragment).MF=1即表示后面"还有分片"的数据报.MF=0表示这已是若干数据报片中的最后一个.标志字段中间的一位记为DF(Don’t Fragment),意思是"不能分片",只有当 DF=0时才允许分片.
7、片偏移
占 13位。也称段偏移,较长的分组在分片后,某片在原分组中的相对位置.也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以 8个字节为偏移单位,这就是说,每个分片的长度一定是 8字节(64位)的整数倍。
8、生存时间(TTL)
长度为8位,初始值由操作系统设置,每经过一个路由器转发后其值就减1,减至0后丢弃该包。这种机制可以避免数据包找不到目地时不断被转发,堵塞网络。
9、协议(Protocol)
长度为8位,标识上层所使用的协议。
10、首部校验和(Header Checksum)
占16位,首部检验和只对IP数据包首部进行校验,不包含数据部分。因为数据包每经过一个路由器都要重新计算首部校验和, (一些字段,如生存时间,标志,片偏移等都可能发生变化)对首都进行检验。
11、源IP地址(Source IP)
长度为32位,表示数据发送的主机IP。
12、目的IP地址(Destination IP)
长度为32位,表示数据要接收的主机IP。
13、选项字段(Options)
长度为0-40字节(Byte),主要有:安全和处理限制(Security)、记录路径(Record Route)、时间戳(Timestamps)、宽松源站选路(Loose Source Routing)、严格的源站选路(Strict Source Routing)等。

二、TCP报文

在这里插入图片描述
在这里插入图片描述
TCP报文由首部和数据两部分组成。首部一般由20-60字节(Byte)构成,长度可变。其中前20B格式固定,后40B为可选。
因为,TCP报文还得传给下层网络层,封装成IP包,而一个IP包最大长度为65535,同时IP包首部也包含最少20B,所以一个IP包或TCP包可以包含的数据部分最大长度为65535-20-20=65495B。

TCP报文中数据部分是可选的,即TCP报文可以不包含数据(同理IP包也可以不包含数据)。不含数据的TCP报文通常是一些确认和控制信息类的报文,如TCP建立连接时的三次握手和TCP终止时的四次挥手等。

1、源端口号(Source Port)
16位的源端口字段包含初始化通信的端口号。源端口和IP地址的作用是标识报文的返回地址。

2、目的端口号(Destination Port)
 16位的目的端口字段定义传输的目的。这个端口指明接收方计算机上的应用程序接口。

3、序列号(Sequence Number)
该字段用来标识TCP源端设备向目的端设备发送的字节流,它表示在这个报文段中的第几个数据字节。序列号是一个32位的数。

4、确认号(Acknowledge Number)
  TCP使用32位的确认号字段标识期望收到的下一个段的第一个字节,并声明此前的所有数据已经正确无误地收到,因此,确认号应该是上次已成功收到的数据字节序列号加1。收到确认号的源计算机会知道特定的段已经被收到。确认号的字段只在ACK标志被设置时才有效。
5、首部长度
长度为4位,用于表示TCP报文首部的长度。用4位(bit)表示,十进制值就是[0,15],一个TCP报文前20个字节是必有的,后40个字节根据情况可能有可能没有。如果TCP报文首部是20个字节,则该位应是20/4=5。
6、保留位(Reserved)
长度为6位,必须是0,它是为将来定义新用途保留的。
7、标志(Code Bits)
长度为6位,在TCP报文中不管是握手还是挥手还是传数据等,这6位标志都很重要。6位从左到右依次为:
1.
• URG:紧急标志位,说明紧急指针有效;
• ACK:确认标志位,多数情况下空,说明确认序号有效; 取1时表示应答字段有效,也即TCP应答号将包含在TCP段中,为0则反之。
• PSH:推标志位,置位时表示接收方应立即请求将报文交给应用层;
• RST:复位标志,用于重建一个已经混乱的连接,用来复位产生错误的连接,也会用来拒绝错误和非法的数据包。
• SYN:同步标志,该标志仅在三次握手建立TCP连接时有效
• FIN:结束标志,表示发送端已经发送到数据末尾,数据传送完成,发送FIN标志位的TCP段,连接将被断开。
8、窗口大小(Window Size)
长度为16位,TCP流量控制由连接的每一端通过声明的窗口大小来提供。
9、检验和(Checksum)
长度为16位,该字段覆盖整个TCP报文端,是个强制性的字段,是由发送端计算和存储,到接收端后,由接收端进行验证。
10、紧急指针(Urgent Pointer)
长度为16位,指向数据中优先部分的最后一个字节,通知接收方紧急数据的长度,该字段在URG标志置位时有效。
11、选项(Options)
长度为0-40B(字节),必须以4B为单位变化,必要时可以填充0。通常包含:最长报文大小(MaximumSegment Size,MSS)、窗口扩大选项、时间戳选项、选择性确认(Selective ACKnowlegement,SACK)等。
12、数据
可选报文段数据部分。

三、UDP报头

在这里插入图片描述

UDP数据报由首部和数据两部分组成,其中首部只有8B(字节)。
1、源端口号(Source Port)
长度为16位,指明发送数据的进程。
2、目的端口号(Destination Port)
长度为16位,指明目的主机接收数据的进程。
3、长度
长度为16位,该字段值为报头和数据两部分的总字节数。
4、检验和(Checksum)
长度为16位,UDP检验和作用于UDP报头和UDP数据的所有位。由发送端计算和存储,由接收端校验。
5、数据

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCP/IP 报文格式(IP数据包、TCP报头、UDP报头) 的相关文章

  • chatgpt赋能python:制作简单动画:Python带你飞

    制作简单动画 Python带你飞 Python不只是一门编程语言 它还能制作简单的动画 Python用于动画的库 有很多种 包括turtle graphics py和pygame等等 本文将以turtle为例 介绍如何使用Python制作简
  • 【计算机网络】I/O多路转接之poll

    不同与select使用三个位图来表示三个fdset的方式 poll使用一个 pollfd的指针实现 pollfd结构包含了要监视的event和发生的event 不再使用select 参数 值 传递的方式 同时 pollfd并没有最大数量限制
  • Svelte3聊天室

    Python微信订餐小程序课程视频 https edu csdn net course detail 36074 Python实战量化交易理财系统 https edu csdn net course detail 35475 基于svelt
  • chatgpt赋能python:Python长浮点型介绍

    Python长浮点型介绍 Python是一种强大的编程语言 通过其众多的数据类型 使开发人员可以快速开发复杂的应用程序 其中 Python长浮点型就是Python支持的一种数据类型 长浮点型是指Python可以处理的浮点数的精度可以高达25
  • 2022中山大学计算机技术专硕考研初试、复试经验帖

    2022年中山大学计算机技术专硕考研初试 复试经验帖 个人简介 推荐几个我自己感觉对考研非常有帮助的小助手吧 可以帮助节省时间 考研时间规划总览 初试篇 数学 英语 政治 408 复试篇 如果觉得有帮助的话可以点个收藏后续会修改和增加内容
  • 【计算机网络】数据通信的基础知识

    通信系统的一般模型 数据通信系统的组成部分 源点 信源 产生数据 如从键盘输入 产生数字比特流 发送器 对数字比特流进行编码 如调制器 信道 是信号传输的通道 可能是一条简易的传输线路 也可能是一个复杂的网络 接收器 设备的功能与发送设备相
  • 人工智能之深度学习-初始环境搭建(安装Anaconda3和TensorFlow2步骤详解)

    Python微信订餐小程序课程视频 https edu csdn net course detail 36074 Python实战量化交易理财系统 https edu csdn net course detail 35475 前言 本篇文章
  • 关于api-ms-win-crt-runtime

    关于api ms win crt runtime 1 1 0 dll缺失的解决方案 问题原因 有时 我们在打开文件程序的时候经常出现一些关于以下的错误 无法启动此程序因为计算机中丢失api ms win crt runtime 1 1 0
  • 计算机含金量最高的证书

    第一种证书 计算机技术与软件专业资格考试证书 计算机技术与软件专业资格考试证书 是由国家人力资源和社会保障部 工业和信息化部领导的国家级考试 该考试分为 5 个专业类别 并分设了高 中 初级专业资格考试 共 28 个资格的考核 也是用人单位
  • 2011年北京大学计算机研究生机试真题(题解)

    九度OJ题目传送门 2011年北京大学计算机研究生机试真题 鸡兔同笼 题目描述 一个笼子里面关了鸡和兔子 鸡有2只脚 兔子有4只脚 没有例外 已经知道了笼子里面脚的总数a 问笼子里面至少有多少只动物 至多有多少只动物 输入 第1行是测试数据
  • Vulhub靶场环境搭建

    在Ubantu系统上搭建靶场环境 一 ubantu系统准备 1 更新安装列表 sudo apt get update 2 安装docker io sudo apt install docker io 查看是否安装成功 docker v 3
  • chatgpt赋能Python-python2_7如何安装

    Python 2 7如何安装 Python 2 7是一个广泛使用的Python版本 其可以在Windows和Linux上安装 本文将介绍Python 2 7如何安装 并提供相关步骤和指南 下载Python 2 7 首先 您需要下载Pytho
  • 常用的相似度计算方法原理及实现

    在数据分析和数据挖掘以及搜索引擎中 我们经常需要知道个体间差异的大小 进而评价个体的相似性和类别 常见的比如数据分析中比如相关分析 数据挖掘中的分类聚类 K Means等 算法 搜索引擎进行物品推荐时 相似度就是比较两个事物的相似性 一般通
  • 在idea使用GitHub账号、Copilot异常

    登录GitHub显示这样的信息 Invalid authentication data Connection refused connect Failed to initiate the GitHub login process Pleas
  • xshell无法连接vmware虚拟机

    一 问题描述 本机使用Xshell无法连接VMware中的虚拟机 并且从本机也无法ping通虚拟机 虚拟机也无法ping通本机物理机 二 环境 场景 物理机 windows10系统 Xshell 6 VMware Workstation 1
  • chatgpt赋能python:Python除零错误:原因,解决办法和实践建议

    Python 除零错误 原因 解决办法和实践建议 介绍 Python 作为一门广泛使用的高级编程语言 它的强大之处就体现在它的简洁性 可读性和易用性上 但是在实践中 有时候我们会遇到一些让我们不得不头痛的问题 其中之一就是 Python 除
  • 2019年感:忆往昔考博岁月,看今朝花样年华

    人生的际遇谁又能说清楚 就像师范类毕业的女神梦想着当一名老师 结果却阴差阳错穿上了警服 而本应该奔波北上广深的程序员 却成为了一名大学老师 两条平行线的男女 却结为了连理 再如 一心准备中科院却因英语差一分惜败 几乎裸考的学校却可能结出果实
  • 远程桌面连接技术【包含出现问题的解决手段】

    远程桌面连接技术 文章目录 远程桌面连接技术 前言 定义 远程连接的方法 远程桌面协议 RDP 由于我没有两台电脑 这里用虚拟机演示 1 为两台计算机设置相同的网段的 IP 地址 2 远程计算机的设置 2 1 在电脑中找到 远程桌面连接 2
  • 反斜杠“\”与斜杠“/” 的区别

    与 的区别为 用途不同 系统不同 网址不同 一 用途不同 1 只能用来表示目录 2 技能作为除法符号或者间隔符号使用 也能用来表示目录 二 系统不同 1 用作目录时 适用于windows系统 2 用作目录时 适用于unix系统 也可用于wi
  • 网络安全竞赛:硬件防火墙与软件防火墙,谁胜谁负?

    文章目录 前言 1 性能 2 安全性 3 灵活性 4 成本 5 管理和维护 如何入门学习网络安全 黑客 帮助

随机推荐

  • Android 实现计时器功能

    最近有个项目要实现记录时间推进的功能 之前百度了下 发现了android自带控件 Chronometer 可以实现这个功能 详见之前写的博客 http blog csdn net qq 21793463 article details 49
  • Android 系统设置中显示设置之休眠和屏保设置篇

    1 休眠设置 首先我们来看一下休眠设置在界面中的定义 1
  • 32_杂项

    文章目录 TLS TLS 安全密码套件 证书 TLS通讯过程 open file cache TLS TLS 安全密码套件 密钥交换 ecdhe ECDH椭圆曲线交换 身份验证 RSA 对称加密 aes 128 gcm 摘要算法 sha25
  • SpringMVC-复杂参数处理

    1 实体类 package com hwy entity public class Role private Integer id private String name public Integer getId return id pub
  • 程序员必须知道的10个搜索技巧

    转载地址 http www cnblogs com shown p 6524342 html 1 准确搜索 在关键词上加上双引号 2 排除关键词 用减号 eg 在搜索 Joe Bloggs jeans 时 你所得到的结果反馈是不包含 jea
  • vue3项目装包报错 npm ERR! 404 Not Found - GET https://registry.npmjs.org/@vue%2fvue-loader-v15 - Not found

    npm ERR code E404 npm ERR 404 Not Found GET https registry npmjs org vue 2fvue loader v15 Not found npm ERR 404 npm ERR
  • VSCode+Idea 一个增删改查demo

    一个简单的增删改查demo 开发工具 Visual Studio Code Idea Navicat demo 前端 后台 开发工具 Visual Studio Code 一款前端开发工具 下载地址 https code visualstu
  • 微信小程序开发教程 #043 - 在小程序开发中使用 npm

    本文介绍了如何在微信小程序开发中使用 npm 中包的功能 大大提高微信小程序的开发效率 同时也是微信小程序系列教程的视频版更新 微信小程序在发布之初没有对 npm 的支持功能 这也是目前很多前端开发人员在熟悉了 npm 生态环境后 对微信小
  • 【腾讯云 Cloud Studio 实战训练营】丝滑体验:用 Cloud Studio 实现一个精确计时的时钟

    当今的云计算技术已经越来越成熟 基于云计算技术进行云端开发已经成为最新趋势 而 Cloud Studio 是一个基于云计算的 Web 端开发微服务平台 提供了代码编辑器 调试器 代码库 以及自动构建和部署工具等各种功能 帮助开发者在云端开发
  • druid 配置

    spring datasource druid连接池 type com alibaba druid pool DruidDataSource 数据库驱动 driver com mysql jdbc Driver 最大连接池数量 max ac
  • 开源协议详解

    开源在今天的软件业已经很普遍 但开源是否意味着使用者可以对开源后的代码为所欲为呢 答案是否定的 开源运动同样有自己的游戏规则和道德准则 不遵行这些规则不但损害开源运动的健康发展 也会对违规者造成名誉和市场上的损失 更可能陷入法律纠纷和赔偿
  • gitlab Undefined method `provider' for nil:nilclass 登陆提示处理

    使用管理员用户 在管理区域 用户管理里面 搜索对应用户 修改用户身份里面的LDAP身份为正确信息
  • 【基础】Unity:Application的常用方法

    Application的常用方法 static void LoadLevel int index static void LoadLevel string name static void CaptureScreenShot string
  • php使用区块链_PHP实现区块链

    作者 列旭松 来源 高可用架构 原文链接 http t cn RgjsJ1i 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 来自 Linux内核那些事 微信号 like linux 作者 列旭松 唯品会资深工程师 曾任
  • C++标准演绎(未完)

    作者 略游 q群 512 001 256 一 词汇定义 标准 standard C 语言标准 在代码世界里 我们假设与公理等价 结论 由标准推导出的事实 规定 便于讨论 我们设定的一些规则 类型 type 同一类型 它们在C 内存布局一致
  • 简谈拉电阻

    简谈拉电阻 前言 拉电阻 弱拉和强拉 上拉和下拉 前言 电路设计中经常设计到拉电阻的概念 与常用的GPIO口的配置也息息相关 网上也有很多的总结 不多累述 简单的总结拉电阻相关的一些概念 拉电阻 拉电阻分为上拉电阻 pull up 和下拉电
  • powerdesigner常用配置-修改外键设置

    文章目录 取消自动生成外键列 PowerDesigner给两个表添加reference 中间显示外键信息步骤 取消自动生成外键列 PowerDesigner给两个表添加reference 中间显示外键信息步骤
  • Floyd算法(三)之 Java详解

    前面分别通过C和C 实现了弗洛伊德算法 本文介绍弗洛伊德算法的Java实现 目录 1 弗洛伊德算法介绍 2 弗洛伊德算法图解 3 弗洛伊德算法的代码说明 4 弗洛伊德算法的源码 转载请注明出处 http www cnblogs com sk
  • 记一次XFS文件系统崩溃的处理

    1 问题出现 当使用rpm安装服务时 出现如下问题 当使用yum时也是一样 查了 var log messages发现以下错误 看起来是XFS的问题 可以发现dm 0实际是bel root的问题 查了网上很多解决方法都是说要使用xfs re
  • TCP/IP 报文格式(IP数据包、TCP报头、UDP报头)

    TCP IP 报文格式 IP数据包 TCP报头 UDP报头 一 IP包格式 IP数据包 是一种可以变长的分组 由首部与数据负载组成 首部长度为20 60字节 Byte 后40字节是可选的 但长度不固定 前20字节格式为固定 数据负载部分的长