计算机网络—IP头部结构,TCP头部结构,UDP头部结构

article/2025/5/16 5:52:06

文章目录

    • IP头部结构
    • TCP头部结构
    • UDP头部结构
    • TCP和UDP的区别
    • MAC地址、IP地址、端口号
    • 数据传输过程图解

IP头部结构

IP头部结构图如下
在这里插入图片描述

注意:一行32bit为4字节,扩展的时候总是一行一行的拓展,也就是4个字节4个字节的扩展

版本号(Version):长度4bit,标识目前采用的IP协议的版本号,一般的值0100(IPv4),0110(IPv6)

首部长度(Header Length):长度4bit,这个字段的作用是为了描述IP头部的长度,IP头部长度是可变的(最常用的是红框中的部分,一共占20字节)。

- 首部长度部分占4个bit位,取值范围是0-15,单位为32bit(4个字节)
- 整个IP头部占空间大小=首部长度值*4(单位/字节)- 所以可变的IP头部的大小最大为60字节:15*4=60- 一般使用的是5行,每行4字节,5*4=20字节

服务类型(Type of Service):长度8bit, 按位被如下定义,包括3bit的优先权字段(000-111),4 bit的TOS字段,1 bit未用位但必须置0。

01234567
PPPDTCR0

PPP:定义包的优先级,取值越大数据越重要

000Routine(普通)
001Priority(优先)
010Immediate(快速)
011Flash(闪速)
100Flash Override(疾速)
101Internetwork Control(网间控制)
110Network Control(网络控制)
111Critic(关键)
- 优先级0为默认标记值。
- 优先级12给数据业务使用。
- 优先级3给语音控制数据使用。
- 优先级4由视频会议和视频流使用。
- 优先级5推荐给语音数据使用。
- 优先级67一般保留给网络控制数据使用,如路由。注意:在标记数据时,既可以使用数值,也可以使用名称(英文名称)。
TOS字段01
D 时延普通延迟尽量小
T 吞吐量普通流量尽量大
R 可靠性普通可靠性尽量大
M 传输成本普通成本尽量小
- TOS字段的4 bit中只能置其中1 bit,可以都为0,如果所有4 bit均为0,那么就意味着是一般服务。
- 举例:- 网络视屏要求最小的传输时延。- 文件传输要求最大吞吐量- 网络管理和路由要求高可靠性。- 用户网络新闻要求最小费用。

IP包总长(Total Length):长度16bit,以字节为单位。

IP包=IP头部+数据
IP包最大长度65535字节

标志(Flags):长度3bit,是一个3位的控制字段

012
不使用DF(Don’t Fragment)位,DF位设为1时表明路由器不能对该上层数据包分段MF(More Fragments)位,当路由器对一个上层数据包分段,则路由器会在除了最后一个分段的IP包的包头中将MF位设为1
- 保留位:1- 不分段位:1位,取值:0(允许数据报分段)、1(数据报不能分段)
- 更多段位:1位,取值:0(数据包后面没有包,该包为最后的包)、1(数据包后面有更多的包)- 举例:- 如果分数据包分两段:- 第一个的Flags为:101- 第二个Flags就为:100

段偏移量(Fragment Offset):长度13bit,表示该IP包在该组分片包中位置,接收端靠此来组装还原IP包。

生存时间(TTL):长度8bit,当IP包进行传送时,先会对该字段赋予某个特定的值,当IP包经过每一个沿途的路由器的时候,每个沿途的路由器会将IP包的TTL值减少1,如果TTL减少为0,则该IP包会被丢弃,这个字段可以防止由于路由环路而导致IP包在网络中不停被转发

协议(Protocol):长度8bit,标识了上层所使用的协议,以下是比较常用的协议号:

1ICMP
2IGMP
6TCP
17UDP
88IGRP
89OSPF

头部校验(Header Checksum):长度16bit,用来做IP头部的正确性检测,不包含数据部分。 因为每个路由器要改变TTL的值,所以路由器会为每个通过的数据包重新计算这个值。

