转自http://m.blog.csdn.net/article/details?id=38269159
在硬件层,我们通过高压低压电等方式发送1/0序列实现通信,可只有通信双方协商好怎么解读这些1/0序列才有意义,这就是数据链路层协议要做的事情。它就像一个信封,把1/0序列包起来,称之为“帧”。数据链路层主要有以下几个目的:
- 为IP模块发送和接收IP数据报。
- 为ARP模块发送ARP请求和接收ARP应答。
- 为RARP模块发送RARP请求和接收RARP应答。
根据网络所使用的硬件不同,TCP/IP支持多种不同的链路层协议。其中最主要的有以太网协议跟SLIP协议等。
1.以太网协议
以太网是当今TCP/IP采用的主要局域网技术,它采用一种称作CSMA/CD的媒体接入方法。以太网协议的内容推荐一篇TCP-IP协议详解(2) 小喇叭开始广播 (以太网与WiFi协议)。2.SLIP:串行线路IP
SLIP是一种在串行线路上对IP数据报进行封装的简单形式,它适用于家庭中每台计算机几乎都有的RS-232串行端口和高速调制解调器接入Internet。它以下面的规则定义帧格式:从上面可以看出,slip帧是不带MAC码的,因为他们直接相连嘛。它很简单,所以还是会有一些缺陷的存在:
- IP数据报是以END结束,为了防止把数据发送前的噪声也当作数据接收,一般会在前面也加上一个END。
- 如果数据报中真正的出现END,用0Xdb,0Xdc两个连续的字符来取代它,0Xdb也被称作SLIP的ESC字符。
- 如果数据报中真的出现ESC,也就是0Xdb,用0Xdb,0Xdd来取代它。
总结,虽然它看上去缺点多多,但是还是被大量使用当中,所以对它了解是必要的。
- 必须事先知道双方的IP地址,没办法把本端的IP地址告知对方。
- 没有类型字段,如果一条链路支持SLIP,就只能支持它。
- 没有错误检验,如果出错就只能通过上层协议来检验。
3.PPP:点对点协议
另外一种点对点协议是PPP:点对点协议,它解决了slip协议的所有缺点。标志字段变成了0X7E,所以真的7E需要转义为0X7d、0X5e,遇到真的0X7d,需要转义为0X7d、0X5d,遇到小于0X20的也需要转义,为的是被主机或调制解调器解释为特殊的控制字符。跟SLIP相比,它加了一个地址字节,0XFF,一个值为0X03的控制字节,一个2字节的协议,和一个2字节的CRC。4.环回接口
大多数的产品都支持环回接口,以允许允许在同一台主机上的客户端程序和服务器程序进行通信。我们想象中的,在封装的时候如果发现目的地址是环回地址时,可以省去网络层的一些操作,但是大多数系统还是跟普通数据一样完成了,只是在要离开网络层的时候返回给自己。这看上去多了很多不必要的操作,但确简化了设计。因为可以把环回接口看作是网络层下面的另一个链路层,网络层传给它就像传给其它链路层一样。5.ARP:地址解析协议
ARP为IP地址和对应的硬件地址之间提供动态映射。IP地址和MAC地址的对应关系是通过ARP协议传递到路由器和主机,每个主机和路由器都有一个ARP cache,里面存有IP和MAC地址对应的关系,但是它也有时间限制的,一般是存活时间是20分钟。ARP请求是以广播方式发送的,发送请求的主机会说:“我IP地址是XXXX,MAC地址是XXXXXX,有谁知道IP为YYYY的MAC地址吗?”拥有该IP的主机会回答“我知道,该IP地址属于我的一个NIC(网卡),它的MAC地址是YYYYYY。”请求是广播的,但应答是单播的。另外,其他主机和路由器也会对比自己的IP和MAC地址,如果不一样的话就更新。6.RARP:逆地址解析协议
具有本地磁盘的系统引导时,一般是从磁盘上的配置文件中读取IP地址。但是无盘机,需要采用RARP协议来读取IP地址,过程是从接口卡上读取唯一的硬件地址,然后发送一个RARP广播请求,请求某个主机响应该无盘系统的IP地址。