TCP/IP详解02-链路层

TCP/IP详解02-链路层

在 TCP/IP 协议族中, 链路层主要有三个目的:

  • (1)为 IP 模块发送和接收 IP 数据报;
  • (2)为 ARP 模块发送 ARP 请求和接收 ARP 应答;
  • (3)为 RARP 发送 RARP 请求和接收 RARP 应答。

硬件: 以太网,令牌环网,FDDI(光纤分布式数据接口),RS-232串行线路等。

在本章中,我们将详细讨论以太网链路层协议(就是平时我们用的网卡),两个串行接口链路层协议( SLIP和PPP(就是adsl宽带)), 以及大多数实现都包含的环回( loopback)驱动程序。对 MTU(最大传输单元)进行了介绍, 这个概念在本书的后面章节中将多次遇到。我们还讨论了如何为串行线路选择 MTU。

1. 以太网和IEEE 802封装

联系linux里面的ifconfig -a命令,这个命令通常会得到如下的结果:

[lincoln@bj-develop-01 ~]$ ifconfig -a
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.4.1.62  netmask 255.255.255.0  broadcast 10.4.1.255
        ether 52:54:00:cc:68:e3  txqueuelen 1000  (Ethernet)
        RX packets 1082420957  bytes 934073951363 (869.9 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 726327520  bytes 1481350364607 (1.3 TiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 0  (Local Loopback)
        RX packets 48717213  bytes 2817829144 (2.6 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 48717213  bytes 2817829144 (2.6 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

其中,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里面处于一个配角的地位。

1.1 IEEE 802.2/802.3(RFC 1042)和以太网的封装格式(RFC 894)

这里写图片描述

图中每个方框下面的数字是它们的字节长度。 两种帧格式都采用48 bit(6字节)的目的地址和源地址( 802.3允许使用16 bit的地址,但一般是48 bit地址)。这就是我们在本书中所称的硬件地址(也就是MAC地址)

接下来的2个字节在两种帧格式中互不相同。在 802 标准定义的帧格式中, 长度字段是指它后续数据的字节长度,但不包括 CRC检验码。 以太网的类型字段定义了后续数据的类型。 在802标准定义的帧格式中, 类型字段则由后续的子网接入协议( Sub-network Access Protocol,SNAP)的首部给出。

在以太网帧格式中,类型字段之后就是数据;而在 802 帧格式中,跟随在后面的是 3字节的 802.2 LLC 和5字节的 802.2 SNAP。目的服务访问点( Destination Service Access Point, DSAP)和源服务访问点( Source Service Access Point, SSAP)的值都设为0xaa。Ctrl 字段的值设为3。随后的3个字节org code都置为0。再接下来的2个字节类型字段和以太网帧格式一样。

CRC 字段用于帧内后续字节差错的循环冗余码检验(检验和)(它也被称为FCS或帧检验序列)[下文有详细介绍]。

802.3标准定义的帧和以太网的帧都有最小长度要求。 802.3规定数据部分必须至少为 38字节,而对于以太网,则要求最少要有 46字节。 为了保证这一点, 必须在不足的空间插入填充 (pad)字节。

1.2 CRC 循环校验法

在发送端, 先把数据划分为组, 假定每组K个比特(K位), 同时假定待传送的一组数据M=101001(K=6), 我们在M的后面再添加供差错检测用的N位冗余码一起发送.

N位冗余码求解方法:

  • 首先,用二进制的模2运算[一种特殊的运算: 00得1, 11得1, 01得0, 10得0, 但不进位/退位]进行2^N乘M的运算, 这相当于在M后面添加N个0;
  • 然后, 用得到的(K+N)位的数除以事先选定好的长度为(N+1)位的除数P, 得出商为Q且余数是R, 余数R比除数P少1位, 即R是N位;
  • 最后,使用R替换N个0, 即得到要发送的数据.

示例:

假设现在K=6, M=101001, 设N=3, 除数P=1101, 则被除数为(2\^N)*M = 101001000, 模2运算的结果为: 商110101, 余数R=001, 因此最终得到需要发送的数据位101001001

接收端校验:
接收端对收到的每一帧进行CRC校验如下:

  • (1)若得出的余数R=0, 则判定这个帧没有差错, 接受accept;
  • (2)若得出的余数R!=0, 则判定这个帧有差错, 丢弃abandon.

注意:这种检测方法并不能确定究竟是哪一个/几个比特出了差错, 但是只要经过严格的挑选, 并使用位数足够多的除数P, 那么出现检测不到的差错的概率就很小了;因此仅用循环冗余校验CRC差错检验技术只能做到”无差错接受”.

2. 串行接口链路层协议( SLIP和PPP)

这一部分详情参见教材。

2.1 SLIP:串行线路IP

全称:Serial Line IP,是一种在串行线路上对IP数据报进行封装的简单形式,适用于家庭中每台计算机几乎都有的RS-232串行端口和高速调节器接入Internet。

2.2 压缩的SLIP

由于串行线路速率低,而且通信经常是交互式的,因此SLIP线路上有许多小的tcp分组进行交换。为了传送1个字节的数据,需要20个字节的ip首部和20个字节的tcp首部!

CSLIP一般能把上面的40个字节压缩到3或5个字节,它能在CSLIP每一端维持多达16个tcp连接,并知道连接中某些字段一般是不变的。

2.3 PPP:点对点协议

ppp(点对点协议)是从SLIP的替代品,修改了SLIP协议中的所有缺陷。

3. 环回(loopback)接口

大多数的产品都支持环回接口( Loopback Interface),以允许运行在同一台主机上的客户程序和服务器程序通过 TCP/IP 进行通信。 A类网络号127就是为环回接口预留的。根据惯例,大多数系统把 IP 地址 127.0.0.1 分配给这个接口,并命名为 localhost。一个传给环回接口的 IP 数据报不能在任何网络上出现。

我们想象,一旦传输层检测到目的端地址是环回地址时,应该可以省略部分传输层和所有网络层的逻辑操作。但是大多数的产品还是照样完成传输层和网络层的所有过程,只是当 IP数据报离开网络层时把它返回给自己。

这里写图片描述

对于环回接口,有如下三点值得注意:

  • 1) 传给环回地址(一般是127.0.0.1)的任何数据均作为IP输入。
  • 2) 传给广播地址或多播地址的数据报复制一份传给环回接口, 然后送到以太网上。 这是因为广播传送和多播传送的定义包含主机本身。
  • 3) 任何传给该主机IP地址的数据均送到环回接口。

看上去用传输层和 IP层的方法来处理环回数据似乎效率不高,但它简化了设计。

  • 环回接口可以被看作是网络层下面的另一个链路层。网络层把一份数据报传送给环回接口,就像传给其他链路层一样,只不过环回接口把它返回到 IP的输入队列中。
  • 另一个隐含的意思是送给主机本身 IP地址的 IP 数据报一般不出现在相应的网络上。例如,在一个以太网上,分组一般不被传出去然后读回来。由于一台主机必须处理发送给自己的IP数据报,因此图2-4所示的过程是最为简单的处理办法。

4. 最大传输单元 MTU 和路径MTU

以太网和 802.3对数据帧的长度都有一个限制,其最大值分别是 1500 和 149字节。链路层的这个特性称作 MTU,最大传输单元。如果 I P层有一个数据报要传, 而且数据的长度比链路层的 MTU 还大,那么 IP 层就需要进行分片( fragmentation),把数据报分成若干片,这样每一片都小于 MTU。

这里写图片描述

点到点的链路层(如SLIP和PPP)的MTU**并非指的是网络媒体的物理特性。相反,它是一个逻辑限制**,目的是为交互使用提供足够快的响应时间。

当在同一个网络上的两台主机互相进行通信时,该网络的 MTU 是非常重要的。 但是如果两台主机之间的通信要通过多个网络,那么每个网络的链路层就可能有不同的 MTU。重要的不是两台主机所在网络的 MTU的值,重要的是两台通信主机路径中的最小 MTU。它被称作路径 MTU。

两台主机之间的路径 MTU不一定是个常数。它取决于当时所选择的路由。而选路不一定是对称的(从A到B的路由可能与从B到A的路由不同),因此路径MTU在两个方向上不一定是一致的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值