首页 > 代码库 > 计算机网络 4.网络层与IP协议
计算机网络 4.网络层与IP协议
网络中的每一台主机和路由器都有一个网络层部分,而路由器中也没有网络层以上的层次。网络层是协议栈中最复杂的层次。
转发forwarding:当一个分组到达某路由器的输入链路时,该路由器将分组移动到适当的输出链路。
选路routing:当分组从发送方流向接收方时,网络层必须决定这些分组所采用的路由或路径。而计算这些路径的算法被称为选路算法routing algorithm。
转发是路由器将分组从输入链路接口转移到适当的输出链路接口的本地动作。而选路分组由源到目的地时,决定端到端路径的网络范围的进程。
每台路由器具有一张 转发表forwarding table。路由器检测到达分组首部中一个字段的值,然后该值在转发表中索引查询,然后转发该分组。转发表查询的结果是分组要被转发的路由器的链路接口。检测首部的字段为该分组的目的地地址或该分组所属连接的指示。
路由中的转发表的设置,一般选路算法决定。选路算法可能是集中式的,即算法在某个中心点执行然后由各个路由器下载选路信息;也可能是分布式的,即选路算法的各个部分运行在每台路由器上。其中,路由器都接收 选路协议报文,用来配置转发表。可以不需要选路协议,而人工设置所有转发表,但是这是不切实际的,容易出错,且转发表实际效果差。
分组交换机分为链路层交换机 link-layer switch 和路由器router。链路层交换机根据链路层传输的帧中首部字段的值进行转发,而路由器根据网络层数据报中的首部字段的值进行转发。
网络层除了进行转发和选路,还进行连接建立connection setup。从源到目的地,沿着所选择的路径彼此握手,以便在网络层数据分组开始流动以前,在给定源到目的地的连接之间建立其状态。
网络服务模型network service model:定义网络的一侧边缘到另一侧边缘之间即发送端系统和接收端系统之间的分组的端到端运输特性。
网络层能够提供给发送主机的运输层的服务:
确保交付:确保分组将最终到达其目的地。
具有时延上限的确保交付:确保分组在特定的主机到主机时延上界内交付。
能够为给定的源和目的地之间提供给分组的流的服务:
有序分组交付:确保分组以被发送的顺序到达目的地。
确保最小带宽:只要发送主机以低于某特定比特率的速度传输比特,分组就会按时交付。
确保最大时延抖动Guaranteed maximum jitter:确保发送方发送两个相继分组之间的时间量等于在目的地接受到它们之间的时间量或这个时间间隔不超过一个固定的值。
安全性服务:使用仅仅源和目的主机知晓的秘密会话密钥,源主机的网络层能够加密向目的主机发送的所有数据报负载。目的主机的网络层则负责解密该负载。
因特网的网络层提供单一的网络服务,称为尽力而为服务best-effort service,分组间的定时得不到保障,分组接收的顺序也无法保证按序,传送的分组也不能保证交付。
除了因特网中的尽力而为服务模型,在ATM网络体系结构中,有恒定比特率和可用比特率两种服务:
恒定比特率Constant Bit Rate CBR ATM网路服务:适用于承载实时、恒定比特率的音频和视频流量。
可变比特率Available Bit Rate ABR ATM网络服务,也许最好服务稍微比尽力而为好一点的服务,ABR可能会丢失信元,但信元不能重排序即有序。最小信元传输速率MCR是可以得到保证的,且有拥塞指示。
虚电路和数据报网络:
网络层与运输层类似,也有无连接服务和有连接服务。网络层与运输层在面向连接方面的重要差异:1.在网络层,这些服务是提供给运输层的主机到主机的服务,而在运输层,这些服务是提供给应用层的进程到进程的服务。2.计算机网络体系结构中,在网络层只提供其中一种服务。提供连接服务的网络称为虚电路Virtual-Circuit网络,提供无连接服务的计算机网络称为数据报网络datagram network。3.在运输层实现的面向连接的服务建立的连接是两个端系统之间的连接,而在网络层实现的连接除了端系统外,也在位于网络核心的路由器中实现。
虚电路网络:因特网是数据报网络,而其他网络体系结构ATM和帧中继都是虚电路网络。
一条虚电路的组成:1.源和目的地之间的路径,即一系列链路和路由器。2.VC号,沿着该路径的每段链路的一个号码 。3.沿着该路径的每个路由器中的转发表表项。
属于一条虚电路的分组必须在其首部携带一个VC号,因为一条虚电路在每条链路上的VC号可能不同,则经过路由时,使用一个新的VC号来替代分组中的VC号,该VC号由转发表中获取。则当跨越一个路由器建立一个虚电路时,转发表中就增加了一个新项,而虚电路终止时,就删除沿着该路径的每个路由器中的转发表中的相应项。
对于虚电路中每条链路保持不同VC号的原因:逐链路代替该号码可以减少分组首部VC字段的长度;通过使虚电路的每条链路有不同的VC号,简化了虚电路的建立。
在虚电路中,路由器必须为进行中的连接维持连接状态信息connection state information。而这里作为连接项一同在创建时加入转发表中存储。
虚电路中的3个阶段:1.虚电路建立:运输层与网络层联系,指定接收方地址,等待网络建立虚电路。网络层决定路径,确定链路的VC号,在每台路由器的转发表中增加一项,还可以预留虚电路路径上的资源如带宽。2.数据传输:分组沿着虚电路流动。3.虚电路拆除:当接收方或发送方通知网络层终止该虚电路时,通知另一端,并更新每台路由器中的转发表。
端系统向网络发送指示虚电路启动及终止的报文,以及路由器之间传递的用于建立虚电路的报文称为 信令报文signaling message。用来交换这些报文的协议称为信令协议signaling protocol。
数据报网络:在数据报网络中,每个端系统要发送分组时,它为分组加上目的地端系统的地址,然后将分组推入网络中。在网络中,每个路由器都使用该分组的目的地址来转发该分组。每台路由器都有一个将目的地址映射到链接接口的转发表,然后根据地址查找输出链路接口,进行转发。
转发表中是以目的地址范围来设置对应的链路接口。而转发表中目的地址的范围是一种前缀匹配的形式,即转发表中存储的是一定地址的前缀,然后使用目的地址与这些前缀进行匹配,当匹配时,就使用此项所对应的链接接口转发分组。路由器中还是使用最长前缀匹配规则longest prefix matching rule,当多个匹配时,寻找转发表中最长的匹配项,并用其链路接口转发分组。如转发表中有一项为10001000 10001000 链路接口为0,另一项为10001000 10001000 10001000 链路接口为1,还有一项为 “其他”,链路接口为2,则当地址为10001000 10001000 10001000 10001000时,使用链路接口1转发分组。
在数据报网络中,转发表由选路算法修改,通常每1-5分钟更新一次转发表。
虚电路的概念来源于电路交换网络,电路交换网络比分组交换网路要复杂许多,因为电话网络要连接的是一些低端的设备,这些设备所能做到的几乎只有接收和发送数据,所以大多数工作要在网络层实现。而分组交换网络面向的是计算机这样的端系统,而这样的端系统可以在更高层实现很多功能,也就减轻了网络层的工作:提供最少的服务保证的因特网服务模型,使得互联使用各种链路层技术的网络变得更加容易;新的协议都可以在位于网络边缘的端系统计算机上实现。
路由器工作原理:
一个路由器由4个组成部分:
输入端口input ports:执行将一条输入物理链路接到路由器的物理层功能。也要执行与 位于链路远端的链路层功能 交互的链路层功能,它还要完成查找和转发功能,以便转发到路由器交换结构部分的分组能出现在适当的输出端口。控制分组(如携带了选路协议信息的分组)从输入端口转发到选路处理器。在路由器中多个端口经常被集中到路由器中的一块线路卡line card上。
交换接口switching fabric:将路由器的输入接口连接到它的输出端口。交换结构完全包容contained在路由器中,即它是路由器中的网络。
输出端口:储存经交换结构转发给它的分组,并将这些分组传输给输出链路。则输出端口执行的是与输入端口顺序相反的功能,先链路层,再物理层。当一条链路是双向时,与链路相连的输出窗口和输入窗口在同一线路卡上出现。
选路处理器routing processor:执行选路协议,维护选路信息和转发表,并执行路由器中的网络管理功能。
输入端口:在路由器中,是在输入端口来查找转发表确定转发的输出端口。转发表在被选路处理器处理的同时被拷贝到每个输入端口中,并会被更新。所以分组可以直接在输入端口做出转发决策,而无需调用中央选路处理器。这种分散式的decentralized转发效率更高。当使用一个工作站或服务器用作一个路由器时,其输入输出端口为其网络接口卡,其选路处理器为其CPU,但其输入端口无法进行选路操作,便将分组直接发给中央选路处理器,然后有处理器来执行转发查找并进行转发。路由器查找速度要足够快,处理速度应该达到 线路速度line speed,即执行一次查找的时间应小于输入端口接收一个分组所需的时间。将转发表表项存放在一个树形结构中,树的每一级与目标地址中的一比特相对应,0为左子树,1为右子树。查找地址时,从根节点开始,进行2分查找。但这样选路还是不够快,因为每次查找都要访问一次内存。所以应该使用更加高速的算法。
内容可寻址内存Content Addressable Momery CAM,允许一个32比特IP地址提交给CAM,由它来返回该地址对应的转发表表项内容。
一旦查找到分组的输出端口,就将该分组转发进交换结构。分组进入交换结构时,由于其他分组当前正在使用该交换结构,而被暂时阻塞。则将阻塞分组在输入端口处排队,等待调度。
交换结构:交换结构有三种交换的技术:
1.经内存交换switching via memory:最早最简单的路由器就是计算机,则其输入端口和输出端口都在CPU的直接控制下完成。CPU将到达的分组拷贝到处理器内存上,然后取出目的地址,在转发表中找出适当的输出端口,将分组拷贝到输出端口的缓存中。这里若内存带宽为每秒可写进或读出B个分组,则总的转发吞吐量必然小于B/2,除以2是因为从输入端口读到CPU再从CPU复制到输出端口这两个操作不是同步的,小于是因为计算耗时。 许多现代路由器也使用内存交换,但与计算机路由器不同,目的地址的查找和将分组储存进适当的位置由输入线路卡上的处理器来执行的。
2.经一个总线bus交换:输入端口经一根共享总线将分组直接传送到输出端口,不需要选路处理器的干预。经内存交换分组进出内存也是会跨越系统总线的。这里每个分组要跨越单一总线,交换带宽受总线速率限制。
3.经一个互联网络交换:克服总线带宽限制的一个方法就是使用复杂的互联网络。一个纵横式crossbar交换机,就是一个由2n条总线组成的互联网络,它将n个输入端口与n个输出端口连接。分组沿着连接到输入端口的水平总线穿行,直至水平总线与连到所希望的输出端口的垂直总线的交叉点。如果被阻塞,则返回输入端口排队。
排队:路由器中队列增加,导致缓存空间被耗尽,就会出现丢包。分组丢失的位置(输入端口或输出端口)取决于 流量负载traffic load,交换结构的相对速率和线路速率等几个因素。交换结构速率为交换结构从输入端口到输出端口移动分组的速率。则当交换结构的速率至少为输入线路的速率的n倍时,则在输入端口处不会出现排队。n为输入端口的数,即所有端口都在以最大速率接收分组,但交换结构仍能够将所有输入进行传输。而输入端口排队的情况为交换结构速率小于可能的输入速率。但输出端口并不相同,当交换结构速率大于输出链路速率时,就可能需要排队,因为这些流量可能想要前往相同的输出链路。
路由器中的缓存长度计算的经验方法:缓存量B 等于 平均往返时延RTT 乘以链路容量C。这是相对少量的TCP流的情况。对于大量TCP流(N)经过一条链路时,缓存量为B = RTT * C / √N 。
输出端口的排队,输出端口的一个分组调度程序packet scheduler 必须在这些排队的分组中选出一个来传送。而选择的策略有多种:先来先服务FCFS调度,加权公平排队WFQ。WFQ规则是在具有排队等待传输的分组的不同端到端连接之间公平的共享输出链路。
输入端口排队过多,则丢弃到达的分组,即弃尾drop-tail,或者删除一个或多个已排队的分组。在某些情况下,缓存填满前就丢弃,以便向发送方提供一个拥塞信号。这些策略称为主动队列管理AQM算法。随机早期检测Random Early Detection RED算法是一种广泛使用的AQM算法:为输出队列长度维护一个加权平均值,如果平均队列长度小于最小阈值min,则当一个分组到达时,被接纳如队列。相反,如果队列已满或超过最大阈值max,则标记分组或丢弃。如果平均队列长度在 (min ,max)中,则该分组以某种概率标记或丢弃。
然而当输入队列前端的两个分组是发往同一输出队列时,则其中一个分组被阻塞,必须在输入队列中等待,因为交换结构一次只能传送一个分组到指定的一个输出端口中。之前考虑的是一段时间内,而这里是说在一个瞬间,不能有两个分组被交换结构同时传给一个输出端口。
线路前端head-of-the-line HOL阻塞:当在一个时刻,位于输入队列前端的两个分组发往同一个输出端口,则其中一个分组必须等待,而等待分组之后的分组即使与另一个分组无竞争关系,但被其队列前端分组阻塞而无法传输。
IP网际协议:
目前有两个版本的IP正在使用,IP协议版本4, IPv4,IP协议版本6,IPV6。因特网的网络层有三个主要部分:IP协议,选路组件:决定数据报从源到目的地所流经的路径,由转发表和选路协议构成。报告数据报中差错和对某些网络层信息请求进行响应的设施。因特网的网络层差错和信息报告协议,即互联网控制报文协议ICMP。
数据报的格式:考虑IPv4的数据报datagram的格式。数据报中也是使用32个比特作为一个字。则依次存储的数据为:
版本号:4个比特的版本号,这里使用的是IPv4。
首部长度:一个IPv4的数据报中首部可包含一些可选项,所以需要使用4个比特来记录首部的长度。但大多数数据报不包含可选项,一般有20字节的首部长度。但是显然这里4个比特应该储存的是首部的字的数目。
服务类型:服务类型TOS 占8个比特,用来区别不同类型的数据报。如实时数据报与非实时流量(如FTP)区分开来。
数据报长度:字段长度为16比特,储存IP数据报的总长度,首部加数据,以字节记,则最大为65535字节。但数据报一般很少超过1500字节,
标识 Identifier 16比特 、标志 flags 3比特 、片偏移 fragmentation offset 13比特:与IP分片 fragmentation 有关。在IPv6上不允许在路由器上分片。
寿命 Time-to-live TTL:8个比特的寿命字段,用来确保数据报不会永远在网络中循环。每当数据报经过一个路由器,就将该字段减1,如果TTL字段减为0,则丢弃该数据报。
协议:这里的8个比特存储的是上层即运输层的协议,指明数据报的数据部分应交付给哪个运输层协议。这里使用协议号将网络层与运输层绑在一起,如同运输层报文段中的端口号将运输层与应用层绑在一起一样。
首部检验和:16个比特的首部检验和,如数据报中的首部检验和一样进行计算得到。路由器对每个收到的数据报计算其首部检验和,进行检测,如果出错,则一般会丢弃此错误数据报。注意,路由器还必须在TTL字段改变后,重新计算检验和并放在原处。这里是首部检验和,即IP只对自己的首部进行检验和计算,而TCP中是对整个报文段进行检验。其次TCP/UDP与IP并不一定在同一个协议栈,TCP可以运行在不同的协议上,如ATM,而IP也能狗携带传递给其他运输层协议的数据。
源和目的IP地址:各32比特。当源主机产生一个数据报时,它在源IP字段插入IP地址,在目的IP地址字段插入其最终目的地的IP地址。通常源主机通过DNS来查找目的地址。
选项options:选项字段允许IP首部被扩展。首部的存在使数据报头部长度可变,无法预先确定数据字段从何处开始,且选项增加的处理选项会导致路由器速率降低。选项的存在使路由器效率不高,所以在IPv6中不采用IP选项。
数据 (有效载荷payloda):IP数据报中数据字段一般含有要交付给目的地的运输层报文段(TCP或UDP),也可以承载其他类型的数据,如ICMP报文段。
数据报分片:以太网帧可承载不超过1500字节的数据。一个链路层帧可承载的最大数据量叫做最大传输单元 MTU。链路层协议MTU严格限制着IP数据报的长度。而发送方到目的地路径上的每条链路可能使用不同的链路层协议,而每种协议可能具有不同的MTU。则需要进行分片,即将IP数据报中的数据分片成两个或更多个较小的数据报,用单独的链路层帧来封装这些较小的IP数据报,然后向输出链路上发送这些帧。这些较小的数据报称为片 fragment。IPv4的设计者认为,片在路由器间传递时,如果再进行重新组装,这会严重影响路由器的性能,为坚持使网络内核保持简单的原则,将数据报的重新组装工作放在端系统中。端系统从相同源收到一些列数据报时,要确定这些数据报中某些是否是原来较大的数据报的片。如果确定这些数据是片,它进一步确认何时收到最后一片,以及如何将这些片拼接成初始数据报。
为了让目的主机执行这些重新组装任务,使用IP数据报中的 标识 ,标志 和 片位移 字段来记录相关信息。当源主机创建一个数据报时,为其加上源地址,目的地址和标识号,每一个新的数据报的标识号加1。当路由器将数据报分片时,为每个数据报附加上初始数据的源地址、目的地址和标识号,同时为最后一个片的标志比特设为0,其他片的标志比特为1,并在偏移字段中指定片应放在初始数据报中的位置。除了最后一片外所有的有效载荷的数量应是8字节的倍数,而且偏移值offset value 以8字节块 为单位。偏移值为有效载荷起始位置在数据报中的位置。
例:一个4000字节的数据报,其首部为20字节,有3980有效载荷,要由路由器转发到MTU为1500字节的链路上,则分为3片,如果标识位为777,则第一片长度为1500,有效载荷为1480,标识为777,offset 为0,flag 为 1 ; 第二片 长度仍为1500,标识为777,offset 为185 (1480/8),flag为1;第三片 长度为1040字节,1020字节的数据,indentification为777,offset为370,flag 为0,标识为最后一片。
数据报的有效载荷仅当完全重构为初始IP数据报时,才能被传递给目的地运输层。如果发生片的丢失,则丢弃不完整的数据报。但如果运输层在使用TCP,TCP将通过源重复数据报中的数据而恢复丢失的片。但是我对书中这里表示不理解:TCP是端到端,丢失的片可能在路由器中被分片,而且TCP发送操作的是报文段,如何让发送方重发对应的丢失的片?而如果按照上章的内容,应该是丢弃所有片,直接再次重传,因为片不是数据段,TCP只能重传自己的数据段,或者这里有些细节书上未详细说明,不解。
IPv4编址:
主机与物理链路之间的边界称为 接口interface。路由器与链路之间的边界也称为接口。因为每台主机和路由器都能发送和接收IP数据报,所以IP要求每台主机和路由器接口都有自己的IP地址。因此一个IP地址在技术上是与 一个接口相关联的,而不是与包括该接口的主机或路由器相关联。
每个IP地址长度为32比特4个字节,约40亿个IP地址。每台主机和路由器上的每个接口都有一个全球唯一的IP地址(在NAT后面的接口除外)。
一台路由器可以有多个接口,而一台主机通常只有一个接口,一台路由器的一个接口可以与多台主机的接口相连,这种不包含路由器的网络 可以是一个以太LAN,通过以太网集线器或以太网链路层交换机互联。在IP中,互联主机的接口与路由器的一个接口的网络 形成一个 子网subnet。IP编码为这个子网分配一个地址如:223.1.1.0/24,其中/24的计法有时称为子网掩码subnet mask。它表明地址32比特中左侧的24比特定义了一个子网地址。因此所有在223.1.1.0/24的网络中的地址形式都为223.1.1.xxx。
网络中,路由器与路由器之间的点到点链路也是一个子网,将路由器连接到多个主机的广播链路broadcast link也是子网。
因特网的地址分配策略称为无类别域间选路Classless Interdomain Routing CIDR。形式为a.b.c.d/x的地址中的x最高比特构成了IP地址的网络部分network portion,并且经常被称为该地址的前缀prefix。一个地址的剩余32-x比特可认为是用于区分组织内部设备的。当组织内部转发分组时才会考虑这些比特。而该组织内部可能还能划分子网。
在采用CIDR之前,IP地址的网络部分被限制长度为8,16,24比特,而组成的子网分别被称为A、B和C类网络。这种编址方案称为分类编址classful addressing。一个C类网络/24 最多容纳254台主机,其中2个地址预留用于特殊用途。B类网络/16最多支持65534台主机。由于这样分配对于小型和中规模的子网浪费大量地址,造成地址空间的低利用率。
IP广播地址 255.255.255.255 ,当一台主机发出目的地址为这样的数据报时,该报文将交付给同一个子网中的所有主机。
获得一块地址:一个子网管理员要想获取一块IP地址,一般会与ISP联系,ISP会从自己分得的地址块中分配一个块给子网管理员。或者向ICANN机构获取。ICANN不仅负责分配IP地址,还管理DNS根服务器,还分配域名和解决域名争端。
获得主机地址:对于路由器接口地址,系统管理员手工配置路由器中的IP地址,在远程通过网络管理工具进行配置。也可以手动配置主机,但更常用的是动态主机配置协议Dynamic Host Configuration Protocol DHCP:利用DHCP主机可以自动的获取IP地址。网络管理员可以配置DHCP,以便给定主机在每次与该网络连接时都得到一个相同的IP地址,或者分配一个临时的IP地址temporary IP address,主机每次连接的IP地址都可能不同。DHCP还允许一台主机获取其他信息,如子网编码,它的第一跳路由器地址(称为默认网关default gateway)与它的本地DNS服务器的地址。DHCP具有主机连接进一个网络的自动化处理功能,所有又称为即插即用协议plug-and-play protocol。DHCP是一个客户机/服务器协议,新到达的主机是客户机。
对于一台新到达的主机,DHCP执行以下4个步骤:1.DHCP服务器发现,新到主机的首要任务是发现与其交互的DHCP服务器,主机发送DHCP发现报文DHCP discover message来完成。客户机在UDP分组中向端口67发送该报文,使用广播目的地址255.255.255.255,使用0.0.0.0作为本主机的源地址。2.DHCP服务器提供 server offer:DHCP收到报文后,用一个DHCP提供报文DHCP offer message 对客户机做出响应。仍然使用255.255.255.255广播地址作为目的地址。提供报文中含有收到报文的事物ID、向客户机推荐的IP地址、网路掩码以及IP地址租用期IP address least time。服务器一般将租用期定为几小时或几天。3.DHCP请求request:客户机从多个服务器中选择一个,并用一个DHCP请求报文DHCP request message对选中服务器进行响应,并回显echo back配置参数configuration parameters。4.DHCP ACK:服务器用DHCP ACK 报文对DHCP报文进行响应,证实所要求的参数。
当客户机收到DHCP ACK后,交互就完成了,客户机就能够在租用期内使用分配到的IP地址。到客户机超过租用期时,DHCP提供一种允许客户机更新租用期的机制。
网络地址转换 Network Address Translation NAT:简单来说,就是平时使用的路由器的实现。路由器从DHCP获得一个IP地址做为路由器的地址,而路由器又为多个家庭用户设备提供地址,以便多个设备能够同时与网络连接。这里家庭用户的地址使用的是虚拟地址在地址空间10.0.0.0/8这个RFC中保留的IP地址中,这些地址用于专用于网络或具有专用地址的地域realm。具有专用地址的地域是指其地址仅对该网络中的设备有意义的网络。则许多家庭网络中使用这些相同的地址空间。NAT路由器对外界的行为就认同一个具有单一IP地址的单一设备,所有离开家庭路由器通向更大的因特网的报文都采用同一个源IP地址即路由器的地址,且所有进入家庭网络的报文都用于同一个目的IP地址。NAT使路由器对外界隐藏了家庭网络的细节。
路由器的IP地址由ISP的DHCP服务器获得,而其自己也运行一个DHCP服务器来为家庭网络中的计算机分配具有专有地址的地域中的地址。路由器同过NAT转换表Nat translation table 来确定发向路由器的数据报转发给哪个内部主机。转发表中包含端口号和IP地址。当家庭网络中主机发送数据报到LAN中时,NAT为该数据报生成一个新的且当前为在NAT转换表中使用的源端口号,并更改,同时将源IP地址修改为其广域网一侧WAN-side 接口的IP地址,并为转换表添加新项。而当广域网传来数据报时,NAT再根据转发表中的表项 改写数据报的目的IP和目的端口号,并向家庭网络转发该数据报。
NAT妨碍P2P应用程序。如果对等方B位于NAT后,则就不能充当服务器并接收TCP连接。因为很简单,A给B发送的报文,其端口号为正确的端口号,但是在NAT转换表中找不到或会出错,所以无法无法直接充当服务器。解决方法是让在NAT后的B先去与中间对等方C建立TCP连接,C不在NAT后且作为服务器,然后A再经C请求B,建立TCP连接后双方就可以交换报文和文件了。称为NAT穿越NAT traversal。如果双方都在NAT后面,则需要使用应用程序来中继处理。
通用即插即用Universal Plug and Play UPnP:NAT穿越多使用这种方式,允许主机发现并配置临近NAT。
互联网控制报文协议 Internet Control Message Protocol ICMP:用于主机和路由器彼此交换网络层信息。ICMP在IP的上层,报文承载在IP数据报中。ICMP报文有一个类型字段和一个编码字段,并且包含该ICMP报文首次生成的IP数据报的首部和前8个字节内容。 ping程序发送一个ICMP类型8编码0的报文到指定主机,接收到的主机发回一个类型0编码0的报文的ICMP回显回答。ICMP也可以发送源抑制报文,即拥塞时强制主机减小发送速率。Trancerout通过发送UDP报文,并接收路由返回的ICMP报文来判断路径中的路由器以及路由器的信息和时延。
IPv6:开发IPv6的最初动机是因为32比特的地址空间即将用尽。主要变化:扩大的地址容量:将IP地址长度由32比特增加到128比特。这确保全世界不会用尽IP地址。除了单播和多播地址外,还引入了一种称为任播地址anycase address的新型地址,是数据报交付给主机中的任意一个。简单高效的40字节首部:新的选项编码允许进行更灵活的选项处理。流标签和优先级Flow labeling and priority:IPv6中的流确切定义还未完全确定,其优先级同时也表明流的类型不同。
IPv6中数据报的字段:版本号:4比特,为6。流量类型:8比特。流标签:20比特,用来标识一个数据报的流。有效载荷长度:16比特。下一个首部next header:使用与IPv6中协议字段相同的值,指示的是要交付给哪个运输层协议。跳限制Hop linmit:这里一跳就是经过一个路由器,到达0则丢弃数据报。源和目的地址:256比特。数据:有效载荷。
IPv6中没有片偏移位和标志位,不允许在中间路由器上进行分组和重新组装,这些操作只能在源和目的地上执行。当一台路由器收到IPv6数据报应太大而不能转发到出链路上时,则丢弃数据报,并向发送方返回一个分组太大的ICMP差错报文。然后发送方使用较小长度的IP数据报重发数据。大大加快了网络中的IP转发速度。
首部检验和:因为运输层和链路层协议执行了检验操作,则在网络层省略了这种操作。提高速率。
选项:选项字段不再是标准IP的首部中的一部分。TCP或UDP的协议首部可出现在IP分组的下一个首部字段指出一样,选项字段也可在下一个首部字段中指出。而删除选项字段导致一个定长40字节的IP首部。
IPv4如何升级到IPv6,这是一个很麻烦的事情。暂时使用双栈dual-stack的方法,即IPv6的节点也具有完整的IPv4功能。当IPv6与IPv4节点相互操作时,使用IPv4,两个IPv6节点使用IPv6.
另一种双栈的方法是建隧道tunneling,即两个IPv6节点间由中间IPv4路由器互联,则将两个IPv6节点间IPv4路由器的集合称为隧道tunnel,则当IPv6使能-capable节点想IPv4节点转发数据报时,要将原来的IPv6的数据报封装在IPv4中,而后在IPv6节点间转发时,在解封出来。
IP安全性:IPsec为流行的安全网络层协议,也是虚拟专用网VPN中广泛采用的协议。运输层传递报文段时进行加密和解密,使用的是对称加密算法。IPv4和IPv6没有进行加密,几乎没有安全性。
选路算法routing algorithm:
数据报服务中在给定源和目的地间,传输不同的分组可能采用不同的路由,因为有选路算法的存在,当其更新了路由中的转发表就可能导致分组经不同的路由转发,而虚电路在一开始就使用选路算法将所有路径固定了,所以分组传输采用相同的路径。
直接与主机相连的路由器称为该主机的 默认路由器default router。又称第一条路由器first-hop router。称源主机的默认路由器为源路由器source router。同理目的主机的默认路由器称为目的路由器destination router。则研究的选路问题为从源路由器到目的路由器的选路问题。而一般的选路的目的是选取一条好的路径,即具有最低费用的路径。
图论graph被用于形式化选路问题。这里的图是无向图,选路就是在选 最低费用路径 least-cost path,费用可以是链路的物理长度,链路速度或该链路的金融上的费用。令c(x,y)为两个节点间的费用,当节点对不属于网络E时,c(x,y)= ∞。如果边(x,y)属于E,则xy互为邻居neightbor。
选路算法可以根据是全局性还是分布式分为:
全局选路算法global routing algorthm:用完整的全局性的网络信息来计算源到目的地之间的最低费用。该算法以所有节点之间的连通性connectivity和所有链路的费用costs作为输入。计算可以在某个场点(集中式centrailized全局选路算法)运行,也可以在多个场点冗余地进行。这样具有全局状态信息的算法被称为 链路状态Link-State LS算法。
分布式选路算法decentrailized routing algorithm:以迭代分布式的方式计算出最低费用路径。每个节点仅有与其直接相连的链路的费用信息即可开始工作。通过迭代计算过程并与相邻neighboring节点交换信息,一个节点逐渐计算出到达目的节点或一组目的节点的最低费用。距离向量Distance-Vector DV算法,每个节点维护到网络中所有其他节点的费用估计的向量。
选路算法还可以根据算法是静态还是动态来进行分类。在静态选路static routing算法中,路由的变换非常缓慢,通常由人工干预进行调整 ,如手工编辑路由器的转发表。动态dynamic选路算法:在网络流量负载或拓扑topology发生变化时改变选路路径。动态算法周期性的运行或直接响应拓扑或链路费用的变化而进行。
选路算法还可以根据其负载敏感还是负载迟钝进行分类:负载敏感load-sentitive 算法,链路费用会动态的反应底层链路的当前拥塞水平。当前选路算法都是负载迟钝的,链路费用不能明显的反应当前拥塞水平。
链路状态选路算法:网路拓扑和所有链路费用都是已知的。通过让每个节点路由器想网路中的所有其他路由器广播链路状态分组 来实现,其中每个链路状态分组包含路由器所连接的链路的特征和费用。由链路状态广播link state broadcast算法来实现。
使用Dijkstra算法来计算最低费用路径。Dijkstra算法是图论中计算最短路径的算法,是一种迭代算法,迭代k次,可知道网络中k个节点时最低费用路径。这里记: D(v):随着算法进行本次迭代,从源节点到目的节点v的最低费用路径的费用。p(v)为从源节点到目的节点v沿着当前最低费用路径的前一节点(v的邻居)。N‘为节点子集,每次迭代就增加一个节点进入节点子集,而当节点v加入N’中时,最低费用路径已确定。
该全局选路算法由一个初始化步骤,和之后的循环构成,循环的次数与网络中的节点数量相同。这里就是数据结构中的Dijkstra算法,不过分详细说明。然后初始化阶段加入源节点,则与源节点相连的节点的费用就是费用而不相连的为∞,而其前一个节点p(v)都为源节点。然后迭代时,观察寻找未加入集合N‘中的最低费用节点,将其加入N’。再更新所有的D(v),当新加入的节点时源节点到目的节点费用更低时,更新Dv和P(v)。重复迭代。则最后我们可以得到每个节点到源节点的最低费用路径的前一个节点,依次选取就可获得完整的从源节点到所有目的节点的最短路径的路径。而通过为 节点存放 其他节点为源节点到它的最低费用路径上的前一个节点 ,则可以为这个节点构建转发表。最坏情况复杂度为O(n^2)
距离向量算法:距离向量算法是迭代的iterative,异步的asynchronous和分布式的dirtributed。Bellman-Ford方程:d x(y) = min v{c(x,v)+d v(y)};即x到y 的最低费用为 与x相连的所有节点中 到x的链路费用与到y节点最低费用之和的最小值,而这个节点即为x节点要转发分组的下一跳 。同时该方程提出了DV算法中发生邻居到邻居通信的形式:其基本思想是:每个节点x以Dx(y)开始,对N中所有节点估计之间费用。令 Dx = [Dx(y):y∈N]为节点x的距离向量distance vector,向量里保存所有x到N中节点的费用估计。采用DV算法,每个节点要维护以下数据:到邻居的直接费用c(x,v);节点的距离向量;所有邻居节点的距离向量。在这个分布式的异步算法中,每个节点不时的向它的每个邻居发送距离向量拷贝。而当节点接收到距离向量时,还会使用方程更新自己的距离向量。如果一个节点的距离向量因为这个更新步骤而改变,则该节点要想它所有的邻居发送更新后的向量。
而在DV算法中,节点需要知道的不是x到y的最短路径距离,而是邻居节点的最短路径距离。而节点选择其最短路径的邻居节点作为下一跳路由器,节点据此来更新到目的地y的转发表。选路表中routing table每一行就是一个向量,而初始时,未知道其他路由器的情况,所以费用为无穷大。然后每个向量互相发送自己的向量,并接收计算,再发送。。。直到无更新进入静止状态。
链路费用变化与链路故障:当运行DV算法的节点检测到从它到邻居的链路费用发生改变时,就更新距离向量,如果最低费用路径的费用也发生改变,则向邻居通知其更新后的距离向量。当某节点未正确接收到距离向量的更新,导致类似一下情况:在x,y,z三个路由器组成的网络中,x没有获得正确更新的y到z的距离向量,而认为x到y到z的路径是最短的,便将分组转发给了y,并将计算得到的新的距离向量转发给y,而路由器y接收到x发过来的基于错误产生的错误的距离向量,却以此来更新自己距离向量中的正确部分给更新了,即y认为x找到了一条更短的路径,判断是y到x到z路径是最短的,又将分组传回给了x,同时更新自己的正确的距离向量,并将新的得到的错误距离向量重新发给x,然后循环,遇到了选路环路routing loop。而每次来回传的过程中距离会增加这段链路的费用,直到两者之间错误的距离向量来回更新到打破循环就会退出循环。
增加毒性逆转poison reverse:即z通过y选路到达目的地x时,z将通知y,z到x的距离是无穷大的,只要z经y选路到x,它就会持续这个状态。但设计到3个或更多个节点的环路将不能被毒性逆转技术检测到。
LS与DV选路算法的比较:报文复杂度:LS算法中发送的报文更多,而且无论何时一条链路的费用改变,都必须想所有节点发送新的链路信息。收敛速度:DV算法收敛较慢,遇到环路还会遭到计数到无限的问题。健壮性:一台路由器发生了故障,LS节点仅计算自己的转发表,路由器在某种程度上是分离的,而DV算法下,一个小的故障将导致大量的错误。
层次选路:规模,随着路由器数量变得很大,选路信息的计算储存即通信的开销变得极大,LS中广播传输的开销将使占据大量的带宽,而DV算法的迭代也将永远无法收敛。管理自治,一个组织想要能够按自己的意愿进行和管理其网络,还能将其网络与外部网络连接。
这两个问题通过将路由器组织进自治系统Autonomou System AS中解决。每个AS由一组通常在相同管理控制下的路由器组成。在相同的AS内的路由器全部运行相同的选路算法,而内部的选路协议称为自治系统内部选路协议,且拥有彼此之间的信息。在AS内有一台或多台路由器负责向本AS外的目的转发分组,这些路由器称为网关路由器gateway router。两个AS间的通信使用自治系统间选路信息inter-autonomous system routing protocol,因特网中都使用BGP4。
使用热土豆hot potato routing选路,AS尽可能快(尽可能低费用)的摆脱分组。通过让路由器向某网关路由器发送分组来完成,同时同时要求该网关路由器到目的地路径上的所有网关路由器具有最低费用。即路由器选择网关后迅速发送分组,并决定使用此网关路由器,然后选定最低费用路径,对其转发表增加用于x的表项所采取的动作。ISP中包含一个或多个AS。AS内部的路由器只需要知道本AS内的路由器。
因特网中的选路:
因特网中的自治系统内部选路协议有两个选路信息协议Routing Information Portocol RIP和开放最段路径优先Open Shortest Path First OSPF。
RIP:是一种距离向量协议,使用跳数作为其费用测度,即每条链路的费用都为1。跳是沿着路由器到目的子网包括目的子网 的最短路径所经历的子网数量。一条路径的最大费用被限制为15,RIP被限制在网络直径不超过15跳的自治系统内。在RIP中,选路更新信息在邻居之间通过RIP响应报文 交换,大约30秒交换一次,每台路由器维护一个叫选路表的RIP表,其中放着路由器的距离向量和转发表。
OSPF:使用洪泛链路状态信息的链路状态协议和一个Dijkstra最低费用路径算法。使用OSPF,一台路由器构建一副关于整个自治系统的完整拓扑图。各条链路费用有管理员配置,且周期性地向相邻路由器广播以确保健壮。OSPF的优点:安全,多条相同费用路径,对单播选路与多播选路的综合支持,支持在单个选路域内的层次结构。在AS内的一个区域内,有一台或多台区域边界路由器,负责发送到区域外的分组选路。一个AS中有一个区域会被配置称主干backbone,主干区域为AS内其他区域之间的流量选路,主干包含AS内所有区域边界路由器。路由器分为内部路由器,区域边界路由器,主干路由器,和边界路由器。
自治系统间的选路BGP:边界网关协议Broder Gateway Protocol
广播和多播选路:
广播选路:网络层提供从一个源节点到网络中的所有节点交付分组的服务。多播选路:每一个源节点能够向其他网络节点的一个子集发送分组的拷贝。
广播选路算法:最简单的是N次单播,但是其效率低。 洪泛flooding:该方法要求节点在收到广播分组后向他所有邻居(除了接收分组的那个邻居)发送该分组的拷贝。其缺点是致命的,如果图中有圈,即广播分组会在网络中无限循环。在这种情况下还有一个更加致命缺陷,当一个节点与多个节点相连时,会产生并转发多个拷贝,导致广播风暴。受控洪泛:通过一些限制使节点明智的选择何时洪泛分组。有多种方法进行限制:序号控制:源节点将地址以及广播序号放入分组,其他节点会赋值泽泻信息放在一个列表中并维护,然后每次检查分组是否已在列表中。反向路径转发RPF:基本思路是,一台路由器收到具有给定源地址的广播分组后,仅当该分组到达的链路正好位于它自己到其源的最短单播路径上,它才向其所有出链路传输分组。原理就是任何一节点都只有唯一的一条最短单播路径,所以每个节点注定只会传播到一次。生成树广播:将图转换为最小生成树,根据最小生成数来确定传播。
多播multicast:多播数据报使用间接地址来编址,用一个标识来表示一组接收方,这个标识为D类多播地址。互联网组管理协议IGMP:运行在一台主机于第一条路由器之间,为主机提供手段用于组的管理。多播选路算法:使用一个基于源的数进行多播选路,通过剪枝来实现删去不想要的多播分组。因特网中使用的多播协议是协议网关的多播选路协议PIM。
计算机网络 4.网络层与IP协议