源和目标地址(Source and Destination Addresses):这两个地段都是32bit,标识了这个IP包的起源和目的地址(源IP地址指的就是发送数据包的那个电脑的IP地址,目的IP地址就是想要发送到的那个电脑的IP地址),要注意除非使用NAT,否则整个传输的过程中,这两个地址不会改变。

至此,IP包头基本的20字节已介绍完毕,此后部分属于可选项,不是必须的部分。

可选项(Options):这是一个可变长的字段,该字段属于可选项,主要用于测试,由起源设备根据需要改写,可选项目包含以下内容:

  • 松散源路由(Loose source routing):给出一连串路由器接口的IP地址。IP包必须沿着这些IP地址传送,但是允许在相继的两个IP地址之间跳过多个路由器。

  • 严格源路由(Strict source routing):给出一连串路由器接口的IP地址。IP包必须沿着这些IP地址传送,如果下一跳不在IP地址表中则表示发生错误。

  • 路由记录(Record route):当IP包离开每个路由器的时候记录路由器的出站接口的IP地址。

  • 时间戳(Timestamps):当IP包离开每个路由器的时候记录时间。

  • 填充(Padding):因为IP包头长度(Header Length)部分的单位为32bit,所以IP包头的长度必须为32bit的整数倍。因此,在可选项后面,IP协议会填充若干个0,以达到32bit的整数倍。

TCP头部结构

在这里插入图片描述
源端口号:16bit,发送方的端口号。

目标端口号:16bit,接收方的端口号。

32为序列号(sequence number):保证网络传输数据的顺序性。

32位确认号(acknowledgment number):用来确认确实有收到相关数据包,内容表示期望收到下一个报文的序列号,用来解决丢包的问题。

头部大小:4bit,标识该tcp头部有多少个32bit字(4字节)因为4位最大能表示15,所以tcp头部最长是60字节

保留位 :6位 ,预留字段,都为0。

6位标志位:标志位有如下几项

URG表示紧急指针是否有效
ACK标志表示确认号是否有效
PSH标志提示接收端应用程序应该立即从tcp接受缓冲区中读走数据,为接受后续数据腾出空间(如果应用程序不将接收的数据读走,它们就会一直停留在tcp缓冲区中)
RST标志表示要求对方重新建立连接。携带RST标志的tcp报文段为复位报文段
SYN标志表示请求建立一个连接。携带SYN标志的tcp报文段为同步报文段
FIN标志表示通知对方本端要关闭连接了。携带FIN标志的tcp报文段为结束报文段

16位窗口大小:占16bit,此字段用来进行流量控制,主要用于解决流控拥塞的问题。单位为字节数,这个值是本机期望一次接收的字节数。

16位校验值: 占16bit。对整个TCP报文段,即TCP头部和TCP数据进行校验和计算,并由目标端进行验证。

16位紧急指针:占16bit,它是一个偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。

32位Tcp选项:一般包含在三次握手中。

UDP头部结构

在这里插入图片描述
UDP的头部相当于TCP的头部来说比较简单,有8个字节(每个字节8bit)构成,8个字节包含4个字段,其中每个字段都是两个字节

源端口号:16bit,发送方的端口号(主机的应用程序使用的端口号)。

目标端口号:16bit,接收方的端口号(目的主机的应用程序使用的端口号)。

16位总长度:是指UDP头部UDP数据加在一起的字节长度,因为UDP头 部长度为8字节,所以该字段的最小值为8。

16位校验和:检测UDP数据报在传输中是否有错,有错则丢弃。

TCP和UDP的区别

通过分析前面的TCP头部和UDP头部,就可以知道:

用户数据报协议 UDP(User Datagram Protocol)

  • 是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信。

传输控制协议 TCP(Transmission Control Protocol)

  • 是面向连接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),每一条 TCP 连接只能是点对点的(一对一)。

MAC地址、IP地址、端口号

