1、第6章 Internet实现互联的奥秘6.1 Internet 可以视为一个分组交换系统 计算机通讯初期:直接连线;共享线路分时;60 年代分组交换技术:计算机数据的每一个分组,从一台计算机到另 一台传输,由网络硬设备监视;一旦到达目的机,识别(数据包)分组头, 就能知道;是,写入内存。“组头”就是一个标签,他指明从何机到何机。网络分组交换允许多台机同时通信。多台机发送时都“分组”,“加头”,向外发;到达接收机时,接收机 将“分组包”掐头去尾,重装。每台机只知道自己有请求,网络响应和被通知。6.2 路由器是实现Internet网络互连的关键部件 Internet是通过路由器连接起来多个网络的集
2、合。路由器的体系结构允许Internet中包含多种类型的网络。路由器是实现Internet主干网互连的关键部件。,6.3 TCP/IP是Internet的核心协议 6.3.1 TCP/IP 的基本特性1。逻辑编址2。路由选择3。域名解析4。错误检测与流量控制5。对应用程序的支持,6.3.2 TCP/IP 协议族网络互联的根本目标是隐藏所有底层网络硬件的细节,同时提供一般的通信服务。实现互连网的协议有很多种。其中,TCP协议和IP协议是最具有代表性,也是最重要的网络协议,它们是网络体系结构的关键之一。 TCP/IP是“黏合剂”,它实现了Internet的“一统天下”。事实上,TCP/IP是一个协
3、议族,它是ARP,IP,ICMP,IGMP,UDP,TCP等100多个协议的集合。,6.3.3 TCP/IP 分层作用简述1、网络接口层该层协议很多,任何可用IP数据包交换的分组传输协议均可纳入。“包容性”,“适应性”正是TCP/IP协议成功的基础。该层接收IP数据报,并通过网络发送出去;或从网上接收物理真帧,形成IP数据报,交网际网层(互连层)处理。2、互连层(网际网层)负责相邻计算机间的通信。(1)处理来自传输层的请求,将分组形成IP数据报,选路径,送往网络接口层。(2)处理来自网络接口层的数据报,检查合法性,如已到信宿机,去报头剩下TCP分组,送传输层;否则,选路由转发该报。(3)处理网
4、际网ICMP协议,即处理路径、流控、拥塞、报告差错。3、传输层(TCP)根本任务是处理应用程序之间的通信问题,即端到端问题。(1)发送方,把要发送的数据,分组,加信息,指明谁给谁,发给低层。(2)接收方,发回“确认”或要求重发报文。 4、应用层应用层包括了许多应用程序,如电子邮件,远程登录;严格说来,它们不属于TCP/IP。不过,TCP/IP制定了若干协议;人们可以自行开发应用。,6.4 Internet地址要使Internet上主机间能正常通信,必须给每个计算机一个全球都能接收和识别的唯一标识,它就是IP地址。6.4.1 IP地址的分类和表示从概念上讲,每个IP地址都是由两部分构成:网络号,
5、主机号。其中,网络号标识某个网络,主机号标识在该网络上的一个特定的主机。,IP地址分为A、B、C、D、E五类:A类:第一个字节的最高位是0B类:第一个字节的前两位是10C类:第一个字节的前三位是110D类:第一个字节的前四位为1110E类:第一个字节的前五位为11110A、B、C三类IP地址的结构都是由两部分组成:网络号和主机号。A类地址:共128个子网,每个子网内可以有1600万台主机;B类地址:共16,384个子网,每个子网内可以有65,536台主机;C类子网:共200万个子网,每个C类子网内最多只能有256台主机。将IP地址中每个字节以十进制数字表示,并用“.”隔开,五类地址如下:类型
6、最低地址 最高地址 A 1.0.0.1 126.255.255.254 B 128.0.0.1 191.255.255.254 C 192.0.0.1 223.255.255.254-D 224.0.0.0 239.255.255.255 E 240.0.0.0 247.255.255.255 表 6-1 IP地址范围(其中某些值是保留作特殊用途的),6.4.2 子网和掩码前面我们说一个互连网地址标识了一个主机,并不严格。严格地说IP协议为每一个网络连接(网卡)分配一个IP地址。如果某台主机有多个网络连接,则要为它分配多个IP地址,同一主机上的多个连接的IP地址之间并没有必然的联系。IP地址并
7、不是标识某台机器,而是标识一个主机与网络的一个连接。IP协议要求,在同一个网络中的主机其IP地址的网络号应该是相同的。地址掩码(mask)和子网(subnet)掩码是一个与IP地址对应的32位数字。掩码的一些位为1,另一些位为0。通过掩码可以把IP地址中的主机号再分为两部分:子网号和主机号。这样,我们就可以把A类或者B类IP地址的地址空间再细化成若干个稍小一些的子网,每个子网中所能够包含的最多主机数比原来的要少。掩码中的0和1可以任意分布,不过一般在设计时,把掩码开始连续的几位设为1。IP地址与掩码中为1的位相对应的部分为子网号,其他为0的位则表示的是主机号。使用了掩码后,我们通常把原来的网络
8、号和新划分的子网号合在一起称为网络号(与掩码为1的位相对应),把掩码划分后的新的主机号叫做主机号(与掩码为0的位相对应)。A类地址相对应的标准掩码是:255.0.0.0B类地址相对应的标准掩码是:255.255.0.0C类地址相对应的标准掩码是:255.255.255.0。,使用掩码把一个可以包括1600万台主机的A类网络或6万多台主机的B类网络分解成许多小的网络,每个小的网络就称为子网(SUBNET)。例如,一个B类网络地址162.105.0.0,利用掩码255.255.224.0,可把该网络分为8个子网: 162.105.0.0 162.105.32.0 162.105.64.0 162.
9、105.96.0162.105.128.0 162.105.160.0 162.105.192.0 162.105.224.0 且每个子网内最多可有主机8192台。我们可以认为掩码是对地址分类的扩展,它加大了地址分 配的灵活性。按照规定,一个主机号部分的所有位都为“0”的地址是代表该网络本身的,叫 做网络地址。例如162.105.130.0就是一个网络地址。这样,IP地址可以用来指定 单个主机,也可以用来指定一个网络。把主机接口的IP地址和其相应的掩码相与,就得到该接口所在网络的网络地址。 而把IP地址和掩码的反码进行与运算,则得到主机地址。例如,一个网络接口的地址为162.105.69.12
10、,掩码为255.255.254.0,则其子网地址为:162.105.68.0,而主机地址为:0.0.1.12。这样,在IP协议中,对主机或路由器的每个网络接口都要为之分配一个地址, 对应每个地址有相应的掩码。属于同一个网络上的IP地址的掩码应该是一样的,以 保证通过掩码计算后的子网地址是相同的。,6.4.3 特殊的IP地址1、 广播地扯所有主机号部分为“1”的地址是广播(broadcast)地址。广播地址分为两种:在一特定子网中,主机地址部分为全1的地址称为直接广播地址(direct broadcast)。 一台主机使用直接广播地址,可以向任何指定的网络直接广播它的数据报,很多IP协议利用这个
11、功能向一个子网上广播数据。例如,在子网地址为162.105.130.0的网络上,162.105.130.255就是该网络的广播地址。协议规定,每台主机和路由器等都要接收和处理目的地址为本子网广播地址的数据报。不在这个子网(162.105.130.0)内的主机(如IP地址为202.112.7.12的机器),也可以用广播地址162.105.130.255向该子网上所有的主机广播信息。32个比特全为1的IP地址(即255.255.255.255)被称为有限广播地址(limited broadcast address)或本地网广播地址(local network broadcast address),
12、该地址被用作在本网络内部广播。使用有限广播地址,主机在不知道自己的网络地址的情况下,也可以向本子网上所有的其它主机发送消息。无论哪种广播地址都不能像其它的IP地址那样分配给某台具体的主机。因为它是指满足一定条件的一组机器。广播地址只能作为IP报文的目的地址,表示该报文的一组接收者。,2、 组播地址D类IP地址就是组播地址(multicast),即在224.0.0.0 239.255.255.255范围内的每个IP地址,实际上代表一组特定的主机。它与广播地址相似之处是都只能作为IP报文的目的地址,表示该报文的一组接收者,而不能把它分配给某台具体的主机。 组播地址和广播地址区别:广播地址是按主机的
13、物理位置来划分各组的(属于同一个子网),而组播地址指定一个逻辑组,参与该组的机器可能遍布整个Internet网。组播地址主要用于电视会议、视频点播等应用。我们可以想象一个由多方参与的电视会议,正在发言的一方的声音和图像要被传送到其他参与者的主机上。实际上,一个组播IP地址唯一地标志一个逻辑组。每个要求参与组播接收的主机使用IGMP协议,主动登记到希望加人的组中去。网络中的路由器根据参与的主机的位置,为该组播的通信组形成一棵发送树。服务器在发送数据时,只需发送一份数据报文,该报文的目的地址为相应的组播地址。路由器根据已经形成的发送树依次转发,只是在树的分岔点处复制数据报,向多个网络转发一份拷贝。
14、经过多个路由器的转发后,则该数据报可以到达所有登记到该组的主机处。这样就大大减少了源端主机的负担和网络资源的浪费。,3、 “零”地址网络号=主机号为零的IP地址。从来不分配给任何一个单个的主机主机号为零,例如,202.112.7.0 就是一个典型的C类网络地址,表示该网络本身。主机号=网络号为“0”的IP地址,指的是本网络上的某台主机。例如,如果一台主机(IP地址为202.112.7.13)接收到一个IP报文,它的目的地地址中网络号部分为“0”,而主机号部分与它自己的地址匹配(即,IP地址为0.0.0.13),则接收方把该IP地址解释成为本网络的主机地址,并接收该IP数据报。“0.0.0.0”
15、=代表本主机地址。网络上任何主机都可以用它来表示自己。4、回送地址从表6-1中我们可以看到,原本属于A类地址范围内的IP地址127.0.0.0 - 127.255.255.255却并没有包含在A类地址之内。任何一个以数字127开头的IP地址(127.any.any.any)都叫做回送地址(loopback address).它是一个保留地址,最常见的表示形式为127.0.0.1。在每个主机上对应于IP地址127.0.0.1有个接口,称为回送接口(loopback interface)。IP协议规定,当任何程序用回送地址作为目的地址时,计算机上的协议软件不会把该数据报向网络上发送,而是把数据直接
16、返回给本主机。因此,网络号等于127的数据报文不能出现在任何网络上,主机和路由器不能为该地址广播任何寻径信息。回送地址的用途是,可以实现对本机网络协议的测试或实现本地进程间的通信。,6.5 地址解析协议/反向地址解析协议 6.5.1 地址解析协议(ARP)IP地址,构成一个虚拟网络。但是,真正通信还是靠物理地址(MAC地址)。 从源端到目的地的路径上,每一步的传输使用的都是MAC地址,即都需要完成IP到MAC地址的映射。从源端到目的网点途中,在每一个中间站点进行转发报文时,都使用下一站(next hop)路由器的MAC地址;在当该报文到达最终目的地子网时,要把它交给目的地主机,实际上使用的还是
17、目的地的物理地址;都需要将IP地址映射成物理地址。在以太网等具有广播能力的网络上,TCP/IP协议使用地址解析协议ARP(Address Resolution Protocol),来实现IP地址到MAC地址的动态转换。图6-3所示,当主机A要查询已知IP地址为IB的主机B其MAC地址MB是什么时,它首先广播一个特殊的报文(ARP请求报文FF),要求IP地址为IB的主机返回自己的物理地址MB。包括B在内的所有主机都接收到这个查询请求,但只有主机B识别出它的IP地址并发出一个含有它自己MAC地址的应答。当A收到应答后,就可以用该MAC地址把数据报文封装后直接发送给主机B。,ARP 消息格式,每台主
18、机都要维护一个IP地址到MAC的转换表,称为ARP表。其中存放着最近用到的一系列跟它通信的同一子网的计算机的IP地址和MAC地址的映射。在主机初始启动时,ARP表为空。ARP表的内容是定期更新的,如果一条ARP项很久没有使用了,则它将被从ARP表中删除掉。这祥可以节省内存空间和ARP表的检索时间。ARP不是IP协议的一部分,因此ARP数据报不包括IP头,而是直接放在以太网帧的数据部分进行发送。并且,在以太网中定义了一种新的类型来标志ARP数据报。目的地址 源地址 帧类型 帧中数据,6.5.2 反向地址解析协议(RARP)反向地址解析协议RARP(Reversed Address Resolut
19、ion Protocol),顾名思义它可以实现MAC地址到IP地址的转换。无盘工作站在启动时,只知道自己的网络接口的MAC地址,不知道自己的IP地址。它首先要使用RARP协议得到自己的IP地址后,才能和其他服务器通信。在一台无盘工作站启动时,工作站首先以广播方式发出RARP请求。同一网络上的RARP服务器就会根据RARP请求中的MAC地址为该工作站分配个IP地址,生成一个RARP响应包发送回去。RARP报文和ARP报文的格式几乎完全一样。唯一的差别在于RARP请求包中是由发送者填充好的源端MAC地址,而源端IP地址域为空(需要查询)。在同一个子网上的RARP服务器接收到请求后,填入相应的IP地
20、址,然后发送回给源工作站。,6.6 网间互连协议IPIP是网络互连协议(Internet Protocol)的简称。IP协议具有良好的适应性,因此IP协议得到广泛使用,成为支撑Internet的基础。IP协议提供的是一种无连接的、不可靠的、尽力发送的服务,把数据从源端发送到目的端。IP数据报在经过网络传输时,有可能因为网络拥塞、链路故障等原因而造成丢失或出错。对此,IP协议仅具有有限的错误报告功能,它调用ICMP协议来实现差错报告。数据报内容的差错捡测和恢复则交给高层(传输层协议-TCP)去完成。IP协议的内容包括:基本传输单元的格式,也就是IP报文的类型与定义、IP报文的地址以及分配方法、I
21、P报文的路由转发以及IP报文的分段与重组。6.6.1 IP数据报的格式IP数据报(packet)是IP协议的基本处理单元,它由两部分组成:报文头和数据部分。,图6-5给出了IP数据报的格式。IP数据报的报文头包含一些必要的控制信息,它本身有20个字节的固定部分和变长的可选项(option)部分构成。版本号(Version):IP协议的版本号,它占用4位。长度字段:头长度(Header Length)和总长度(Total Length)。头长度字段占用4位,表示报文头的长度。它的数值是以4字节为单位表示长度,即IP报文头中真正的字节数应该等于头长度值乘以4。IP报文头又分为固定部分和选项(opt
22、ion)部分,固定部分正好是20个字节,而选项部分为变长,因此需要有用一个字段来给出IP报文头的长度。而且若选项部分长度不为4的倍数,则还应根据需要填充(padding)1到3个字节以凑成4的倍数。总长度字段表示整个IP报文的长度(即包括报文头又包括数据部分),它以字节为单位。总长度字段占用16位,所以IP数据报最长可达64K字节。服务类型(Type of Service)和优先级:IP报文头中的服务类型字段规定了对于本数据报的处理方式。该字段总共为1个字节,被分为5个子域。其结构如下图6-6:其中优先权(共3比特)指示本报文的重要程度,其取值范围为0到7。用0表示一般优先级,而7表示网络控制
23、优先级,即值越大,表示优先级越高。它提供了一种区分不同IP数据报的手段,例如,让重要的网络控制信息比一般IP数据报具有更高的优先级。D,T,R三位表示本数据报所希望的传输类型。D是延迟(delay)的缩写,T是吞吐率(throughput)的缩写,而R表示可靠性(reliability)。若上述三个标志位被置为1,分别表示要求低延迟、高吞吐率或高可靠性等。例如,当前的会话为文件传输,如果这三个比特位的设置为001,则表示在传输过程中需要高可靠性,而对延迟或吞吐率不做要求。当然,互连网并不能保证一定满足上述传输要求,而是把这种要求作为路由选择时的一个提示,途经的路由器可以把它们当作选径时的参考。
24、假如路由器知道去往目的地网络有多条路径,则路由器可以根据这三个标志位的设置情况来选择一条最合适的路由。这三个标志位中只能有一个被设置为1(表明最关心那方面的性能),否则路由器将无法正确地进行处理。,数据报的分段和重组:IP数据报要放在物理帧中再进行传输,这一过程叫做封装(encapsulation)。一般来说在传输的过程中要跨越若干个不同的物理网络,所容许的最大帧长度不同。IP协议需要一种分段机制,把一个大的IP报文,分成若干个小的分段进行传输,最后到达目的地处再重新组合还原成原来的样子。分段(fragment):可以在任何必要的中间路由器上进行,而重组仅在目的主机处进行。在IP包头中,共有三
25、个字段用来实现对数据报的分段和重组:标识符(identification)、标志域(flag)和分段偏移值(fragment offset)。标识符:是一个无符号整型值,它是IP协议赋予报文的标识,属于同一个报文的分段具有相同的标识符。标识符的分配绝不能重复,IP协议每发送一个IP报文,则要把该标识符的值加1,作为下个报文的标识符。报文标志域:为三个比特,但只有低两位比特有效。每个比特的意义如下:比特0 (MF位), 最终分段标志 (More Fragment)比特1 (DF位), 禁止分段标志 (Dont Fragment)比特2, 未用当DF位被置为1,则该报文不能被分段。假如此时IP数据
26、报的长度大于网络的MTU值,则根据IP协议把该报文丢弃,同时向源端返回出错信息。MF标志位置为0时,说明该分段是原报文的最后一个分段。分段偏移值:指出本分段的第1个字节在初始的IP报文中的偏移值,该偏移量以8字节为单位。数据报生存时间(TTL,Time to live):IP协议中提出了的生存时间TTL(Time To Live)的控制,它限制了一个报文在网络中的存活时间。报文头的生存时间被初始化设置为最大值 255。在报文每经过一个路由器时,其TTL值减1,直到它的值减为0时,则丢弃该报文。这样,即使在网络中出现循环路由,循环转发的IP报文也会在有限的时间内被丢弃。协议类型(Protocol
27、):协议类型字段的内容指出IP报文中数据部分是属于哪一种协议(高层协议)的,接收端则根据该协议类型字段的值来确定应该把IP报文中的数据交给哪个上层协议去处理。常见的上层协议包括TCP,UDP,ICMP,IGMP等。其对应的协议类型分别为6,17,1,2。有关的其他协议及其对应的编号请参见RFC1700。,头校验和(Header Checksum):头校验和字段用于保证头部数据的正确性。源和目的地址(Source/Destination IP Address):源端地址和目的地址,分别表示该报文的发送者及接收者。IP报文选项(Options):IP选项主要用于额外的控制和测试,在IP报头中可以包
28、括多个选项。每个选项第1个字节为标识符,标识该选项的类型。如果该选项的值是变长的,则紧接在其后的1个字节给出其长度,之后才是该选项的值。在IP协议中可以有如下表6-2中所示的一些IP选项类型:表 6-2 IP报文头中的可选项安全选项(Security) 表示该IP数据报的保密级别 严格源选径(Strict Source Routing) 给出完整的路径表 松散源选径(Loose Source Routing) 给出该报文在传输过程中必须要经历的路由器的地址 路由记录(Record Route) 让途经的每个路由器在IP报文中记录其IP地址 时间戳(Timestamp) 让途经的每个路由器在IP
29、报文中记录其IP地址 及时间值,6.6.2 IP数据报文的转发过程一个IP数据报从源端发送到目的地的途中,一般要经历若干个路由器,而路由器存储转发IP数据报,为每个IP报文寻找最优路径。以图6-7的网络实例来进行说明。路由器R1收到主机A发送给主机C的IP数据报。R1的链路层根据帧中的以太网类型确定帧中的数据是IP报文,于是交给IP协议处理。IP协议首先要检验IP报文头中的各个域的正确性,包括版本号、校验和以及长度等。如果发现错误,则丢弃该数据报;如果全部正确,则把TTL域的值减1。TTL的值为0,数据报到期,应该丢弃;TTL大于0,根据IP数据包中目的地址查询R1中的路由表;找到合适的路由,
30、把该数据报向下一站转发(需要知道下一站的MAC地址,进行帧封装);没有合适的路由,则丢弃该数据报。报文经过路由器时,由于路由器修改了IP头中的TTL域,所以还需要重新计算IP头中的校验和。如果IP报文头带有IP选项(option),则还要根据选项的内容进行处理。在处理的过程中,凡是出现错误、路径不通等情况,IP协议都要向报文的源端发送一个ICMP差错报文,报告不能转发及其原因。图6-8是路由器中对数据报转发的流程图。,6.6.3 IP路由表1、路由表的构成在同一个子网上:使用IP协议通信时, 利用ARP协议得到对方的MAC地址,然后利用MAC地址把要传输的IP数据报进行封装,交给数据链路层去发
31、送。主机在不同的子网上,则数据报必须经过路由器的转发。要选择路径,确定应该向哪一个下一站(next hop)系统发送。上述工作都是根据一个数据结构 - IP路由表(routing table)的内容来完成。主机和路由器都维护着各自的路由表,表的格式大体上是相同的。在每个路由表中,至少有如下几项:目的地址、掩码、网关以及接口名称。目的地址和掩码是整个表的关键字,唯一地确定到某目的地的路由。网关表示一下站(next hop)路由器的地址,而接口名字则指出应该向本机的哪个网络接口进行转发。在路由表中每个表项还有两个标志值得说明:标志H表示该路由是主机(Host)路由,即该路由项指明到一台具体的主机的
32、路由,G则表示网关域中的地址是个有效的路由器(Gateway)的地址。图6-9所示的路由表给出了四条路由信息。第一条是到127.0.0.0子网的路由。前面说过,类似127.*.*.*这样的IP地址为回送地址。所以网接口上发送的数据实际上都要交给本主机去处理。如果数据报的目的地址为127.0.0.1,则和该路由项匹配,IP协议因而把它交给虚拟的回送接口(loopback,用lo0表示)去处理。,网关,掩码,标识,目的地地址,MSS窗口,接口名,0.0.0.0,255.0.0.0,UH,127.0.0.0,3584 0,lo0,0.0.0.0,255.255.255.0,U,162.105.1.0
33、,1500 0,eth0,162.105.1.2,255.255.255.0,UG,162.105.4.0,1500 0,eth0,162.105.1.1,0.0.0.0,UG,0.0.0.0,1500 0,eth0,图 6-9 UNIX主机A中的路由表,第二条路由项的目的子网实际上是和该主机直接相连的子网地址。目的地址为该子网的子网号,而掩码为该网络接口上的掩码。由于没有设置标志位G,表示网关域并不是一台真正的路由器地址。此时数据报应该往以太网接口(第一块以太网网卡用eth0表示)上发送,而下一跳(next hop)地址应该是IP数据报中的目的主机的地址。第三条路由项是到以太网3的路由。路由
34、项中的G标志位有效,表示到达该网络应该经过路由器162.105.1.2。第四条路由项的目的地址和掩码全为0,表示和任何目的地址都可以匹配。这样的路由称为缺省路由(default route),表示如果目的地址和路由项中的所有其他项都不能匹配,则最后使用该项作为其路由。这条路由设置了标志位G,所以路由项中的网关域是有效的路由器地址,作为下一跳路由器的地址,并且应该通过eth0接口访问该路由器。2、路由表的搜索那么,如何确定一条路由是否符合要求呢?方法很简单,即把IP报文中的目的地址跟路由表的每一项中的掩码做与运算,看其结果是否与相应的路由项中的目的子网地址相等。在查找路由表时,要求使用最佳匹配原
35、则。因为在路由表中每条路由的掩码长度不一样,如果有多条成功匹配的路由项,则选择掩码最长的项所对应的路由。实际上,路由器一般都是按照掩码的长度从长到短排序。这样,在查找路由表的时候,自然就从掩码最长的路由开始进行搜索。缺省路由的掩码长度为0,所以它应该是整个路由表的最后一项。路由表的查找过程如图6-10所示。,网关,掩码,标识,目的地地址,MSS窗口,接口名,0.0.0.0,255.0.0.0,UH,127.0.0.0,3584 0,lo0,0.0.0.0,255.255.255.0,U,162.105.1.0,1500 0,eth0,162.105.1.2,255.255.255.0,UG,1
36、62.105.4.0,1500 0,eth0,162.105.1.1,0.0.0.0,UG,0.0.0.0,1500 0,eth0,图 6-9 UNIX主机A中的路由表,3、 IP数据报的封装、分段与重组IP报文要交给数据链路层,封装成帧之后才能发送。理想情况,IP报文正好放在一个物理帧中,这样可以使得网络传输的效率最高。而实际的物理网络所支持的最大帧长各不相同。例如,以太网帧中最多可以容纳1500字节,而一个FDDI帧中可以容纳4470字节的数据。我们把这个上限称为物理网络的最大传输单元MTU(Maximum Transfer Unit)。有些网络的MTU非常小,其值可能只有128个字节。为
37、能把一个IP报文放在不同的物理帧中,最大IP报文的长度就只能等于这条路径上所有物理网络的MTU的最小值。当数据报通过一个可以传输长度更大的帧的网络时,把数据报的大小限制在互连网上最小的MTU之下不经济;如果数据报的长度超过互连网中最小的MTU值的话,则当该数据报在穿越该子网时,就无法被封装在一个帧中。IP协议在发送IP报文时,一般选择一个合适的初始长度。如果这个报文要经历的中间物理网络的MTU值比IP报文长度要小,则IP协议把这个报文的数据部分分割成若干个较小的数据片,组成较小的报文,然后放到物理帧中去发送。每个小的报文称为一个分段(fragmentation)。分段的动作一般在路由器上进行。
38、如果路由器从某个网络接口收到了一个IP报文,要向另外一个网络转发,而该网络的MTU比IP报文长度要小,那么就要把该IP报文分成多个小IP分段后再分别发送。,图6-11给出了一个对IP报文进行分段的网络环境示例。在图6-11(a)中,两个以太网通过一个远程网互联起来。以太网的MTU都是1500,但是中间的远程网络的MTU为620个字节。如果主机A现在发送给B一个长度超过620字节的IP报文,首先在经过路由器R1时,就必须把该报文分成多个分段。在进行分段时,每个数据片的长度依照物理网络的MTU而确定。由于IP报文头中的偏移字段的值实际上是以8字节为单位,所以要求每个分段的长度必须为8的整数倍(最后
39、一个分段除外,它可能比前面的几个分段的长度都小,它的长度可能为任意值)。图6-11(b)是一个包含有1400字节数据的IP报文,在经过图6-11(a)所示网络环境中路由器R1后,该报文的分段情况。从图中可以看出,每个分段都包括各自的IP报文头。而且该报文头和原来的IP报文头非常相似,除了MF标志位、分段偏移、校验和,等几个字段外,其它内容完全一样。 重组(Reasembly)是分段的逆过程,把若干个IP分段重新组合后还原成原来的IP报文。在目的端收到一个IP报文时,可以根据其分段偏移和MF标志位来判断它是否一个分段。如果MF位是0,并且分段偏移为0,则表明这是一个完整的IP数据报。否则,如果分
40、段偏移不为0,或者MF标志位为1,则表明它是一个分段。这时目的地端需要实行分段重组。IP协议根据IP报文头中的标识符字段的值来确定哪些分段属于同一个原始报文,根据分段偏移来确定分段在原始报文中的位置。如果一个IP数据报的所有分段都正确地到达目的地,则把它重新组织成一个完整的报文后交给上层协议去处理。,6.7 ICMP和IGMP 6.7.1 ICMP简介IP协议所提供的是无连接数据报的发送。IP协议自身可以进行差错恢复,但是还要有ICMP协议的配合。ICMP(Internet Control Message Protocol)是一个差错报告协议。它能检查出并报告一些基本的差错,在一定程度上给出出
41、错原因,还可以让一个路由器向其它路由器或主机发送差错或控制报文,ICMP在两台机器上的Internet协议软件之间提供了一种通信方式。ICMP协议最早是被用来进行差错报告的。在前面介绍IP协议时我们已看到如何利用ICMP进行IP数据包的错误检测。如:每个IP数据包的头部都有一个校验和(checksum)字段,它负责对整个IP报文头进行检验。另外,由于IP数据包在每次转发时,根据规定其报文头中的TTL字段值要减1,导致了整个报文头的校验和的改变。因此,路由器在每次转发一个IP报文之前都要重新计算一个新的校验和。在ICMP协议中分别定义了差错消息及控制消息,有如下几种:(1) 源抑制(Source
42、 Quench):当大量的数据涌入一台路由器的某个端口而来不及处理。此时大量的数据报处于发送等待队列中,占用大量的缓冲区,而导致缓冲区溢出,这就是所谓的拥塞(congestion)情形。IP协议采用源抑制(source quench)机制来控制源端发送数据的速率,以此来缓解网络的拥塞状况,(2) 数据包超时(Time Exceeded)路由表发生错误,就会出现循环路由,数据包不休止传输 (3) 目的地不可达(Destination Unreachable)路由器应向源端发送目的地不可达报文,同时抛弃该IP报文。(4) 重定向(Redirect)路由选择主要由路由器来承担。主机在工作过程中,依赖
43、于路由器的信息来更新自己的路由表。路由器会发一个重新定向数据包,告诉主机它去往目的地的最优路径。这样,主机便得到一个最优的路由表。不过,重新定向数据包仅限于同一个网上的路由器和主机间的交互。除上之外,ICMP还定义了一些控制消息类型。如回送请求/应答(echo request/reply)消息。 常用命令ping就是典型的使用ICMP请求/应答报文来实现对网络进行测试的工具。6.7.2 ICMP报文的传输当路由器有一个ICMP消息需要发送时,它创建一个IP数据包,把该ICMP消息封装在IP数据包中再进行传输。如图6-12所示,ICMP数据包也分为头部和数据两部分。尽管每个ICMP报文都有自己的
44、格式,但它们都以相同的三个字段开始,如图6-13所示。其中,类型(type)占一个字节,用来标识报文的信息类型。代码(code)也是占一个字节,提供有关报文类型的进一步信息。校验和(checksum)共占两个字节,提供对整个ICMP报文的校验和(与IP报文头的校验和产生方法相同)。,6.7.3 IGMP简介IGMP(Internet Group Management Protocol)提供一种动态参与和离开多点传送组的方法。当路由器接收到带有多点传送地址的IP数据报时,路由器判断多点传送组的成员是否在本地网上,如是,则转发IP数据报。路由器周期性地发送IGMP询问消息,该消息从效果上说是一个“
45、民意测验”消息。它用IP的TTL值1来进行发送,这样消息就只能发往本地子网。每个收到询问的节点会启动一个随机计时器,当计时器结束计时的时候,节点发送一个自身指向多点传送组的报告。没有参与多点传送组的节点只需取消计时器。这样可以减少不必要的通信。如果路由器没有收到响应,就认为在本地网络上不存在多点传送组的成员。IGMP与ICMP的相似之处在于它们都使用IP服务的逻辑高层协议。事实上,因为IGMP影响了IP协议的行为,所以IGMP被认为是IP的一部分,并作为IP的一部分来实现。为了避免网络通信量问题,当投递到多点传送地址中的消息被接收时,不会生成ICMP错误消息。,6.7.2 IGMP报文的传输当
46、路由器有一个IGMP消息需要发送时,它创建一个IP数据包,把该IGMP消息封装在IP数据包中再进行传输。如图6-12所示,IGMP数据报分为版本(version)4位,版本号,RFC 1112将此值定义为1类型(type) 4位,1表示查询报文,2表示报告报文。保留(reserved)占一个字节,以便将来使用。校验和(checksum)共占两个字节,提供对整个IGMP报文的校验和。组地址(group address)共占两个字节,查询时,被置为0,报告时,被置为多点传送组地址。,6.8 UDP协议用户数据报协议UDP(User Datagram Protocol)提供应用程序之间传送数据报的基
47、本机制。UDP: 简单;无连接传输层协议与IP协议相比,UDP仅增加了两方面的内容:一个是端口(port)的概念,另一个就是检验和。利用协议端口,UDP能够区分在同一台主机上运行的多个程序;使用检验和机制,UDP协议在把数据向应用程序提交之前,先对数据做一些差错检查。UDP工作:从应用层收到的数据,加上UDP头,发送出去。不对发送数据缓冲,且保留各个消息之间的边界,不会把应用层多次发送的数据合并成一个包发送出去。通过UDP协议,可以发送组播数据。所以需要使用组播服务的应用程序一般都建立在UDP协议之上。 6.8.1 协议端口协议端口是传输层引入的一个非常重要的概念。UDP协议用不同的协议端口(
48、protocol port)来代表不同的应用程序,每个协 议端口由一个正整数标识。发送方不仅要知道目的地主机的IP地址,还要知道 相应的协议端口号。每个IP报文都要必须带有目的地主机的端口号,当然同时 还要带有发送方自身的端口号,为了使接收进程知道把回应向谁发送。,6.8.2 UDP报文的格式每个UDP报文称为一个用户数据报:它分为两部分:头部和数据区。如图6-14是一个UDP报文的格式,报文头中包含有源端口和目的端口、报文长度以及UDP检验和。源端口(Source Port)和目的端口(Destination Port)字段包含了16比特的UDP协议端口号,它使得多个应用程序可以多路复用同一
49、个传输层协议 UDP协议,仅通过不同的端口号来区分不同的应用程序。长度(Length)字段记录了该UDP数据包的总长度(以字节为单位),包括8字节的UDP头和其后的数据部分。最小值是8(即报文头的长度),最大值为65,535字节。UDP检验和(Checksum)的内容超出了UDP数据报文本身的范围,实际上,它的值是通过计算UDP数据报及一个伪包头而得到的。但校验和的计算方法与通用的一样,都是累加求和。,6.9 TCP协议 6.9.1 TCP协议功能概述TCP是传输层协议,实现端到端(peer-to-peer)通信;在端主机上实现;屏蔽下层网络提供的服务质量的差别,为应用程序提供稳定可靠的服务。
50、但不能实现组播功能。TCP对上层提供面向连接可靠的通信服务。使用“三次握手”的方式建立一个连接,数据传输完成之后,任何一方都可以断开该连接;端到端全双工连接。 TCP提供面向字节流的流(stream)式服务。TCP工作时可以灵活地决定缓存或发送时机。消息格式由应用程序自已去区分,TCP并没有标记出每个消息的边界。有时用户需要确保所提交给TCP的数据无论多少都不进行缓存,立即发送出去。为此,在TCP协议中定义了PUSH功能。TCP还允许用户发送紧急数据,以便接收者优先处理。它是一种中断机制。在UNIX系统上TCP协议通过向该程序发送信号,激活其异常处理程序,中断它的运行。TCP具有差错恢复、排序等功能。TCP协议对每个传输的字节进行编号。在每个报文中,描述第一个字节的 序号随该报文一起传输,称为报文序号。每个TCP报文中还带有个确认号, 表示接收方希望接收的下一个字节的序号,同时它也说明所有在该序号之前的数据都 已经正确地接收到,否则,重新传输该报文。TCP协议采用滑动窗口机制,实现流控。窗口的大小表示在最近收到的确认号之后允许传送的数据长度。另外,TCP还可以通过检测网络的负载情况,相应地调整发数据发送速率,实现拥塞控制。,