2.7环回接口
大多数的产品都支持环回接口(LoopbackInterface),以允许运行在同一台主机上的客户程序和服务器程序通过TCP/IP进行通信。A类网络号127就是为环回接口预留的。根据惯例,大多数系统把IP地址127.0.0.1分配给这个接口,并命名为localhost。一个传给环回接口的IP数据报不能在任何网络上出现。
我们想象,一旦传输层检测到目的端地址是环回地址时,应该可以省略部分传输层和所有网络层的逻辑操作。但是大多数的产品还是照样完成传输层和网络层的所有过程,只是当IP数据报离开网络层时把它返回给自己。
图2-4是环回接口处理IP数据报的简单过程。
IP输 出
函数 IP 输入
函数
IP 放入 输入
队列中
环回驱动程序 是 目的I 址是否与广播 P地地址或多播地址相同? 否
IP地 址是否与接 目的
口I P 地址相同? IP输 入 放入 队列中 是
ARP 否,用 获
取目的主机的
以太网地址
基于以太网帧
类型进行分用
发送
以太网 接收 以太网驱 动程序
图2-4环回接口处理IP数据报的过程
图中需要指出的关键点是:
1) 传给环回地址(一般是127.0.0.1)的任何数据均作为IP输入。
2) 传给广播地址或多播地址的数据报复制一份传给环回接口,然后送到以太网上。这是因为广播传送和多播传送的定义(第12章)包含主机本身。
3) )任何传给该主机IP地址的数据均送到环回接口。
看上去用传输层和IP层的方法来处理环回数据似乎效率不高,但它简化了设计,因为环回接口可以被看作是网络层下面的另一个链路层。网络层把一份数据报传送给环回接口,就像传给其他链路层一样,只不过环回接口把它返回到IP的输入队列中。
在图2-4中,另一个隐含的意思是送给主机本身IP地址的IP数据报一般不出现在相应的网络上。例如,在一个以太网上,分组一般不被传出去然后读回来。某些BSD以太网的设备驱动程序的注释说明,许多以太网接口卡不能读回它们自己发送出去的数据。由于一台主机必须处理发送给自己的IP数据报,因此图2-4所示的过程是最为简单的处理办法。
4) .4BSD系统定义了变量useloopback,并初始化为1。但是,如果这个变量置为0,以太网驱动程序就会把本地分组送到网络,而不是送到环回接口上。它也许不能工作,这取决于所使用的以太网接口卡和设备驱动程序。