TCP/IP协议学习--链路层

来源:互联网 发布:汇盈牛熊先知主图源码 编辑:程序博客网 时间:2024/06/04 18:51

本博文记录作者学习 TCP/IP协议的过程,主要的学习材料是《TCP/IP 详解 卷1:协议》,下文中称为『图书』。由于这本经典图书的古老,还会参考一些其它材料。

1. 链路层协议


链路层的协议有:

  • 以太网协议
  • 802委员会发布的协议
    • 802.2 链路层共同特性
    • 802.3 针对整个 CSMA/CD 网络
    • 802.4 针对令牌总线网络
    • 802.5 针对令牌环网络
  • 串行接口链路层协议:SLIP、CSLIP、PPP
补充:图书中并没有提到802.1的协议,其实在项目开发的过程中就遇到了这个问题。起码链路层存在802.1q协议的东西,使得以太网的帧头不是图书中描述的一定是14字节。

链路层的协议应用的比较广的主要是以太网协议,并且支持802委员会的协议,所以本博文只讨论以太网协议。以太网是TCP/IP 协议采用的主要的局域网技术,采用的是CSMA/CD 的媒体接入方式,还记得上大学时老师用了好玩的 flash 来演示这个过程。


2. 以太网协议


以太网协议的标准主要有两个来源。在 TCP/IP 世界中,以太网 IP 数据报的封装是在 RFC894。IEEE 802网络的 IP 数据包的封装是 RFC1042。

图书中是这样描述这两种协议在主机中的使用情况的。每台 Internet 主机都与一个以太网电缆相连接:

  1. 必须能发送和接受采用 RFC894封装格式的分组
  2. 应该能接受与 RFC894混合的 RFC1042封装格式的分组
  3. 也许能够发送采用 RFC1042格式封装的分组。如果主机能够同时发送两种类型的分组数据,那么发送的分组必须是可以设置,而且默认条件下必须是 RFC894分组。

3. 以太网帧格式


以太网的帧格式主要是有三部分组成:帧头,数据,CRC 校验。需要关注的点有两个:

  • 帧头格式
  • 数据长度

3.1 帧头

首先看 RFC 894的帧格式

| 目的地址–6字节 | 源地址–6字节 | 类型–2字节 | 数据部分 | crc |

补充:其实在看维基百科上关于以太网帧结构介绍的时候,会发现有出入,由于图书并没有关注802.1q协议,所以忽略了一种帧结构。802.1q协议的帧头是多出4个字节的,这个可以在百度百科里面查询802.1q 去看一下帧结构。

再来看 RFC1042 的帧格式:

| 目的地址–6字节 | 源地址–6字节 | 长度–2字节 | AA | AA | 03 | 000000 | 类型–2字节 | 数据部分 | crc |

所以区分以太网帧格式类型的方法也是比较简单的,只要看第13、14个字节的值就好了,前12个字节都是地址。

  • 0800: IP 数据报文
  • 0806: ARP
  • 8035:RARP
  • 8100: 802.1q
  • 其它: 802.2、802.3

3.2 长度

RFC 894的数据长度需要在46~1500之间
RFC 1042的数据长度需要在38~1492之间

链路层对数据帧的长度最大值的限制称为 MTU。可以使用 netstat -in 打印出来主机的

0 0
原创粉丝点击