与邮政通讯一样,网络通讯也需要有对传输内容进行封装和注明接收者地址的操作。邮政通讯的地

址结构是有层次的,要分出城市名称、街道名称、门牌号码和收信人。网络通讯中的地址也是有层次

的,分为网络地址物理地址端口地址。网络地址说明目标主机在哪个网络上;物理地址说明目标网

络中的哪一台主机是数据报的目标主机;端口地址则指明目标主机中哪个应用程序接收数据报。

    标识目标主机在哪个网络的是IP地址。IP地址用4个点分十进制数表示,如172.155.32.120。IP地址

封装在数据报的IP报头中。IP地址有两个用途:网络的路由器设备使用IP地址确定目标网络地址,进而

确定该向哪个端口转发报文;另外一个用途是源主机用目标主机的IP地址来查询目标主机的物理地址。

    物理地址封装在数据报的帧报头中。典型的物理地址是以太网中的MAC地址。MAC地址在两个地方使

用:主机中的网卡通过报头中的目标MAC地址网络发送来的数据报是不是发给自己的;网络中的交换机使

用通过报头中的目标MAC地址确定数据报该向哪个端口转发。其他物理地址的实例是帧中继网中的

DLCI(Data Link Connection Identifier)地址和ISDN(综合业务数字网:Integrated Services 

Digital Network)中的SPID(Service Providers Profile Identifier)。

   端口地址封装在数据报的TCP报头或UDP报头中。端口地址是源主机告诉目标主机本数据报是发给对

方的哪个应用程序的。

    计算机网络是靠网络地址、物理地址和端口地址的联合寻址来完成数据传送的。缺少其中的任何一

个地址,网络都无法完成寻址。(点对点连接的通讯是一个另外。点对点通讯时,两台主机用一条物理线

路到达另外那台主机,物理地址是没有必要的了)

    

5.1 IP地址寻址


5.1.1 IP地址

    IP地址是一个4字节的地址码。IP地址可以用点分十进制表示,也可以用二进制表示。

    如:200.1.25.7 = 11001000 00000001 00011001 00000111

    IP地址被封装在数据包的IP报头中,供路由器在网间寻址的时候使用。因此,网络中的每台主机,既有

自己的MAC地址,也有自己的IP地址。MAC地址用于网段内寻址IP地址则用于网段间寻址

    IP地址分为A、B、C、D、E共5类,如图5.1。


     wKioL1dXxlChDUPMAAFxLnnsUcg902.jpg

                          图5.1 IP地址的分类


    A、B、C类地址是我们常用来为主机分配的IP地址,D类地址用于组播组的地址标识,E类地址是IETF

(Internet Engineering Task Force)组保留的IP地址,用于该组织自己研究。

    一个IP地址分为两部分:网络地址码部分和主机码部分。A、B、C类IP地址的网络地址码部分和主机码

部分如下图:


        wKioL1dXyRLhny_lAAGb86AO8k4743.jpg

                     图5.2 IP地址的网络地址码部分和主机码部分


    把一个主机的IP地址的主机码置为全0得到的地址码,就是这台主机所在网络的网络地址。例如

200.1.25.7是一个C类IP地址,将其主机码部分(最后一个字节)置为全0所得的200.1.25.0就是200.1.25.7

主机所在网络的网络地址。

    我们知道MAC地址是固化在网卡中的,由网卡的制造厂家随机生成,那IP地址是怎么得到的呢?IP地址

是由国际网络互联信息中心(InterNIC: Internet Information Center)分配的,它在美国IP地址注册机构

(IANA: Internet Assigned Number Authority)的授权下操作。我们通常从ISP(互联网服务提供商)处

购买IP地址,ISP可以分配它所购买的一部分IP地址给你。

    A类IP地址通常分配给非常大型的网络,因为A类地址主机位有3个字节的主机编码,提供多达1600万个

(2^24 - 2)IP地址给主机。全球只有126个A类网络地址,目前已经没有A类地址可以分配了。当访问国外

网站时,留心观察IE浏览器的左下方地址栏,可以看到一些网站分配了A类IP地址。

    B类IP地址通常分配给大机构和大型企业,每个B类网络地址可提供6万5千多个(2^16 - 2)主机IP地

址。

    C类IP地址用于小型网络,大约有200万个C类地址。C类地址只有1个字节用来表示这个网络中的主机,

因此每个C类网络只能提供254(2^8 - 2)个IP地址。

    从图5.1的IP地址分类中看到,A类地址的第一个字节最大为126,而B类地址的第一个字节最小为128,