在利用TCP/IP协议族进行通信的时候,有三个比较关键的确认身份的信息:MAC地址、IP地址和端口号。

在OSI 模型中,第三层网络层负责 IP 地址,第二层数据链路层则负责 MAC 地址,因此一个主机会有一个 MAC 地址,而每个网络会有一个专属于它的 IP 地址。

MAC地址

  • 数据链路层包裹在以太网头部中的,它主要用来识别同一个链路中的不同计算机。
  • MAC地址即网卡号,每块网卡出厂的时候,都有一个全世界独一无二的 MAC 地址,长度是 48 个二进制位,通常用 12 个十六进制数表示。

IP地址

  • IP地址是由网络地址主机地址组成
  • 网络层的IP头部里,用于识别网络中互联的主机和子网(例如:路由器连接外网,同一个路由器下的所有设备组成子网),通过网络地址确认所在的子网,在子网内部通过MAC地址确认主机地址。

端口号

  • 传输层包含在TCP/UDP头部中的,用于识别应用程序。

  • 一台主机上能运行多个程序,那么接收到的消息到底是哪个程序的呢?就需要端口号来确认。

  • 端口号有两种:

    • 固定的端口号:是形如http,telnet,ftp等广为使用的应用协议所使用的端口号是固定的
    • 动态分配的端口号:这个时候服务端要确定监听端口号,接受服务的客户端没必要确定端口号
    • 端口号由传输层协议决定,因此不同传输协议可以使用相同的端口号,所以TCP和UDP可以使用同一个端口号

数据传输过程图解

在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/71tRcZfm.shtml

相关文章

TCP的头部格式,详细信息都在这

重要的TCP头部格式来啦: 序列号:在建立连接时,由计算机生成的随机数作为初始值,通过SYN包传给接收方主机,每发送一次数据,就会累加一次这个数据字节数的大小,用来解决网络包乱序问题。确认应答号…

tcp 头部格式是怎样的?都有哪些字段?TCP 与 UDP 的区别

传输控制协议(Transmission Control Protocol,TCP)是一种传输层协议。TCP使数据包从源到目的地的传输更加顺畅。它是一种面向连接的端到端协议。每个数据包由TCP包裹在一个报头中,该报头由10个强制字段共20个字节和一个0到40 字节的可选数据字段组成 1…

【网络】TCP报文头部

目录 源端口、目的端口 序号()Seq 确认号 数据偏移(头部长度) URG ACK PSH RST SYN FIN 窗口大小 校验和 紧急指针 选项部分 最大报文段长度 MSS 窗口扩大 时间戳 最大报文段长度(MSS) 窗口…

TCP头部结构详解

tcp头部信息出现在每个tcp报文段中,用于指定通信的源端端口,目的端口,管理tcp连接等。tcp头部结构如下图所示: tcp头部结构 1、16位端口号:告知主机该报文段来自哪里(源端口)以及传给哪个上层协议或应用程…

TCP头部详解

1. TCP的定义 TCP提供一种面向连接的、可靠的字节流服务。 面向连接: 两个使用TCP的应用(通常是一个客户和一个服务)在彼此交换数据之前必须建立一个TCP连接。 TCP提供可靠性的方式: 1)应用数据被分割成TCP认为最适合发送的数据块; 2)当…

TCP协议详解(一):TCP头部结构

TCP字节流服务 网络传输层中,TCP是面向连接、可靠的、字节流传输。 TCP协议通信双方必须先建立连接,通信双方必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP是全双工的,即双方的数据读写可通过一个连接…

Python 变量的命名规范

引言 混乱或错误的命名不仅让我们对代码难以理解,更糟糕的是,会误导我们的思维,导致对代码的理解完全错误。相反,良好的命名,则可以让我们的代码非常容易读懂,也能向读者正确表达事物以及逻辑的本质&#x…

matlab中变量命名规则,Matlab变量及命名规则

