与IP协议配套三个协议:
地址解析协议ARP
网际报文管理协议ICMP
网际组织管理协议IGMP
ARP在最下面,因为经常被IP使用。ICMP和IGMP在上边,因为他们要使用IP。
**即逻辑互联网络,忽略物理层的客观异构性,**在网络层看起来好像是一个统一的网络,即互联网可以有多种异构的网络组成
网络互联的一些中间设备:
物理层:转发器
数据链路层:网桥
网络层:路由器
网络层以上:网关
将IP地址划分为若干个固定类,每一类地址都由**网络号(net-id)和主机号(host-id)**构成
一个IP地址再整个互联网范围内是唯一的
最大可指派网络数:126(2^7-2) 8位除去1个固定位剩7位,减2因为要除去全0和全1位
第一个可指派的网络号:1
最后一个可指派的网络号:126
每个网络中最大主机数:16777214(2^24-2(网络地址+广播地址))
最大可指派网络数:16383(2^14-1) 16位除去2个固定位,减1因为有两个固定位为10,所以不存在全0或全1,但规定128.0.0.0不使用,所以减去
第一个可指派的网络号:128.1
最后一个可指派的网络号:191.255
每个网络中最大主机数:65534(2^16-2(网络地址+广播地址))
最大可指派网络数:2097151(2^21-1) 24位除去3个固定位,减1同B类,192.0.0.0规定不使用
第一个可指派的网络号:192.0.1
最后一个可指派的网络号:223.255.255
每个网络中最大主机数:254(2^8-2(网络地址+广播地址))
IP地址的重要特点:
网络上的IP地址:
IP地址与硬件地址区别:
IP地址与MAC地址:源IP地址和目的IP地址始终不变;而源MAC地址和目的MAC地址在每条链路上都要变化
作用:从网络层使用的IP地址,解析出在数据链路层使用的硬件地址
工作方式:每个主机里都设有一个ARP高速缓存,里面有所在局域网上各主机和路由器的IP地址到硬件地址的映射表,且这个映射表经常动态更新
工作流程:当主机A向局域网上某个主机B发送IP数据报时,先在ARP高速缓存中查看有无主机B的IP地址,若有,就可查出对应的硬件地址,反之,执行ARP请求分组:
**ARP请求分组:**在局域网广播一个ARP请求分组,包含发送方硬件地址,发送方IP地址,目的方硬件地址(未知时填0),目的方IP地址
本地广播ARP请求,路由器不转发ARP请求
ARP响应分组:某主机收到广播,发现本机IP与查询IP一致,就回复ARP响应分组,包含发送方硬件地址,发送方IP地址;同时将请求分组中IP与硬件地址对应关系保存
收到回复的ARP响应分组后,将对应IP和硬件地址存入ARP高速缓存中,方便下次使用
生存时间:ARP高速缓存中每条映射都只存在一段时间,超过时间后就被删除
特点:
ARP协议只解决同一局域网上IP地址和硬件地址映射问题,不在同一局域网则无法解决
ARP工作过程对用户来说是透明的
四种使用ARP的典型情况:
版本:占4位,说明该IP数据报使用的IP协议的版本,通信双方必须使用同一个IP协议版本
首部长度:占4位,长度20~60字节,因为IPv4中首部存在可变部分,所以需要指出首部的长度以划分首部与数据部分;以4字节为单位,不是4的整倍数时要填充至整倍数
区分服务:占8位,只在区分服务时才起作用,一般不用
总长度:占16位,说明该IP数据报的**总长度(首部+数据)。**IP数据报封装为MAC帧时受限于MAC帧的长度上限,所以IP数据报还存在“分片”操作,即将IP数据报分为多片,封装进多个MAC帧。因此IP数据报最大长度2^16-1=65535字节
标识:占16位,IP数据报若存在分片,则接收方需要将各分片组合出原IP数据报,相同标识号的IP数据报就说明它们其实是同一个源IP数据报。
标志:占3位,目前只有前两位有意义,最低位为MF(More Fragment),若MF=1则说明该数据报后面“还有分片”。中间一位为DF(Don’t Fragment),若DF=1则不能分片,只有DF=0才可以分片
片偏移:占13位,用于说明该IP数据报(已分片)在源IP数据报中的相对位置(相对于数据字段的起点),单位是8字节,每个分片一定是8字节的整倍数
生存时间:IP分组在网络中传递时有可能出现“兜圈子”的情况,所以需要对IP数据报进行一定的限制,生存时间的单位是“跳数”,最大值为255,每经过一个路由器,路由器便将IP数据报的生存时间-1,当IP数据报中的生存时间为0时,路由器丢弃该分组。
协议:说明该IP数据报的上层协议类型,如IP对应4,TCP对应6,UDP对应17
首部校验和:验证首部是否存在传输错误,只检验首部,不包括数据部分
源地址
目的地址
可变部分:长度为1~40字节,IP地址中的可变部分可用于支持很多操作,但很多情况都用不上,而且会增加路由器处理分组的开销,所以IPv6中的数据报首部做成了固定长度
每个路由器路由表表项数:每有一个网络就要有一个路由表项
接口所在网络为直连网络,直接交付
特定主机的路由:给特定主机指定路由表,通过指定路线访问目标主机
默认路由:可以减少路由表所占用的空间和搜索路由表所用的时间,将不在路由表中的网络都连向默认路由
路由表:只有目标网络和对应的下一跳地址,并不储存到某个网络的完整路径
分组转发算法:
两级IP地址的问题:
IP地址空间利用率有时很低
给每个物理网络分配一个网络号会使路由表变得很大,因此网络性能变坏
两级IP地址不够灵活
划分子网的基本思路:借用主机号若干位作为子网地址
划分子网后的IP地址:网络号 子网 主机号
作用:用来找出IP地址中的子网部分,长度为32位,原IP中网络号和子网部分置为1,主机号部分置为0
(IP地址)and(子网掩码)=网络地址
**默认子网掩码:**在不进行子网划分时,也要给出子网掩码,就用默认子网掩码
子网划分后的路由表:包含目的网络地址、子网掩码、下一跳地址
子网划分后的路由器转发分组算法:
CIDR的主要特点:
**格式:**使用网络前缀代替网络号和子网号,使IP地址变回两级格式
斜线表示法:/24表示子网掩码前24位为1,即网络前缀的位数
**CIDR地址块:**把网络前缀都相同的连续IP地址组成CIDR地址块
路由聚合:一个CIDR地址块能表示很多地址,这种地址的聚合称为路由聚合,也称为构成超网;有利于减少路由器之间的路由选择信息的交换,从而提高整个互联网的性能
主要用来检测网络通信故障和实现链路追踪,最典型的应用就是Ping和Tracerooute
Ping:通过发送回送请求报文和回送回答报文来检测源主机到目的主机的链路是否有问题,目的地是否可达,以及通信的延迟情况。
Tracerooute:通过发送探测报文来获取链路地址信息。
与ICMP 协议相关的只有7 个子段:
可能的消息列表:
Windows 向通信对方送IP 数据包时,先设置IP 首部的分片禁止标志然后再送。这是路径MTU 探索的基本。
假如,Windows 将大于1000 字节的数据包送了出去,通信路径上有MTU 从1500 字节变成1000 字节的地方。因此,那个路由器将不允许超过1000 字节的数据包通过,而进入MTU 是1000 字节的网路。
路由器尝试着将IP 数据包分片。但是因为数据包的分片禁止标志是有效的,所以不能分片。该路由器就将该IP 数据包丢弃,并用ICMP 通知送信方“想分片,但不能分片”。
这时路由器发送的ICMP的类型字段是3,代码字段为4。这是“需要分片但不能分片,不能送至终点”的意思。而且,大多数路由器将在数据选项部里填入不分片就能通过的MTU 大小。
Windows 收到该ICMP 报文后就知道了不分片就能够传送的数据大小,并暂时将MTU 大小更换掉,然后继续通信。
改变路由是指路由器向送信方计算机指示路径改变这个功能。计算机根据自己的路由信息(路由表)来决定传送目标。不知道发给谁好的时候,就将数据包发给设为默认网关的路由器。被指定为默认网关的路由器接收到数据包,发现将数据包发给局域网内的其它路由器会比较快的时候,将这一信息通过ICMP 通知发送方。这时使用的是,类型是5,代码是1 的ICMP 改变路由报文。在选项数据部分里写着应该发送给的路由器IP 地址。Windows 收到这个报文后,重写自己的路由表,与对方的通信将在一段时间里经由被指定的路由器来实行。
数据包集中到达某一路由器后,数据包因为来不及被处理,有可能被丢弃的情况。这时候,向送信方发送的是ICMP 源点抑制报文,用来使送行方减慢发送速度。
Ping命令用来在IP 次上调查与指定机器是否连通,调查数据包往复需要多少时间。为了实现这个功能,ping 命令使用了两个ICMP 报文。
1.向目标服务器发送回送请求。
首先,向目标服务器发出回送请求(类型是8,代码是0)报文(同2)。在这个回送请求报文里,除了类型和代码字段,还被追加了标识符和序号字段。标识符和序号字段分别是16 位的字段。ping 命令在发送回送请求报文时,在这两个字段里填入任意的值。对于标识符,应用程序执行期间送出的所有报文里填入相同的值。对于序号,每送出一个报文数值就增加1。而且,回送请求的选项数据部分用来装任意数据。这个任意数据用来调整ping 的交流数据包的大小。
2.返回回送回答。
计算机送出的回送请求到达目标服务器后,服务器回答这一请求,向送信方发送回送请求(类型是0,代码是0)(同3)。这个ICMP 回送回答报文在IP 层来看,与被送来的回送请求报文基本上一样。不同的只是,源和目标IP 地址字段被交换了,类型字段里填入了表示回送回答的0。也就是,从送信方来看,自己送出的ICMP 报文从目标服务器那里象鹦鹉学舌那样原样返回了。
送信方的计算机可以通过收到回送回答报文,来确认目标服务器在工作着。进一步,记住发送回送请求报文的时间,与接收到回送回答报文的时间一比较,就能计算出报文一去一回往复所需要的时间(同4)。但是,收到的回送回答报文里写的只是类型和代码的话,发送方计算机将无法判断它是否是自己发出去请求的回答。因此,前面说到的标识符和序号字段就有它的意义了。将这两个值与回送回答报文中的相同字段值一比较,送行方计算机就能够简单地检测回送回答是否正确了。执行ping 命令而调查的结果没什么问题的话,就将目标服务器的IP 地址,数据大小,往复花费的时间打印到屏幕上。
用ping 命令不能确定与对方连通的原因大致有三个:
为了调查到通信对方的路径现在是怎么样了,使用的是traceroute 命令。它与ping 并列,是代表网络命令。
1.执行tracert命令。
在Windows 上执行tracert 命令后,首先计算机向目的服务器发送IP 数据包。Windows 上使用的是与ping 同样的ICMP 回送请求报文。但是,有一点和通常的回送请求不一样。那是,最初将IP 首部的TTL(生存时间)字段设为1 这一点。
路由器每转送一次数据包就将TTL 的值减1。当TTL 变为0 的时候,按规定将丢弃这个数据包。正如这样,与其说TTL 是时间,还不如说TTL 是经过路由器的个数。对于计算机发送出去的数据包,只要它与目标服务器不在同一局域网内,一定会被哪儿的路由器中继。这时如果TTL 的值是1,由于路由器的处理会变为0,则该数据包将会被丢弃(同2)。
2.用超时报文来通知送信方。
路由器丢弃数据包的同时,用ICMP 报文来通知错误。这时使用的ICMP 报文是,类型为11,代码为0 的ICMP 超时报文。而且在选项数据字段里,将填入原先数据包的IP 首部和ICMP 的开始8 字节。正如ping 命令的时候看到的,ICMP 回送请求的先头8 字节里包含了标识符和序号字段。因此,送信方的计算机看了超时报文后,就知道是针对自己发出的回送请求的错误通知。
计算机接到针对第一个数据包的ICMP 超时报文后,接下来将TTL 加1(TTL=2)并同样地送出(同3)。这次通过第一个路由器,TTL 变为1,到达第二个路由器。但是第二个路由器象前面一样,由于TTL变为0,将不能转发该包。因此,同第一个路由器一样,将该包丢弃,并返回ICMP 超时报文。以后,收到错误的发送方计算机将TTL 加1,重复同样的工作(同4)。
3.只有目标服务器的反应不同。
如此一个一个增加TTL,某个时候ICMP 回送请求报文将到达最终的目标服务器。这时,只有目标服务器与途中的路由器不同,不返回ICMP 超时报文。为什么呢?因为即使目标服务器收到TTL 为1 的数据包也不会发生错误。
作为代替处理,服务器针对送信方计算机发出的ICMP 回送请求报文,返回ICMP 回送回答报文。也就是,送信方计算机与服务器之间,与ping 命令的执行一样了(同5)。得到了ICMP 回送回答报文的送信方知道了路经调查已经到了目标服务器,就结束了tracert 命令的执行(同6)。像这样,通过列出中途路由器返回的错误,就能知道构成到目标服务器路径的所有路由器的信息了。
4.操作系统不同则实现方法略微不同。
到这里,以Windows 上的tracert 命令为例看了原理,有些别的操作系统的traceroute 命令的原理略微不同。
具体来说,也有用向目标发送UDP 数据包代替ICMP 回送请求报文来实现的。虽说是用UDP,但途中的路由器的处理与図 8完全相同。只是UDP 数据包到达目标后的处理不同。目标计算机突然收到与通信无关的数据包,就返回ICMP 错误,因此根据返回数据包的内容来判断命令的中止。
分层次的路由选择协议:
互联网采用分层次的路由选择协议,自适应的(动态的)、分布式路由选择协议
自治系统AS:
在单一技术管理下的一组路由器,在AS内部使用内部网关协议,AS之间使用外部网关协议
路由选择协议分类:
**概述:**是一种分布式,基于距离的路由选择协议
距离:直连网络距离为1,每过一个非直连网络距离加1,距离也称为跳数,每经过一个路由器跳数就加1,距离实际上指最短距离
RIP允许一个路径最多包含15个路由器,也就是距离最大值为16,故RIP适合小型互联网使用;RIP不能在两个网络之间同时使用多条路由
工作流程:每个路由器每隔一段时间向外广播,每个路由器收到广播后更新自己的路由表
刚开始时只知道直连网络的距离,路由表为空,以后,每个路由器只和数目有限的相邻路由器交互并更新路由信息,经过若干次更新后,所有路由器最终会知道到达本自治系统其他路由器的最短距离和下一跳地址,此时称该网络收敛
RIP协议的特点:
各字段含义:
命令:指出报文的意义;1表示请求路由信息,2表示对请求路由信息的响应或路由更新报文
地址族标识符:标志所使用的的地址协议;如IP地址就置为2
路由标记:填入自治系统号,因为RIP可能受到本自治系统以外的路由选择信息
RIP存在的问题:当网络出现故障时,要经过较长时间才能将此信息传送到所有路由器
RIP协议特点:
好消息传播快,坏消息传播慢,网络出故障的传播时间需要较长时间
优点:实现简单,开销较小;
缺点:限制了网络的规模,出故障时传播时间较长
主要特征:使用分布式的链路状态协议,而不像RIP使用距离向量协议
OSPF的要点:
度量:费用、距离、时延、带宽
链路状态数据库:实际就是全网的拓扑结构图,它在全网范围内是一致的,能较快的更新,收敛较快
OSPF的区域:
为使OSPF能够用于规模很大的网络,OSPF将一个自治系统再划分为若干各更小的范围,叫做区域;必须要有一个主干区域,其它区域一般都和主干区域直接相连;每个区域都有一个32位的区域标识符;区域不能太大,一个区域路由器数量不超过200个
优点:使用泛洪法交换链路信息时,仅在一个区域内而不是整个自治系统中,这减小了整个网络上的通信量
OSPF的特点:
OSPF报文:
OSPF报文的5种分组类型:
指定路由器法:指定一个代表路由器,将信息都传送给指定的路由,再由其向其他路由器转发,减小网络上的通信量
EGP协议的作用:寻找一条能够到达目的网络且比较好的路由,不一定是最佳路由,采用路径向量路由选择协议
路由器:路由器是一种由多个输入端口和多个输出端口的专用计算机
路由器两大部分:
外部网关协议(EGP)是一种在自治系统的相邻两个网关主机间交换路由信息的协议。 EGP 通常用于在因特网主机间交换路由表信息。它是一个轮询协议,利用 Hello 和 I-Heard-You 消息的转换,能让每个网关控制和接收网络可达性信息的速率,允许每个系统控制它自己的开销,同时发出命令请求更新响应。路由表包含一组已知路由器及这些路由器的可达地址以及路径开销,从而可以选择最佳路由。每个路由器每间隔 120 秒或 480 秒会访问其邻居一次,邻居通过发送完整的路由表以示响应,代表协议是边界网关协议(BGP)。