第一个字节为127的IP地址,即不属于A类,也不属于B类。第一个字节为127的IP地址实际上被保留用作回路

测试,即主机把数据发送给自己。例如127.0.0.1是一个常用作回路测试的IP地址。

    另外,有两类IP地址不能分配给主机:网络地址广播地址

    广播地址是主机码置为全1的IP地址,若198.150.11.255是网络198.150.11.0中的广播地址。

    有些IP地址不必从IANA(Internet Assigned Number Authority)处申请得到,这类IP地址的范围下图给

出。


          wKiom1dX0c-zA2IVAADPFWIEp8Q047.jpg

                    图5.3 内部IP地址


    RFC 1918文件分别在A、B、C类地址中指定了3块作为内部IP地址,这IP地址可以随便在局域网中使用

但是不能用在互联网中。

    由于网络的广泛运用,如今4个字节的IP地址(IPv4)已经不够用,为适应这种状况,新的IP版本IPv6已

经开发出来。IPv6使用16个字节的地址编码。


5.1.2 ARP协议

    主机在发送数据前,需要为这个数据封装报头。在报头中,最重要的东西就是地址,在数据帧的3个报

头中,需要封装目标MAC地址、目标IP地址、目标端口地址。

    要发送数据,应用程序要么给出目标主机的IP地址,要么给出目标主机的主机名或域名,否则就无法指

明数据要发送给谁了。

    但是,目标主机MAC地址固化在对方主机网卡上,如何给出目标主机的MAC地址呢?事实上,应用程序发

送数据时,只知道目标主机的IP地址,无法知道目标主机的MAC地址。ARP协议的程序可以完成用目标主机的

IP地址查到它的MAC地址的功能。


             wKiom1dX147h269JAAGR4zTCFmU618.jpg

                                    图5.4 ARP请求和ARP应答


    当主机176.10.16.1需要向主机170.10.16.6发送数据时,它的ARP程序就会发出ARP请求广播报文,询问

网络中哪台主机是170.10.16.6,并请求它应答自己的查询。网络中的所有主机都会收到这个查询请求广

播,但是只有176.10.16.6主机会响应这个查询请求,向源主机发送ARP应答报文,把自己的MAC地址传送给

源主机,于是源主机便得到了目标主机的MAC地址。这时,源主机就可以把目标主机的IP地址和MAC地址封装

到数据报的IP报头和帧报头了。

    为了下次再向主机176.10.16.6发送数据时不再向网络查询了,ARP程序会将这次查询结果保存起来。ARP保存网络中其他主机MAC地址的表称为ARP表。


                  wKiom1dYGdzBoNoXAACj9F6nGKk428.png              

                              图5.5 主机中的ARP表


    当别人给ARP程序一个IP地址,要求查询出这个IP地址对应的主机的MAC地址时,ARP程序先查

询自己的ARP表,如果ARP表中有这个IP对应的MAC地址,则给出所需的MAC地址;如果ARP表中

没有,则需要通过ARP广播和ARP应答机制来获取对方的MAC地址。ARP程序在局域网中是一个非常

重要的程序,没有ARP程序,我们就无法得到目标主机的MAC地址,也就无法封装帧报头。ARP程序

通常是操作系统的一部分。

 

5.1.3 IP地址表现网络地址

    IP地址是一个层次化的地址,既能表示主机的地址,也表现出这个主机所在的网络地址。


       wKiom1dc2nXhSItiAAFi4wQ1Y0s526.jpg

                                图5.6 网络地址


    在图5.9中有3个C类IP地址的网络192.168.10.0、192.168.11.0、192.168.12.0,它们由路由器互联在

一起,可以通过路由器交换数据。当主机192.168.10.2需要与主机192.168.11.19通讯时,通过比较目标主

机IP的网络地址编码部分(前3个字节),它便知道对方与自己不在一个网段上,与主机192.168.11.19的通

讯需要通过路由器转发才能到达。

    每个网络都必须有自己的网络地址。事实上,我们必须先获得网络的网络IP地址,然后才用这个网络IP

地址为这个网络上的主机分配IP地址的。


5.2 子网划分


5.2.1 为什么要划分子网

    如果你的单位申请获得一个B类网络地址172.50.0.0,你们单位的所有主机的IP地址就将在这个网络地

址里分配。如172.50.0.1、172.50.0.2、172.50.0.3 ...... 那么这个B类地址能为多少台主机分配IP地址

