数据链路层有三个目的: 为ip模块发送和 接收ip数据报。 为arp模块发送arp请求和接收arp应答。 为rarp发送rarp请 求和接收rarp应答 ip大家都听说过。至于arp和rarp,arp叫做地址解析协议,是用ip地址换mac地址的一种协议,而rarp则叫做逆地址解析协议,在tcp
数据链路层有三个目的:
为ip模块发送和 接收ip数据报。 为arp模块发送arp请求和接收arp应答。 为rarp发送rarp请 求和接收rarp应答ip大家都听说过。至于arp和rarp,arp叫做地址解析协议,是用ip地址换mac地址的一种协议,而rarp则叫做逆地址解析协议,在tcp/ip协议的后面章节会介绍它们(在局域网里面用arp协议可以很容易的搞瘫痪网络哦)
数据链路层的协议还是很多的,有我们最常用的以太网(就是平时我们用的网卡)协议,也有不太常见的令牌环,还有fddi,当然,还有国内现在相当普及的ppp协议(就是adsl宽带),以及一个loopback协议。
联系linux里面的ifconfig -a命令,这个命令通常会得到如下的结果
eth0 link encap:ethernet hwaddr 00:01:4a:03:5b:ed
inet addr:192.168.11.2 bcast:192.168.11.255 mask:255.255.255.0
inet6 addr: fe80::201:4aff:fe03:5bed/64 scope:link
up broadcast running multicast mtu:1500 metric:1
rx packets:2819 errors:0 dropped:0 overruns:0 frame:0
tx packets:76 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
rx bytes:241609 (235.9 kib) tx bytes:9596 (9.3 kib)
lo link encap:local loopback
inet addr:127.0.0.1 mask:255.0.0.0
inet6 addr: ::1/128 scope:host
up loopback running mtu:16436 metric:1
rx packets:2713 errors:0 dropped:0 overruns:0 frame:0
tx packets:2713 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
rx bytes:3516032 (3.3 mib) tx bytes:3516032 (3.3 mib)
其中,eth0就是以太网接口,而lo则是loopback接口。这也说明这个主机在网络链路层上至少支持loopback协议和以太网协议。
以太网(ether-net)的定是指数字设备公司( digital equipment corp.)、英特尔公司(intel corp.)和xerox公司在1982年联合公布的一个标准,这个标准里面使用了一种称作csma/cd的接入方法。而ieee802提供的标准集802.3(还有一部分定义到了802.2中)也提供了一个csma/cd的标准。这两个标准稍有不同,tcp/ip协议对这种情况的处理方式如下:
以太网的ip数据报封装在rfc894中定义,而ieee802网络的ip数据报封装在rfc1042中定义。 一台主机一定要能发送和接收rfc894定义的数据报。 一台主机可以接收rfc894和rfc1042的封装格式的混合数据报。 一台主机也许能够发送rfc1042数据报。。如果主机能同时发送两种类型的分组数 据,那么发送的分组必须是可以设置的,而且默认条件下必须是rfc 894分组。 可见,rfc1042在tcp/ip里面处于一个配角的地位。这两种不同的数据报格式请参考教材。
ppp(点对点协议)是从slip的替代品。他们都提供了一种低速接入的解决方案。而每一种数据链路层协议,都有一个mtu(最大传输单元)定义,在这个定义下面,如果ip数据报过大,则要进行分片(fragmentation),使得每片都小于mtu,注意ppp的mtu并不是一个物理定义,而是指一个逻辑定义(个人认为就是用程序控制)。可以用netstat来打印出mtu的结果,比如键入netstat -in
kernel interface table
iface mtu met rx-ok rx-err rx-drp rx-ovr tx-ok tx-err tx-drp tx-ovr flg
eth0 1500 0 1774 0 0 0 587 0 0 0 bmru
lo 16436 0 2667 0 0 0 2667 0 0 0 lru
就可以观察到eth0的mtu是1500。而lo(环回接口)的mtu则是16436。
最后说说那个环回接口(loopback)。平时我们用127.0.0.1来尝试自己的机器服务器好使不好使。走的就是这个loopback接口。对于环回接口,有如下三点值得注意:
传给环回地址(一般是127.0.0.1)的任何数据均作为i p输入。 传给广播地址或多播地址的数据报复制一份传给环回接口,然后送到以太网上。这是 因为广播传送和多播传送的定义包含主机本身。 任何传给该主机ip地址的数据均送到环回接口。 这一章还是很简单的,一般作为了解知识也就足够了,没必要抠的那么详细。