计算机网络 4.网络层与IP协议

Posted liguangsunls

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机网络 4.网络层与IP协议相关的知识,希望对你有一定的参考价值。

网络中的每一台主机和路由器都有一个网络层部分。而路由器中也没有网络层以上的层次。网络层是协议栈中最复杂的层次。

转发forwarding:当一个分组到达某路由器的输入链路时。该路由器将分组移动到适当的输出链路。
选路routing:当分组从发送方流向接收方时。网络层必须决定这些分组所採用的路由或路径。而计算这些路径的算法被称为选路算法routing algorithm。
转发是路由器将分组从输入链路接口转移到适当的输出链路接口的本地动作。而选路分组由源到目的地时。决定端到端路径的网络范围的进程。


每台路由器具有一张 转发表forwarding table。路由器检測到达分组首部中一个字段的值。然后该值在转发表中索引查询,然后转发该分组。转发表查询的结果是分组要被转发的路由器的链路接口。检測首部的字段为该分组的目的地地址或该分组所属连接的指示。
路由中的转发表的设置,一般选路算法决定。选路算法可能是集中式的,即算法在某个中心点执行然后由各个路由器下载选路信息;也可能是分布式的。即选路算法的各个部分执行在每台路由器上。当中,路由器都接收 选路协议报文,用来配置转发表。能够不须要选路协议,而人工设置全部转发表,可是这是不切实际的,easy出错。且转发表实际效果差。
分组交换机分为链路层交换机 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分钟更新一次转发表。


虚电路的概念来源于电路交换网络,电路交换网络比分组交换网路要复杂很多,由于电话网络要连接的是一些低端的设备。这些设备所能做到的差点儿仅仅有接收和发送数据,所以大多数工作要在网络层实现。而分组交换网络面向的是计算机这种端系统,而这种端系统能够在更高层实现非常多功能,也就减轻了网络层的工作:提供最少的服务保证的因特网服务模型。使得互联使用各种链路层技术的网络变得更加easy;新的协议都能够在位于网络边缘的端系统计算机上实现。




路由器工作原理:
一个路由器由4个组成部分:
输入portinput ports:运行将一条输入物理链路接到路由器的物理层功能。

也要运行与 位于链路远端的链路层功能 交互的链路层功能,它还要完毕查找和转发功能,以便转发到路由器交换结构部分的分组能出如今适当的输出port。

控制分组(如携带了选路协议信息的分组)从输入port转发到选路处理器。在路由器中多个port常常被集中到路由器中的一块线路卡line card上。
交换接口switching fabric:将路由器的输入接口连接到它的输出port。交换结构全然包容contained在路由器中,即它是路由器中的网络。


输出port:储存经交换结构转发给它的分组。并将这些分组传输给输出链路。

则输出port运行的是与输入port顺序相反的功能,先链路层。再物理层。当一条链路是双向时,与链路相连的输出窗体和输入窗体在同一线路卡上出现。
选路处理器routing processor:运行选路协议,维护选路信息和转发表,并运行路由器中的网络管理功能。


输入port:在路由器中。是在输入port来查找转发表确定转发的输出port。转发表在被选路处理器处理的同一时候被复制到每一个输入port中。并会被更新。所以分组能够直接在输入port做出转发决策,而无需调用中央选路处理器。这样的分散式的decentralized转发效率更高。当使用一个工作站或server用作一个路由器时,其输入输出port为其网络接口卡,其选路处理器为其CPU,但其输入port无法进行选路操作,便将分组直接发给中央选路处理器,然后有处理器来运行转发查找并进行转发。路由器查找速度要足够快,处理速度应该达到 线路速度line speed,即运行一次查找的时间应小于输入port接收一个分组所需的时间。将转发表表项存放在一个树形结构中,树的每一级与目标地址中的一比特相相应。0为左子树,1为右子树。

查找地址时,从根节点開始,进行2分查找。但这样选路还是不够快。由于每次查找都要訪问一次内存。

所以应该使用更加快速的算法。
内容可寻址内存Content Addressable Momery CAM,同意一个32比特IP地址提交给CAM。由它来返回该地址相应的转发表表项内容。
一旦查找到分组的输出port。就将该分组转发进交换结构。

分组进入交换结构时。因为其它分组当前正在使用该交换结构,而被临时堵塞。则将堵塞分组在输入port处排队。等待调度。


交换结构:交换结构有三种交换的技术:
1.经内存交换switching via memory:最早最简单的路由器就是计算机,则其输入port和输出port都在CPU的直接控制下完毕。

CPU将到达的分组复制到处理器内存上,然后取出目的地址,在转发表中找出适当的输出port,将分组复制到输出port的缓存中。这里若内存带宽为每秒可写进或读出B个分组,则总的转发吞吐量必定小于B/2,除以2是由于从输入port读到CPU再从CPU复制到输出port这两个操作不是同步的,小于是由于计算耗时。 很多现代路由器也使用内存交换,但与计算机路由器不同。目的地址的查找和将分组储存进适当的位置由输入线路卡上的处理器来运行的。
2.经一个总线bus交换:输入port经一根共享总线将分组直接传送到输出port,不须要选路处理器的干预。经内存交换分组进出内存也是会跨越系统总线的。这里每一个分组要跨越单一总线,交换带宽受总线速率限制。
3.经一个互联网络交换:克服总线带宽限制的一个方法就是使用复杂的互联网络。

一个纵横式crossbar交换机,就是一个由2n条总线组成的互联网络。它将n个输入port与n个输出port连接。分组沿着连接到输入port的水平总线穿行,直至水平总线与连到所希望的输出port的垂直总线的交叉点。假设被堵塞,则返回输入port排队。


排队:路由器中队列添加。导致缓存空间被耗尽,就会出现丢包。