呢?

    一个B类IP地址有两个字节用作主机地址编码,因此可以编出2^16 - 2 = 65534个IP地址。能想象6万多

台主机在同一个网段内共享介质冲突的情景吗?它们在同一个网段内的共享介质冲突和它们发出的类似ARP

这样那样的广播会让网络根本工作不起来。因此,需要把172.50.0.0网络进一步划分成更小的子网,以在子

网之间隔离介质访问冲突和广播报。

    将一个大的网络进一步划分成一个个小的子网的另外一个目的是网络管理和网络安全的需要,我们总是

把财务部、档案部的网络与其它网络分割开来,外部进入财务部、档案部的数据通讯应该受到限制才对。

    我们来假设172.50.0.0这个网络地址分配给铁道部,铁道部网络中的主机IP前两个字节都将是172.50。

铁道部计算机中心会将自己的网络划分为郑州机务段、济南机务段、长沙机务段......等铁道部的各个子

网。这样的网络层次体系是任何一个大型网络需要的。

    那么,郑州机务段、济南机务段、长沙机务段......等各个子网的地址是什么呢?怎样能让主机和路由

器分清目标主机在哪个子网中呢?这就需要给每个子网分配子网的网络IP地址。

    通行的解决办法是将IP地址的主机编码部分挪出一些位作为子网编码

    我们可以在172.50.0.0地址中,将第3个字节挪用出来表示各子网,而不再分配给主机地址。这样,我

们可以用172.50.1.0表示郑州机务段的子网,172.50.2.0分配给济南机务段的作为该子网的网络地址,

172.50.3.0分配给长沙机务段的作为该子网的网络地址......各机务段的子网地址分配如下图:


                 wKioL1deJI_CThkLAAApbjcrdSM254.png

                    图5.7 铁道部子网分配


    事实上,为了解决介质访问冲突和广播风暴的技术问题,一个网段超过200台主机的情况是很少的。一

个好的网络规划中,每个网段的主机数都不超过80个

    因此,划分子网是网络设计与规划中非常重要的一项工作。


5.2.2 子网掩码

    为了给子网编址,就需要挪用主机编码的编码位

    我们来看下面的例子:

    一个小型企业分得了一个C类地址202.33.150.0,准备根据市场部、生产部、车间、财务部分成4个子

网。现在需要从最后一个主机地址码字节中借用2位(2^2 = 4)来为这4个子网编址。子网编址的结果是:

       市场部子网地址:202.33.150.0  (00000000)

       生产部子网地址:202.33.150.64 (01000000)

       车间子网地址  :202.33.150.128(10000000)

       财务部子网地址:202.33.150.192(11000000)

    后面括号内是IP地址最后一个字节的二进制表示,其中绿色带下划线部分是挪用主机编码部分的高2位

为子网编址。现在,根据上面的设计,我们把202.33.150.0、202.33.150.64、202.33.150.128、

202.33.150.192定位4个部门的子网地址,而不是主机地址。可是,别人怎么知道它们不是普通的主机地址

呢?我们需要设计一种辅助编码,用这个编码来告诉别人子网地址是什么,这个编码就是子网掩码。一个子

网的掩码是这样编排的:用4个字节的点分十进制来表示时,其网络地址部分全置为1,它的主机地址部分全

置为0。如上例的子网掩码为:

                      11111111.11111111.11111111.11000000

    通过子网掩码,我们就可以知道网络地址位是26位,而主机地址的位数是6位。

    子网掩码通常和IP地址一起使用,用来说明IP地址所在的子网的网络地址。

    子网掩码在路由器设备上非常重要。路由器要从IP报头中取出目标IP地址,用子网掩码和目标IP地址进

行与操作,进而得到目标IP地址所在网络的网络地址。路由器是根据网络地址来工作的。


5.2.3 子网中的地址分配

    如上面讨论的市场部、生产部、车间、财务部的例子中,其中地址202.33.150.0、202.33.150.64、

