From 807314bd104ee544e747bf9c1a7809ac72eba821 Mon Sep 17 00:00:00 2001 From: asahi Date: Fri, 3 Jan 2025 01:11:46 +0800 Subject: [PATCH] =?UTF-8?q?=E9=98=85=E8=AF=BBRFC=20894=E5=92=8CRFC=201042?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tcpip/tcp_ip协议.md | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/tcpip/tcp_ip协议.md b/tcpip/tcp_ip协议.md index ab62242..baebe1b 100644 --- a/tcpip/tcp_ip协议.md +++ b/tcpip/tcp_ip协议.md @@ -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限制的大小。