计算机网络协议报文
数据链路层协议报文
1. 以太网帧 --- IEEE802.3 和 Ethernet Ⅱ
IEEE802.3
[图片上传失败...(image-205cf8-1607908402059)]EthernetⅡ
[图片上传失败...(image-46b2b8-1607908402060)]
字段说明
| 字段 | 字节数 | 描述 |
|---|---|---|
| DMAC | 6 字节 | 目的 MAC 地址,接收者 |
| SMAC | 6 字节 | 源 MAC 地址,标识发送帧的工作站 |
| Type | 2 字节 | 荷载数据的类型,表示上层 IP 层协议类型 |
| Data | 变长 | 最少 46 字节,最大 1500 字节 |
| CRC | 4 字节 | 用于冗余检验 |
根据目的 MAC 的种类,可以将以太网分成三种类型
- 单播以太网:单播 MAC 地址
- 组播以太网:组播 MAC 地址
- 广播以太网:广播 MAC 地址
检验和被网卡查看帧检验无误后在交给驱动程序之前删去了
VLAN 虚拟局域网
[图片上传失败...(image-d55825-1607908402060)]
IEEE802.1Q 对 Ethernet 帧修改而成,加入了 4 字节的 tag
字段说明
| 字段 | 字节数 | 描述 |
|---|---|---|
| 新增 Type | 2 字节 | 表示帧类型,新增 0x8100 表示 tag |
| 新增 PRI | 3 比特 | 帧优先级 |
| 新增 CFI | 1 比特 | 表示是否为经典格式,以太网帧中 CFI 为 0 |
| 新增 VID | 12 比特 | 表示该帧所属的 VLAN |
| Length/Type | 2 字节 | 指定后序字节长度 |
PPP
局域网中一般以以太网口进行互联,广域网中经常会使用串行链路来提供远距离的数据传输,PPP 是串口封装协议,主要用于全双工的同异步链路上进行的点到点数据传
串口和以太网口
- 串口(serial):常用于远距离数据传输
- 以太网口(Ethernet):一般用于局域网,用于短距离传输
串行链路中定义的两种数据传输方式
- 异步传输:以字节为单位传输数据,两边添加起始位和停止位,开始位和停止位所占数据相当大比例
- 同步传输:以帧为单位,需要额外使用一个 DCE 数据通信设备来维护时钟同步

字段说明
| 字段 | 字节数 | 描述 |
|---|---|---|
| Flag | 1 字节 | 标识起始和结束 |
| Address | 1 字节 | 固定 0XFF,广播地址 |
| Control | 1 字节 | 表示无序号帧 |
| Protocol | 2 字节 | 说明 PPP 封装的协议报文类型 |
| information | 变长 | 数据包 |
| FCS | 2 字节 | 校验和 |
PPP 协议的包捉不到,直接贴别人的了
[图片上传失败...(image-306052-1607908402060)]
IP 层协议报文
IP 协议

字段说明
| 字段 | 字节数 | 描述 |
|---|---|---|
| 版本 | 4 比特 | 协议版本,通信双方协议版本必须一样 |
| 首部长度 | 4 比特 | 结果*4 个节字为首部长度 |
| 区分服务 | 1 字节 | 只有在使用区分服务是才会用到 |
| 总长度 | 2 字节 | 首部和数据之和,最大为 2 的 16 次方 65535 字节 |
| 标识 | 2 字节 | 标识数据报,用于分片重组 |
| 标志 | 3 比特 | 表示是否允许分片 |
| 片偏移 | 13 比特 | 用于片的合成 |
| 生存时间 | 1 字节 | 表示最大经过路由器数量 |
| 协议 | 1 字节 | 表示上层协议类型 |
| 首部校验和 | 2 字节 | 用于校验数据首部 |
| 源地址 | 4 字节 | 源 IP |
| 目的地址 | 4 字节 | 目的 IP |
| 可选字段 | 不定 | 可选包头的设置 |
| 填充 | 不定 | 使用若干个 0 填充,保证整个报头长度为 32 位整数倍 |
| 数据部分 | 变长 | 表示传输层数据 |
ARP/RARP 协议(包含请求响应)

