在众多的网络故障中,最令人头痛的是网络是通的,但网速变慢。初次面对这类“软”故障时,往往有的人会束手无策,本文为大家介绍引起此类“软”故障常见的原因及排除方法,提高大家对实际问题的处理能力。
★网线问题
我们知道,双绞线是由4对线严格而合理地紧密度绞和在一起,减少串扰和背景噪音的影响。同时,在T568A标准和T568B标准中仅使用了双绞线的1、2和3、6四条线。其中,1、2用于发送,3、6用于接收,而且1、2必须来自一个绕对,3、6必须来自一个绕对。只有这样,才能最大限度的避免串扰,保证数据传输。本人在实践中发现不按正确标准(T586A、T586B)制作的网线,存在很大的隐患。有的开始一段时间使用正常,但过一段时间后,性能下降,网速变慢。因此,我们现在要求一律按T586A、T586B标准来压制网线。
★回路问题
一般当网络较小涉及的节点数不是很多、结构不是很复杂时,这种现象很少发生。但在一些比较复杂的网络中,由于一些原因经常有多余的备用线路,则会构成回路,数据包会不断发送和校验数据,从而影响整体网速,并且查找比较困难。为避免这种情况发生,要求我们在铺设网线时一定要养成良好的习惯,网线打上明显的标签,有备用线路的地方要做好记载。
★广播风暴
作为发现未知设备的主要手段,广播在网络中起着非常重要的作用。然而,随着网络计算机数量的增多,广播包的数量会急剧增加。当广播包的数量达到30%时,网络传输效率将会明显下降。当网卡或网络设备损坏后,会不停地发送广播包,从而导致广播风暴,使网络通信陷于瘫痪。因此,当网络设备硬件有故障时也会引起网速变慢。当怀疑有此类故障时,首先可采用置换法替换集线器或交换机来排除集线设备故障。然后关掉集线器的电源后用ping命令对所涉及计算机逐一测试,找到有故障网卡的计算机,更换新的网卡可恢复网速正常。
★端口瓶颈
实际上路由器的广域网端口和局域网端口、交换机端口、集线器端口和服务器网卡等都有可能成为网络瓶颈。我们可在网络使用高峰时段,利用网管软件查看路由器、交换机、服务器端口的数据流量(用netstat命令也可统计各个端口的数据流量),确认网络数据流通瓶颈的位置,设法增加其带宽。如更换服务器网卡为100M或1000M、安装多个网卡、通过改变路由器上配置来增加带宽等方法都可以有效地缓解网络瓶颈,最大限度地提高数据传输速度。
★蠕虫病毒
蠕虫病毒对网络速度的影响越来越严重。这种病毒导致被感染的用户只要一连上网就不停地往外发邮件,病毒选择用户个人电脑中的随机文档附加在用户机子上的通讯簿的随机地址进行邮件发送。成百上千的这种垃圾邮件有的排着队往外发送,有的又成批成批地被退回来堆在服务器上。造成个别骨干互联网出现明显拥塞,个别局域网近于瘫痪。因此,我们应时常注意各种新病毒通告,了解各种病毒特征;及时升级所用杀毒软件。计算机也要及时升级、安装系统补丁程序;同时卸载不必要的服务,关闭不必要的端口,以提高系统的安全性和可靠性。
总之,计算机网络的应用越来越广泛,如何提高计算机网络的管理水平,不断学习,注重理论知识和实践经验积累相当重要。
IP地址的含义、格式及申请
国际IP地址和国际化域名是使用Internet网及其相联的网络系统,运行Internet网必然涉及的十分重要的概念,不掌握它用户无法进行通信。在In-ternet网的发展基础上,人们于1982年提出了一种IP协议,此协议要求参加Internet网的网节点要有一个统一规定格式的地址,这个地址称为符合IP协议的地址,缩称为IP地址。
什么是IP地址的物理含义?
1.它是人们在环球网上的通信地址
IP地址是人们在全世界环球网和中国教育与科研计算机网上使用的唯一、明确、供全世界识别的通邮地址。
2.它是Internet网运行的通用地址
在Internet网上,每个网络和每一台计算机都被唯一分配一个IP地址,这个IP地址在整个网络(Internet网)中是唯一的。
3.它是全球认可有的通用地址格式
在Internet上通信必须有一个32位的二进制地址,采用这种32位(bit)的通用地址格式,才能保证Internet网成为向全世界开放的、可互操作的通信系统。它是全球认可的计算机网络标识方法,通过这种方法,才能正确标识信息的收与发。
4.它是微机、服务器和路由器的端口地址
在Internet网上,任何一台服务器和路由器的每一个端口必须有一个IP地址。
5.它是运行TCP/IP协议的唯一标识符
TCP/IP协议与Novell的网络协议的区别就在于它是上层协议,这是在Internet发展中形成的。不管下层是什么拓扑结构,以太网、TokenRing、passing令牌传递网、FDDI网上的地址,全要统一在这上层IP地址上。任何网要与Internet网挂联上,只要用IP地址就可以了。
一句话,您的微机上网后,IP地址是唯一的。
IP地址的格式和分类
1.IP地址的格式IP地址有二进制格式和十进制格式;十进制格式是由二进制翻译过去的。用十进制表示,是为了使用户和网管人员便于使用和掌握。
二进制的IP地址共有32位,例如:10000011,01101011,00000011,00011000。
每八位组用一个十进制数表示,并以点分隔称为点分法。上例变为131.107.3.24
2.IP地址的分类
IP地址分为五类等级:A、B、C、D、E。
通用格式为
M:类的等级号;NET:网络号;HOST:主机号(在Internet上的计算机都称为主机)。
等级号标志为A、B、C。M、NET和HOST号随不同等级在32位中所占的位数不同。A、B、C类的区别见下表。
·A类IP地址:一般用于大型网络,结构如下:
前一个八位代表网络号,后三个八位代表主机号。32位的第1、2、3位为000;十进制的第一组为000~127。只要见为000~126,就知为A类地址,十进制可写成001.x.y.z~126.x.y.z。
·B类IP地址:一般用于Cernet网的各地区网管中心。
前2个八位代表网络号,后2个八位代表主机号。32位第1、2、3位为100;十进制的第一组为128~191,由此值用户可知为B类IP地址。十进制写成(128~191).x.y.z。一个B类IP地址共有214=16384个C类IP地址,所以华中地区网只能联16384个主机或子网络。
·C类地址:一般用于校园网。
C类IP地址的32位前三位为110,十进制第一组为192~223,见到(192~223).x.y.z,由此可知为C类地址。武汉工业大学的IP地址为202.114.28.(1~254)。一个C类地址共可联上28=256个主机。Chinanet申请了32个C类地址。武汉工业大学申请了16个C地址(待驻日本亚太地区组织批复)。一个C类IP地址可用屏蔽码技术改为128个子网段,每个子网段可联上相应的主机数。C类地址间只有通过路由器才能工作。
IP地址的屏蔽码
屏蔽码是IP地址的特殊标注法。
1.无子网的表示法
对无子网的IP地址,可写成主机号为0的屏蔽码。如
IP地址202.114.80.5
屏蔽码255.255.255.0
也可以缺省屏蔽码,只写IP地址,如,202.114.80.5。
2.有子网的表示法
有子网时,一定要二者配对出现。以C类地址为例。
(1)IP地址表示网络号(前3个八位),后一个八位既表明子网号,又说明主机号,还说明两个IP地址是否属于一个网段。如果属于同一网段,这两个地址间的信息交换就不通过路由器或网桥。如果不属同一网段,也就是子网号不同,两个地址的通讯就要通过路由器。
例如:
202.114.80.1主机号为00000001
202.114.80.16主机号为00010000
以上前面三位全是000,说明属同一网段,网段交换信息可不通过路由器。
例如:
202.114.80.1主机号为00000001
202.114.80.130主机号为01000010
前面三位000与010不同,说明二者属不同网段,要交换信息需要通过路由器。其子网上主机号各为1和2。
(2)屏蔽码的功用是说明有子网和有几个子网(2个、3~4个、5~8个),但子网数只能表示为一个范围,不能确切讲具体几个子网。屏蔽码不说明具体子网号。
有子网的屏蔽码格式(对C类地址):
主机号前几位为子网号,后面不写主机,全写0。
·在IP地址中子网及主机号的表示法:有2个子网,前面第一位为0和1,故只占一位。表示为:
00000000和10000000
有3~4个子网,则需要前面两位,可表示为00、01、11、10。
·在屏蔽码中子网和主机号的表示法:主机号不写了,全写0,而子网号只写1(对2个子网)、11(对3~4个子网)、111(对5~8个子网),以21、22、23来描述子网数,其几次方值用来描述占主机号位的位数。
21:2个子网,占1位;
22:4个子网,占2位(3~4个子网);
23:8个子网,占3位(5~8个子网)。
总之,屏蔽码的格式是前三个八位全为1(即255.255.255),后一个八位的前几位为1、11或111,其余全为0。
例如,255.255.255.224最后八位为11100000,表示8个子网,32台主机。
IP地址的申请组织及获取方法
IP地址必须由国际组织统一分配。
1.建立与刷新IP地址的组织
IP组织分A:B、C、D、E五类,A类为最高级IP地址。
(1)分配最高一级IP地址的国际组织———NIC
NetworkInformationCenter国际网络信息中心负责:分配A类IP地址、授权分配B类IP地址的组织———自治区系统、有权重新刷新IP地址。
(2)分配B类IP地址的国际组织———InterNIC、APNIC和ENIC目前全世界有三个自治区系统组织:ENIC负责欧洲地区的分配工作,InterNIC负责北美地区,APNIC负责亚太地区,设在日本东京大学。我国属APNIC,被分配B类地址。CERNET网的的华中地区网管中心设在华中理工大学,获得一个B类地址。中国的管理自治区号AS=4134。APNIC总共给中国CERNET网10个B类地址。
在该例中,我用ping检查www.mattmarg.com ,即,我每秒钟向www.mattmarg.com发送一个ICMP回送请求信息包,当ping程序从远程主机(www.mattmarg.com)收到回送答复时, 它在屏幕上显示答复,并列出几条有用的信息:第1条信息是返回答复的主机的IP地址(通常应该是www.mattmarg.com的IP地址 );第2条信息是序列号,从1开始;第3条信息是 Time To Live(TTL),最后一条是获得答复所用的时间(毫秒)
序列号显示了哪个信息包获得了答复。如果某个序列号被跳过,则以为着某个信息包(回送请求或回送对方)未被对方收到,而在网络传输过程中丢失了。如果被跳过的序列号比较少,还无需担心什么,但如果很多序列号被跳过,则意味着网络存在问题。
Time To Live (TTL) 域的信息很有趣。每一个被发送出的IP信息包都有一个TTL域,该域被设置为一个较高的数值(在本例中ping信息包的TTL值为255)。当信息包在网络中被传输时,TTL的域值通过一个路由器时递减1;当TTL 递减到0时,信息包被路由器抛弃。IP规范规定:TTL应该被设置为60 (尽管ping 信息包的TTL是255)。这样做主要是为了让一个信息包永远在为了中存在。担该信息对我们来说有特殊的含义。我们可以使用TTL大致确定该信息包经过了多少个路由器过渡段。在本例中,用255减去N,N是返回的回送答复的TTL。如果TTL值在连续几个ping中发生变化,这说明返回的信息包经过了不同的路由器。
time显示了信息包到达远程主机后返回的时间。计算定位为毫秒。通常网卡下,来回时间在200毫秒以下最好。信息包抵达目的地的时间叫做latency(等待时间),如果你看到来回时间变化很大(叫做"jitter(抖动)),这说明同主机之间的联接状况很差。但是如果在较大抽样范围(50到100)内出现几个这样的情况也不必担心。
要退出ping, 则键入control-c。这激昂中止该程序并打印总结:有多少信息包被传输,有多少信息包被接收到,丢失的信息包的比例,以及信息包来回时间的最低、最高和平均值。
ping是测试为了联接状况以及信息包发送和接收状况非常有用的工具。以后我还将谈到一个更复杂的工具:traceroute,它能告诉你信息包所经过的路由器的路径。
局域网中代理服务器、路由器的配置案例
局域网中代理服务器、路由器的配置案例网络技术的飞速发展,使企事业单位局域网接入INTERNET共享资源的方式越来越多,就大多数而言,DDN专线以其性能稳定、扩充性好的优势成为普遍采用的方式,DDN方式的连接在硬件的需求上是简单的,仅需要一台路由器(router)、代理服务器(proxy server)即可,但在系统的配置上对许多的网络管理人员来讲是一个比较棘手的问题。下面以CISCO路由器为例,笔者就几种比较成功的配置方法作以介绍,以供同行借鉴:
一、直接通过路由器访问INTERNET资源的配置
1. 总体思路和设备连接方法 一般情况下,单位内部的局域网都使用INTERNET上的保留地址: 10.0.0.0/8:10.0.0.0~10.255.255.255 172.16.0.0/12:172.16.0.0~172.31.255.255 192.168.0.0/16:192.168.0.0~192.168.255.255 在常规情况下,单位内部的工作站在直接利用路由对外访问时,会因工作站使用的是互联网上的保留地址,而被路由器过滤掉,从而导致无法访问互联网资源。解决这一问题的办法是利用路由操作系统提供的NAT(Network Address Translation)地址转换功能,将内部网的私有地址转换成互联网上的合法地址,使得不具有合法IP地址的用户可以通过NAT访问到外部Internet。这样做的好处是无需配备代理服务器,减少投资,还可以节约合法IP地址,并提高了内部网络的安全性。
NAT有两种类型:Single模式和global模式。
使用NAT的single模式,就像它的名字一样,可以将众多的本地局域网主机映射为一个Internet地址。局域网内的所有主机对外部Internet网络而言,都被看做一个Internet用户。本地局域网内的主机继续使用本地地址。 使用NAT的global模式,路由器的接口将众多的本地局域网主机映射为一定的Internet地址范围(IP地址池)。当本地主机端口与Internet上的主机连接时,IP地址池中的某个IP地址被自动分配给该本地主机,连接中断后动态分配的IP地址将被释放,释放的IP地址可被其他本地主机使用。
下面以我单位的网络环境为例,将配置方法及过程列示出来,供大家参考。 我单位利用联通光缆(V.35)接入INTERNET的,路由器是CISCO2610,局域网采用的是INTEL550百兆交换机,联通向我们提供了下列四个IP地址:
211.90.137.25(255.255.255.252)用于本地路由器的广域网端口
211.90.137.26(255.255.255.252)用于对方(联通)的端口
211.90.139.41(255.255.255.252)供自己支配
211.90.139.42(255.255.255.252)供自己支配
2. 路由器的配置
(1) 网络连接示意图:
说明:校内所有的工作站都与交换机连接,路由器也通过以太口连接在内部交换机上,路由器上以太口使用内部私有地址,光纤的两端分别使用了联通分配的两个有效IP地址。在这种连接方式下,只要在路由器内部设置NAT,便可以使得单位内部的所有工作站访问INTERNTE了,在每台工作站上只需设置网关指向路由器的以太口(192.168.0.3)即可上网,无需设代理,并节省了两个有效IP地址可供自己自由支配(如建立单位自已的WEB和E-MAIL服务器)。但也存在缺点:不能享受代理服务器提供的CACHE服务来提高访问速度。所以本配置方案适合工作站数量较少的单位,对于单位内部工作站数量较多的情况可以使用后面介绍的两种方法。路由器上具体配置如下:
(2)路由器的配置
en
config t
ip nat pool c2610 211.90.139.41 211.90.139.42 netmask 255.255.255.252 (定义一个地址池c2601,其内包含了两个空闲的合法IP地址,供NAT转换时使用)
int e0/0
ip address 192.168.0.3 255.255.255.0
ip nat inside
exit
(设置以太口的IP地址,并设置其为连接内部网的端口)
interface s0/0
ip address 211.90.137.25 255.255.255.252
ip nat outside exit
(设置广域网端口的IP地址,并设置其为连接外部网的端口)
ip route 0.0.0.0 0.0.0.0 211.90.137.26
(设置动态路由)
access-list 2 permit 192.168.0.1 0.0.0.255
(建立访问控制列表)
Dynamic NAT
ip nat inside source list 2 pool c2610 overload
(建立动态地址翻译)
line console 0
exec-timeout 0 0
line vty 0 4
end
wr (保存所作的设置)
3. 工作站的配置 要求使用静态IP地址,在TCP/IP属性中进行设置,并设置关网为192.168.0.3(路由器以太口IP地址),设置DNS为接入商提供的地址,浏览器等上网工具中无需作任何特殊设置。
二、通过代理服务器访问INTERNET资源的配置
1. 总体的思路和设备连接方法 利用代理服务器方式访问INTERNET资源,优点是可以利用代理服务器提供的CACHE服务来提高INTERNET的访问速度和效率。比较适合工作站较多的单位使用。缺点是需要专门配备一台计算机作为代理服务器,增加了投资成本;且较第一种法方还需多占用两个合法IP地址,网络安全性不高。 采用这种方案来访问互联网,设备连接方法如下:
代理服务器上安装两块网卡,一块连接内部网,设置内部私有地址;另一块连接路由器以太口,设置联通分配的合法地址(211.90.139.42),并设置其网关为211.90.139.41(路由器以太口) 路由器以太口也设置联通分配的合法IP地址(211.90.139.41) 这样,将设备连接好后,在代理服务器上安装代理软件,并在工作站上设置代理即可访问INTERNET
2. 路由器的配置
(1) 网络连接示意图: 说明:在上图中,单位内的所有计算机通过交换机直接与代理服务器上的内部网网卡(192.168.0.4)通讯,然后在代理服务软件的控制之下经过路由器访问INTERNET。
(2)路由器的配置
en
config t
int e0/0
ip address 211.90.139.41 255.255.255.252 exit
(设置以太口的IP地址)
interface s0/0
ip address 211.90.137.25 255.255.255.252
exit
(设置广域网端口的IP地址)
ip route 0.0.0.0 0.0.0.0 211.90.137.26 ip routing
(设置动态路由,并激活路由)
end
wr
(保存所作的设置)
3. 代理服务器的设置 代理服务器必须按装两块网卡,一块用于连接内部局域网,设IP地址为内部私有地址(如:192.168.0.4 netmask 255.255.255.0)无需设网关。另一块用于连接路由器,设置联通分配的合法地址(211.90.139.42 netmask 255.255.255.252),并设置其网关为:211.90.139.41(路由器以太口)。
按照上面的方法设置好网卡后,再安装一套代理软件即可。(如:MS PROXY SERVER 2.0、WINGATE等,代理软件的安装调试方法请参阅其它资料) 4. 工作站的设置 (1) INTERNET EXPLORER设置 工具菜单->internet选项->连接->局域网设置->使用代理服务器->地址:192.168.0.4端口:80->确定 (2)其他软件的设置请参阅软件说明。
三、直接访问与代理访问并存的配置
1. 总体思路和设备连接方法 通过上面介绍的两种方法进行配置,都能顺利地实现INTERNET的访问,但每种方法即有优点,又存在一定的缺点,且两种方法的优点是互补的。哪能不能将两种方法的优点合二为一,方法三就是一种鱼和熊掌能够兼得的方案。集成了一、二两种方法的优点,即节省了IP地址,又能通过代理服务器提供的CACHE来提高INTERNET的访问效率。
采用这种方案来访问互联网,设备连接方法如下:
代理服务器上安装两块网卡,两块网卡均连接在交换机上,在设置IP地址时,两块网卡均设置内部私有地址,但这两个地址应不属于一个网络(即IP地址的网络地址不同),一块用于与内部网通信(网卡1),一块用于与路由器通信(网卡2),否则代理无法实现。 在代理服务器上不要安装NETBEUI协议,仅安装TCP/IP协议。(注意:这一步必须要做,否则会因为代理服务器与交换机之间连接线路冗余而导致代理服务器NETBIOS计算机名冲突而影响正常通信) 路由器以太口也设置一个内部私有地址,该地址因与网卡2的地址在同一个网络(即IP地址的网络地址与网卡2相同)
2. 路由器的设置
(1) 网络连接示意图
(2)路由器的配置
en
config t
ip nat pool c2610 211.90.139.41 211.90.139.42 netmask 255.255.255.252 (定义一个地址池c2601,其内包含了两个空闲的合法IP地址,供NAT转换时使用) int e0/0
ip address 192.168.1.1 255.255.255.0
ip nat inside exit
(设置以太口的IP地址,并设置其为连接内部网的端口)
interface s0/0
ip address 211.90.137.25 255.255.255.252
ip nat outside exit
(设置广域网端口的IP地址,并设置其为连接外部网的端口)
ip route 0.0.0.0 0.0.0.0 211.90.137.26
(设置动态路由)
access-list 2 permit 192.168.0.1 0.0.0.255
(建立访问控制列表)
Dynamic NAT !
ip nat inside source list 2 pool c2610 overload
(建立动态地址翻译)
line console 0 exec-timeout 0 0
line vty 0 4 end wr (保存所作的设置)
2. 代理服务器的设置 代理服务器上安装两块网卡,两块网卡均连接在交换机上,网卡1设IP地址为:192.168.0.4,不设网关;网卡2设IP地址为:192.168.1.2,设其网关为192.168.1.1(路由器以太口)。
按照上面的方法设置好网卡后,再安装一套代理软件即可。(如:MS PROXY SERVER 2.0、WINGATE等,代理软件的安装调试方法请参阅其它资料) 注意:在安装代理软件时(以MS-PROXY 2.0为例),在指定LAT表时,应将地址范围192.168.0.0-192.168.255.255排除在外,否则代理无法正常工作。
3. 工作站的设置 在这种配置之下,工作站既可以通过设置代理上网,也可以通过设置网关直接上网。
若只通过代理上网,设置方法与方法二完全一致。
若只通过网关上网,要求工作站必须设置静态IP地址,IP地址应设为192.168.1.X,
与路由器以太口在同一个网段,并设置网关为:192.168.1.1,设置DNS为接入商提供的地址。 若想两种方法并存,则需要在TCP/IP中设置两个静态IP地址:192.168.0.X和192.168.1.X,并设置网关为:192.168.1.1 ,DNS为接入商提供的地址。使用时只需在浏览器等软件中打开或关闭代理设置即可在代理与网关上网之间进行切换。
TCP/IP协议
2.1 OSI网络分层参考模型
网络协议设计者不应当设计一个单一、巨大的协议来为所有形式的通信规定完整的细节,而应把通信问题划分成多个小问题,然后为每一个小问题设计一个单独的协议。这样做使得每个协议的设计、分析、时限和测试比较容易。协议划分的一个主要原则是确保目标系统有效且效率高。为了提高效率,每个协议只应该注意没有被其他协议处理过的那部分通信问题;为了主协议的实现更加有效,协议之间应该能够共享特定的数据结构;同时这些协议的组合应该能处理所有可能的硬件错误以及其它异常情况。为了保证这些协议工作的协同性,应当将协议设计和开发成完整的、协作的协议系列(即协议族),而不是孤立地开发每个协议。
在网络历史的早期,国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)共同出版了开放系统互联的七层参考模型。一台计算机操作系统中的网络过程包括从应用请求(在协议栈的顶部)到网络介质(底部) ,OSI参考模型把功能分成七个分立的层次。图2.1表示了OSI分层模型。
┌─────┐
│ 应用层 │←第七层
├─────┤
│ 表示层 │
├─────┤
│ 会话层 │
├─────┤
│ 传输层 │
├─────┤
│ 网络层 │
├─────┤
│数据链路层│
├─────┤
│ 物理层 │←第一层
└─────┘
图2.1 OSI七层参考模型
OSI模型的七层分别进行以下的操作:
第一层——物理层
第一层负责最后将信息编码成电流脉冲或其它信号用于网上传输。它由计算机和网络介质之间的实际界面组成,可定义电气信号、符号、线的状态和时钟要求、数据编码和数据传输用的连接器。如最常用的RS-232规范、10BASE-T的曼彻斯特编码以及RJ-45就属于第一层。所有比物理层高的层都通过事先定义好的接口而与它通话。如以太网的附属单元接口(AUI),一个DB-15连接器可被用来连接层一和层二。
第二层——数据链路层
数据链路层通过物理网络链路提供可靠的数据传输。不同的数据链路层定义了不同的网络和协议特征,其中包括物理编址、网络拓扑结构、错误校验、帧序列以及流控。物理编址(相对应的是网络编址)定义了设备在数据链路层的编址方式;网络拓扑结构定义了设备的物理连接方式,如总线拓扑结构和环拓扑结构;错误校验向发生传输错误的上层协议告警;数据帧序列重新整理并传输除序列以外的帧;流控可能延缓数据的传输,以使接收设备不会因为在某一时刻接收到超过其处理能力的信息流而崩溃。数据链路层实际上由两个独立的部分组成,介质存取控制(Media Access Control,MAC)和逻辑链路控制层(Logical Link Control,LLC)。MAC描述在共享介质环境中如何进行站的调度、发生和接收数据。MAC确保信息跨链路的可靠传输,对数据传输进行同步,识别错误和控制数据的流向。一般地讲,MAC只在共享介质环境中才是重要的,只有在共享介质环境中多个节点才能连接到同一传输介质上。IEEE MAC规则定义了地址,以标识数据链路层中的多个设备。逻辑链路控制子层管理单一网络链路上的设备间的通信,IEEE 802.2标准定义了LLC。LLC支持无连接服务和面向连接的服务。在数据链路层的信息帧中定义了许多域。这些域使得多种高层协议可以共享一个物理数据链路。
第三层——网络层
网络层负责在源和终点之间建立连接。它一般包括网络寻径,还可能包括流量控制、错误检查等。相同MAC标准的不同网段之间的数据传输一般只涉及到数据链路层,而不同的MAC标准之间的数据传输都涉及到网络层。例如IP路由器工作在网络层,因而可以实现多种网络间的互联。
第四层——传输层
传输层向高层提供可靠的端到端的网络数据流服务。传输层的功能一般包括流控、多路传输、虚电路管理及差错校验和恢复。流控管理设备之间的数据传输,确保传输设备不发送比接收设备处理能力大的数据;多路传输使得多个应用程序的数据可以传输到一个物理链路上;虚电路由传输层建立、维护和终止;差错校验包括为检测传输错误而建立的各种不同结构;而差错恢复包括所采取的行动(如请求数据重发),以便解决发生的任何错误。传输控制协议(TCP)是提供可靠数据传输的TCP/IP协议族中的传输层协议。
第五层——会话层
会话层建立、管理和终止表示层与实体之间的通信会话。通信会话包括发生在不同网络应用层之间的服务请求和服务应答,这些请求与应答通过会话层的协议实现。它还包括创建检查点,使通信发生中断的时候可以返回到以前的一个状态。
第六层——表示层
表示层提供多种功能用于应用层数据编码和转化,以确保以一个系统应用层发送的信息可以被另一个系统应用层识别。表示层的编码和转化模式包括公用数据表示格式、性能转化表示格式、公用数据压缩模式和公用数据加密模式。
公用数据表示格式就是标准的图像、声音和视频格式。通过使用这些标准格式,不同类型的计算机系统可以相互交换数据;转化模式通过使用不同的文本和数据表示,在系统间交换信息,例如ASCII(American Standard Code for Information Interchange,美国标准信息交换码);标准数据压缩模式确保原始设备上被压缩的数据可以在目标设备上正确的解压;加密模式确保原始设备上加密的数据可以在目标设备上正确地解密。
表示层协议一般不与特殊的协议栈关联,如QuickTime是Applet计算机的视频和音频的标准,MPEG是ISO的视频压缩与编码标准。常见的图形图像格式PCX、GIF、JPEG是不同的静态图像压缩和编码标准。
第七层——应用层
应用层是最接近终端用户的OSI层,这就意味着OSI应用层与用户之间是通过应用软件直接相互作用的。注意,应用层并非由计算机上运行的实际应用软件组成,而是由向应用程序提供访问网络资源的API(Application Program Interface,应用程序接口)组成,这类应用软件程序超出了OSI模型的范畴。应用层的功能一般包括标识通信伙伴、定义资源的可用性和同步通信。因为可能丢失通信伙伴,应用层必须为传输数据的应用子程序定义通信伙伴的标识和可用性。定义资源可用性时,应用层为了请求通信而必须判定是否有足够的网络资源。在同步通信中,所有应用程序之间的通信都需要应用层的协同操作。
OSI的应用层协议包括文件的传输、访问及管理协议(FTAM) ,以及文件虚拟终端协议(VIP)和公用管理系统信息(CMIP)等。
2.2 TCP/IP分层模型
TCP/IP分层模型(TCP/IP Layening Model)被称作因特网分层模型(Internet Layering Model)、因特网参考模型(Internet Reference Model)。图2.2表示了TCP/IP分层模型的四层。
┌────────┐┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
│ ││D│F│W│F│H│G│T│I│S│U│ │
│ ││N│I│H│T│T│O│E│R│M│S│其│
│第四层,应用层 ││S│N│O│P│T│P│L│C│T│E│ │
│ ││ │G│I│ │P│H│N│ │P│N│ │
│ ││ │E│S│ │ │E│E│ │ │E│它│
│ ││ │R│ │ │ │R│T│ │ │T│ │
└────────┘└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
┌────────┐┌─────────┬───────────┐
│第三层,传输层 ││ TCP │ UDP │
└────────┘└─────────┴───────────┘
┌────────┐┌─────┬────┬──────────┐
│ ││ │ICMP│ │
│第二层,网间层 ││ └────┘ │
│ ││ IP │
└────────┘└─────────────────────┘
┌────────┐┌─────────┬───────────┐
│第一层,网络接口││ARP/RARP │ 其它 │
└────────┘└─────────┴───────────┘
图2.2 TCP/IP四层参考模型
TCP/IP协议被组织成四个概念层,其中有三层对应于ISO参考模型中的相应层。ICP/IP协议族并不包含物理层和数据链路层,因此它不能独立完成整个计算机网络系统的功能,必须与许多其他的协议协同工作。
TCP/IP分层模型的四个协议层分别完成以下的功能:
第一层——网络接口层
网络接口层包括用于协作IP数据在已有网络介质上传输的协议。实际上TCP/IP标准并不定义与ISO数据链路层和物理层相对应的功能。相反,它定义像地址解析协议(Address Resolution Protocol,ARP)这样的协议,提供TCP/IP协议的数据结构和实际物理硬件之间的接口。
第二层——网间层
网间层对应于OSI七层参考模型的网络层。本层包含IP协议、RIP协议(Routing Information Protocol,路由信息协议),负责数据的包装、寻址和路由。同时还包含网间控制报文协议(Internet Control Message Protocol,ICMP)用来提供网络诊断信息。
第三层——传输层
传输层对应于OSI七层参考模型的传输层,它提供两种端到端的通信服务。其中TCP协议(Transmission Control Protocol)提供可靠的数据流运输服务,UDP协议(Use Datagram Protocol)提供不可靠的用户数据报服务。
第四层——应用层
应用层对应于OSI七层参考模型的应用层和表达层。因特网的应用层协议包括Finger、Whois、FTP(文件传输协议)、Gopher、HTTP(超文本传输协议)、Telent(远程终端协议)、SMTP(简单邮件传送协议)、IRC(因特网中继会话)、NNTP(网络***传输协议)等,这也是本书将要讨论的重点。
2.3 IP地址
前面的章节我们已经指出,由于不同网络的硬件存在不同类型的地址,TCP/IP需要有它自己的地址编码系统。IP协议规定每台主机(严格地说是每个因特网接口)都通过一个32位全局唯一的因特网地址来标识。通常IP地址是采用以点隔开的四个十进制数的形式来表示。每个数代表地址中的一个二位十六进制数(即八位二进制数)。例如IP地址205.187.251.2就表示相应的四个二位十六进制值 CD BB FB 02。
2.3.1 地址基本编码格式
在IPv4(IP协议,版本4)标准中,每个32位IP地址包含两个部分:网络标识符和网络内的主机编号。没有两个网络能够分配同一个网络标识符,同一网络上的两台计算机也不可能分配同一个主机编号。IANA负责分配网络标识符,以确保网络标识符的唯一性、因特网服务提供商(Internet Service Provider,ISP)或网络管理员负责维护同一网络上主机编号的唯一性等。网络标识符和主机编号的边界由IP地址的类别来确定,不同类别的IP地址能够满足不同规模网络的组网需要。为了满足不同的网络与主机比例的期望值,IP协议将地址编码分成三种基本类别:A类、B类、C类。D类地址是为多点广播而定义的,剩余的E类地址保留为实验使用,如图2.3所示。
0 1 2 3
0 123456789001234567890012345678901
┌─┬─────┬─────────────────────────┐
│0│网络标识符│ 主机编号 │A类
├─┴┬────┴────────┬────────────────┤
│10│网络标识符 │ 主机编号 │B类
├──┴┬────────────┴───────┬────────┤
│110│ 网络标识符 │ 主机编号 │C类
├───┴┬───────────────────┴────────┤
│1110│ 多点广播地址 │D类
├────┴┬───────────────────────────┤
│11110│ 实验保留地址 │E类
└─────┴───────────────────────────┘
图2.3 IP地址的五种类别
A类网络地址第一位为“0”。前8位(0~7)代表网络标识符,后24位(8~31)代表本网络上的主机编号。因此这类网络存在128(27)个A类网络标识符,每个网络有16777216(224)台主机。例如10.0.0.1代表A类网10.0.0.0和1号主机。B类网络地址的前两位是“10”。前16位(0~15)代表网络标识符,每个网络有65536(216)台主机。例如128.1.0.1代表B类网128.1.0.0和1号主机。C类网络地址的前三位是“110”。前24位(0~23)代表网络标识符,后8位(24~31)代表网络上的主机编号。C类网络存在2097152(221)个网络标识符,每个网络有256(28)台主机。例如192.0.1.1代表C类网192.0.1.0和1号主机。可见地址的类别可以从第一个主机号辨别。可见IP地址的类别可以由第一个十进制数的范围辨别,如图2.4所示。
┌─┬────────┬───────┬────────┐
│类│第一个10进制数│ 网络数目 │ 主机数目 │
├─┼────────┼───────┼────────┤
│A│ 0~127 │ 127 │16777214│
├─┼────────┼───────┼────────┤
│B│128~191 │ 16834 │ 65534 │
├─┼────────┼───────┼────────┤
│C│192~223 │2097151│ 254 │
└─┴────────┴───────┴────────┘
图2.4 IP地址的类别可以由点分十进制数地址的
第一个十进制数的范围辨别
2.3.2 子网掩码
在因特网早期,每个组织机构的网络都很简单,通常一个组织机构也只有一个局域网,只需要网络标识符和主机编号这两级结构就足够了。随着因特网的进一步膨胀,B类地址消耗得很快,这种两级结构很难满足日益增长的网络的要求。到了1984年,在地址格式中又增加了第三级子网结构,子网对网络内部的地址空间进行再划分,这样就缓解了B类地址的需求,如图2.5所示。
┌─────┬────┬──┐
│网络标识符│ 子网 │主机│
└─────┴────┴──┘
│←─主机编号→│
图2.5 三级IP地址格式
子网或子网络是A、B或C类网络的一个子集。网络掩码用来把网络信息和主机信息分开。每个A、B或C类地址实际上都是一个自然掩码。A类地址的自然掩码255.0.0.0;B类地址的自然掩码是255.255.0.0;C类地址的自然掩码是255.255.255.0。如果没有子网的引入,网络标识符的使用会很限。使用了掩码,网络就可以分化成子网,并把地址的网格部分延伸到主机部分。子网划分技术增加了子网的数量,减少了主机的数量。如图2.6所示,掩码255.255.0.0把A类IP地址8.0.0.1划分成一个网络部分、一个子网部分和一个主机部分。
图2.6 基本子网划分的例子
要注意的是,子网掩码的格式是有限制的。子网掩码必须是相邻接的,它们的长度也必须要大于1,也就是说一个掩码应该有从左开始的连续的“1”,其余部分为“0”。下面的掩码可以用来把C类网络理论上可用的256个地址划分成多个子网。
255(1111 1100)——64个子网,4台主机/子网
248(1111 1000)——32个子网,8台主机/子网
240(1111 0000)——16个子网,16台主机/子网
224(1110 0000)——8个子网,32台主机/子网
192(1100 0000)——4个子网,64台主机/子网
128(1000 0000)——2个子网,128台主机/子网
2.3.3 特殊用途的IP地址
一台计算机可以分配一个主机地址,同是一个网络也可以分配一个网络地址。另外,在很多情况下主机并不知道自己的IP地址或者对方的IP地址,比如在主机启动时就是这样的。因此IP协议定义了一套特殊地址格式,称作保留地址,保留地址从不分配给某台主机,如图2.8所示。
┌──────────────┐
│ 全0 │本地网上的本主机
└──────────────┘
┌───────┬──────┐
│网络标识符全0│ 主机编号 │本地网上的主机
└───────┴──────┘
┌───────┬──────┐
│ 网络标识符 │主机编号全0│网络的伯克利广播
└───────┴──────┘
┌──────────────┐
│ 全1 │本地网的有限广播
└──────────────┘
┌───────┬──────┐
│ 网络标识符 │主机编号全1│网络的直线广播
└───────┴──────┘
┌───────┬──────┐
│ 127 │ 任意 │本地环路
└───────┴──────┘
图2.8 特殊用途的IP地址格式
IP保留主机编号为0的地址,用它来表示一个网络,例如地址205.187.251.0表示C类网络,该网络的网络标识符是205.187.251。
当网络标识符不知道时,主机地址就可以用全0的网络标识符来代替。例如:特殊地址0.0.0.0表示本网络的主机,它被应用在启动协议中;特殊地址0.X.Y.Z表示本网络的主机X.Y.Z。这些特殊的IP地址只能当作源地址使用。
为了很方便地发送一个包的副本给同一物理网络上的所有主机,IP为每个网络定义了一个直接广播地址(directed broadcast address)。IP保留了主机编号中所有位为全1的地址,用它来表示一个网络的直接广播地址。例如:A.255.255.255、B.B.255.255、C.C.C.255就分别是A、B、C网络的广播地址。当一个包被发送到上述的一个直接广播地址时,这个包的单个副本通过因特网路由器到达特定网络,然后被传送到这个网络上的所有主机。在这里有个历史遗留问题,伯克利软件分发(Berkeley Software Distribution,BSD)的TCP/IP协议实现使用主机编号中所有位为全0而不是全1来表示直接广播地址,这种地址格式被非正式地称为伯克利广播(Berkeley Broadcast)地址。以上这些特殊的IP地址只能当作目的地址使用。
在测试网络应用程序时,还可以使用IP定义的一个特殊的本地环路地址(loopback address),发往该地址的任何分组都不会传出主机。它实际上是一个本地环路网络标符,IP保留A类网络127用作本地环路。任何具有127.X.Y.Z形式的地址都被当作本地环路地址,127.0.0.1是最普遍的本地环路地址,也可以用localhost来表示。
另外,IANA还为某些特殊分组保留了一系列多点广播地址。例如:224.0.0.1用来表示本地子网上的所有系统;224.0.0.2用来表示本地子网的所有路由器。
2.4 网络数据的传输次序
在PC机中,低位存储地址包含数据的低位字节,这种存储顺序被称作为Little Endial。而在因特网传输中,TCP/IP协议规定采用低位存储地址包含数据高位字节的Big Endial存储顺序,并把这种存储次序称作网络标准字节顺序,如图2.9所示。实际网络传输时,数据按每32位二进制数为一组进行传输。图中把每个32位二进制数按照书写方式分成4个八位二进制数,并且标明了实际的字节传输顺序。在传输每个八位二进制时,按照从左到右、从最高的符号位到最低位依次进行传输。
为了使通信的双方都能理解数据分组所携带的源地址、目的地址以及分组的长度等二进制信息,主机和路由器在发送一个分组之前,必须把二进制信息项从本地表示转换成网络标准字节顺序,并且当分组到达目的网络时又把它们从网络字节顺序换成特定的主机顺序。至于分组中用户数据区的数据,则可以选择任何数据格式,他们不会被转换成网络标准字顺序,而是由具体通信的双方负责解释。
2.5 网间协议(IP)
因特网的核心层是网间层和传输层。IP协议是建立TCP/IP网络的最基本协议,它定义了在整个TCP/IP网络上传输数据所用的基本单元。网间层协议为上层协调提供了无连接的、不可靠的数据报传送服务,其他协议作为IP数据报的数据被承载。它只是尽力地、最快地传递数据,同时提供差错校验和路由选择,但产不对数据的到达与否、数据到达的连续性和顺序性作任何保证,也不提供任何纠错功能。RFC791中定义了IPv4(网间协议,版本4),读者可参考RFC 791文件。
2.5.1 IP数据报格式
TCP/IP协议使用的IP数据报(IP datagram)和物理网络上传输数据单元用的硬件帧有相同的格式,它包含一个数据报报头和一个数据区,如图2.10所示。
┌──────┬──────┐
│ IP报头 │IP数据区 │IP数据报
└──────┴──────┘
┌───┬─────────┐
│帧头部│ 帧数据 │硬件帧
└───┴─────────┘
图2.10 IP数据报的一般格式
IP数据报头包含有源、目的信息,在穿越因特网时作寻径用,并且指明承载负载的协议类型,如TCP、ICMP、UDP、等。数据报所携带的数据量不固定,发送方根据特定的用途选择合适的数据量。在IPv4版本中,一个数据报的数据量可以小到一个字节,而如果包括报头大小的话,数据报则可以大到64K个字节。图2.11给出了IP数据报更详细的格式。
图2.11 IP数据报格式
为了方便编程,这里同时给出了IP数据报的C语言结构。注意,它并没有包括可选项和填充域。
/* The IP header for VC++ */
typedef struct tagIPHEADER
{
unsigned char h_len:4:/* length of tht header */
unsigned char version:4;/* version of IP */
unsigned char tos;/* type of service */
unsigned short total_len;/* total length of the packet */
unsigned short ident;/* unique identifier */
unsigned short frag_and_flags;/*flags & frag offset */
unsigned char ttl;/* TTL(Time To Live)
unsigned char proto;/* protocol(TCP,UDP etc) */
unsigned short checksum;/* IP head checksum */
unsigned int sourceIP;//*source IP Address */
unsigned int destIP;/*destination IP Address */
}IPHEADER;
下面我们将分别讨论IP数据报报头中各域的详细含义。
2.5.2 版本协议号
IP数据报中的第一个域是4比特长的版本域(version)。版本号规定了数据报的格式,同的IP协议版本其数据报格式有所不同。因此IP协议软件在处理数据报之前,首先必须检查版本号,对不能正确识别的数据报版本应该予以拒绝。当前的IP协议版本号为4,常常称作IPv4;下一个将要发展的IP协议,它的版本号是6,也就是我们常说的IPv6。
2.5.3 数据报长度和填充域
紧接着版本域的是4比特长的报头长度域(h_len)。它指出了按32比特长标定的报头长度,报头的长度实际上是h_len<<2。如果报头长度不是32比特的整数倍,则由填充域添0补齐。
另外,报头中还有一个16比特长的数据报总长域(total_len)。它以字节为单位标定整个IP数据报的长度,并没有要按32比特长为单位对齐的要求。由于总长域占有16比特,所以数据报最长可达到216-1字节。
2.5.4 服务类型和优先权
8比特长的服务类型城(tos)规定本数据报的处理方式,并分成五个子域,其子域结构如图2.12所示。
0 1 2 3 4 5 6 7
┌───┬───────┐
│ │ 传输类型 │
│优先级├─┬─┬─┬─┤
│ │D│T│R│C│
└───┴─┴─┴─┴─┘
图2.12 组成服务类型域的五个子域
3比特的优先级(PRECEDENCE)子域指明本数据报的优先级,允许发送方表示本数据报的重要程度。优先级的取值从0到7,0表示普通优先级,即表示网络控制优先级。优先级是由用户指定的,大多数主机和路由器软件对此都不予理睬,但这种思想却是十分重要的,因为它毕竟提供了一种手段,允许控制信息享受比一般数据更高的优先级。比如说,如果主机和路由器都服从优先级的话,则可以给拥塞控制信息赋予更高的优先级,从而实现不受拥
塞影响的拥塞控制算法。
D、T、R、C位表示本数据报所期望的传输类型。当这些比特位取值为1时,D代表低时延(Delay)T代表高吞吐量(Throughput)R代表高可靠性(Reliability),C代表低开销。当然,上述三位只是用户的请求,因特网并不能保证提供所要求的传输,只是把它们作为路由选择时的参考。另外要注意的是,每种物理网络技术的时延、吞吐量、可靠性性能之间往往是此强彼弱的,用户应只指定它们中的一个,同时指定多个没有任何意义。
2.5.5 标识符、标志和分片偏移量
网络数据最终都是通过物理网络帧传输,IP数据报也不例外。在理想的情况下,整个数据报被封装在一个物理帧中传输时网络效率最高。但是,不同的物理网络技术上所采用的最大帧长是相异的,这个帧尺寸称作最大传输单元(Maximum Transfer Unit,MTU)。例如:10Mb/s以太网每帧最多可承载1500个字节,而在100Mb/s的FDDI环上承载就可以大到4470个字节。
当数据报分组从一个MTU较大的网络经路由器中继到一个MTU较小的网络上时,由于分组过长,路由器就会要么拒绝中继,要么将数据报分片后再传送。分片通常在路由器中完成,而数据报重组由主机的IP协议软件完成。IP报头中的标识符(ident)、标志和分片偏移量(frag_and_flags)三个域用作分片和重组控制。标识符标识数据报发送时的先后顺序,每产生一个新数据报标识符增一,目的机用它来重编分片数据报。同一IP数据报分片后,标识符域不变。分片偏移量指在完整的数据报内该分片的偏移量,偏移量按8个字节为单位计算。标志域由3个比特位组成,第一位保留为0,如图2.l3所示。
0 1 2
┌─┬──┬──┐
│0│DF│MF│
└─┴──┴──┘
图2.13 标志中的各位
DF位表示分组禁止被分片。如果DF位置1,路由器就会不加考虑地废弃超长分组,同时还会发送一个ICMP错误信息给这个分组的源站点。MF位表示分组片未完。如果MF位清0,此分片是IP数据报分组的最后一片。
2.5.6 存活时间
存活时间(ttl)设置了该数据报在因特网中允许存在的最大生存时间,该时间以秒为单位。每当产生一新的数据报时,就为它设置一个最大的生存时间。当数据报通过的主机和路由器对该数据报进行处理时,又减去消耗的时间。一旦时间小于等于0,便将该数据报从因特网中删除,并向信源机发回出错信息。
路由器通常不知道物理网络上的传送时间,存活时间也只是一个数量级的概念,并不要求精确。因为精确的记时首先需要因特网中所有节点的时钟精确同步,这是很难做到的。有一些办法可以简化处理数据报且不需要同步时钟:第一,路由上的每个路由器处理报头时,从存活时间中减去一;第二,如果数据报在路由器中因等待服务被延迟,则从存活时间中减去等待的时间。
为IP数据报设置存活时间的思想,保证了即使路由表不可靠而选择了一个循环路由,数据报都不会在因特网中无休止地流动。RFC建议存活时间的缺省设置值为64,而Windows 98和 Windows NT 4.0的用户使用的存活时间缺省值为128。
2.5.7 协议序列号
协议域表示IP数据报中数据的协议类型,如TCP、UDP、ICMP等。表2-1列出了IANA已分配的常见协议序列号。
表2-1
━━━━━━┯━━━━━━━┯━━━━━━━━━━━━━━━━━━
十进制编号│ 关键字 │ 协议名称
──────┼───────┼──────────────────
0│ │保留
──────┼───────┼──────────────────
1│ICMP │因特网控制报文协议
──────┼───────┼──────────────────
2│IGMP │因特网组管理协议
──────┼───────┼──────────────────
3│GGP │网关-网关协议
──────┼───────┼──────────────────
4│IP │IP里的IP
──────┼───────┼──────────────────
5│ST │数据流
──────┼───────┼──────────────────
6│TCP │传输控制协议
──────┼───────┼──────────────────
8│EGP │外部网关协议
──────┼───────┼──────────────────
17│UDP │用户数据报协议
──────┼───────┼──────────────────
29│ISO-TP4│ISO传输协议类4
──────┼───────┼──────────────────
41~60│ │未分配
──────┼───────┼──────────────────
70│VISA │VISA协议
──────┼───────┼──────────────────
80│ISO-IP │ISO网间协议(CLNP)
──────┼───────┼──────────────────
88│IGRP │内部网关协议
──────┼───────┼──────────────────
89│OSPF │开放式最短路径优先协议
──────┼───────┼──────────────────
99~254│ │未分配
──────┼───────┼──────────────────
255│ │保留
━━━━━━┷━━━━━━━┷━━━━━━━━━━━━━━━━━━
2.5.8 报头校验和
报头中的任何一个域发生传输错误都会产生很多无法预料的结果。比如:如果发送地址错误,就可能无法删除一个已经过期的分组以及重编不属于同一报文的分片。报头校验和(Checksum)就可以保护IP数据报不产生这类错误,确保报头的完整性。
IP报头校验和的计算是先将校验和域置0,把报头看成一个16位的整数予列,对每个整数分别计算其二进制反码,相加后再对结果计算一次二进制反码而求得的,它常被简称为反码和的反码。
2.5.9 源地址和目的地址
源IP地址(sourceIP)和目的IP地址(destIP)域包含了数据报的原始发送方和最终接收方的32位的IP地址。数据包可能经过许多中间路由器,但是这两个地址域始终不变。
2.5.10 IP选项
目的IP地址后面的IP选项域是任选域,它的主要目的是用来装载特定的功能以便于网络测试和调试。在IP数据报中,选项是连续出现的,中间没有任何分隔符。每个选项包含一个选项码字节,后面可能跟有一个长度字节和该选项的一组字节数据。如图2.14所示,选项代码字节分成三个域。
0 1 2 3 4 5 6 7
┌─┬───┬───────┐
│C│选项类│ 选项号 │
└─┴───┴───────┘
图2.14 选项代码字节中的三个域
路由器在对IP数据报分片时,如果拷贝标志位(C)置1,说明该选项应被拷贝到所有片中去;如果置0,则仅把该选项拷贝到第一个分片中。
选项类和选项号指明选项的一般类型,并且给定了该类中的一个特殊选择。现在已经定义的有两个选项组:0是控制选项,2是调试和测量选项。在同一选项类里面,用选项号来标识选项。表2-2列出了RFC 791中已经定义的8种选项,并给出了它们的选项类和选项号,可以看出大多数选项都是用于控制目的。
表2.2
━━━┯━━━┯━━┯━━━━━━━━━━━━━━━━━━━━━━
选项类│选项号│长度│描述
───┼───┼──┼──────────────────────
0 │ 0 │- │选项列表结束。该选项只占一个字节没有长度字节
───┼───┼──┼──────────────────────
0 │ 1 │- │无操作。该选项只占一个字节,没有长度字节。
───┼───┼──┼──────────────────────
0 │ 2 │11│安全和处理限制(用于军事目的)
───┼───┼──┼──────────────────────
0 │ 3 │可变│自由源路由。用来在一个指定路径为数据报选路
───┼───┼──┼──────────────────────
0 │ 7 │可变│记录路由。用来跟踪IP数据报所采用的路由
───┼───┼──┼──────────────────────
0 │ 8 │ 4│数据流标识符。已过时。
───┼───┼──┼──────────────────────
0 │ 9 │可变│严格源路由。用来在指定路径上为数据报选路。
───┼───┼──┼──────────────────────
2 │ 4 │可变│因特网时戳。用来记录路由上的时间戳
━━━┷━━━┷━━┷━━━━━━━━━━━━━━━━━━━━━━
2.6 校验和差错检验
现在的通信系统实际上很少在传输错误。例如微小通信信道的误码率通常能达到每传输10兆字节少于1个字节的错误(10-7),光纤信道的误码率通常是低于10-9。但不管怎么说,传输差错总是存在,必须采取相应的措施检测差错确保数据的正确。为了检测差错,网络系统通常随数据发送一小部分附加信息。发送方从数据中计算附加信息,并且接收方进行同样的计算来核对结果。
有一些比较常用的方法能有效地检测差错,比如奇偶校验(parity chedk)、累加和、循环冗余校验,TCP/IP协议中则采用“反码和的反码”的校验和方法。奇偶校验机制要求对每个发送的字符附加一个奇偶校验位(parity bit),使得这个字符中1的个数为偶数或奇数,这被分别称作偶校验或奇检验。累加和是对所有的数据按字节、字或双字对齐求字节、字或双字和,并且不记进位。循环冗余校验和反码和的校验相对来说要复杂些,下面分别给出了对应的代码。
/* 用于计算CRC-16的查找表 */
static short crctab[]=
{
0x0000,0xC0C1,0xC181,0x0140,0xC301,0x03C0,0x0280,0xC241,
0xC601,0x06C0,0x0780,0xC741,0x0500,0xC5C1,0xC481,0x0440,
0xCC01,0x0CC0,0x0D80,0xCD41,0x0F00,0xCFC1,0xCE81,0x0E40,
0x0A00,0xCAC1,0xCB81,0x0B40,0xC901,0x09C0,0x0880,0xC841,
0xD801,0x18C0,0x1980,0xD941,0x1B00,0xDBC1,0xDA81,0x1A40,
0x1E00,0xDEC1,0xDF81,0x1F40,0xDD01,0x1DC0,0x1C80,0xDC41,
0x1400,0xD4C1,0xD581,0x1540,0xD701,0x17C0,0x1680,0xD641,
0xD201,0x12C0,0x1380,0xD341,0x1100,0xD1C1,0xD081,0x1040,
0xF001,0x30C0,0x3180,0xF141,0x3300,0xF3C1,0xF281,0x3240,
0x3600,0xF6C1,0xF781,0x3740,0xF501,0x35C0,0x3480,0xF441,
0x3C00,0xFCC1,0xFD81,0x3D40,0xFF01,0x3FC0,0x3E80,0xFE41,
0xFA01,0x3AC0,0x3B80,0xFB41,0x3900,0xF9C1,0xF881,0x3840,
0x2800,0xE8C1,0xE981,0x2940,0xEB01,0x2BC0,0x2A80,0xEA41,
0xEE01,0x2EC0,0x2F80,0xEF41,0x2D00,0xEDC1,0xEC81,0x2C40,
0xE401,0x24C0,0x2580,0xE541,0x2700,0xE7C1,0xE681,0x2640,
0x2200,0xE2C1,0xE381,0x2340,0xE101,0x21C0,0x2080,0xE041,
0xA001,0x60C0,0x6180,0xA141,0x6300,0xA3C1,0xA281,0x6240,
0x6600,0xA6C1,0xA781,0x6740,0xA501,0x65C0,0x6480,DxA441,
0x6C00,0xACC1,0xAD81,0x6D40,0xAF01,0x6FC0,0x6E80,0xAE41,
0xAA01,0x6AC0,0x6B80,0xAB41,0x6900,0xA9C1,0xA881,0x6840,
0x7800,0xB8C1,0xB981,0x7940,0xBB01,0x7BC0,0x7A80,0xBA41,
0xBE01,0x7EC0,0x7F80,0xBF41,0x7D00,0xBDC1,0xBC81,0x7C40,
0xB401,0x74C0,0x7580,0xB541,0x7700,0xB7C1,0xB681,0x7640,
0x7200,0xB2C1,0xB381,0x7340,0xB101,0x7lC0,0x7080,0xB041,
0x5000,0x90C1,0x9181,0x5140,0x9301,0x53C0,0x5280,0x9241,
0x9601,0x56C0,0x5780,0x9741,0x5500,0x95C1,0x9481,0x5440,
0x9C01,0x5CC0,0x5D80,0x9D41,0x5F00,0x9FC1,0x9E81,0x5E40,
0x5A00,0x9AC1,0x9B81,0x5B40,0x9901,0x59C0,0x5880,0x9841,
0x8801,0x48C0,0x4980,0x8941,0x4B00,0x8BC1,0x8A81,0x4A40,
0x4E00,0x8EC1,0x8F81,0x4F40,0x8D01,0x4DC0,0x4C80,0x8C41,
0x4400,0x84C1,0x8581,0x4540,0x8701,0x47C0,0x4680,0x8641,
0x8201,0x42C0,0x4380,0x8341,0x4100,0x8lC1,0x8081,0x4040
};
/*计算长度为len的buf缓冲区中字节的CRC-16校验和
*
*返回的CRC-16校验和是字长型的无符号数
*crc是用于累计的CRC-16校验和
*buf是字节型的指针
*len是按字节buf的长度
*/
int
crcbuf(crc,len,buf)
register int crc;/* running CRC value*/
register u_int len;
register u_char *buf;
{
register u_int i;
for(i=0;i<len;i++)
crc = ((crc>>8)&0xff)^crctab[(crc^*buf++)&0xff];
return(crc);
}
/*计算反码和的反码
*返回字符长型的无符号数
*buffer是字长型的指针
*size是按字节计算的buffer的长度
*/
unsigned short checksum(unsigned short *buffer,int size)
{
unsigned long cksum = 0;
while(1<size)
{
cksum += *buffer++;
size -= sizeof(USHORT);
}
if(0<size)
cksum += *(UCHAR*)buffer;
cksum = (cksum>>16) + (cksum&0xffff);
cksum += (cksum>>16);
return(unsigned shout)(~cksum);
}
2.7 网间控制报文ICMP)
IP协议的目的比较明确,它只是尽力地、最快地传递数据到目的站点,因此很难诊断错误情况,必须通过另外的协议返回相应的信息。针对网间层的错误诊断、拥塞控制、路径控制和查询服务四大功能,ICMP提供相应的报文。例如:当一个分组无法到达目的站点或TTL超时后,路由器就会废除这个分组,同时向源站点返回一个目的站点不可达的ICMP报文;另外,当网络拥塞(congestion)时,路由器就会废除过载的分组,同时向源站点返回一个源站点抑制的报文。RFC 792中定义了ICMP协议。
如图2.15所示,ICMP报文是封装在IP数据报的数据区中发送的,因此并不能保证它的可靠性。为了避免重复报告所引起的“雪崩”现象,ICMP报文不再引发ICMP报文。
┌──────┬───────┐
│ICMP头标│ICMP数据区│ICMP报文
└──────┴───────┘
┌────┬──────────────┐
│IP头标│ IP数据区 │IP数据报
└────┴──────────────┘
图2.15 ICMP报文的封装
2.7.1 ICMP报文格式
ICMP报文分成头标和数据区两部分,其中头标包含类型、代码和校验和三个域。ICMP报文格式如图2.16所示。
0 1 2 3
01234567890123456789012345678901
┌───┬───┬───────┐
│ 类型│代码 │校验和 │
├───┴───┴───────┤
│ 数据 │
├───────────────┤
│ ··· │
└───────────────┘
图2.16 ICMP报文格式
计算校验和的算法与IP报头校验和的算法相同,也是16位二进制反码和的反码。但要注意的是,它是整个ICMP数据报的校验和而不仅仅是头标的校验和;类型域是一个单字节整数,它指出报文的类型;代码域也是一个单字节整数,它提供关于报文类型更进一步的信息。表2-3定义了15个ICMP报文类型。
0││12│
3││12│
4││12│
5││12│
8││12│
9││12│
10││12│
11││12│
网上邻居的内幕
有关网上邻居的问题,问的人一直比较多,在理解上存在的误区也普遍较为严重。鉴
于Microsoft的NETBIOS文档不是很细致,我四处收集了一些相关资料加上自己的实践经
验写了这个系列,希望能对大家有所帮助.
本来想为了增加可读性,把这个系列写成问答的形式,不过一时之间脑袋里也编不出
这么多的问题,还是按部就班先感性的对微软的浏览服务作一大致介绍,然后再深入剖
析NETBIOS的具体工作机理,大家要是有什么问题,可以提出来我们一起讨论.
***微软网络浏览过程简介***
在“Windows NT系统管理技术内幕”一书中,讲到了一个非常具有代表性的问题,我把
它摘抄了下来:
问:什么情况下会导致在网络邻居中计算机能看见却无法访问或可以访问却看不见?请
选择最佳答案: A.你的网络存在物理问题,比如网线 B.作为域主浏览器的Windows
NTserver的浏览服务坏了 C.Windows NTserver网卡有问题 D.你的网络没有问题,用户
描述的是正常的微软浏览现象
正确答案:D
书上的解释:微软的网络浏览可能在使用中出现"中断",而实际上它们并没有中断, 这种
误解是由于用户对微软网络浏览的处理过程不熟悉造成的。
就象同学们经常在抱怨的“为什么别人的网上邻居可以用,我的却不行?”“为什么有
时候可以浏览,有时候却无法浏览网络?”解铃还须系铃人,让我们一起去看看微软的
网络浏览到底是如何实现的。鉴于大家可能对NT的“域”概念还不甚了解,出现浏览故
障的也多为98的机子,我将以98的“工作组模式”为大家讲解。
1.什么是浏览列表(Browsing List) 在微软网络中,用户可以在浏览列表里看到整个
网络(何指?子网还是广播域?大家可以考虑考虑)上所有的计算机。当你通过网上邻
居窗口打开整个网络时,你将看到一个工作组列表,再打开某个工作组,你将看到里面
的计算机列表(也可在 DOS方式下用net view /domain:workgroupname命令得到),这
就是我们所说的 Browsing List。工作组从本质上说就是共享一个浏览列表的一组计算
机,所有的工作组之间都是对等的,没有规定不可以让所有的计算机同处于一个工作组
中。
2.浏览列表在哪里 曾在木棉上看到过一场争论,有人说:网上邻居里的计算机列表是
广播查询得来的。可有人举反例说:我的同学都关机了,可我还是能在网上邻居里看到
它,应该是从HUB或交换机之类较为固定的设备的缓存中取得的。 其实他们都只说对了
一个方面,把他们二人的说法结合起来就是正确答案了--- 浏览列表是通过广播查询浏
览主控服务器,由浏览主控服务器提供的。
3.浏览主控服务器又是什么 浏览主控服务器是工作组中的一台最为重要的计算机,它
负责维护本工作组中的浏览列表及指定其他工作组的主控服务器列表,为本工作组的其
他计算机和其他来访本工作组的计算机提供浏览服务,每个工作组都为会每个传输协议
选择一个浏览主控服务器,而我们经常遇到的无法浏览网络的错误大多是因为你所处的
工作组没有浏览主控服务器而造成的。你可以在一个工作组中用NBTSTAT -a
computername 命令找出使用NBT协议的浏览主控服务器,它的标识是含有_MSBROWSE_
名字段。
4.浏览主控服务器是如何指定的 缺省情况下,win98工作组中的浏览主控服务器是该工
作组中第一台启用文件及打印机共享功能的计算机,也允许手工将一台win计算机配置
为浏览主控服务器(方法会在后面讲述网络配置时具体介绍,但由于浏览主控服务器需
要维护动态浏览列表,性能会受影响),如果一个工作组中有多台计算机配置了这个选
项,或是当前的浏览主控服务器关闭了系统,又没有其他计算机启用主控设置时,就要
进行主控浏览器的选举。
5.如何通过浏览器选举产生浏览主控服务器 关于浏览器的选举报文,不太好抓包,我就
只好按书上的东西来讲述了.其实过程很简单,首先由一台计算机发送一个选举临界报文
,该报文包含了来自发送计算机的信息(操作系统,版本及NET名等),选举报文向网络中广
播,工作组中的每一台计算机都会用自身信息与选举报文进行优先级比较,主要是操作系
统起主要作用,记得好像是NT Server>NT Workstation>Win98>WFWG,反正到最后是那个
自身条件最好的成为新的浏览主控服务器.
6.整个网络浏览的过程是怎样的 当一台win98进入网络时,如果它带有服务器服务(启
用了文件及打印机共享)会向网络广播宣告自己的存在,而浏览主控服务器会取得这个
宣告并将它放入自己维护的浏览列表中;而没有在相应协议上绑定文件及打印机共享的
计算机则不会宣告,因而也就不会出现在网络邻居里了。当客户计算机想获得需要的网
络资源列表时,首先会广播发出浏览请求,浏览主控服务器收到请求后,如果请求的是
本组的浏览列表,则直接将客户所需的资源列表发回;如果请求的是其它工作组的浏览
列表,浏览主控服务器会根据本身Browsing List中的记录找到相应工作组的主控浏览
器返回给用户,用户可从那里得到它想要的浏览列表。至于如何去和另一台计算机共享
交换资源,就不是我们这里要讨论的问题了。
明白了网络浏览的原理,下面我给大家讲一个有用的应用,现在很多同学出于安全的考
虑都不太欢迎陌生人通过网上邻居访问自己的机子,可有时下部电影又需要给认识的同
学共享出来,因而还不能删除文件及打印机共享服务。怎么办?有些人给共享名加个
$,以达到隐藏的效果,可这用DOS下的net share是可被看到的;有些人给共享加上密
码,可听说这也是有办法破解的,而且很容易激起“黑客同志”的好奇心。有没有办法
将自己的机器在网络邻居里隐藏起来呢?而对于认识的同学可以让他用IP 来访问。
想对了,关键就是要阻止自己的机器向网络中去宣告自己,而且我知道我们其中的一些
人已经将此变成了现实,至于方法嘛,就不要来问我了。
注:因为有关win98浏览服务的资料很少,涉及的书籍也多为以NT的“域”模型进 行介
绍,因而我只能根据自己的理解结合netxray的实践来测试,细节部分难 免有错,欢迎
大家指正。
7.在我的网上邻居里为什么有些机子访问不了 如果微软的网上邻居真能做到所见即所
得,相信抱怨它的人不会象现在这么多,可通过前面对浏览服务的介绍,大家已经知道
这是不可能的,因为浏览列表的获得不是通过访问其中每一台机子得到的,很多时候网
络中的计算机并不能正确更新浏览列表。当一台计算机正常关机时,它会向网络发出广
播宣告,使浏览主控服务器及时将它从浏览列表中删除;而非正常关机后,浏览列表里
仍会把该条目保持很长一段时间(NT下是45分钟),这就是我们仍能在网络邻居里看到它
的原因.而98的稳定性是众所周知的 ----在还没来得及关机前就已经崩溃了^-^
SMB(Server Message Block)协议在NT/2000中用来作文件共享,在NT中,SMB运行于
NBT(NetBIOS over TCP/IP)上,使用137,139(UDP),139(TCP)端口。在2000
中,SMB可以直接运行在tcp/ip上,而没有额外的NBT层,使用TCP 445端口。因此在
2000上应该比NT稍微变化多一些。
可以在“网络连接/属性/TCPIP协议/属性/高级/WINS中设置启用或者禁用NBT
(NetBIOS over TCP/IP)。
当2000使用网络共享的时候,就面临着选择139或者445端口了。下面的情况确定会
话使用的端口:
1、如果客户端启用了NBT,那么连接的时候将同时访问139和445端口,如果从445端口
得到回应,那么客户端将发送RST到139端口,终止这个端口的连接,接着就从445端口
进行SMB的会话了;如果没有从445端口而是从139得到回应,那么
就从139端口进行会话;如果没有得到任何回应,那么SMB会话失败。
2、如果客户端禁用了NBT,他就将只从445端口进行连接。当然如果服务器(开共享
端)没有445端口进行SMB会话的话,那么就会访问失败了,所以禁用445端口后,对访
问NT机器的共享会失败。
3、如果服务器端启用NBT,那么就同时监听UDP 137、138端口和TCP139,445。如果禁
用NBT,那么就只监听445端口了。
所以对于2000来说,共享问题就不仅仅是139端口,445端口同样能够完成。
III、The NULL session,关于空会话
NULL会话(空会话)使用端口也同样遵循上面的规则。NULL会话是同服务器建立的
无信任支持的会话。一个会话包含用户的认证信息,而NULL会话是没有用户的认证信
息,也就好比是一个匿名的一样。
没有认证就不可能为系统建立安全通道,而建立安全通道也是双重的,第一,就是
建立身份标志,第二就是建立一个临时会话密匙,双方才能用这个会话进行加密数据交
换(比如RPC和COM的认证等级是PKT_PRIVACY)。不管是经过NTLM还是经过Kerberos认
证的票据,终究是为会话创建一个包含用户信息的令牌。(这段来自Joe Finamore)
根据WIN2000的访问控制模型,对于空会话同样需要提供一个令牌。但是空会话由于
是没有经过认证的会话,所以令牌中不包含用户信息,因此,建立会话双方没有密匙的
交换,这也不能让系统间发送加密信息。这并不表示空会话的令牌中不包含SID,对于
一个空会话,LSA提供的令牌的SID是S-1-5-7,这就是空会话建立的SID,用户名是
ANONYMOUS LOGON。这个用户名是可以在用户列表中看到的。但是是不能在SAM数据库中
找到,属于系统内置的帐号。
(关于这部分对NULL SESSION的分析,可以参照:《NULL Sessions In
NT/2000》http://rr.sans.org/win/null.php)
NULL会话几乎成为了微软自己安置的后门,但是微软为什么要来设置这样一个“后
门”呢?我也一直在想这个问题,如果NULL会话没有什么重要的用途,那么微软也应该
不会来设置这样一个东西。好不容易才在微软上找到这个:
当在多域环境中,要在多域中建立信任关系,首先需要找到域中的PDC来通过安全通
道的密码验证,使用空会话能够非常容易地找到PDC,还有就是关于一些系统服务的问
题。而且LMHOSTS的#Include就需要空会话的支持,可以参考文章:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q121281 还有http://support.microsoft.com/default.aspx?scid=kb;EN-US;q124184
其实建立一个空会话的条件也非常严格。首先要能够满足上面的,也就是打开TCP
139和TCP 445端口。我们可以从一次关闭这两个端口的情况中看得出来。服务器关闭
445和139端口,然后我们来进行空会话的连接。首先,客户端打算
连接的是445端口,然后再试图连接139端口。当然最后还是失败了。
仅仅开放这两个端口还不行,服务器还必须得打开IPC$共享。如果没有IPC共享,即
使共享一个文件,有权限为Anonymous Logon,也不能建立会话,即使权限设置为完全
控制,出现的连接错误依然是权限不够。这和其他帐号是不一样的。如果要允许一个文
件夹共享能够类似IPC$(命名管道而非共享)能够使用空会话,那么需要修改注册表:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceslanmanserverparameters
中的:NullSessionShares,
添加新的共享名,这样才能建立一个共享的空会话。这时,将不依赖IPC的存在了。
(即使这样的空会话对于后面的突破也是一点没可取之处的,因为没有了IPC$命名管
道,RPC不可取了,这下知道IPC这个命名管道的具体实现了。呵呵)
虽然空会话建立的要求很严格,但是那都是默认建立的。既然是默认的,对于使用
WIN2K系统的服务器来说,就还是有利用的价值。最明显的就是空会话可以很方便地连
接到其他的域,枚举用户、机器等。这也就是扫描软件进行探测的原理。