202.33.150.128、202.33.150.192分别作为各个部门的(子网)网络地址,而下列地址

       市场部子网广播地址:202.33.150.63 (00111111)

       生产部子网广播地址:202.33.150.127(01111111)

       车间子网广播地址  :202.33.150.191(10111111)

       财务部子网广播地址:202.33.150.255(11111111

    这些广播地址是指6位主机地址全为1的地址。子网的地址分配总结起来就是:除作为主机子网网络地址

和子网广播地址的2个地址外,其他地址均可分配给主机使用。


5.3 动态IP地址分配

    

    每一台计算机都需要配置IP地址。动态IP地址分配是指计算机不用事先配置好IP地址,在其启动的时候

由网络中一台IP地址分配服务器为它分配。当这台计算机关闭后,地址分配服务器将收回其分配的IP地址。

    有3个动态分配IP地址的协议:RARP、BOOTP、DHCP,它们的工作原理基本相同。我们拿DHCP的工作原理

来解释动态IP地址分配的过程。

             wKiom1deT_3QX2VOAAB4Kjsg5lc041.png

                            图5.8 动态IP地址分配的过程


    一台主机开机后如果发现自己没有配置IP地址,就将启动自己的DHCP程序, 以动态获得IP地址。DHCP

首先向网络中发“DHCP发现请求”广播包,寻找DHCP服务器。DHCP服务器收听到这个请求后,将向请求主机

发应答包(单播)。请求主机这时就可以向DHCP服务器发送“IP地址分配请求”。最后,DHCP服务器就可以

在自己的IP地址池中取出一个IP地址,分配给请求主机。


5.4 域名系统DNS


    用IP地址来表示一台计算机的地址,其点分十进制数不易记忆。由于没有任何可以联想的东西,即使记

住后也很容易遗忘。Internet上开发了一台计算机命名方案称为域名服务DNS(Domain Name Service),可

以为每台计算机起一个域名,用一串字符、数字和点号组成,DNS用来将这个域名翻译成相应的IP地址。如

北京信息工程学院的WWW服务器的域名www.biti.edu.cn,通过DNS服务器解析出这台服务器的IP地址是

200.68.32.35。

    网络寻址是依靠IP地址、物理地址和端口地址完成的。所以,为了把数据传送到目标主机,域名需要被

翻译成IP地址供发送主机封装到数据报的报头中。负责将域名翻译成IP地址的是域名服务器


5.4.1 域名的结构

    国际上,域名规定是一个层次的主机地址名,层次由“.”来划分。越在后面的部分,所在层次越高。

www.biti.edu.cn这个域名中的cn代表中国,edu代表教育机构,biti则代表北京信息工程学院,www表示北

京工程学院biti.edu.cn主机中的WWW服务器。

    域名的层次化不仅能使域名表现出更多的信息,而且是为了DNS域名解析带来方便。域名解析是依靠一

种庞大的数据库完成的。数据库中存放了大量域名与IP地址的对应记录。DNS域名解析本来就是网络为了方

便使用而增加的负担,需要高速完成。层次化可以为数据库在大规模的数据检索中加快检索速度。

    在域名的层次结构中,每一个层次被称为一个域。

    常见的国家和地区域名有:

      cn:中国;

      us:美国

      uk:英国

      jp:日本

      hk:香港

      tw:台湾

    常见的机构域名:

      com:商业实体域名。

      edu:教育机构域名。

      net:网络服务域名。这个域名提供给网络提供商的机器、网络管理计算机和网络上的节点计算机。

      org:非赢利机构域名。

      mil:军事用户。

      gov:政府机构域名。不带国家域名的gov域被美国把持。


5.4.2 DNS服务原理

    主机中应用程序在通讯时,把数据交给TCP程序,同时还把目标端口地址、源端口地址和目标主机的IP

地址交给TCP。目标端口地址和源端口地址供TCP程序封装TCP报头使用,目标主机IP地址由TCP程序转交给IP

程序,供IP程序封装IP报头使用。

    如果应用程序拿到的是目标主机的域名而不是它的IP地址,就需要调用TCP/IP协议中应用层DNS程序将目标主机的域名解析为它的IP地址。


                  wKiom1deYlOA93QHAAFqarr4Wsc975.png

                                  图5.9 DNS的工作原理


    一台主机为了支持域名解析,就需要在配置中指明为自己服务的DNS服务器。如果5.9所示,主机A为了

解析一个域名,把待解析的域名发送给自己机器配置指明的DNS服务器。一般都是配置指向本地的DNS服务

器。本地DNS服务器收到待解析的域名后,便查询自己的DNS解析数据库,将该域名的对应IP地址查到后,发

还给A主机。

    如果本地DNS服务器的数据库中无法找到待解析域名的IP地址,则将此解析交给上级DNS服务器,直到查

到自己需要寻找的IP地址。

    本地DNS服务器中的域名数据库可以从上级DNS提供处下载,并得到上级服务器的一种称为“区域传输

(Zone Transfer)”的维护。本地DNS服务器可以添加上本地化的域名解析。