计算机网络—IP头部结构,TCP头部结构,UDP头部结构
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。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
P | P | P | D | T | C | R | 0 |
PPP:定义包的优先级,取值越大数据越重要
000 | Routine(普通) |
---|---|
001 | Priority(优先) |
010 | Immediate(快速) |
011 | Flash(闪速) |
100 | Flash Override(疾速) |
101 | Internetwork Control(网间控制) |
110 | Network Control(网络控制) |
111 | Critic(关键) |
- 优先级0为默认标记值。
- 优先级1和2给数据业务使用。
- 优先级3给语音控制数据使用。
- 优先级4由视频会议和视频流使用。
- 优先级5推荐给语音数据使用。
- 优先级6和7一般保留给网络控制数据使用,如路由。
注意:在标记数据时,既可以使用数值,也可以使用名称(英文名称)。
TOS字段 | 0 | 1 |
---|---|---|
D 时延 | 普通 | 延迟尽量小 |
T 吞吐量 | 普通 | 流量尽量大 |
R 可靠性 | 普通 | 可靠性尽量大 |
M 传输成本 | 普通 | 成本尽量小 |
- TOS字段的4 bit中只能置其中1 bit,可以都为0,如果所有4 bit均为0,那么就意味着是一般服务。
- 举例:
- 网络视屏要求最小的传输时延。
- 文件传输要求最大吞吐量
- 网络管理和路由要求高可靠性。
- 用户网络新闻要求最小费用。
IP包总长(Total Length):长度16bit,以字节为单位。
IP包=IP头部+数据
IP包最大长度65535字节
标志(Flags):长度3bit,是一个3位的控制字段
0 | 1 | 2 |
---|---|---|
不使用 | 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,标识了上层所使用的协议,以下是比较常用的协议号:
1 | ICMP |
---|---|
2 | IGMP |
6 | TCP |
17 | UDP |
88 | IGRP |
89 | OSPF |
头部校验(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可以使用同一个端口号
数据传输过程图解
更多推荐
所有评论(0)