在刚开始进行网络调试的那段时间里,我总是想搞清楚局域网接入到互联网是怎么一回事。现在关注你的电脑,开机以后,经过几十秒的等待,屏幕上的操作系统界面就出现在我们面前。只需在浏览器图标上按一下,就能访问我们最喜爱的网站了。然而,一切并非如你所想,网页上什么都没有出现,哪里出了问题?别着急,我们会尽快处理这个问题,在任何操作系统上,我们都可以用网络诊断软件来进行修复。
但首当其冲的则是我们要搞清楚,你到底是如何访问网络的?
这个问题看似琐碎,但是通常没有任何一种响应是需要很长时间的。每当我们要求计算机去使用网络,我们的意思是任何适配器或电缆,有时候还需要一台路由器。当然,这些东西对计算机网络的使用非常的重要,但是它们本身并没有让用户接入。为了有效地使用计算机网络,我们的服务规范必须安装在任何一个计算机的网络协议中。
当然,不同的网络中会有一些不同的解决方案。当中最为简单的一种则是我们电脑中已经默认安装的TCP/IP协议,并具有永久分配的IP地址,这是在本地配置设置中的一个永恒的烙印。这是我们能够接触到的一种最简单的解决方案,但实际上它并不是很安全,所以我们假定管理员已经进行了一些其它设置。
最有可能的情况是你的DHCP服务器已经被管理员启动了。该服务允许网络上任何工作站动态分配IP地址。通常在本地网络中会存在一个正常运作的私有地址,在外网我们是看不到的,我们只能看到路由器网络IP地址。翻译任务真正的目的是通过适当的响应进入私有地址并取得屏幕上的内容,这些才是我们真正需要的内容。有时候,管理员会有一些不得已的理由来安装一个古老的互联网协议。其实在网络中打包数据的是网关,它才是真正负责相关网络协议数据翻译的。
若我们使用一种基于内部网络专有地址,且在外网永远不会被发现的解决方案,这种解决方案被称作网络地址转换技术,其简写是NAT。基于NAT技术的网络也有多种类型。我将NAT区分为静态的、动态的、主动的、被动的、积极与消极的几种。或许别人跟我的区分方法不同,但你不得不承认NAT本身非常令人着迷。NAT的工作流程如下:一个数据包被传输到内部网络接口,包含了我们工作站的地址,它采取了我们私人地址池中的地址,然后通过路由器被路由到外部接口,随着网络接口地址到哪里,它就到哪里。真正的答案就是它总是被重定向传送给你需要的地方。
私有地址比公有地址多得多,这种事情非常普遍。然后,我们就必须要处理一大堆私有地址和一个公有地址的状况了。另外,为了弄清楚服务器寻址响应,而且得让一组合适的内部端口与外部端口地址相连接,我们需要对每一个地址进行分配。有一种协议可以从池中为我们提供动态端口。这种改变数据端口的技术叫做PAT。
你可能已经注意到,所有来自内部网络的地址不可能是真正的地址,但保留私有地址池中的地址是一个不错的方法。这样做有很多好处,这保护了私人网络。何其幸运,不论是网络地址分配还是测试或是软件开发,到处都有一些奇妙的方法。可有的时候某些网络转换操作也会发生在整个ISO/OSI模型第三层和第四层以外,数据包IP地址并没有发生变化,但仍在第四层协议之间。这种方案被叫做电路层代理。
如果你看一看大多数网络,你会发现一些肉眼可见的相似之处。大部分时间里,管理员可以使用相同的私有IP网络,为了解决网络冲突,所有计算机地址都是动态分配的。这种地址动态分配过程可以由多个协议来完成,但在它们当中最为重要的还是DHCP服务。这为特定工作站传输信息提供了无限的潜能。DHCP不仅可以提供工作站IP地址数据的信息,还包含了网关地址的信息,且其信息范围非常广泛,例如数据网络和服务器的内容。
那么到这里,计算机网络原理快速介绍就结束了。现在我们已经知道了一些层面是如何沟通的了。也了解了在我们的计算机中应该提供什么样的服务才能进行有效的通信了。现在我们进行下一步。在我们的例子中怎么才能看出来网络配置是正确的呢,其实可以使用图形程序,但现在我们只能使用系统安装的ifconfig。这个程序可以显示或设置我们网络中所有的信息。下面是一个示例,输入ifconfig命令,显示了我目前的工作站还未连接到网络的情况:
root [~] # ifconfig
eth0 Link encap: Ethernet HWaddr dc: 0e: a1: 4b: 5d: 94
inet addr: 169.254.186.86 bcast: 169.254.255.255 Mask: 255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU: 1500 Metric: 1
RX packets: 0 errors: 0 dropped: 2775300121 overruns: 0 frame: 0
TX packets: 2790 errors: 0 dropped: 0 overruns: 0 carrier: 0
collisions: 0 txqueuelen: 1000
RX bytes: 0 (0.0 B) TX bytes: 625441 (610.7 KB)
Interrupt: 122 Base address: 0×6000
lo Link encap: Local Loopback
inet addr: 127.0.0.1 Mask: 255.0.0.0
UP LOOPBACK RUNNING MTU: 16436 Metric: 1
RX packets: 1003 errors: 0 dropped: 0 overruns: 0 frame: 0
TX packets: 1003 errors: 0 dropped: 0 overruns: 0 carrier: 0
collisions: 0 txqueuelen: 0
RX bytes: 379547 (370.6 KiB) TX bytes: 379547 (370.6 KB)
root [~] #
All program options in ifoconfig. I wrote the following:
ifconfig [-a] [-v] [-s] [[]]
[Add <address>[/ <prefixlen>]]
[Del <address>[/ <prefixlen>]]
[[-] Broadcast [<address>]] [[-] pointopoint [address]]
[Netmask <address>] [dstaddr <address>] [tunnel <address>]
[Outfill <nn>] [keepalive <nn>]
[H <HW> <address>] [metric <nn>] [mtu <nn>]
[[-] Trailers] [[-] arp] [[-] allmulti]
[Multicast] [[-] promisc]
[Mem_start <nn>] [io_addr <nn>] [irq <nn>] [media <type>]
[Txqueuelen <nn>]
[[-] Dynamic]
[Up | down] …
<HW>= Hardware Type.
List of possible hardware types:
loop (Local Loopback) slip (Serial Line IP) cslip (VJ Serial Line IP)
slip6 (6-bit Serial Line IP) cslip6 (VJ 6-bit Serial Line IP) adaptive (Adaptive Serial Line IP)
strip (Metricom Starmode IP) ether (Ethernet) tr (16/4 Mbps Token Ring)
tr (16/4 Mbps Token Ring (New)) ax25 (AX.25 Amp R) netrom (ampr NET / ROM)
tunnel (IPIP Tunnel) ppp (Point-to-Point Protocol) arcnet (ARCnet)
DLCI (Frame Relay DLCI) FRAD (Frame Relay Access Device) irda (IrLAP)
x25 (generic X.25)
= Address family. Default: inet
List of possible address families:
unix (UNIX Domain) inet (DARPA Internet) inet6 (IPv6)
ax25 (AX.25 Amp R) netrom (ampr NET / ROM) ipx (Novell IPX)
ddp (Appletalk DDP) x25 (CCITT X.25)
However, if you want to know more about this program, just type "main ifoconfig" in the console.
Wireless configuration is used in the iwconfig command console. This command takes the following parameters:
Usage: iwconfig [interface]
interface essid {NNN | any | on | off}
interface mode {managed | ad-hoc | master | …}
N.NNN interface freq [k | M | G]
interface channel N
interface bit {N [k | M | G] | auto | fixed}
interface rate {N [k | M | G] | auto | fixed}
enc {NNNN interface-NNNN | off}
interface key {NNNN-NNNN | off}
interface power {period N | timeout N | saving N | off}
NNN nickname interface
interface nwid {NN | on | off}
interface ap {N | off | auto}
interface txpower {nmw | NDBM | off | auto}
interface point N
interface retry {limit N | lifetime N}
interface rts {N | auto | fixed | off}
interface frag {N | auto | fixed | off}
interface modulation {11g | 11a | CCK | OFDMg | …}
interface commit
在你操作系统的控制台中你可以通过键入“man ifconfig”命令来查看更多的信息。
现在我们来考虑另一个重要的问题。因为不知道对方的逻辑和物理地址,那我们怎样才能得到服务器发送配置信息的请求呢?所以,我们的计算机对网络上所有计算机都发送了信息。这就是所谓的广播,其消息被放置在广播帧当中。
在DHCP规范中,该消息被叫做DHCPDISCOVER封包,若得到了回应则返回一个叫DHCPOFFER的消息。此消息通常在单播帧中并发送给一个单一的收件者。
接下来,客户必须选择属于他的DHCP服务器。若要做到这一点,还需稍等片刻,以便让它熟悉该地区所有DHCP服务器。然后它会发送DHCPREQUEST消息,其中包含了选定的DHCP服务器信息,但它隶属于整个网络服务器的广播下,用于通知所有服务器,包括选定的和未选定的服务器。然后被选定的服务器会发送DHCPACK消息。这条信息包含了你需要配置的客户端的内容。所以,如果我们假设网络上至少有一个DHCP服务器,那么在刚开始诊断网络中至少会得到四个回复。
总结
文章的第一部分其实只是有关实用程序的一个简单介绍。也许文章中的内容对用户来说并不是非常高端,但并不是所有人都会接触到高端的网络配置和协议条款。在这篇文章中,我想给每个人都列举一些大家都该熟悉的计算机网络基本信息。当这个系列文章完成后,你会学到不少的东西,了解计算机网络是如何工作的。在那之前,我建议你尝试一下基本的网络配置和NAT配置的内容。我也推荐大家看一看TCP/IP和DNS协议规范。
接下来你会期待哪些内容呢?当然,我们会讨论DNS服务器和ARP表的问题。此外,我们将尝试实现自己的C程序,这个程序能够将IP地址翻译成一个容易理解的地址信息,反之亦然。我们还要学习管理员工具的使用,nestat程序等。我们还会分析一些计算机网络中的案例,还会看到网络分析工具和ping程序的使用方法。另外,还会了解如何通过使用traceroute来跟踪路由器数据包。
在本系列文章中所出现的这些工具,如果你掌握了它们,那么你能够成为一个很好的管理员。然而,你也需要浏览一些其它文章和一些好运,在不断探索的道路上成长为一名优秀的网络操作系统管理员。