阅读RFC 894和RFC 1042相关文档

This commit is contained in:
asahi
2025-01-03 01:11:46 +08:00
parent 5b53e6dc6f
commit 807314bd10

View File

@@ -65,5 +65,43 @@ ipv4地址大小为4字节其分类如下所示
- IP协议上层协议可能为`ICMP, IGMP, TCP, UDP`
- TCP, UDP: 上层可能为各种应用层序通过来源ip、来源端口号、目标端口号进行判断
## 数据链路层
TCP/IP中以太网数据报的封装格式在`RFC894`IEEE 802网络的ip数据报则是封装在`RFC 1042`中。
对于Internet主机必须要求
- 必须能接受和发送RFC 894封装格式的分组
- 应该能接受`RFC 894``RFC 1042`封装格式的分组
- 也许能发送`RFC 1042`封装格式的分组
RFC 894是最常被使用的封装格式如下为两种格式的定义。
### RFC 1042
`目的物理地址(6字节)` + `源物理地址(6字节)` + `长度(2字节)` + `802.2 LLC(3字节)` + `802.2 SNAP(5字节)` + `数据(38 ~ 1492字节)` + `CRC(4字节)`
其中,字段含义如下:
- `目的/源地址`:目的/源地址均代表物理地址长度均为6字节48bit
- `长度`: RFC 1042中长度代表`长度`字段后续`不包含CRC`的长度
- `CRC`: CRC字段用于帧内字节差错的循环冗余校验
### RFC 894
`目标物理地址(6字节)` + `源物理地址(6字节)` + `类型(2字节)` + `数据(46 ~ 1500字节)` + `CRC(4字节)`
其中,字段定义如下:
- `类型`:以太网帧中`类型`字段定义了被封装数据的协议类型:
- `0800`: 如果类型字段的值为`0800`那么代表后续数据为IP数据报
- `0806`: 如果类型字段值为`0806`那么代表后续数据为ARP请求/应答
- `0835`: 如果字段类型为`0835`那么代表后续数据为RARP请求/应答
RFC 894和RFC 1042定义的帧必须有最小长度要求RFC894要求数据长度至少为46字节而RFC1042要求数据长度至少为38字节为了保证被封装数据长度达到最小长度要求必须`在长度不足时向剩余空间填充pad字节`
### 环回接口
大多数产品都支持环回接口(loopback interface)允许运行在同一台机器上的程序之间相互进行通信。在A类地址中`127`开头的地址即是为环回端口预留。根据惯例,大多数系统把`127.0.0.1`分配给这个接口并命名为localhost。
> 一个传给loopback interface的ip数据包不能在任何网络上出现。
### MTU
RFC 894和RFC 1042对数据帧长度有限制数据部分长度最多不能超过1500和1492字节该限制被称为最大传输单元MTU
如果ip层需要传输一个大于MTU的数据报那么该数据报需要被分片为若干片令每一片都小于MTU限制的大小。