高级网络技术 主讲:华蓓 办公室:西区电一楼 Tel: 3607043 Email: bhua@ustc.edu.cn 主页:http://staff.ustc.edu.cn/~bhua
助教 龚旭东: 陆琦玮:
掌握主流的计算机网络协议,能够运用基本理论分析、初步设计和解答与网络应用相关的问题,了解计算机网络的最新发展和最新技术。 教材 Behrouz A. Forouzan, Sophia Chung Fegan. TCI/IP Protocol Suite (2nd edition) 主要参考书 Andrew S. Tanenbaum. Computer Networks(4th edition) 课程目标 掌握主流的计算机网络协议,能够运用基本理论分析、初步设计和解答与网络应用相关的问题,了解计算机网络的最新发展和最新技术。 成绩组成 考试:50%,实验:40%,作业:10%。 作业、实验报告必须按时交,逾期不计成绩;抄袭不计成绩。
第一部分 网络知识回顾
Internet的发展 1969年第一个真正意义上的计算机网络—ARPANET出现,它在概念、结构和网络设计方面为后继的计算机网络打下了基础。 1974年TCP/IP协议问世,TCP/IP实现随UNIX操作系统一起免费发布。 1986年面向全美大学的NSFNET建立,并与其它网络实现连接,NSFNET的正式运营以及与其它网络的互联成为真正因特网的开始。 1990年至1995年,因特网完成商业化过程。 1991年World Wide Web问世,因特网进入普通民众的生活,直接导致了因特网的大发展。 从20世纪90年代后期开始,因特网进入爆炸式发展的时期。 今天,计算机网络已经无处不在,用户可以通过各种手段访问因特网,获取各种需要的信息。
Internet结构
网络互连(internetworking) 为什么需要网络互连? 没有哪一种网络技术可以适合所有的需要,一个组织需要多种网络类型。 连接在不同网络上的计算机需要相互通信。 异构网络互连的困难: 网络硬件和物理编址的不兼容性阻碍了使用不同技术的网络之间进行互连,比如,在一个网络上创建的帧无法在另一个网络上传输。 网络互连是为异构网络提供通用服务而设计的模式: 硬件系统提供互连的物理网络,相互连接的物理网络系统称为互连网络(internetwork)或互连网(internet)。 计算机上的软件提供通用服务。 每种网络技术都有一定的约束,比如,LAN技术仅能提供短距离上的高速通信,而WAN技术提供长距离的通信。一个大型组织可能需要多个物理网络,比如使用以太网连接一个场所的计算机,而使用帧中继来连接不同城市之间的计算机等。在20世纪70年代,大型组织中的每个网络形成一个孤岛,每台计算机只连接到一个网络。为完成某个任务,员工不得不从一台计算机移到另一台计算机。
使用路由器的物理网络连接 连接异构网络的基本硬件是路由器。 路由器可以将使用不同技术的网络连接起来,包括使用不同介质、不同物理编址方式和不同帧格式的网络。 路由器主要致力于在其连接的网络之间转发数据。 物理上,互连网是一个通过路由器连接的网络集合,每个组织可自由选择网络的数量、类型与拓扑结构等。 图中用云来表示每个网络,表示对网络使用的技术没有限制,每一团云均代表了任意的网络技术。 图中每台路由器有两个连接,实际应用中可以有多于两个网络连接。 一个组织很少使用一台路由器来连接所有的网络,一是因为一台路由器的处理能力有限,二是冗余的路由器可以提高网络的可靠性。
虚拟网络 网络软件为互连网中的计算机提供了一个单一的、无缝的通信系统,这个通信系统提供了通用服务: 每台计算机被分配一个地址,任何计算机可以向任何其它计算机发送数据包。 协议软件隐藏了网络的物理连接、物理地址和路由信息等细节。 互连网是一个虚拟网络系统,因为它提供了一个统一网络系统的表现形式,而实际上并不存在这样的网络系统。
虚拟网络和对应的物理结构
网络互连协议 TCP/IP是应用于互连网的第一套协议,也是目前使用最广泛的网络互连协议。 TCP/IP协议族包括了一组协议,其中TCP和IP协议是其中最核心的两个协议。
TCP/IP参考模型 IP是TCP/IP使用的传输机制,用于将数据报从源节点传送到目的节点,IP不提供排序、差错控制等服务。 ICMP和IGMP是两个控制协议,ICMP用于报告网络中发生的一些事件,IGMP用于管理多播组,这两个协议都依靠IP传输它们的消息。 ARP和RARP用于将IP地址与物理地址联系起来,它们的消息直接封装在链路层帧中传输,不使用IP。 TCP和UDP是两个进程到进程的协议,负责将报文从一个进程交付到另一个进程。
因特网体系结构的另一种表示法
主机、路由器和协议层 主机:与互连网相连并运行应用程序的任意计算机系统。 主机上一般运行完整的协议栈。 路由器一般不运行应用层协议,个别路由器可能运行应用程序以允许管理员远程管理路由器。
互联网地址 为提供统一系统的表现形式,所有主机必须使用统一的编址模式,并且每个地址必须是唯一的。 物理网络地址不具有这个能力,为此协议软件定义了一种独立于底层物理地址的编址模式,数据包在互连网中传输时使用协议地址。 在采用TCP/IP协议的网络中,每台主机被分配一个唯一的32位二进制数,这个数称为IP地址(或互连网地址)。 每个通过互连网发送的数据包均包含发送者(源)IP 址和接收者(目的)IP地址。
TCP/IP网络使用的三个地址 物理地址: 互联网地址: 端口地址:用于在一台计算机上唯一地标识一个进程。 用于在一个物理网络上唯一地标识一个接口,其格式由所在的物理网络定义。 有单播、多播、广播三种地址类型。 互联网地址: 用于在互联网上唯一地标识一个网络接口。 端口地址:用于在一台计算机上唯一地标识一个进程。
第二部分 网际层协议
第4章 IP地址:分类编址 IP地址的作用 IP地址的表示方法 IP地址的种类 特殊及专用的IP地址
4.1 IP地址的作用 唯一且全局地标识连接在Internet上的网络端口 唯一: 全局: 具有多个连接的网络设备,每个连接对应一个地址 全局: 地址可被任意一个愿意连接到Internet上的网络设备所接受。
4.2 IP地址的表示方法 IPv4地址使用32位的二进制地址,其地址空间为232(超过40亿)。 三种常用的标记法: 二进制记法:每个字节之间加上一个或更多的空格,如10000000 00001011 00000011 00011111 点分十进制记法:每个字节表示成十进制数,字节之间用圆点分隔,如128.11.3.31 十六进制记法:每一组4位用等效的十六进制数表示,如0x800B031F,或800B031F16 不同的记法不能混用,如11100010.23.14.67是不对的。
4.3 IP地址的分类 在最初的IP协议中,IP地址被分成A、B、C、D、E五类,以地址的最高几位作为类型标志,称为基于类的编址。
各类地址的地址空间大小 A类地址:231≈21.5亿,占整个地址空间的50% B类地址:230≈10.7亿,占整个地址空间的25% C类地址: 229≈5.4亿,占整个地址空间的12.5% D类地址: 228≈2.7亿,占整个地址空间的6.25% E类地址: 228≈2.7亿,占整个地址空间的6.25%
单播地址的组成 单播IP地址划分为网络标识和主机标识两部分: 网络标识唯一标识Internet上的一个网络 主机标识唯一标识该网络中的一个连接 任何一个网络需要接入因特网时,必须向因特网管理部门申请一个网络标识,主机标识则由管理员进行分配。
类和块 每一类地址都划分为固定数目的块,每一块的大小都固定,地址按块分配。 A类地址 B类地址 C类地址 共有27=128个块,每个块的第一个字节都一样。 每个块有224(约1600万)个IP地址 B类地址 共有214=16384个块 每个块有216=65536个IP地址 C类地址 共有221(约210万)个块 每个块有28=256个IP地址
分类编址的缺点 数以百万计的A类地址被浪费了。 许多的B类地址也被浪费了。 C类地址中的地址数对于大多数机构来说不够用。
掩码 网络中的路由器是按照网络地址进行路由的,网络地址是只有网络号而主机号全为0的IP地址。 路由器从分组的目的地址中得到网络地址,然后查找路由表进行转发。 基于类的编址是自包含的,从IP地址的类型标识可以确定地址的种类,从而得到网络地址。 从一个地址找出其网络地址的更一般方法是使用掩码。掩码是一个32位的二进制数,其对应网络号的部分为1,对应主机号的部分为0。 将IP地址与相应的掩码进行逐位的“与”运算,即可得到其网络地址。 IP地址是一种两层的编址方案,因而数据包路由也是分为两层进行的,首先找到目的主机所在的网络,然后再找到网络中的目的主机。因此,路由器是按照网络地址进行路由的,路由器从分组的目的地址中得到网络地址,然后查找路由表进行转发。
掩码举例 A、B、C类地址的默认掩码: 例12: A:255.0.0.0 B:255.255.0.0 C:255.255.255.0 给出地址23.56.7.91和地址掩码255.0.0.0,求网络地址。 23.56.7.91 AND 255.0.0.0 = 23.0.0.0
4.4 特殊及专用的IP地址 网络号或主机号为0或-1的地址是特殊地址,从不分配给单独的主机: 网络号有效但主机号全为0的地址保留给网络本身(网络地址) 网络号有效但主机号全为1的地址保留作为定向广播地址,即在网络号指定的网络中广播(仅作为目的地址) 32位全1的地址称为受限广播地址,表示仅在发送节点所在的网络中广播(仅作为目的地址) 32位全0的地址指示本机(仅作为源地址) 网络号为0但主机号有效的地址指代本网中的特定主机(仅作为目的地址) 形如127.xx.yy.xx的地址保留作为回路测试,发送到这个地址的分组不输出到线路上,而是送回内部的接收端(仅作为目的地址) 专用地址:10.0.0,172.16~172.31,192.168.0~192.168.255
分类地址的互联网实例
练习 习题 24(a), 25(a), 28(a),35,38,41,44,50,53,59,62
第5章 子网、超网和无分类编址 划分子网 构成超网 无分类编址 第5章 子网、超网和无分类编址 划分子网 构成超网 无分类编址 这一章讨论与IP编址有关的两个重要问题:划分子网和构成超网,然后讨论无分类编址方案。
5.1 划分子网 A类网络和B类网络都是相当大的网络,对这么大的网络进行平面化管理是相当困难的。
三级地址结构 划分子网就是把一个网络划分成几个较小的网络,每个较小的网络都有自己的地址。 从概念上说,划分子网就是将主机标识进一步划分成子网标识和主机标识,从而形成一个三级结构的地址。
子网掩码 网络内部的路由器根据子网地址在各个子网间转发数据包。 从IP地址获取子网地址的方法是使用子网掩码。 子网掩码是一个32位的二进制数,对应主机号的部分为0,其余部分为1。 将IP地址与子网掩码相与,可以找出子网地址。 例如:目的地址是200.45.34.56,子网掩码是255.255.240.0,子网地址为200.45.32.0。 子网掩码中1的个数要比默认掩码中1的个数多。
设计子网 设计子网的步骤: 例3:将一个C类网络201.70.64.0划分成6个子网 决定子网数:子网数必须是2的幂次。 确定子网掩码:对应网络号及子网号的部分为1,其余为0 确定每一个子网的地址范围 例3:将一个C类网络201.70.64.0划分成6个子网 子网数:23=8 子网掩码:11111111 11111111 11111111 11100000,即255.255.255.224 每个子网中的地址数:25=32 子网的地址范围:201.70.64.0~201.70.64.31, 201.70.64.32~201.70.64.63,……, 201.70.64.224~201.70.64.255。
变长子网掩码 变长子网划分,就是允许子网的规模不同。 例:一个C类网络x.y.z.0要划分成5个子网,每个子网中连接的主机数分别为60、60、60、30、30。 先将C类网络划分成4个子网,每个子网有64个地址,子网掩码为255.255.255.192。 再将其中的一个子网划分成两个子网,每个子网允许32个地址,子网掩码为255.255.255.224。 子网的地址范围为:x.y.z.0~x.y.z.63, x.y.z.64~x.y.z.127, x.y.z.128~x.y.z.191, x.y.z.192~x.y.z.223, x.y.z.224~x.y.z.255。
5.2 构成超网 目前A类和B类地址几乎用完,C类地址还有,但C类网络太小,为此提出构成超网的解决方案。
地址分配 为使这个较大的地址范围看起来像是一个网络的地址空间,从而在路由表中只占有一个表项,地址块的分配必须满足以下条件: 地址块必须是连续的 地址块的个数n必须是2的幂次 第一个地址的第3字节必须能被n整除 以上三个条件是为了保证第3字节的前(8-log2n)位是相同的,从而可以将这(8-log2n)位连同前面的16位一起看成是一个超网地址。
举例 例5:某公司需要600个地址,下面哪一组C类地址块可以用于这个公司构成超块? 解: (1)块数不是2的幂次 (1)198.47.32.0,198.47.33.0,198.47.34.0 (2)198.47.32.0,198.47.42.0,198.47.52.0,198.47.62.0 (3)198.47.31.0,198.47.32.0,198.47.33.0,198.47.34.0 (4)198.47.32.0,198.47.33.0,198.47.34.0,198.47.35.0 解: (1)块数不是2的幂次 (2)地址块不连续 (3)第1个块中的31不能被4整除 (4)可以。超网起始地址为198.47.32.0。
超网掩码 路由器可以使用超网掩码找出超网地址,用以标识这个网点。 超网掩码: 利用超网掩码确定目的地址是否属于超网: 超网掩码的前(24-log2n)位为1,其余位为0。 (例6)由16个C类地址块构成的超网,超网掩码中1的个数为(24-log216)=20,即255.255.240.0 利用超网掩码确定目的地址是否属于超网: 超网地址即为超块中的第一个地址 将目的地址与超网掩码相与,若结果与超网地址相同,该目的地址属于超网
举例 例7: 超网的第一个地址是205.16.32.0,超网掩码为255.255.248.0,路由器收到以下目的地址的三个分组,问哪一个分组属于这个超网? (1) 205.16.37.44 (2) 205.16.42.56 (3) 205.17.33.76 解:将目的地址分别与超网掩码255.255.248.0相与 (1) 结果为205.16.32.0,是 (2) 结果为205.16.40.0,否 (3) 结果为205.17.32.0,否
举例 例8: 超网的第一个地址是205.16.32.0,超网掩码为255.255.248.0,问这个超网有几个地址块?地址范围是多少? 解: 超网掩码有21个1,第3个字节的低3位为0,因此超网中有23=8个块。 地址总数为256*8=2048 地址范围:205.16.32.0~205.16.39.255.
5.3 无分类编址 可使用不属于任何类的可变长度块,只要满足以下条件: 例9: 地址数必须是2的幂次 开始地址必须能被地址数整除 下面哪些地址可以是包含16个地址的块的开始地址? (1) 205.16.37.32 合格 (2) 190.16.42.44 不合格 (3) 17.17.33.80 合格
无分类编址的记法 无分类地址的斜线记法(也称CIDR记法): 前缀:所有地址中相同的前n位称为前缀,n为前缀长度 A.B.C.D/n,其中A.B.C.D为起始地址,n表示所有地址的前n位是相同的。 前缀:所有地址中相同的前n位称为前缀,n为前缀长度 后缀:地址中的可变部分称为后缀,长度为(32-n)位 掩码:对应前缀的部分为1,对应后缀的部分为0 根据起始地址和前缀长度可以确定网络地址,例如: 已知某个地址是167.199.170.82/27,求网络地址。 解:取地址的前27位,最后5位置0,为167.199.170.64/27。
划分子网 对于无分类编址也可以划分子网: 例14: 子网前缀长度=原前缀长度+子网标识长度 将网络130.34.12.64/26划分成4个子网 解: 4个子网需要用2位进行标识,因此子网前缀长28位 主机标识只剩下4位,因此每个子网有16个地址 第一个子网:130.34.12.64/28~130.34.12.79/28 第二个子网:130.34.12.80/28~130.34.12.95/28 第三个子网:130.34.12.96/28~130.34.12.111/28 第四个子网:130.34.112.80/28~130.34.12.127/28
举例 例15,要将190.100.0.0/16开始的地址块分配给如下的三组用户:组1,64个用户,每个用户需要256个地址; 组2,128个用户,每个用户需要128个地址; 组3,128个用户,每个用户需要64个地址. 解: 组1: 256个地址需要的后缀长度为8,因而前缀长度为24。 第1个用户:190.100.0.0/24~190.100.0.255/24 第64个用户:190.100.63.0/24~190.100.63.255/24 组2: 128个地址需要的后缀长度为7,因而前缀长度为25 第1个用户:190.100.64.0/25~190.100.64.127/25 第128个用户:190.100.127.128/25~190.100.127.255/25 组3: 64个地址需要的后缀长度为6,因而前缀长度为26 第1个用户:190.100.128.0/26~190.100.128.63/26 第128个用户:190.100.159.192/26~190.100.159
练习 习题: 31,32(d),35(a),38(a),41,44,45,46
第6章 IP分组交付和路由选择 直接交付和间接交付 路由选择的方法 路由表 路由选择模块 无类域间路由CIDR 路由表查找算法
6.1 直接交付和间接交付 分组交付是指分组的具体转发,分为直接交付和间接交付两种方式。 直接交付
交付,包括一个直接交付,以及零个或多个间接交付
直接交付 直接交付: 如何判断是否在同一个物理网络上? 如何进行直接交付? 目的主机与交付者在同一个网络上,如源主机和目的主机在同一个物理网络上,或者交付在最后一个路由器与目的主机之间进行。 如何判断是否在同一个物理网络上? 交付者利用掩码提取分组的目的网络地址,若与自己的网络地址相同,表明目的主机与自己在同一个物理网络上。 如何进行直接交付? 交付者利用目的IP地址获取目的物理地址,交给数据链路层进行实际的交付。
间接交付 间接交付: 交付者利用掩码提取分组的目的网络地址,若与自己的网络地址不同,表明需要进行间接交付。 如何进行间接交付? 目的主机与交付者不在同一个物理网络上,分组需要转发给一个路由器。 交付者利用掩码提取分组的目的网络地址,若与自己的网络地址不同,表明需要进行间接交付。 如何进行间接交付? 交付者利用目的IP地址和路由表确定下一跳路由器的IP地址,分组必须交付到这个路由器。 交付者利用下一跳路由器的IP地址找到相应的物理地址,交给数据链路层进行实际交付。
6.2 路由选择的方法 下一跳路由:路由表中只保留下一跳地址,而不是完整的路由信息。
路由选择的方法(续) 网络前缀路由:路由表中记录到目的网络而不是每个特定主机的路由。
路由选择的方法(续) 特定主机路由:路由表中记录到某个特定主机的路由。
路由选择的方法(续) 缺省路由:除了路由表中列出的目的网络或目的主机之外,去往其它地方的分组使用缺省路由。
6.3路由选择 静态路由表: 由系统管理员事先设置好固定的路由表(一般在系统安装时根据网络的配置情况预先设定),不随未来网络结构的改变而改变。 动态路由表: 动态路由表是路由器根据网络系统的运行情况而自动调整的路由表。路由器根据路由选择协议(Routing Protocol)提供的功能,自动学习和记忆网络运行情况,在需要时自动计算数据传输的最佳路径。
路由表和路由选择模块 路由查找的顺序: 直接交付 特定主机路由 特定网络路由 默认路由
路由表的字段 掩码:将这个掩码应用到分组的目的IP地址,以便找到目的节点的网络地址或子网地址。 目的地址:定义目的主机地址(特定主机路由)或目的网络地址(网络前缀路由)。 下一跳地址:分组必须交付到的下一跳路由器的地址。 接口:指出分组转发要使用的接口名称。 标志:其中G标志置位表示采用间接交付(使用下一跳地址),否则使用直接交付。
6.4 路由选择模块 路由模块的功能是在收到一个IP分组后,查找路由表,确定匹配的路由表项。 对于路由表中的每一项: 将掩码应用到分组目的地址; 如果结果与目的地址字段相同: 如果标志G出现,使用下一跳字段中的值作为下一跳地址; 如果标志G未出现,使用分组目的地址作为下一跳地址; 将分组及下一跳地址交给ARP模块; 若未收到匹配项,发送ICMP出错消息。
路由表查找举例 路由表示例 掩码 目的地址 下一跳 接口 标志 255.0.0.0 111.0.0.0 - m0 掩码 目的地址 下一跳 接口 标志 255.0.0.0 111.0.0.0 - m0 255.255.255.224 193.14.5.160 - m2 255.255.255.224 193.14.5.192 - m1 …… …… 255.255.255.255 194.17.21.16 111.20.18.14 m0 G 255.255.255.0 192.16.7.0 111.15.17.32 m0 G 255.255.255.0 194.17.21.0 111.20.18.14 m0 G 0.0.0.0 0.0.0.0 111.30.31.18 m0 G 例1:查找目的地址 192.16.7.14 匹配第5项 例2:查找目的地址 193.14.5.176 匹配第2项 例3:查找目的地址 200.34.12.34 匹配最后一项
建立路由表举例
根据路由表构建网络拓扑
6.5 无类域间路由 (Classless Inter-Domain Routing) 无类域间路由的两个基本思想: 按照实际需要的地址数量而不是类来分配地址空间,提高地址分配的效率;(无分类编址) 允许将若干条路由聚合(aggregate)成一条路由,减小路由表的规模。(路由聚合) 采用CIDR后,路由表中的表项不一定代表一个网络,而可能是若干个网络的聚合。 分组的目的地址可能匹配多个表项,这些表项中前缀最长的匹配是最佳匹配。 到目前为止,我们讨论路由表时都是假设每个网络在路由表中占有一个表项,但是这种做法会造成路由表规模爆炸,因为C类网络有大约210万个之多。无类域间路由可以解决这个问题。我们前面讨论的无分类编址方案是无类域间路由的一部分,无类域间路由包含两个基本思想。
Address aggregation 地址聚合
Longest mask matching最长掩码匹配
6.6 路由表查找算法 基于分类编址方案的路由表查找 基于无类编址方案的路由表查找 每类地址对应一个表 路由器根据目的地址所属的类确定需要查找的路由表 采用哈希查找法查找路由表 基于无类编址方案的路由表查找 最简单的方法是将路由表项按照前缀长度从大到小排列,然后采用顺序法进行查找。 也可以对每一种前缀长度建立一个表(共使用32个表),从前缀最长的表开始查找(哈希查找),直到找到一个匹配的表项。 高效的路由查找方法需要改变查找表的数据结构。
练习 习题: 17,21,23,24,32,40,41
第7章 ARP和RARP 分组交付与地址映射 ARP协议 ARP软件包示例 RARP协议
7.1 分组交付与地址映射 分组交付需要两级地址: 逻辑地址(IP地址):设备在互联网上的地址,用于在全局范围内确定设备所在的物理网络。 物理地址(MAC地址):设备所使用的网卡的地址,用于指定接收分组的物理设备。 交付者使用逻辑地址判断与目的端是否在同一个物理网络上及确定下一跳路由器地址,然后使用物理地址将分组实际交付给接收者: 直接交付:交付者使用目的主机的物理地址封装链路层帧。 间接交付:交付者使用下一跳路由器的物理地址封装链路层帧。
地址映射 交付者如何根据IP地址找到其相应的物理地址? 地址映射: 静态与动态映射: 将逻辑地址与物理地址关联起来,称为地址映射。 静态映射:逻辑地址与物理地址的关联关系不变,除非进行重新设置。 动态映射:逻辑地址与物理地址的关联可以实时改变。
7.2 ARP(Address Resolution Protocol) 根据IP地址获取相应的物理地址的协议。 工作原理: 交付者发送ARP请求分组,分组中包括交付者的物理地址和IP地址,以及分组接收者(下一跳)的IP地址。 ARP请求分组封装在广播帧中发送。 网络上的每一个主机或路由器都接收和处理这个请求分组,但只有预期的接收者才发回ARP响应分组,分组中包含接收者的IP地址和物理地址。ARP响应分组用单播方式发送,使用请求者的物理地址。
ARP原理示意图
ARP分组格式 以太网的硬件类型为1 IPv4的协议类型为080016 ARP协议可使用在任何物理网络上,支持任何高层协议。 将ARP请求分组中的发送方地址与目标地址对换,并设置操作码为2,即构成ARP响应分组。
ARP分组的封装 ARP分组封装在以太帧中
举例 IP地址为130.23.43.20及物理地址为oxB23455102210的主机,有分组要发送给同一个网络上IP地址为130.23.43.25的主机。
代理ARP 代理ARP是可以代表一组主机的ARP。 当运行代理ARP的路由器收到针对其中某个主机的ARP请求时,路由器发送ARP响应,宣布它自己的物理地址。当路由器收到发往这些主机的IP分组时,它将分组转发给相应的主机。 使用代理ARP,管理员可以创建一个子网而不需要进行子网地址划分;代理ARP在移动IP中也有重要作用。
7.3 ARP构件示例 ARP缓存表状态:已过期,请求已发出,表项可用。 队列:缓存等待解析地址的包。 输出模块:接收IP分组及下一跳地址,确定MAC地址。 输入模块:处理ARP分组,更新ARP缓存。 控制模块:维护ARP缓存表。
ARP构件(续) 高速缓存表: 发送端将获得的目标物理地址保存在一个高速缓存表中,在随后的一小段时间内,去往相同目标的分组将从缓存表中查询物理地址。 高速缓存表用数组实现,使用状态字段来表示表项的状态(已过期,请求已发出,表项可用) 队列: 用于在ARP解析硬件地址的过程中缓存IP分组,每个队列对应一个目的地址。
ARP构件(续) 输出模块: 从IP模块接收IP分组,使用分组的目的IP地址查找高速缓存表, 若高速缓存表中有匹配的表项,且有可用的目标硬件地址,将分组连同目标硬件地址一起交给数据链路层; 若高速缓存表中有匹配的表项,但尚未获得可用的目标硬件地址,将分组加入相应的队列中; 若高速缓存表中没有匹配的表项,创建一个队列,将分组放入该队列中;在高速缓存表中创建一个状态为PENDING的表项,发送ARP请求分组。
ARP构件(续) 输入模块: 接收ARP(请求或响应)分组,使用目标协议地址查找高速缓存表, 检查ARP分组的操作码, 若有匹配的表项且状态为PENDING,用分组的目标硬件地址更新表项,更新状态为RESOLVED,设置超时,然后从相应的队列中取出分组,连用硬件地址一起交给数据链路层。 若有匹配的表项且状态为RESOLVED,仍然用分组的目标硬件地址更新表项,重新设置超时。 若没有匹配的表项,创建一个表项,将发送方地址信息添加到表项中,设置状态为RESOLVED,并设置超时。 检查ARP分组的操作码, 若为ARP请求,创建ARP响应并发回 若为ARP响应,丢弃分组
ARP构件(续) 高速缓存控制模块: 维护高速缓存表,定期扫描各个表项, 若表项的状态为FREE,跳过该表项 若表项的状态为PENDING,将尝试字段值加1,若该值大于允许的最大值,修改表项状态为FREE,并撤销相应的队列;否则重发ARP请求 若表项的状态为RESOLVED,将超时字段值减去自上次检查以来经过的时间,若该值小于或等于0,修改表项状态为FREE,并撤销相应的队列。
例1:ARP输出模块收到一个IP分组,目的地址为114.5.7.89 Table 7.1 Original cache table used for examples 例1:ARP输出模块收到一个IP分组,目的地址为114.5.7.89
例2:20秒后,ARP输出模块收到一个IP地址,目的地址为116.1.7.22 Table 7.2 cache table used for examples P 23 1 116.1.7.22 例2:20秒后,ARP输出模块收到一个IP地址,目的地址为116.1.7.22
例3:15秒后,ARP输入模块收到一个ARP分组,其目标地址为118.11.8.71 Table 7.3 cache table used for examples P 23 1 116.1.7.22 900 E34573242ACA R 例3:15秒后,ARP输入模块收到一个ARP分组,其目标地址为118.11.8.71
Table 7.4 cache table used for examples 840 3 F 390 2 P 23 2 116.1.7.22 F 875 E34573242ACA R 例4:25秒后,缓存控制模块更新每一个表项,包括超时字段和重传次数。
7.4 RARP(Reverse Address Resolution Protocol) 根据物理地址获取相应的IP地址的协议。 工作原理: 需要获取自己IP地址的机器从网卡中获得自己的物理地址,创建RARP请求分组,分组中包含自己的物理地址,将请求分组封装在广播帧中发送。 网络中的RARP服务器接收RARP请求,查表获得相应的IP地址,创建RARP响应分组,响应分组使用单播发送(将请求者的物理地址添加到ARP缓存表中)。
RARP原理示意图
RARP分组的封装 RARP分组格式与ARP分组相同,只是操作码为3(请求)或4(响应)。 RARP分组封装在以太帧中:
练习 习题: 22,23,24,25,30,31
第8章 网际协议IP IP协议概述 数据报格式 分片与重组 IP选项 检验和
8.1 IP协议概述 IP协议是TCP/IP协议族使用的传输机制。 设计目标:实现异构网络的互连,并使系统具有良好的可扩展性。 尽力(best-efforts)服务模型:IP只是尽最大努力将数据报从源节点传向目的节点,但不保证数据报一定会无差错地到达目的节点,也不保证数据报的传输顺序。即IP协议是一种无连接不可靠协议。 IP协议由两个部分组成: 编址方法及地址分配策略 数据报格式及对数据报的处理规则 两个版本:IPv4和IPv6。 尽力服务模型只保留了数据报转发这一“非有不可”的服务,而舍弃了其它“锦上添花”的服务(如可靠性保证、流量控制、包序维持等),大大减轻了因特网中路由器的处理任务。这种功能简单性正是因特网具有良好的可扩展性并易于支持异构操作的重要前提。 如果应用需要更好的传输特性,这些特性应由传输层来提供。
8.2 数据报格式 在IP层传输的分组称为数据报。数据报由报头和数据两部分组成,其中报头包含了有关路由选择和交付的重要信息。
IP协议提供的服务 IP协议提供了数据传输所需要的最少服务: IP协议未提供的服务 数据报转发 数据报分片 报头检错 限制数据报寿命 利用选项支持功能扩展 IP协议未提供的服务 数据检错 可靠性 流量控制
8.3 分片 最大传输单元MTU:一个物理网络上的帧所能携带的最大数据量,以太网的MTU等于1500字节。 当数据报的长度超过输出线路的MTU时,数据报必须被分成较小的片段(报片)传输,称为分片(fragmentation)。 当一个已经分片的数据报到达一个具有更小MTU的网络时,需要被进一步分片。 所有的报片在到达目的主机后再进行重组。
与分片有关的字段 标识:标记从源主机发出的数据报,该标识与源IP地址唯一标识一个数据报。在进行分片时,该标识被复制到所有报片的报头中。在进行分片重组时,根据源IP地址和标识将属于同一个数据报的报片组装在一起。 标志:D位置1,指示中间路由器不要对数据报进行分片;M位置1,表示该数据报不是最后的分片。 分片偏移:指示该分片在原始数据报中的位置,以8字节为度量单位。换句话说,除最后一个分片外,其余分片的长度必须是8的整数倍。
分片偏移量计算 具有4000字节数据的数据报被划分成三个分片,第一、二个分片包含1400字节数据,第三个分片包含1200字节数据。
报片封装 确定报片的长度: 每个报片封装成独立的数据报传输,封装报片使用的报头取自原始数据报的报头,但以下字段可能发生改变: 路由器使用输出线路的MTU与报头长度H计算每一个报片可以包含的最大数据量N,N是满足 H+N≤MTU 的8的最大倍数。 如以太网的MTU为1500字节,假定IP报头长为40字节,则每个报片能够包含的数据最多为N=1456字节。 每个报片封装成独立的数据报传输,封装报片使用的报头取自原始数据报的报头,但以下字段可能发生改变: 总长度:改为实际报片的长度 标志位:除最后一个报片外,其它报片的M位置1 分片偏移:改为实际的偏移量 头校验:重新计算
报片封装举例
分片重组 将收到的报片重新组装成原始数据报的过程称为重组,重组在目的主机中进行: 分片重组的困难: 目的主机使用源地址和分组标识来确定属于同一个数据报的报片,并根据M标志判断最后一个报片是否到达。 当M=0的报片到达时,根据该报片的偏移字段和总长度字段可以计算出原始数据报的总长度。 按照各报片在原始数据报中的偏移量重组分组。 分片重组的困难: 乱序投递:各个报片可能乱序到达 丢失:来自同一个数据报的一个或几个报片可能在传输过程中丢失 重复:重传数据报的报片与原始数据报的报片可能有重叠 主机可能需要同时重组多个数据报
分片重组使用的数据结构 根据报头中的M比特和分片偏移量判断收到的数据报是否是一个报片。 利用源IP地址和分组标识找到相应的重组数据结构。如果是该数据报中的第一个报片,分配一个重组数据结构及一个定时器。 将报片中的数据拷贝到重组缓冲区中,存放位置=分片偏移量*8,并修改链表。 当所有数据都收到后,将重组好的数据报交给上层,回收资源。 若定时器超时,回收重组数据结构,丢弃重组缓冲区中的内容。
8.4 IP选项 IP数据报的报头由固定头与选项两部分组成,固定头长度为20字节,选项部分最多40字节。 选项主要用来支持一些不常用的功能,或支持功能扩展。 选项采用TLV格式的表示方法: Type:选项类型 Length:选项长度 Value:选项数据
IP选项格式
主要的IP选项 记录路由:用于记录处理数据报的互联网路由器,最多只能记录9个路由器。 严格的源路由:源端指明数据报在因特网中传输时要经过的路由器。数据报必须经过选项中定义的所有路由器,且不能通过其它的路由器。这个选项可用于指定一条安全的路由。 不严格的源路由:比严格源路由宽松一些,数据报必须经过选项中定义的所有路由器,但也可以通过其它的路由器。 时间戳:记录各个路由器处理数据报的时间。 在实际网络中,IP选项很少被使用。
8.5 检查和(checksum) TCP/IP协议中采用的差错检测方法大多为检查和。 发送端先计算检查和,结果与分组一起发送;接收端对包括检查和在内的相关部分进行同样的计算,结果正确则接受分组,否则丢弃。 检查和的计算方法: 把要检错的部分(比特串)划分为k段,每段n位(n通常为16) 对所有段做带进位的加法,有进位的话加到和的最低位上 对结果取反码即得到检查和 检查和检错能力较弱,主要用于检测内存读写的错误,但计算简单,支持增量更新,可以用软件实现。 当数据包头某个域更新后,不需要完全重新计算检查和。只要把改变了的16比特整数的差加到原先的检查和上就可以了。 比如,原始数据为m,新值为m‘,旧检查和为C,则新检查和 C‘ = C + (m’ – m)。
检查和计算
头校验计算举例
8.6 IP软件包示例 IP软件包的功能: 源主机:从高层协议接收IP分组交付给数据链路层 目的主机:从数据链路层接收IP分组交付给高层协议
添加报头模块 添加报头模块 从高层协议接收数据及目的IP地址 构造IP报头 将数据报加入到处理模块的相应队列
处理模块 从某个输入队列取出一个数据报 若本机为数据报的目的地 若本机为路由器 若TTL为0 将数据报交给转发模块 将数据报交给重组模块 返回 若本机为路由器 TTL减1 若TTL为0 丢弃数据报,发送ICMP差错消息,返回 将数据报交给转发模块
分片模块 返回 从转发模块接收IP数据报 获取数据报长度 若长度大于输出线路的MTU 如果D置位 否则 发送数据报到ARP软件包 丢弃数据报,发送ICMP差错消息,返回 否则 计算报片的最大长度 将数据报划分为一系列报片 为每个报片添加报头 发送数据报到ARP软件包,返回 发送数据报到ARP软件包 返回
重组模块 从处理模块接收IP数据报 如果分片偏移量=0且M=0(未分片的IP数据报) 查找重组表中的相应表项 如果未找到相应的表项 将数据报加入到合适的队列,返回 查找重组表中的相应表项 如果未找到相应的表项 创建一个表项,分配一个定时器 在链表的适当地方插入这个分片 如果所有分片都已到达 将数据报交给相应的高层协议,返回 若超时 丢弃所有分片,发送ICMP差错消息 返回
练习 习题: 39,40
第9章 Internet控制消息协议 Internet控制消息协议(ICMP)由主机或路由器用来报告网络层上的一些信息。
9.1 ICMP的封装 ICMP消息封装在IP数据报中传输,其协议字段值为1。
9.2 ICMP报文类型 ICMP报文分为差错报告和查询两类: 差错报告:路由器或目的主机用来向源节点报告出错信息,不需要响应。 查询报文:主机或管理员用来向路由器或主机请求一些信息,通常采用请求-响应模式进行交互。
9.3 ICMP报文格式 ICMP报文由8字节的报头和可变长度的数据部分组成,检查和对整个ICMP报文计算。
9.4 差错报告 ICMP总是向数据报的源端发送差错报告。 ICMP处理5类差错:目的不可达,源端抑制,超时,参数问题,重定向。
差错类型 目的不可达:路由器找不到路由或者主机无法交付数据报,代码字段指明具体的原因(16种)。 源端抑制:当路由器或主机因拥塞而丢弃数据报时,向源节点发送源端抑制报文,为IP提供一种流量控制的机制。 超时:TTL为0或者分片重组的定时器超时,代码字段指明是哪一种情况。 参数问题:报头中的某个字段出错或缺少所需的选项部分,代码字段指明是哪种情况。若为前者,ICMP报文头中包含一个指针,指向出错的字节。 重定向:本地网络上的路由器向主机建议修改路由表, ICMP报文头中包含建议的路由器地址。这种情况下路由器不丢弃数据报,而是将数据报发送到适当的路由器。
重定向示意 R1向A建议,去往B的最佳路由是R2,同时将分组转发给R2。
发送ICMP差错报文的限制 差错报告都有数据部分,包括原始数据报的报头及前8个字节的数据。 发送ICMP差错报文的限制:
9.5 查询报文 四种类型: 回送请求/响应 时间戳请求/响应 地址掩码请求/响应 路由器请求/通告
回送请求/响应 为诊断目的而设计,用于确定两个系统能否彼此通信。 标识符通常是发起请求的进程的ID 序号用来关联一对请求和响应 可选的数据字段可以包含一个报文,响应报文中必须完全重复这个报文。
时间戳请求/响应 用于确定IP数据报在两个系统之间的往返时间。 往返时间=分组到达时间-To-(Tt-Tr)
地址掩码请求/响应 由主机用来向网络上的路由器请求地址掩码,路由器发回响应。 请求报文中,地址掩码部分填入全0,响应报文中包含真正的掩码。
路由器请求 主机查询网络上所有的路由器
路由器通告 路由器通告自己以及自己所知道的网络上所有其它路由器的存在,地址参考等级用来选择默认路由器。
9.6 使用ICMP进行网络探测 使用ICMP检测可达性(ping) 使用ICMP跟踪路由(traceroute) 使用ICMP发现path MTU
9.6.1 使用ICMP检测可达性 探测Internet的最简单工具是ping程序: 用户调用ping命令,给出远程主机的名字或地址,如:ping www.ustc.edu.cn; Ping程序向指定的计算机发送一个消息,然后等待接收响应: 若收到响应,向用户报告计算机是活动的 若在一小段时间内没有收到响应,向用户报告计算机没有响应 有些Ping程序允许指定发送包的大小、计算往返时间、指定消息发送的频率及终止条件等。
一个ping程序输出的例子
Ping的实现机制 Ping使用ICMP回送请求/响应消息探测可达性:
9.6.2 使用ICMP跟踪路由 Traceroute用来确定去往目的主机需要经过的中间路由器: 用户调用traceroute命令,给出远程计算机的名字或地址,如traceroute www.mit.edu 程序显示去往目的主机路径上的中间路由器,每行一个路由器
一个traceroute程序的输出 Traceroute www.mit.edu的输出:
Traceroute的实现机制 Traceroute工具使用TTL逐渐增大的一系列数据包探测路径: Traceroute将第一个数据包的TTL值置1,第一个收到此包的路由器将TTL减为0,产生一个ICMP超时错误报告。Traceroute从携带错误报告的包中取出源IP地址,此为在到达目标路径上的第一个路由器的地址。 Traceroute将第二个数据包的TTL值置2,则路径上的第二跳路由器将产生一个ICMP超时错误报告,从而Traceroute可以得到第二个路由器的地址。 依次类推,直至收到来自目的主机的数据包。
由traceroute输出的最后地址 为保证traceroute可以收到响应,有两种广泛使用的发送数据报的方法: 发送一个ICMP回送请求消息,目标主机将产生一个ICMP响应消息。 向一个并不存在的应用发送一个数据报,目标主机会产生一个ICMP目标不可达消息。 微软公司实现的traceroute采用第一种方法,大多数Unix版本实现的traceroute采用第二种方法。
9.6.3 使用ICMP发现path MTU 由于分片和重组会影响路由器和主机的速度,因此选择一个不会产生分片的数据报大小非常重要。 从源到目标的最小MTU称为path MTU。由于因特网的许多部分中,路由在几天或几周之内均不会改变,因此发现path MTU是有意义的。 主机上的IP软件通过发送一系列不同大小的、D标志置1的数据报探测path MTU: 当数据报大小超过路径上的MTU时,路由器会发送一个ICMP错误报告(代码4) 主机再发送一个较小的数据包进行探测,直到可以成功发送为止。
练习 习题 35,38
第10章 Internet组管理协议 IGMP是管理多播组成员关系的协议,它用于将局域网内主机的组成员关系报告给本网段内的多播路由器。所以IGMP只工作在本地范围。
什么是多播? 多播是以下三种通信形式中的一种: 实现多播要解决的三个问题: 单播:数据包发送给一个指定的接收者 广播:数据包发送给所有接收者 多播:数据包发送给一群接收者 实现多播要解决的三个问题: 组成员关系维护(IGMP) 多播路由 物理网络上如何实现多播接收
10.1 IGMP报文格式与类型 报文格式 报文类型:查询(一般查询,特殊查询),成员报告,退出报告。
10.2 IGMP的操作 连接到网络上的多播路由器有一个多播地址表,表中每一个组都至少有一个成员在该网络上。 每一个组只有一个分发路由器,负责将多播分组分发到位于该网络上的组成员。 主机或多播路由器都可以是一个组中的成员: 当主机是组成员时,表明它的一个进程要从该组接收多播分组。 当路由器是组成员时,表明它所连接的其它网络上有节点要从该组接收多播分组。 主机或路由器都要维护一个它所感兴趣的组地址表,并将它们的兴趣传递给分发路由器。
分发路由器
加入一个组 主机: 多播路由器: 每个主机维护一张进程与多播组的对应表。 当主机上的一个进程要加入一个多播组时,向主机发送请求;若这是一个新组,主机发送成员关系报告,要求成为这个组的成员。 多播路由器: 多播路由器维护一张各个网络接口与多播组的对应表 当某个接口上出现一个新的多播组时,多播路由器在所有其它接口上发送成员关系报告,要求成为这个组的成员。
退出一个组 当主机发现某个多播组为空时,主机从表中清除该组,发送退出报告。 当多播路由器收到退出报告时,多播路由器发送关于该多播组的特殊查询报文,若在规定的时间内没有收到该多播组的任何成员关系报告,多播路由器从表中清除该组,发送退出报告。
监视成员关系 多播路由器周期性地发送通用查询报文(组地址置为0),主机及路由器广播发送成员关系报告作为响应。
延迟响应 延迟响应: 主机或路由器收到查询报文后,对每一个组设置一个定时器(初始值为不超过最大响应时间的一个随机数)。 在定时器超时前监听网络上其它节点的成员关系报告,若监听到某个组的成员关系报告,取消相应的定时器。 某个组的定时器超时后,发送该组的成员关系报告。
查询路由器 为避免不必要的通信量,IGMP为每一个网络指定一个路由器作为查询路由器。 只有查询路由器才能发送查询报文,其它路由器只能接收响应和更新它们的表。
10.3 IGMP报文的封装 IGMP报文封装在IP数据报中发送。
IP报头 协议字段值=2 TTL=1(因为IGMP只在本地工作) 目的IP地址: 查询报文:多播地址224.0.0.1,目标是该子网上的所有节点。 退出报告:多播地址224.0.0.2,目标是该子网上的所有路由器。 成员关系报告:被报告的多播地址。
数据链路层封装 问题: 两种处理方法: 封装IGMP报文的IP包使用的是多播IP地址,ARP协议无法找出相应的MAC地址,如何处理? 数据链路层不支持多播:隧道封装 数据链路层支持多播:地址映射。
隧道封装 若物理网络不支持多播,采用隧道技术,将多播分组封装到单播分组中,采用单播的方式发送。
地址映射 若物理网络支持多播,将IP多播地址映射到物理层多播地址上。 对于以太网而言,取IP多播地址的低23位,前面加上25位二进制数0000000100000000010111100,即构成多播MAC地址。 以太网多播地址范围: 01:00:5E:00:00:00 -- 01:00:5E:7F:FF:FF.
物理多播地址的识别 CPU向网卡描述要接收的物理多播地址集合。 网卡通常限定多播地址集合的大小为32或64。 网卡维护一个64比特的矢量,并用一个哈希函数将多播地址映射成[0,63]之间的一个数。 对于CPU指定要监听的每个多播地址计算一个哈希值,并将矢量中对应比特的值置为1。 当一个多播帧到达时,网卡计算目的地址的哈希值,然后检查矢量中对应比特的值。若该比特的值为1,则接收该帧,否则丢弃。 CPU收到一个多播帧后进一步检查其目的地址是否匹配。 使用引用计数器统计多播地址集中有多少个地址对应了矢量中的同一个比特。
练习 20,24,25,26,30