对于TCP IP协议来说,我们并没有对它的硬件或者是其它什么设计进行严格的规范。它应用太过广泛,概念上的应用也相对比较模糊。那么我们现在就来对它的linux系统下的地址查询来做一个介绍。
要让 TCP IP协议能够顺利与不同类型的硬体进行沟通﹐那么就需要建立起一些标准协定来让大家共同参考。以我们最常用的乙太网(Ethernet)为例﹐我们无需理会厂商如何设计网路界面的驱动程式﹐一旦它能够被系统接纳﹐网路储存层(Datalink)就能使用网路界面在实体网路上传送和接收资料了。
IP 位址和实体位址对应之困扰
我们知道乙太网上面使用的传送方式叫 CSMA/CD (Carrier-Sensing Multiple Access with Collision Detection)﹕虽然讯框会在整个网段(segment)中用广播的方式传递﹐而且所有节点都会收到讯框﹐然而﹐只有目的位址符合自己实体位址的讯框才会被接收下来。因此,不管上层协定是哪一种(可以是 TCP IP协议也可以是其它),在底层的传送若是使用 Ethernet 的话,就得使用 MAC (Media Access Control) 实体位址。若要查询到当前系统目前所有界面的实体位址,我们可在 Linux 系统里面输入 ifconfig 命令:
- eth0 Link encap:Ethernet HWaddr 00:A0:0C:11:EA:11
- inet addr:203.30.35.134 Bcast:203.30.35.159 Mask:255.255.255.224
- UP BROADcast RUNNING MULTIcast MTU:1500 Metric:1
- RX packets:0 errors:0 dropped:0 overruns:0 frame:0
- TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
- collisions:0 txqueuelen:100
- Interrupt:3 Base address:0x300eth1
- Link encap:Ethernet HWaddr 00:80:C7:47:8C:9A
- inet addr:192.168.0.17 Bcast:192.168.0.255 Mask:255.255.255.0
- UP BROADcast RUNNING MULTIcast MTU:1500 Metric:1
- RX packets:12303 errors:0 dropped:0 overruns:0 frame:0
- TX packets:12694 errors:0 dropped:0 overruns:0 carrier:0
- collisions:0 txqueuelen:100
- Interrupt:10 Base address:0x2e0
从上面的命令结果中可发现:关于每一个界面的***行资讯﹐***的部份就是该界面的实体位址。讯框在实体网路上面传送的过程中﹐IP 位址(或曰罗辑位址)一点都派不上用场。但问题是:当我们使用TCP IP协议的时侯,上层的协定都是以 IP 位址为传送依据的。