Matlab变量及命名规则 Matlab变量及命名规则 Matlab中所有的变量都是用矩阵形式来表示的,即所有的变量都表示一个矩阵或者一个向量。其命名规则如下: (1)变量名对大小写敏感; (2)变量名的第一个字符必须为英文字母,其长度不能超过…

matlab变量名的命名规则

简述Java中变量的命名的规则? 首字母只能是字母下划线‘_’‘$’符号(变量名首字母不能是数字!!!) 其余部分任意多的:数字字母下划线‘_’‘$’符号 Java命名规则 局部变量和成员变量 我说我知道的约定俗成&#xff1a…

vb变量名的命名规则

求十分详细的的java变量命名规范 您好,提问者: 在java编程中命名规范是统一的,而且老外发明的东西是没有中文的,严格区分大小写。 规范:以字母、下划线、$符号组成,不能以数字开头,声明类跟变量…

python变量名有哪些_python变量名命名规则

原博文 2020-03-21 11:07 − 一.python变量名命名规则: 1.变量名通常由字母,数字,下划线组成; 2.数字不能作为变量名开头; 3.不能以python中的关键字命名; 4.变量名要有意义; 5.不要用汉字和拼音去命名; 6.变量名要区分大小写; 7.推荐使用驼峰型(GuessAge或guessAge)和…

Tips:一个字符占几个字节?

《JAVA啃骨头》之 Javascript 章节 Tips:一个字符占几个字节? ASCII码:   一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,…

字节与字符的区别 一个字母占一个字节(学习记录)

字节(Byte):字节是计量单位,表示数据量多少,是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于八位。 字符(Character):计算机中使用的字母、数字、字和符号,比如’A’、‘B’、‘$’、…

一个指针占几个字节?原理是什么呢?

一个指针占几个字节的问题,感觉会C语言的同学都知道。但是在面试过程中,面了几个同学,不是答忘记了,就是两个、四个的瞎蒙。。。 那么,一个指针到底占几个字节呢? 其实,这个问题很简单&#x…

一个汉字几个字符?几个字节?字符与字节关系傻傻分不清

一个汉字一个字符!不信你去java输入char ch 汉’看看报不报错 学习java也有段时间了,一直都是毛里毛糙的学习,但都是停留在略懂阶段,似乎会,实际上差得远了,,还是要沉下来心一点一点学呀&…

Office 2016更新后 Word 2016、Excel 2016、Power 2016、Visio 2016、OneNote 2016图标全部消失问题解决

【问题描述】 打开办公软件后显示Office在更新,更新完成后开始屏幕固定的 Word 2016、Excel 2016、Power 2016、Visio 2016、OneNote 2016图标全部消失了。 全局搜索只能搜索到Word、Excel、Power、Visio、OneNote,但已经不是2016版的了,而是…

关于修复Office图标白色的问题

问题: Offcie的Word和Excel的文件的部分后缀文件(.doc .docx .xls .xlsx)变成白色,且无法通过默认打开方式修改图标 可能原因: 以前使用过WPS,卸载后,在注册表没有删除干净 这个E:\Software\WPS Office\....目录和指…

卸载wps后桌面上的office文件图标变成了白色

文章目录 卸载wps后桌面上的office文件图标变成了白色第一步:第二步 卸载wps后桌面上的office文件图标变成了白色 作者:wyf 第一步: **win(图标)R,输入regedit,点击确定**第二步 2、找到HKEY_CLASSES_RO…

提取 Office 2016 工具栏图标

Office 图标精美漂亮,作为微软的官方图标,与 Windows 具有一致的风格,但我们若想把这些图标用在自己的程序中,却并不容易,使用常规的提取程序资源的方法,根本得不到这些图标。 微软虽然没有把这些图标开放给…

office图标异常解决办法

问题描述: 前不久才重装过系统,可是没多久就出现了一个很恶心的问题:word文档、excel文档图标异常,显示的是下面这样: (造成这样的原因一般是装了 wps,卸载后又装了office) 打开…