分组丢失的位置(输入port或输出port)取决于 流量负载traffic load,交换结构的相对速率和线路速率等几个因素。交换结构速率为交换结构从输入port到输出port移动分组的速率。则当交换结构的速率至少为输入线路的速率的n倍时,则在输入port处不会出现排队。

n为输入port的数,即全部port都在以最大速率接收分组。但交换结构仍可以将全部输入进行传输。而输入port排队的情况为交换结构速率小于可能的输入速率。

但输出port并不同样,当交换结构速率大于输出链路速率时,就可能须要排队,由于这些流量可能想要前往同样的输出链路。
路由器中的缓存长度计算的经验方法:缓存量B 等于 平均往返时延RTT 乘以链路容量C。

这是相对少量的TCP流的情况。对于大量TCP流(N)经过一条链路时,缓存量为B = RTT * C / √N 。
输出port的排队,输出port的一个分组调度程序packet scheduler 必须在这些排队的分组中选出一个来传送。

而选择的策略有多种:先来先服务FCFS调度,加权公平排队WFQ。

WFQ规则是在具有排队等待传输的分组的不同端到端连接之间公平的共享输出链路。
输入port排队过多,则丢弃到达的分组,即弃尾drop-tail,或者删除一个或多个已排队的分组。在某些情况下,缓存填满前就丢弃,以便向发送方提供一个拥塞信号。这些策略称为主动队列管理AQM算法。

随机早期检測Random Early Detection RED算法是一种广泛使用的AQM算法:为输出队列长度维护一个加权平均值。假设平均队列长度小于最小阈值min,则当一个分组到达时,被接纳如队列。相反。假设队列已满或超过最大阈值max,则标记分组或丢弃。假设平均队列长度在 (min ,max)中。则该分组以某种概率标记或丢弃。


然而当输入队列前端的两个分组是发往同一输出队列时,则当中一个分组被堵塞,必须在输入队列中等待,由于交换结构一次仅仅能传送一个分组到指定的一个输出port中。

之前考虑的是一段时间内,而这里是说在一个瞬间,不能有两个分组被交换结构同一时候传给一个输出port。
线路前端head-of-the-line HOL堵塞:当在一个时刻,位于输入队列前端的两个分组发往同一个输出port,则当中一个分组必须等待。而等待分组之后的分组即使与还有一个分组无竞争关系,但被其队列前端分组堵塞而无法传输。






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个比特存储的是上层即运输层的协议,指明数据报的数据部分应交付给哪个运输层协议。

这里使用协议号将网络层与运输层绑在一起。如同运输层报文段中的port号将运输层与应用层绑在一起一样。


首部检验和: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根server,还分配域名和解决域名争端。


获得主机地址:对于路由器接口地址。系统管理员手工配置路由器中的IP地址。在远程通过网络管理工具进行配置。也能够手动配置主机,但更经常使用的是动态主机配置协议Dynamic Host Configuration Protocol DHCP:利用DHCP主机能够自己主动的获取IP地址。

网络管理员能够配置DHCP,以便给定主机在每次与该网络连接时都得到一个同样的IP地址。或者分配一个暂时的IP地址temporary IP address,主机每次连接的IP地址都可能不同。DHCP还同意一台主机获取其它信息,如子网编码,它的第一跳路由器地址(称为默认网关default gateway)与它的本地DNSserver的地址。

DHCP具有主机连接进一个网络的自己主动化处理功能。全部又称为即插即用协议plug-and-play protocol。DHCP是一个客户机/server协议,新到达的主机是客户机。
对于一台新到达的主机,DHCP运行下面4个步骤:1.DHCPserver发现。新到主机的首要任务是发现与其交互的DHCPserver,主机发送DHCP发现报文DHCP discover message来完毕。客户机在UDP分组中向port67发送该报文。使用广播目的地址255.255.255.255,使用0.0.0.0作为本主机的源地址。2.DHCPserver提供 server offer:DHCP收到报文后,用一个DHCP提供报文DHCP offer message 对客户机做出响应。仍然使用255.255.255.255广播地址作为目的地址。提供报文中含有收到报文的事物ID、向客户机推荐的IP地址、网路掩码以及IP地址租用期IP address least time。server一般将租用期定为几小时或几天。3.DHCP请求request:客户机从多个server中选择一个,并用一个DHCP请求报文DHCP request message对选中server进行响应。并回显echo back配置參数configuration parameters。4.DHCP ACK:server用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的DHCPserver获得,而其自己也执行一个DHCPserver来为家庭网络中的计算机分配具有专有地址的地域中的地址。路由器同过NAT转换表Nat translation table 来确定发向路由器的数据报转发给哪个内部主机。

转发表中包括port号和IP地址。当家庭网络中主机发送数据报到LAN中时,NAT为该数据报生成一个新的且当前为在NAT转换表中使用的源port号,并更改。同一时候将源IP地址改动为其广域网一側WAN-side 接口的IP地址,并为转换表加入新项。而当广域网传来数据报时,NAT再依据转发表中的表项 改写数据报的目的IP和目的port号。并向家庭网络转发该数据报。


NAT妨碍P2P应用程序。假设对等方B位于NAT后,则就不能充当server并接收TCP连接。

由于非常easy。A给B发送的报文,其port号为正确的port号,可是在NAT转换表中找不到或会出错,所以无法无法直接充当server。解决方法是让在NAT后的B先去与中间对等方C建立TCP连接,C不在NAT后且作为server,然后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协议的主要内容,如果未能解决你的问题,请参考以下文章

Linux网络基础--网络层与数据链路层

Linux网络基础--网络层与数据链路层

Linux网络基础--网络层与数据链路层

OSI七层与TCP/IP五层网络架构详解

OSI七层与TCP/IP五层网络架构详解

IP编址