ARP 报文总长 28 字节
字段说明
| 字段 | 字节数 | 描述 |
|---|---|---|
| 硬件类型 | 2 字节 | 指明发送方想知道的硬件接口类型,以太网为 1 |
| 协议类型 | 2 字节 | 表示要映射的协议地址类型,值为 0x0800 表示 IP 地址 |
| 硬件长度 | 1 字节 | 结果*字节表示硬件地址长度 |
| 协议长度 | 1 字节 | 结果*字节表示协议长度 |
| 操作类型 | 2 字节 | 表示报文类型,ARP1,ARP 响应 2,RARP 请求 3,RARP 响应 4 |
| 发送方 MAC 地址 | 6 字节 | 发送方物理地址 |
| 发送方 IP 地址 | 2 字节 | 发送方设备 IP 地址 |
| 接收方 MAC 地址 | 6 字节 | 接收方物理地址 |
| 接收方 IP 地址 | 2 字节 | 接收方设备 IP 地址 |
ICMP(INTERNET CONTROL MESSAGE PROTOCOL)网络控制消息协议
故名思义,ICMP数据报的作用就是传递控制信息,比如说超时,源抑制,重定向等控制信息,主要在路由器与主机之间进行传输,报告真正数据报的状态及传输情况,分为查询报文和差错报文,不同的数据包格式大致相同,内容不同

请求回显/回显应答(ping)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identifier | Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data ...
+-+-+-+-+-
Type(8)是请求回显报文(Echo);Type(0)是回显应答报文(Echo Reply)
传输层协议
TCP协议
[图片上传失败...(image-de3a62-1607908402060)]
字段说明
| 字段 | 字节数 | 描述 |
|---|---|---|
| 源端口 | 2字节 | 发送方端口号,最大值65535 |
| 目的端口 | 2字节 | 接收端口号,最大值65535 |
| 序号SN | 4字节 | 标识了该TCP报文中第一个byte在对应方向传输中对应的字节序号,当SYN出现时,该序号表示初始序号 |
| 确认号ACK | 4字节 | 表示接受方期望下次接收数据的序列号 |
| 数据偏移 | 4比特 | 指示数据段从哪个字节开始,单位为4字节 |
| 保留 | 4比特 | 默认为0 |
| 标志 | 1字节 | URG:拥塞控制;ACK:是否为确认报文;PSH:表示发送方数据发送完成;RST:复位TCP连接;SYN:同步序列编号;FIN:结束会话 |
| 窗口 | 2字节 | 用于流量控制 |
| 校验和 | 2字节 | 校验数据有没有被修改 |
| 紧急指针 | 2字节 | 指示紧急数据的偏移 |
UDP协议--IP傀儡
字段说明
| 字段 | 字节数 | 描述 |
|---|---|---|
| 源端口 | 2字节 | 发送方端口号,最大值65535 |
| 目的端口 | 2字节 | 接收端口号,最大值65535 |
| 头部长度 | 2字节 | 数据报头+数据,单位字节 |
| 校验值 | 2字节 | 校验数据是否被修改 |
啥也没有,交到端口就完事了
应用层协议
http协议
好家伙终于来到应用层了,这个就是之前各层报文中所谓的data数据,不过在http1.*中报文不再是之前各层的二进制数据了,而是使用ASCII编码,每个字段长度都不能确定,而且因为长度不确定就要用指定的分隔符分隔字段
请求/响应报文
幂等性:表示操作至多会被处理一次
字段说明
请求行+请求头+空行+请求体(post才有请求体)
| 字段 | 说明 |
|---|---|
| 请求方法 | GET,POST,PUT,OPTIONS... |
| URI | 统一资源标识符 |
响应报文只是在原请求行上把URI换成了状态码
DNS协议
[图片上传失败...(image-d86ef6-1607908402060)]
字段说明
| 字段 | 字节数 | 说明 |
|---|---|---|
| 会话标识 | 2字节 | 因为请求报文和响应是相同的,要依靠这个字段表明是哪种报文 |
| 标志 | 2字节 | 每一位具有不同意义 |
| 问题数 | 2字节 | 表示查询问题区域字节的数目 |
| 回答数 | 2字节 | 表示回答区域字节数目 |
| 授权资源记录数 | 2字节 | 表示授权区域字节数目 |
| 附加资源记录数 | 2字节 | 表示附加区域数量 |
- 查询问题(查询名+查询类型+查询类):显示DNS询问的问题
- 资源记录部分格式统一如下

- 域名:DNS 请求的域名.
- 类型:资源记录的类型,与问题部分中的查询类型值是一样的.
- 类:地址类型,与问题部分中的查询类值是一样的.
- 生存时间:以秒为单位,表示资源记录的生命周期,一般用于当地址解析程序取出资源记录后决定保存及使用缓存数据的时间.它同时也可以表明该资源记录的稳定程度,稳定的信息会被分配一个很大的值.
- 资源数据长度:资源数据的长度.
- 资源数据:表示按查询段要求返回的相关资源记录的数据
FTP协议
[图片上传失败...(image-75807f-1607908402060)]