链路层的分析与应用

来源:互联网 发布:alfie boe 知乎 编辑:程序博客网 时间:2024/06/06 08:37
  
-
-

本文背景:

TCP/IP协议越往底层走,就越难理解,为了更好的理解链路层,本文通过结合实际应用加以分析,尽可能学以致用。

本文目的:

简单通俗的理解链路层,以链路层的功能点分别介绍。

本文内容:

1.  接收和发送数据(IP|链路层|线路)

链路层上处理的协议有很多,常见的有以太网协议、令牌网协议、SLIP协议、PPP协议和Loop Back协议等。这些协议决定了如何将IP层传过来的数据打包,往物理线路上发送;对方接收到数据后,负责解包然后将数据传给上一层IP层。这一打包/解包的依据就是协议。

--以太网协议

802.2标准定义了以太网和令牌网共同的特性,802.3标准定义了载波侦听多路接入的局域网(以太网)技术,802.4标准定义了令牌总线网络,802.5标准定义了令牌环网络。RFC1042定义了802网络的数据报格式;RFC894定义了以太网数据报格式,它要求主机通信需要通过一个10M以太网电缆。这两种具体的数据格式如下:

RFC1042中的IP数据帧

目的物理地址[6字节] | 源物理地址[6字节] | 长度[2]| 802.2相关域[8] | 数据域[38~1492] | CRC[4]

RFC1042中的ARP

目的物理地址[6字节] | 源物理地址[6字节] | 长度[2]| 802.2相关域[8] | ARP请求应答[28] | CRC[4]

RFC1042中的RARP

目的物理地址[6字节] | 源物理地址[6字节] | 长度[2]| 802.2相关域[8] | RARP请求应答[28] | CRC[4]

 

RFC894中的IP数据帧

目的物理地址[6字节] | 源物理地址[6字节] | 类型[2] | 数据域[46~1500] | CRC[4]

RFC894中的ARP

目的物理地址[6字节] | 源物理地址[6字节] | 类型[2] | ARP请求应答[28] | CRC[4]

RFC894中的RARP

目的物理地址[6字节] | 源物理地址[6字节]|类型[2] | RARP请求应答[28] | CRC[4]

 

可以看出,链路层是需要网卡物理地址来通信的,但是,IP层中只用IP地址,所以当IP数据到达链路层时,需要通过ARPRARP来进行IP地址和物理地址的转换,关于这一部分,请参考本文23小节。

 

注解1:从上可以看到,数据帧中数据域有一个最大值15001492。这个有一个术语为MTU,最大传输单元。在数据链路层设定这个是为了提高程序的响应速度。如果IP层数据超过链路层定的MTU时,就需要分片。在不同协议上,MTU的大小及制定规则是不一样的。SLIPMTU可以根据传输最大帧时所需时间的一半与人忍受的响应时间相比较得出。另外,有一个路径MTU的概念指的是不同网络传输数据时经过的链路层的最小MTU

注解2:人所能忍受的响应时间是100-200ms

 

--令牌网协议

令牌网协议需要在令牌网卡上使用,现在不太常用,以太网已经网罗天下了。对此,本文暂不对它进行展开。

--SLIP协议

SLIP协议就是串行线路IP协议。它用在计算机通过RS-232串行端口和调制解调器()接入Internet上。

转义字符的用法:协议数据报格式是只有一个结束符(0xc0), 其他都是数据。当数据想含结束符时,用0xdb0xdc来表示0xc0。这样的话,另外一个问题来了,想表示0xdb 0xdc怎么办?有歧义了。重新定义,只要想含0xdb的话,就变成0xdb 0xdd。当需要转义字符时,这是一个可行的方法,谨记。

协议缺点:

- 数据报中没有类型信息,因此同时只能用一个协议,也就是说,你用猫上网时,如果走的是SLIP协议,你就不能打电话 (另一种协议)

- 数据报没有定义CRC校验,出错后本层不能处理,只能寄希望于上层实现。如果上层也没有,那你就先歇一下。

- 必须在连接前固定IP地址,所以IP地址的短缺造成了SLIP协议的放弃。

- 只能工作在TCP/IP协议上。

--PPP协议

PPP协议又称点对点协议,其克服了SLIP协议的所有缺点,特别是具有动态分配IP的有点,有身份验证的优点。它的帧格式中有一个域是地址域,值是0xFF,为广播地址,可以连接到服务器端所有的猫。

 

有人说为什么要通过猫呢,直接用一根线将两台机器连接起来了吗?这里边有着历史的原因,电话网络在电脑网络起来时已经生根了,利用已有的资源从来都是一种好习惯。连个猫通信的过程中,验证了用户信息,分配了用户IP,建立了通信连接。

--Loop Back协议

大部分操作系统都会实现一个LoopBack 接口,并且利用A类地址127.0.0.1,域名localhost。它用来自己跟自己通过TCP/IP通信,不过,发的数据包不会往网络上发,从网络层出去后就被Loopback截获解析了。所以,把Loop Back协议看作数据链路层(网络层下面)。注意,往多播或广播地址发的数据包也会往Loop Back上发送。

微软Loop Back虚拟网卡可以在自己电脑上添加几个虚拟网卡,可设IP地址,然后在几个网卡上通信也跟在不同机器上的网卡通信方式一样。

 

2. 请求响应ARP

待补充

3. 请求响应RARP

待补充

4. 一个应用案例分析

待补充

 

----文章结束----

 

原创粉丝点击