计网笔记-4-IP协议、传递、转发、路由
文章目录
1.IP协议
面向连接的服务:源端在发送一个分组之前首先与目的端建立一个连接;在连接建立后,分组按顺序依次从相同的源端发送到相同的目的端;分组间存在一种关系,它们沿相同的路径按顺序发送;所有分组都传递完毕后,连接终止;一个连接建立之后,对那些具有相同源和目的地址的分组序列,只会进行一次路由策略;交换机不会为每个单独的分组重复计算路由,比如帧中继和ATM等虚电路分组交换方法中。
无连接的服务:网络层协议独立地对待每个分组,每个分组与任何其他分组没有联系;一个报文中分组可能会也可能不会沿同样的路径到达其目的地;用于数据报分组交换方法中,比如因特网中。
因特网中的网络层交换是利用数据报分组交换的方法实现的。
因特网的网络层通信是无连接的。
IPv4
IPv4特点
不 可 靠 性 ( unreliable ) : 尽 力 传 递 ( best-effortdelivery),尽力传递指IPv4不提供差错控制和流量控制(除头部差错检测外);不确保数据报能成功到达目的地(中间发生问题可能被丢弃);
无连接性(connectionless):不维护任何关于后续数据报的状态信息;每一分组独立进行处理,而每一分组使用不同的路由传送到目的端;如果一个源端向同一目的端发送许多数据报,那么这些数据报有可能不按顺序到达(有一些数据报也可能遗失或损坏)。
IPv4分组格式
IPv4数据报是一个可变长分组,由两部分组成:头部和数据部分;
头部由两部分组成:固定部分(20个字节)与可变部分(由若干选项组成,最长可达40个字节);
头部长度可由20(固定部分)到60个字节组成(包含选项时),4字节对齐,包含与路由选择和传输有关的重要信息;
版本号
4位,固定是4(IPv6是6,但后面的格式不一样)。
头部长度
4位,以4字节为单位定义数据报头部的总长度;当没有选项时,头部长度是20个字节,即最小值,而这个字段的值是5(5×4=20);当选项字段为最大值时,这个字段的值是15(15X4=60)
服务
8位,IETF已经改变了该字段的解释与名称,这个字段以前称为服务类型,现称为差分服务。
- 在服务类型的解释中,前3位称为优先位(Precedence),定义了在出现如拥塞等问题时,数据报的优先级;后面的4位称为服务类型(TOS),只能有1位为1;最后1位为0,未使用。
TOS bits | Description | Protocol |
---|---|---|
0000 | default | ICMP,BOOTP,DNS(TCP query) |
0001 | minimize cost | NNTP |
0010 | maximize reliability | IGP,SNMP |
0100 | maximize throughput | FTP(data),SMTP(data),DNS(zone) |
1000 | minimize delay | TELNET,FTP(control),TFTP,SMTP(command),DNS(UDP query) |
- 在差分服务解释中,前6位组成码点(code point)子字段,而后2位不用;码点子字段可有两种使用方法:
-
- 当最右边3位都是0时,最左边3位与服务类型解释中的优先位相同;
- 当最右边3位不全为0时,则6位由因特网或本地机构赋予的优先级定义64种服务;第一类包含32种服务类型,由IETF分配,第二与第三类包含16种服务,分别由本地组织机构使用或是临时的用作实验目的;这些分配还未最终确定。
总长度
16位,定义了一个以字节计的IPv4数据报的总长度;某些网络不能将65535字节的数据报封装成它们的帧,要通过这些网络就必须将这些数据报进行分段;很多情况不需要该字段(接收到帧后除去头部和尾部即可),但有填充字节时用来确定实际的数据长度(见下图);
标识
用于分段中,
标识、标记、分段偏移
它们与分段和重组相关。
标识与源IPv4地址唯一的定义一个数据报;
一个数据报可以通过几个不同的网络进行传输;每个路由器将它所接收的帧拆封成IPv4数据报,对它进行处理,然后再将它封装成另一个帧;接收到的帧的格式和长度取决于此帧刚刚经过的物理网络所使用的协议,发出去的帧的格式和长度则取决于此帧将要经过的物理网络所使用的协议;当数据报封装成帧时,该数据报的总长度必须小于MTU(最大传输单元),MTU的值取决于物理网络协议。
- 标记:3位,第一位保留,第二位称为“不分段位”D,如果值是1则机器不能将该数据报进行分段(若必须分段,则丢弃报文并发送差错报文);第三位称为“多分段位”M,值为1表示在该分段后还有更多分段,值为0表示它是最后一个或唯一的分段;
- 分段偏移:13位,表示这个分段在整个数据报中的相对位置,以8字节为度量单位。例如,将第一个和第二个分段的总长度除以8,其结果为第三个分段的偏移值;
练习
到达的一个分组的偏移值是100,而HLEN字段值为5,总长度字段的值是100。试问第一个字节和最后字节的编号是多少?
解:
第一个字节的编号是100×8=800。总长度是100字节,头部长度是20个字节(5×4),这就是说这个数据报有80个字节;如果第一个字节的编号是800,则最后字节的编号是879。
TTL
用来控制一个数据报所通过路由器的最大跳数(路由器数),由源端设定初始值,每一个路由器
将该值减1,减为0时丢弃数据报,可防止环路;
协议
定义了使用此IPv4层服务的高层协议,指明IPv4数据报必须传递到的最终目的协议。
protocol bits | protocol |
---|---|
1 | ICMP |
2 | IGMP |
6 | TCP |
17 | UDP |
89 | OSPF |
头部校验和
数据报每经过一个路由器,路由器都要重新计算一下报头检验和,因为一些字段,如生存时间、标识、段偏移等都可能发生变化。
算法:首先将校验和字段置为0,然后将整个头部划分为16位的部分,并将各部分相加,将计算结果(和)取反码。
不校验数据的原因:
- 所有将数据封装在IPv4数据报中的高层协议中都有覆盖整个分组的校验和;
- 每经过一个路由器,IPv4数据报的头部就要改变一次,但数据部分不改变;校验数据会降低效率。
选项
-
无操作选项:1字节选项,用做选项之间的填充符;
-
选项结束选项:1字节,用于选项字段结束时的填充,只能用
做最后一个选项; -
记录路由选项:多字节,用来记录处理数据报的因特网路由器,用于
调试和管理; -
严格源路由选项:多字节,用来预先确定数据报在因特网中传送时的
路由; -
松散的源路由选项:多字节,与严格源路由选项相似,但更加宽松,
必须访问表中的路由器,但数据报还可以访问其他的路由器; -
时间戳选项:多字节,用来记录路由器处理数据报的时间
IPv6
与IPv4头部比较
- IPv6取消了头部长度字段,因为在此版本中头部长度是固定的
- IPv6取消了服务类型字段,优先级和流标号字段合在一起取代服务类型字段的功能
- IPv6取消了总长度字段,替代的是有效载荷长度字段
- 在IPv6中的基本头部中取消了标识、标记和偏移字段,这些都包含在分段扩展头部中
- 在IPv6中,将TTL字段称为跳数限制字段协议字段被替换为下一个头部字段
- 头部校验和取消了,因为校验和由上层协议提供,因此这一层不需要了
- IPv4的选项字段在IPv6中被实现为扩展头部
与IPv4选项比较
- 在IPv4中的无操作和选项结束选项被替换成IPv6 中
的Pad1和PadN选项 - 在IPv6中,没有记录路由选项,因为它未被使用
- 在IPv6中,时间戳选项没有实现,因为它未被使用
- 在IPv6中,源路由器选项称为源路由扩展头部
- 在IPv4中的基本头部的分段字段已经移到IPv6 中的
分段扩展头部 - 在IPv6中的鉴别扩展头部是新的
- 在IPv6中,加密的安全有效载荷扩展头部是新的
过渡
三种过渡策略:双栈技术(dual stack)、隧道技术(tunneling)和头部转换(header translation)
- dual stack:一个站应同时运行IPv4和IPv6,直到整个因特网使用IPv6;为了确定使用哪个版本,主机要向DNS进行查询。
- tunneling:IPv6分组经过IPv4区域要封装成IPv4分组,而当分组离开区域时再去掉这个封
装,反之一样。 - header translation:当因特网中绝大部分已经过渡到IPv6,但一些系统仍然使用IPv4,通信时头部格式必须通过头部转换彻底改变。
- 头部转换过程:
- 用提取最右边32位的方法,将IPv6被映射的地址改变为IPv4地址
- 将IPv6优先级字段的值丢弃
- 将IPv4的服务类型置为0
- 计算IPv4的校验和,并插入到相应的字段中
- 忽略IPv6的流标号
- 兼容的扩展头部要转换成选项,插入到IPv4的头部中
- 计算出IPv4头部的长度,将其插入到相应的字段中
- 计算出IPv4分组的总长度,将其插入到相应的字段中
2.传递、转发和路由选择
2.1传递
网络层负责用底层物理网络处理分组,这种处理称为分组的传递;
##两种传递方法:
直接传递:分组的最终目的端的主机与发送方都连接在同一个物理网络上;发送方只要提取出分组目的端的网络地址(用掩码),并与它所连接的网络地址进行比较,如果相同,则传递就是直接的;最后的传递总是直接传递。
间接传递:目的主机与发送方不在同一个网络上,分组传递要经过路由器。
2.2转发
转发是指将分组路由到它的目的端;
转发要求主机或路由器有一个路由表。
路由表中的项目数太多,使得路由表的查找效率很低,应设法简化路由表中的内容
简化路由表的技术
下一跳方法与路由方法
路由(route)方法:在路由表中保留完整路由信息的技术;
下一跳(next-hop)方法:在路由表中只保留下一跳地址,而不保留完整的路由信息。
特定网络方法与特定主机方法
特定网络方法:仅用一个项目来定义这个目的网络本身的地址;
特定主机方法:对连接在同一个物理网络上的每台主机都有一个项目.
默认方法
路由器R1用来将分组转发到连接网络N2的主机,但是,对因特网的其余部分,则使用路由器R2;
转发过程
在无类寻址中,一个路由表至少要有4列:mask,address,next hop,interface.
路由器将掩码和数据报地址作用,若与对应的网络地址匹配,则将下一跳地址和接口号传送到ARP做进一步处理。
CIDR
Classless InterDomain Routing,无类别域间路由选择。基本思想是以可变长分块方式分配
剩下的200万个C类地址(也可以是其他类别地址),是一种将大块的地址空间合并为少量路由信息的策略。它又称作路由表聚合/路由聚合 (routing table aggregation);
大多数中等规模的企业一般拥有1000台主机,没有适合的地址空间:C类网络太小,只有254个地址,B类网络太大,有65000多个地址。那就给它1024个地址块(4个连续的C类地址)
CIDR特点:
- 掩码长度更灵活;
- 可以更加有效的分配IPv4的地址空间。
- IP地址从三级编址(使用子网掩码)又回到了两级编址
- 作用是把小的网络汇聚成大的超网
- 路由表查找时最长前缀匹配(longest-prefix matching)
2.3路由选择
单播路由选择
路由表可以是静态的也可以是动态的;由于需要有动态路由表,因此产生了多种路由选择
协议,使得在互联网中的各路由器能够彼此互相通知这些变化。
路由器将分组转发到哪一个网络是基于最优化原则做出判断的。
给每一个网络指定的度量(或者叫代价)取决于协议的类型;RIP简单以跳数作为度量,OSPF允许网络管理员基于所需服务类型(比如吞吐量、延迟等)指定通过网络的代价。
互联网非常大,仅使用一个路由选择协议无法处理更新所有路由器路由表的任务,为此,需要将互联网划分为多自治系统;自治系统(autonomous system)是一个单一的管理机构管辖下的一组网络和路由器;
自 治 系 统 内 部 的 路 由 选 择 称 为 域 内 路 由 选 择(intradomain routing),自治系统之间的路由选择称为域间路由选择(interdomain routing);
每个自治系统可选择一种或多种域内路由选择协议处理自治系统内部的路由选择,如基于距离向量的RIP和基于链路状态的OSPF;但处理自治系统之间的路由选择,通常只能使用一种域间路由选择协议,如基于路径向量的BGP。
RIP
Routing Information Protocol,基于距离向量路由选择,位于应用层。
- 在一个自治系统中,包括了路由器和网络(链路),路由器有路由表,而网络没有路由表;
- 路由表中的目的端这一列是网络,这表示它的第一列定义了目的网络地址;
- RIP所用的度量很简单,距离定义为到达目的端的链路(网络)个数,因此 RIP的度量称为跳数(hop count);
- 16就定义为无穷大,就是说在使用RIP 的任何自治系统中,任何路径不能大于15跳;
- 下一个节点这一列定义为被发送分组所要到达的目的路由器的地址。
OSPF
Open Shortest Path First protocol,开放最短路径优先,基于链路状态路由选择,位于网络层。
它将自治系统划分为一些区域;
一个区域(area)是包含在自治系统中的一些网络、主机和路由器的集合,自治系统可划分为多个不同的区域,在一个区域里所有网络必须是互相连接的;
一个区域内的路由器使用洪泛法传送路由选择信息,在一个区域的边界,区域边界路由器(area border router)将本区域的信息概括起来发送给其他区域;
自治系统中有一个特殊区域称为主干,自治系统中的所有区域必须连接到主干上;换言之,主干相当于主区域,其他区域相当于从区域,但并不表示在各区域内的路由器不能相互连接;
在主干中的路由器称为主干路由器(backbone router);
一个主干路由器也可以同时是一个区域的边界路由器;
如果由于某些问题,主干和区域间的连通性被破坏了,那么网络管理员就必须在路由器之间建立一条虚链路(virtual link)(使用一条更长的路径),以保持作为主区域的主干的各种功能的连续性;
每一个区域有一个区域标识,主干的区域标识是0。
一个连接称为链路,己定义了4种类型的链路:点对点链路、过渡链路、残桩链路和虚链路
- 点对点链路:中间没有任何其他的主机或路由器
- 过渡链路:连接多个路由器
- 残桩链路:只连接到一个路由器
- 虚链路:当两个路由器间的链路断开时,网络管理员就在它们间,创建一条虚链路
BGP
Border Gate Protocol,边界网关协议,已有4个版本:
- 三种自治系统类型:残桩的(与其他自治系统只有一个连接)、多接口的(与其他自治系统有多个连接,但它仍旧还是数据流量的源端或接收器)和转送的(多接口自治系统,但它允许过渡数据流量);
- 路径属性:熟知的和可选的;熟知属性是每一个BGP路由器必须知道的,而可选属性则不需要被每一个路由器都知道;
- 熟知属性分两类:强制的和自选的;熟知强制属性是在一条路由的描述中必须出现的属性,熟知自选属性是每一个路由器必须知道的,但不一定需要包括在每一个更新报文中;例如熟知强制属性ORIGN定义路由选择信息的源端(RIP 、OSPF等);
- 可选属性分两类:传递的(若没有实现则传递给下一个路由器)和非传递的(若没有实现就丢弃)
使用BGP的两个路由器之间的路由信息的交换产生一次会话;
为了可靠性,BGP使用TCP(端口号179)作为其传输层协议;换言之,作为一个应用程序,BGP级的会话是TCP级的一条连接,即BGP位于传输层。
但是,对于BGP和其他应用程序所做的TCP连接略有不同,对于BGP建立的TCP连接可持续一段较长的时间直到某一不寻常的事件发生,因此 BGP会话有时称为半永久连接。
BGP只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。
多播路由选择
多播:一个源端和一组目的端;在多播中,路由器可能通过它的多个端口将其所接收的分组转发出去;