1 以太网帧分为EthernetII帧格式和802.3帧格式
1.1 EthernetII帧格式
6byte(目的MAC地址)+6byte(源MAC地址)+2byte(类型字段)+数据字段+4byte(FCS校验字段)
目的MAC地址 | 源MAC地址 | 类型 | 数据 | FCS |
Sou-MAC | Des-MAC | Type | DaTa | FCS |
类型0x0800 | IP数据报 |
类型0x86dd | IPv6数据报 |
以太网II帧中的各个字段:
Des-MAC: 指明帧的接收者, 6byte
Sou-MAC: 源地址是发送方的48比特的MAC地址, 6byte
Type: 此字段用于识别上层协议, 2byte。
数据: 以太网II 的数据有效长度范围是46~1500字节。
FCS: 用来校验损坏的帧, 4byte。
1.2.1 EthernetII的包结构如下图
(图中Type:为0x0800,代表上层为IP)
1.2 802.3帧格式
6byte(目的MAC地址)+6byte(源MAC地址)+2byte(长度字段)+数据字段+4byte(FCS校验字段)
目的MAC地址 | 源MAC地址 | 长度 | DSAP | SSAP | CTRL | ORG CODE | PID | 数据 | FCS | |||
Sou-MAC | Des-MAC | length | DSAP | SSAP | CTRL | ORG CODE | 类型 | DaTa | FCS | |||
| 6byte | 2byte |
| 1byte |
| 3byte | 2byte | 38-1492byte | 4byte |
类型0x0800 | IP数据报 |
类型0x86dd | IPv6数据报 |
下面解释IEEE 802.3 LLC帧中的各个字段:
Des-MAC: 指明帧的接收者, 6byte
Sou-MAC: 源地址是发送方的48比特的MAC地址, 6byte
Length: 表示后续数据字节长度,但不包含FCS检验码, 2byte。
DSAP: (Destination Service Access Point,目标服务接入点)1字节,8 位比特。值为0Xaa.
SSAP: (Source Service Access Point,来源服务接入点)1字节,8位比 特。值为0Xaa
CTRL: “控制”字段,指定LLC帧的类型,值为3,占1个字节
ORG CODE: 代表机构代码 值为0,占3个字节
PID: 和EthernetII的类型字段一样也是类型字段,用于识别上层协议, 2byte
数据: 802.3帧格式的数据有效长度范围是38-1492字节。
FCS: 用来校验损坏的帧, 4byte。
1.2.1 802.3包结构如下图
2 ICMP报文的格式
类型 1byte | 代码 1byte | 检验和 2byte |
标识符 | 序号 | |
数据 |
解释: ICMP报文包含两个包为:request(请求)包和reply(响应)包,它们总是成对出现。
类型8,代码0:表示回显请求(ping请求)。
类型0,代码0:表示回显应答(ping应答)
检验和字段:包括数据在内的整个ICMP数据包的检验和
标识符(Identifier):区分不同的ICMP会话。
序号(Sequence):保证ICMP报文的成对出现。
2.1 ICMP包结构如下图
Identifier区分不同的ICMP会话,Identifier的号不一样。
Sequence保证ICMP报文的成对出现它们序号都是一样的。
3 TCP报文的格式
Destination port | Source port | |||||||||
sequence number | ||||||||||
Acknowledgment Number | ||||||||||
Header length | reserve | Code bit(flags) | Wimdows | |||||||
URG | ACK | PSH | RET | SYN | FIN | |||||
Checksum | Urgent | |||||||||
Option | ||||||||||
Data | ||||||||||
Destination port:源端口为分配的随机数,16位
Source port:目的端口为协议指定的端口,指定上层协议。16位
sequence number:建立连接的序号 32位
Acknowledgment Number:表示用来确认连接序号的序号。32位
Header length:首部长度指示何处是数据开始,4位
reserve:保留字段,6位
Code bit(flags):标志,6位
URG: 紧急指针位,当这位置1时,代表数据是紧急的,需加速处理,此时Urgent字段 才有效,才会指向数据。
ACK 确认位,当这位置1时,用来确认SYN。
PSH 不会把数据放入TCP缓存,直接交给应用程序处理。
RET 重置TCP连接。
SYN 置1时,表示请求建立连接
FIN 请求释放连接
Wimdows:窗口大小,16位,用于向对方通告当前本机的接受缓冲区的大小。
Checksum: 校验和字段长度,16bit,校验范围包括段首部、数据以及伪首部
Urgent:紧急指针字段,当Flags字段中的URG位置1时这个字段才有效。
3.1 TCP的数据包结构:
3.2 TCP的三次握手
下面数据包是TCP三次握手过程:
(1)请求建立连接:12.1.1.2请求和12.1.1.1建立连接,发送sequence number:0,绝对值为:fb 81 02 65,Syn被设置为1.下图:
(2)确认请求:12.1.1.1给12.1.1.2确认,发送sequence number:0,绝对值为:6b 33 90 a9,Acknowledgment number:1,绝对值为:fb 81 02 66(这个值是前面一步的sequence number:绝对值加1),Syn被设置为1,Acknowledgment被设置为1.如图:
(3)完成请求:12.1.1.2给12.1.1.1确认,发送sequence number:1,绝对值为:fb 81 02 66,Acknowledgment number:1,绝对值为:6b 33 90 aa (这个值是前面一步的sequence number:绝对值加1), Acknowledgment被设置为1.这样就完成了三次握手。如图:
4 UDP报文的格式
Source port | Destination port |
length | Checksum |
Data |
Destination port: 目的端口,目的主机上请求应用程序的端口
Source port:源端口,发送数据主机上应用程序的端口
length:长度是指包括报头和数据部分在内的总字节数。
Checksum:校验和,UDP报头和UDP数据字段两者的校验和
4.1 UDP的数据包结构:
5 IP报文的格式
Version | Header Length | Priority&Type of service | Total Length | ||
Identification | Flags | Flagment Offset | |||
Time To Live | Protocol | Head Checksum | |||
Source Address | |||||
Destination Address | |||||
Option | |||||
Data | |||||
5.2 IP报文说明
IP报头前5块为必选,因此,IP包最少20字节。
Version(版本):字段标明了IP 协议的版本号,目前的协议版本号为4。下一代IP 协议的版本号为6,长度为4位。
Header Length(报头长度):表示32位字长的报头长度,长度为4位。
Priority&Type of service(优先级和服务类型):用来指定特殊的数据包处理方式。长度为8位,字段前3 位为优先级字段,后5位为DSCP(包含4 位TOS 字段和1 位未用位。4 位TOS 分别代表最小时延、最大吞吐量、最高可靠性和最小费用)。
Total Length(总长度):是整个IP 数据报长度,包括数据部分,长度为16位。
Identification(标识符):通常与标记字段和分片字段一起用于数据包的分段,这个字段标记分片属于那个数据包,长度为16位;
Flags(标志字段):用于标志一份数据报是否要求分段;长度为3位,第1位保留位,不使用,第2位是DF位,当DF为1时,表示路由器不允许分段处理,为0时,表示允许分段。第3位是MF位,当MF为1时,表示数据将分段,且每个小段这一位都置为1,最后一个除外。
Fragment Offset(分段偏移):用于指明分段起始点相对于报头起始点的偏移量,确保接收者按照正确的顺序重组数据包,长度为13位。
Time To Live(存活期):用于防止产生路由环路,防止数据包在网络上无休止地被传输;长度为8位,思科路由器位值128,Windows值255,每经过一台路由器,TTL被减1,当该值减到0时,将丢弃该数据包。
Protocol(协议):定义上层协议的类型。长度为8位。
Header Checksum(报头校验和):针对IP报头的纠错字段。
Source Address(源地址):表示发送者数据包源点的IP地址,长度为32位;
Destination Address(目标地址):表示发送者目标的IP地址,长度为32位;
Options(可选项):主要用于测试,长度为0或32位。
5.3 IP数据包如下图