① 网络层主要任务是把分组从源端传到目的端,为分组交换网上的不同主机提供通信服务。
② 网络层的传输单位是数据报。
③ 数据报与分组的关系:数据报是比较长的,而分组就相当于是把数据报进行切分而形成的。
① 找路与分组转发:通过路由算法找到最佳路径,并把分组通过最佳路径转发出去。
② 异构网互联:不同的网络叫做异构网,网络层可以通过路由器把这些网络连接起来,构成一个更大的网络。
③ 拥塞控制:若所有结点都来不及接受分组,而要丢弃大量分组的话,网络就处于拥塞状态。因此要采取一定措施,缓解这种拥塞。拥塞控制有静态的开环控制和动态的闭环控制两种方法。
数据通过网络核心路由器从源主机到目的主机依托的就是数据交换技术。
这造价也太高了。
于是便有人想出了这样的点子:
交换设备可以使数据链路层的交换机、网桥,也可以使网络层的路由器。这样连接信道明显就比上面那个方法easy多了。但是这样有个缺点,交换设备上不能连太多主机,信道也不能拉得太长。然后就有了下面这种改进方法:
用一个庞大的交换网络代替单一的一个交换设备。
收发双方在信道中独占资源,正因如此才没有冲突。
报文指源应用发送的信息整体。例如一张图片、一段视频、一份word等。报文会被传输层分割成报文段,当然如果报文比较短就不会分割了。然后给报文加上ip地址、物理地址,并在物理层上进行数据传输。
电路交换的特点是它在交换设备中传播时,已经固定好了,必须从A到B再到C,报文交换比较灵活,可以从A到B,然后在B点看情况究竟去C还是D。
把分组分成小的数据块,在进行存储转发,就是分组。
报文交换中一个文件只能存在于一个交换设备中,而分组交换一个文件可以每个部分都在不同的交换设备中。
报文交换就好比一个质点过桥,所有数据都集中在这个质点上。而分组交换就相当于一个大巴过桥,数据被拆分均摊在大巴的每一个座位上。报文交换的时延就是质点到达目的地的时延,而分组交换的时延则是从大巴头头进桥算起,尾巴出桥结束。那有的人就说了,你这不对呀,这样一来分组交换岂不是更慢?其实不是,报文交换数据集中到一个质点上,太重了,速度是10m / s。而分组交换把报文分成分组,数据均摊给这几伙人,没一段的速度都是1000m / s。
首先,他们俩是分组交换方式的子类。
数据报交换方式为网络层提供无连接服务。无连接服务是指不事先为分组的传输确定传输路径,每个分组独立确定传输路径,不同分组传输路径可能不同。
虚电路交换方试为网络层提供连接服务。连接服务是指首先为分组的传输确定传输路径(建立连接),然后沿该路径(连接)传输系列分组,系列分组传输路径相同,传输结束后拆除连接。其实虚电路交换方式就是把分组交换方式和电路交换方式进行了融合。
计算机网络系统层次 | 传输单元名词 | 具体内容 |
---|---|---|
应用层 | 报文 | 比如qq就是应用层,用qq发送的文(se)件(tu)就是属于报文 |
传输层 | 报文段 | 如果群友发的是迅雷链接,数据量很小,那就不会分割。如果群友发的是一部东洋电影,那就要分割成报文段。笑得报文就是单独的一个报文段。 |
网络层 | IP数据报、分组 | IP数据报就是给报文段封装上网络层的IP地址,包括目的地址、源地址。如果IP数据报还是太大了,就再切割,切割成分组。小的数据报就是单独的一个分组。 |
数据链路层 | 帧 | 在分组的基础上,头部加上mac地址物理地址,尾部再加一个fcs帧检验序列。 |
物理层 | 比特流 | 01101001, 01101; 01101! 10101101? 010101010. |
虚电路将数据报方式和电路交换方式结合,以发挥两者优点。
虚电路:一条源主机到目的主机类似于电路的路径(逻辑连接),路径上所有结点都要维持这条虚电路的建立,都维持一张虚电路表,每一项记录了一个打开的虚电路的信息。
第一步 | 第二步 | 第三步 |
---|---|---|
建立连接(虚电路建立) | 数据传输 | 释放连接(虚电路释放) |
每个分组携带虚电路号,而非目的地址。源主机发送“呼叫请求”分组并收到“呼叫应答”分组后才算建立连接。 | 全双工通信 | 源主机发送“释放请求”分组以拆除虚电路。 |
虚电路号有什么用呢?分组发送到路由器里面,路由器会通过虚电路号判断接下来应该发送给哪个路由器。
如果类比图论的话,虚电路号就是每个号码都对应一条路径,而数据报服务的目的地址则是知道起始位置和终止位置,路由器提供路径算法。
\ | 数据报服务 | 虚电路服务 |
---|---|---|
连接的建立 | 不要 | 必须有 |
目的地址 | 每个分组都有完整的目的地址 | 仅在建立连接阶段使用,之后每个分组使用长度较短的虚电路号。 |
路由选择 | 每个分组独立地进行路由选择和转发。 | 属于同一条虚电路的分组按照同一路由转发 |
分组顺序 | 不保证分组有序到达(因为无连接) | 保证分组的有序到达(因为有连接) |
可靠性 | 不保证可靠通信,可靠性由用户主机来保证 | 可靠性由网络保证 |
对网络故障的适应性 | 出故障的结点丢失分组,其他分组路径选择发生变化,可正常传输(条条大路通罗马,此路不通换一路) | 所有经过故障结点的虚电路均不能正常工作(这个的路线是固定的,你不能说这条路走不通就换一条路) |
差错处理和流量控制 | 由用户主机进行流量控制,不保证数据报的可靠性 | 可由分组交换网负责,也可由用户主机负责 |
路由器里面有个东西他叫路由表,它里面放着这些东西:目的网络IP、子网掩码、下一跳IP地址、接口。那么这些东西是怎么得到的?就是通过路由算法得到的。
最佳路由:“最佳”只能是相对于某一种特定要求下得出的较为合理的选择而已。(有点类似于图论中最短路径的概念)
中国有句老话说得好:“杀鸡焉用砍牛刀”,杀鸡就用菜刀就好了,用砍牛刀还把人累的,没菜刀快。动态路由规划就相当于砍牛刀。j
另外,对于动态路由算法还能进行进一步细分。
① 因特网的规模很大。
② 许多单位不想让外界知道自己的路由选择协议,但还想连入因特网。
自治系统AS:在单一的技术管理下的一组路由器,而这些路由器使用一种AS内部的路由选择协议和共同的度量以确定分组在该AS内的路由,同时还使用一种AS之间的路由协议以确定在AS之间的路由。
一个AS内的所有网络都属于一个行政单位来管辖,一个自治系统的所有路由器在本自治系统内都必须连通。
自制系统AS实现了透明性,把路由协议分成了AS内使用的内部网关协议IGP(常用协议为RIP OSPF)和AS之间使用的外部网关协议EGP(常用协议为BGP)。(很久以前路由器就叫网关)
首部还可以细分为固定部分和可变部分。任何一个数据报,其固定部分大小都相同,20字节,且一定要有。而可变部分可有可无,大小不受限,大部分情况下没有。
上图中的数据部分其实就是传输层的报文段,所以这里不细说,放到传输部分讲。
① 版本:IPv4或IPv6。
② 首部长度:只有四个字节,所以只能表示0~15。单位是4Byte,例如首部长度为8,真正的长度是8 * 4Byte = 32Byte,首部长度为5,为5 * 4 = 20Byte,首部长度默认为20Byte,所以这个值肯定是5 —— 0101
③ 区分服务:指示期望获得哪种类型的服务。只有在使用区分服务的时候,这个字段才有用,否则就没用。
④ 总长度:表示首部 + 数据的数据长度,单位是1Byte,因为字段长度为16位,所以他可以表示的数据长度是0~216-1即0~65525Byte。实际情况下不会达到最大值,因为数据太长会进行切片。
⑤ 标识、标志、片偏移:这些到下一节IP数据报的切片再讲。
⑥ 生存时间(TTL):IP分组的质期。经过一个路由-1,变成0则丢弃。
⑦ 协议:数据部分使用的协议。
⑧ 首部检验和:只检验首部。如果路由器检验出错则丢弃数据。
⑨ 可选字段:0~40Byte用来支持排错、测量以及安全等措施。
⑩ 填充:全0,用来把首部补充成4Byte的整数。
最大传输单元MTU是指链路层数据帧可封装数据的上限。以太网的MTU是1500字节。
当所传输的数据报长度超过了最大传输单元MTU,就要进行分片。如果不分片,分组则无法传递,就会返回一个SMP差错报文。
① 标识:统一数据报的分片使用同一标识。
② 标志:共三位,只有两位有意义。中间位DF(Don’t Fragment)DF=1禁止分片,DF=0允许分片。第三位MF(More Fragment)MF=1后面还有分片,MF=0代表该分片是最后一片或没有分片。只有DF为0,MF才有意义。
③ 片偏移:指出较长分组分片后,某片在原分组中的相对位置。以8B位单位。我们可以通过这个得到一个结论:除了最后一个分片,每个分片长度一定是8B的整数倍。
例如一个首部20Byte数据部分3800Byte,MTU=1400Byte的数据报,就可以分成三个分片,分别是首部20Byte数据部分1400Byte、首部20Byte数据部分1400Byte、首部20Byte数据部分1000Byte。三者的片偏移量分别是$\frac{0Byte}{8Byte}=0$ 1400 B y t e 8 B y t e = 175 \frac{1400Byte}{8Byte}=175 8Byte1400Byte=175 2800 B y t e 8 B y t e = 350 \frac{2800Byte}{8Byte}=350 8Byte2800Byte=350,如下表所示
\ | 总长度 | 标识 | DF | MF | 片偏移 |
---|---|---|---|---|---|
原始数据报 | 3820 | 12345 | 0 | 0 | 0 |
数据报片1 | 1420 | 12345 | 0 | 1 | 0 |
数据报片2 | 1420 | 12345 | 0 | 1 | 175 |
数据报片3 | 1020 | 12345 | 0 | 0 | 350 |
最早使用的是分类的IP地址,后来才有子网划分。现在使用的是构成超网(无分类编制方式)。我们要依次讲解这三个东西。
如图所示,同一局域网内的ip地址除了最后一位主机号外的前三个字节都是一样的。例如上图右下角拿个局域网里面都是222.1.3.x,我们把这一片局域网就叫222.1.3.0
PS:绿色的网不叫原谅网,叫无编号网,是一种特殊的局域网。
PS:其中D类仅用于一对多通信。E类几乎不使用。
PS:对于A类,第一个字节叫网络号,对B,前两个叫网络号,对C,前三,剩下的字节叫主机号。
情况一:他不知道自己的网络号,也不知道自己的主机号,直接发送数据。
情况二:同一个局域网内,网络号相同,所以目的地址网络号为零就是说目的地址网络号和源地址是一样的。
情况三:也就是255.255.255.255。目的地址如果填成这样的,那就是说目的主机就是该局域网内的所有主机。路由器不转发是因为这是在一个广播域内,不需要跨网。
情况四:网络ID
情况五:类似于情况三,只是他可以在其他的网络中也进行一个广播。
情况六:换回地址、用来测试。例如:127.0.0.1。这种地址还没发出去就走回来了,只是用来测试的。类似于你用Socket编程做了一个客户端服务器然后自己和自己聊天,这种情况下数据还没发出主机之外就被本主机接收了。
PS:若主机号为255,则一定是广播地址。
这些只在一个学校,或一个医院等内部使用。把它们放到网络上人家是不认的。
我们先回顾一下上节课讲得私有IP地址。
我们知道路由器对目的地址是私有IP地址的数据报一律不进行转发。一般学校内部都使用的是私有IP地址。
但是你想一下,你做完C语言课设的时候不还是照样能玩4399,跟女朋友聊QQ,既然不经过路由器,那这是怎么做到的?这就利用到了网络地址转换NAT。
网络地址转换NAT (Network Address Translation):在专用网连接到因特网的路由器上安装NAT软件,安装了NAT软件的路由器叫NAT路由器,它至少有一个有效的外部全球IP地址。
我明明叫做192.168.0.3,是个私有地址,但是路由器转发我的时候,却给人家说我叫172.38.1.5,人家一看:“哎嗨,不是私有地址,那过过过”。别人给我这个私有地址发数据,也是先发到那个172.38.1.5,再发给我。
那NAT是如何实现的呢?NAT路由器内部有一个NAT转换表。长这样:
这个玩意是端口号实现对应的。端口号是什么传输层才讲。
① IP地址空间的利用率有时很低。
② 两级IP地址不够灵活。
我们前面讲的都是二级IP地址,分个网络号和主机号。
而所谓的三级IP地址分为网络号、子网号、主机号。就是把二级IP的主机号分成了子网号和主机号。
某单位划分子网后,对外仍表现为一个网络,即本单位外的网络看不见本单位内子网的划分。
其中子网号能不能全1/0要看情况,主机号绝对不能全1/0。
假设网络号是145.13.0.0。这家单位把网络划分成了三个子网145.13.3.0、145.13.7.0、145.13.21.0
有别的电脑要要发数据给145.13.21.10,那他肯定先是发给145.13.0.0的路由器,接下来呢?如何传给对应的主机?这就要用到子网掩码了。
\ | 网络号 | 主机号 |
---|---|---|
二级IP地址 | 145.13 | 3.10 |
二级IP地址的子网掩码 | 11111111 11111111 | 00000000 00000000 |
\ | 网络号 | 子网号 | 主机号 |
---|---|---|---|
三级IP地址 | 145.13 | 3 | 10 |
三级IP地址的子网掩码 | 11111111 11111111 | 11111111 | 00000000 |
用子网掩码与IP地址诸位相与,就能得到子网网络地址。
例题:已知IP地址是141.14.72.24,子网掩码是255.255.192.0,求网络地址。
IP地址按二进制展开是10001101.00001110.01001000.00011000,子网掩码按二进制展开是11111111.11111111.11000000.00000000,二者按位与可得10001101.00001110.01000000.00000000即141.14.64.0
考研真题:某主机的IP地址为180.80.77.55,子网掩码为255.255.252.0。若该主机向其所在子网发送广播分组,则目的地址可以是() .
A.180.80.76.0
B.180.80.76.255
C.180.80.77.255
D.180.80.79.255
IP地址二进制形式:10110100.01010000.01001101.00110111子网掩码二进制形式11111111.11111111.11111100.00000000。按位与得到网络号为10110100.01010000.01001100.00000000,即180.80.76.0,因为这是B类IP地址,网络号为前两个字节,所以其子网号第三个字节前六位,主机号是后十个位,为得到广播IP,令主机号全1,得到10110100.01010000.01001111.11111111,也就是180.80.79.255。选D。
① 目的网络地址。
② 目的网络子网掩码。
③ 下一跳的地址。
PS:这里我看的那个课上实在讲的然,我这里也写的有点然。
① 提取目的IP地址。
② 判断是否直接交付(直接交付就是说直接把数据交付给该路由器所辖网络内的主机,间接交付就是该路由器所辖网络内并没有目的主机,所以需要让数据继续在路由器中传播直至可以直接交付)
③ 判断是否为特定主机路由(路由表中有一个数据是特定主机及其特定路由方式,如果发现目的地址与路由表中的某个特定地址相同,就按照路由表中对应的特定的路由方式进行路由,而非默认的方式。)
④ 检测库由表中有无路径
⑤ 默认路由(如果前面的方法都没有路由成功路由,那就进行默认路由)
⑥ 丢弃,报告转发分组出错。
一般情况下子网掩码都是定长的,但有的情况下使用的是变长子网掩码,比如说在西安邮电大学里,通院和计院人比较多,使用较短的一个子网掩码,而人外院现代邮政院人比较,就使用比较长的。
首先第一点:CIDR消除了传统的A类、B类、C类和划分子网的概念。
上图就是二级IP、三级IP、CIDR的对比。
CIDR记法:IP地址后加上“/”,然后写上网络前缀(可以任意长度)的位数。例如:128.14.32.0/20
其次第二点:CIDR融合了子网地址与子网掩码,方便子网划分。
CIDR把网络前缀都相同的IP地址组成一个“CIDR地址块”。
例如128.14.35.7/20是某CIDR地址块中的一个地址。
其二进制表示为:10000000 00001110 00100011 00000111
最小地址表示为:10000000 00001110 00100000 00000000
最大地址表示为:10000000 00001110 00101111 11111111
地址块ID即是最小地址表示,即128.14.32.0/20,对所有网络前缀为20的地址块统称为“/20地址块”。
地址掩码(子网掩码)为:11111111 11111111 11110000 00000000
将多个子网聚合成一个较大的子网,叫做构成超网,或路由聚合。(划分子网是把一个大饼子分成好多个小饼子,构成超网是把好多个小饼子拼成一个大饼子。)而其所使用的方法就是将网络前缀缩短。
如图。假如说网络一和网络二的下一跳地址一样,那么他们就可以构成超网了,通过缩短网络前缀构成的超网就是206.1.0.0/16
使用CIDR时,查找路由表可能得到几个匹配结果,应选择具有最长网络前缀的路由。前缀越长,地址块越小,路由越具体。
例题:路由器RO的路由表见下表:若进入路由器R0的分组的目的地址为132.19.237.5,请问该分组应该被转发到哪一个下一跳路由器() 。
A. R1 B. R2
C. R3D. R4
首先ABD的目的网络ID与目的地址都是匹配的,然后根据最长前缀匹配的原则,我们应该选择R2,也就是B。
例题:某网络的IP地址空间为192.168.5.0/24,采用定长子网划分,子网掩码为255.255.255.248,则该网络中的最大子网个数、每个子网内的最大可分配地址个数分别是()
A. 32,8
B. 32,6
C. 8,32
D. 8,30
首先子网掩码二进制形式为11111111.11111111.11111111.11111000,也就是主机号为后三位,子网号未知,由题中给的某网络的IP地址空间为192.168.5.0/24我们可知网络前缀为24位,而子网掩码中前29位是全1,那么第25~29这五位就是子网号了。那么最大子网数就是25=32,最大可分配地址个数为23-2=6。所以选B。注意了,不能说是主机号有三位23=8,所以答案是A,人家问的是可分配地址,全零全一不可分配。
如果你是做题家,那其实三种编码方式没必要搞得清清楚楚的,能做题就行了。
数据的发送过程就是这样子步步封装。但是呢,封装导数据链路层的时候出现了问题,只知道主机3的IP地址,不知道他的MAC地址。ARP高速缓存中没有存储主机3IP对应的MAC地址。为了进一步封装操作,我们就要用到ARP协议了。
ARP高速缓存(ARP cache),由最近的ARP项组成的内在中的一个临时表。是IP地址与mac地址的映射。
ARP协议的过程就是首先要广播一个ARP分组请求。也就是IP1对应的一号主机要发送一个数据帧。这个数据帧的内容是主机1的IP地址,主机3的IP地址,主机1的MAC地址和本网广播地址(全1IP即255.255.255.255)
PS:这个东西虽然叫请求分组,但他是一个帧。
当主机3收到了来到主机1的广播ARP请求分组,主机3就会给主机1发送一个单播ARP响应分组。响应分组只包括两个部分,主机3的IP地址和他的MAC地址。
知道了主机3的MAC地址,就能进一步向下封装了。
ARP高速缓存只收录同一局域网内的主机的IP地址与MAC地址映射。而很明显主机1与主机5不在同一局域网内,自然主机1的数据在向下封装的过程中不可得知主机5的MAC地址。
那怎么办呢,主机1先用子网掩码和主机5IP地址相与运算,发现自己与主机5在同一局域网内就进行上面那个“1.同一局域网内,主机1发送数据给主机3”中的步骤,否则查询默认网关IP地址(默认网关说的就是这个管辖这个局域网的路由器,也就是这个主机与外界沟通的路由器)。
这种情况和上面那种情况一样,也要发送广播ARP请求分组和接收单播ARP响应分组。我们设默认网关,也就是从左往右数第一个路由器的IP地址是IP6。
主机1收到来自于默认网关的响应分组后就可以继续向下封装了。
然后数据传到了第一个路由器,解封装在封装,数据变成下面这样子。
MAC6是默认网关输入端MAC地址,MAC7是输出端。
由于在实际网络的链路上传送数据帧时,最终必须使用MAC地址。
而ARP协议是用来完成主机或路由器lP地址到MAC地址的映射。也就是解决下一跳走哪的问题。
ARP协议使用过程:检查ARP高速缓存,有对应表项则写入MAC帧,没有则用目的MAC地址为FF-FF-FF-FF-FF-FF的帧封装并广播ARP请求分组,同一局域网中所有主机都能收到该请求。目的主机收到请求后就会向源主机单播一个ARP响应分组,源主机收到后将此映射写入ARP缓存(10-20min更新一次)。
ARP协议的四种典型使用情况是:① 主机A发给本网络上的主机B:用ARP找到主机B的硬件地址。② 主机A发给另一网络上的主机B;用ARP找到本网络上一个路由器(网关)的硬件地址。③ 路由器发给本网络的主机A:用ARP找到主机A的硬件地址。④ 路由器发给另一网络的主机B:用ARP找到本网络上的一个路由器的硬件地址。
另外还要注意一点,ARP协议是自动进行的,主机的用户对于地址解析的过程是完全不知道的。
例题:主机发送IP数据报给主机B,经过了5个路由器,请问此过程总共使用了几次ARP协议?
如图:
答案是六次。
ARP协议是处于网络层和链路层之间的一个协议,因为它结合了IP地址与MAC地址。但它更偏向于网络层,所以还是被划分到了网络层里面。为了对这个说法有更深的理解,我们搬出来TCP/IP协议栈的那张图。
比方说在机房里,每个电脑的IP地址都是固定的,这种方式需要分配的有IP地址、子网掩码、默认网关。
例如学校里的每个教学楼都对应一个网段,那么每个网段内都会有上图这样的设备安排。
几台DHCP服务器和链路层设备交换机。
你拿上手机走到不同的教学楼就是不同的网段,就得动态地分配IP地址,而完成动态分配IP地址工作的就是这个DHCP服务器了。我走到逸夫楼,逸夫楼的DHCP服务器给我分配一个IP地址,然后我又到A栋,A栋的DHCP服务器又给我分配了一个新的DHCP服务器。
动态主机配置协议DHCP是应用层协议,使用客户端/服务器方式,客户端和服务端通过广播方式进行交互,基于UDP。
DHCP提供即插即用联网的机制,主机可以从服务器动态获取IP地址、子网掩码、默认网关、DNS服务器名称与IP地址,允许地址重用,支持移动用户加入网络,支持在用地址续租。
① 主机广播DHCP发现报文。试图找到网络中的服务器,服务器获得一个IP地址。
② DHCP服务器广播DHCP提供报文。服务器拟分配给主机一个IP地址及相关配置,先到先得。
③ 主机广播DHCP请求报文。主机向服务器请求提供IP地址。为什么这个也是广播地址呢?这样就可以告诉其他的DHCP服务器,我找到服务器了,你们不用等我,我IP地址分给别人去吧。
④ DHCP服务器广播DHCP确认报文。正式将IP地址分配给主机。
这四步就相当于是:
——主机发送群聊:“在?”
——某服务器在群聊中回复:“@主机 在。”
——主机本想私发给服务器,但想了想,如果私发的话,群里其他人不知道自己事情已经解决了,又会来回自己消息,所以便在群里发:“@服务器 给我空间点个赞?”
——服务器:“好。”
我们先看看TCP/IP协议栈,显而易见,ICMP协议处在网络层和传输层中间。ICMP协议的存在是为了更有效地转发IP数据报和提高交付成功的机会。
ICMP协议支持主机或路由器差错(或异常)报告、网络探询。
对于差错(或异常)报告,ICMP协议负责发送一个ICMP报文。
以下是ICMP报文各个字段的内容分析图。
① 类型:也就是这个ICMP报文具体是哪一类的,主要有两种类型:ICMP差错报文和ICMP询问报文。
② 代码:为了进一步区分具体的错误情况。
③ 检验和:检验整个报文。
1.对ICMP差错报告报文不再发送ICMP差错报告报文。
2.对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文
3.对具有组播地址的数据报都不发送ICMP差错报告报文。
4.对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文。
主机或路由器向特定目的主机发出的询问,收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。测试目的站是否可达以及了解其相关状态,也就是我们常说的ping。
请某个主机或路由器回答当前的日期和时间。用来进行时钟同步和测量时间。
其实不止两个,还有掩码地址请求和回答报文和路由器询问和通告报文,不过现在已经取消掉了。
测试两个主机之间的连通性,使用了ICMP回送请求和回答报文。
跟踪一个分组从源点到终点的路径,使用了ICMP时间超过差错报告报文。
Traceroute的原理是vujiA给主机B发送一连串的数据报,这一连串的数据报的TTL也就是生存时间都是不一样的,tamfdeTTL是逐个递增的。这串数据报到第一个路由器的时候就会死上一个,路由器给vujiA发送一个ICMP时间超过差错报告报文,到下一个路由器也是如此,每个路由器都是如此,主机A给主机B通信过程中每个路由器都会给主机A发送数据报,那主机A就知道了分组发送的路径了。
因为32位的IP地址空间已经快要分配殆尽了。我们甚至有了CIDR和NAT技术来缓解,但这点操作还是远远不够的,只能说是治标不治本。因此我们产生了IPv6技术来从根本上解决地址耗尽的问题。
CIDR和NAT是在小房子的基础上放点柜子、书架,进行合理分配,就有空放杂物了。而IPv6技术则是直接扩建小房子。
另外IPv6还想尝试支持快速处理/转发数据报、支持QoS。
QoS ( Quality of Service,服务质量)指一个网络能够利用各种基础技术,为指定的网络通信提供更好的服务能力,是网络的一种安全机制,是用来解决网络延迟和阻塞等问题的一种技术。
其中扩展首部可有可无。如果需要特殊服务,就填充一个扩展首部。需要几个扩充几个,不需要则无扩展首部。
① 版本:指明了协议版本,即6(0110)
② 优先级:区分数据报的类别和优先级
③ 流标签:“流”是互联网络上从特定源点到特定终点的一系列数据报。所有属于同一个流的数据报都具有同样的流标签。
④ 有效载荷长度:顾名思义,有效载荷的长度。注意要和IPv4区分开,IPv4是给个头的长度,给个全身长度,而IPv6是给了头的长度,给了头往下的长度。
⑤ 下一个首部:标识下一个扩展首部或上层协议首部。如果说数据包是一个链表节点,下一个首部字段相当于是指针域,指向了下一个数据报。
⑥ 跳数限制:相当于是IPv4的TTL,如果跳数限制达到零则丢弃掉该数据报并返回ICMP差错报文。
⑦ 原地址和目的地址:需要注意,对于IPv4,这两个字段都是32位,而对于IPv6而言,是128位。
lPv6将地址从32位(4B)扩大到128位(16B),更大的地址空间。
IPv6将IPv4的校验和字段彻底移除,以减少每跳的处理时间。
IPv6将IPv4的可选字段移出首部,变成了扩展首部,成为灵活的首部格式,路由器通常不对扩展首部进行检查.大大提高了路由器的处理效率。
lPv6支持即插即用(即自动配置),不需要DHCP协议。
lPv6首部长度必须是8B的整数倍,IPv4首部是4B的整数倍。
IPv6只能在主机处分片,IPv4可以在路由器和主机处分片。
ICMPv6的附加报文类型“分组过大”。
lPv6支持资源的预分配,支持实时视像等要求,保证一定的带宽和时延的应用。
lPv6取消了协议字段,改成下一个首部字段。
IPv6取消了总长度字段,改用有效载荷长度字段。
IPv6取消了服务类型字段。
一般形式:4BF5:0000:0000:0000:BA 5F:039A:000A:2176
压缩方式:4BF5:0:0:0:BA5F:39A:A:2176
零压缩方式(一连串的零用一对冒号表示):4BF5::BA5F:39A:A:2176
一对一通信,可做源地址+目的地址。
一对多通信,可做目的地址。多播地址指代的是一堆主机,这一堆主机称为一个多播组,
这个是IPv6的专有名词,任播组和多播组一样都是一堆主机,但是多播是这一堆主机都有份,任播是这一堆主机谁离我近我给谁发数据,其他人就算了。
双协议栈技术就是指在一台设备上同时启用lPv4协议栈和IPv6协议栈。这样的话,这台设备既能和IPv4网络通信,又能和IPv6网络通信。如果这台设备是一个路由器,那么这台路由器的不同接口上,分别配置了IPv4地址和IPv6地址,并很可能分别连接了IPv4网络和IPv6网络。如果这台设备是一个计算机,那么它将同时拥有IPv4地址和IPv6地址,并具备同时处理这两个协议地址的功能。
通过使用互联网络的基础设施在网络之间传递数据的方式。使用隧道传递的数据(或负载)可以是不同协议的数据帧或包。隧道协议将其它协议的数据帧或包重新封装然后通过隧道发送。
如图,第一个路由器向第二个路由器传播数据时就会重新封装,把Ipv6数据报转换成IPv4数据报。第三个路由器向第三个路由器传播时反之。第二个路由器到第三个路由器之间就叫做隧道了。
RIP是一种分布式的基于距离向量的路由选择协议,是因特网的协议标准,最大优点是简单。
RIP协议要求网络中每一个路由器都维护从它自己到其他每一个目的网络的唯一最佳距离记录(即一组距离)。
距离:通常为“跳数”,即从源端口到目的端口所经过的路由器个数,经过一个路由器跳数+1。特别的,从一路由器到直接连接的网络距离为1。RIP允许一条路由最多只能包含15个路由器,因此距离为16表示网络不可达。
PS:RIP协议只适用于小互联网。算法基础是Floyd算法
1.仅和相邻路由器交换信息。
⒉路由器交换的信息是自己的路由表。
3.每30秒交换一次路由信息,然后路由器根据新信息更新路由表。若超过180s没收到邻居路由器的通告,则判定邻居没了,并更新自己路由表。路由器刚开始工作时,只知道直接连接的网络的距离(距离为1),接着每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。经过若干次更新后,所有路由器最终都会知道到达本自治系统任何一个网络的最短距离和下一跳路由器的地址,即“收敛”。
1.修改相邻路由器发来的RIP报文中所有表项,对地址为x的相邻路由器发来的RIP报文,修改此报文中的所有项目:把“下一跳”字段中的地址改为x,并把所有的“距离”字段+1。
2.对修改后的RIP报文中的每一个项目,进行以下步骤:
( 1)R1路由表中若没有Net3,则把该项目填入R1路由表。
(2)R1路由表中若有Net3,则查看下一跳路由器地址:
若下一跳是x,则用收到的项目替换源路由表中的项目。
若下一跳不是x,原来距离比从x走的距离远则更新,否则不作处理。
3.若180s还没收到相邻路由器x的更新路由表,则把X记为不可达的路由器,即把距离设置为16。
例题:已知路由器R6的路由表,现收到相邻路由器R4发来的路由更新信息,试更新路由器R1的路由表。
答案:
例题:考虑如图所示的子网,该子网使用了距离-向量算法,下面的向量刚刚到达路由器C∶来自B的向量为( 5,0 ,8,12,6,2);来自D的向量为(16,12,6,0,9,10 );来自E的向量为(7,6,3,9,0,4)。经过测量,C到B、D和E的延迟分别为6,3和5,那么C到达所有结点的最短路径是()。
A. ( 5,6,o,9,6,2 )B .( 11,6,0,3,5,8 )
C . ( 5,11,0,12,8,9 ) D . ( 11,8,0,7,4,9 )
易知:
C通过B:(11,6,14,18,12,8)
C通过D:(19,15,9,3,12,13)
C通过E:(12,11,8,14,5,9)
除了表示C到C的第三项为零,其他都去最小值,最终的答案为(11, 6, 0, 3, 5, 8),答案为B。
RIP是应用层协议使用UDP传送数据。一个RIP报文最多可包括25个路由表项,如超过,必须再用一个RIP报文传送。
PS:RIP协议好消息传的快,坏消息传的慢。即当网络出现故障时,要经过比较长的时间(例如数分钟)才能将此信息传送到所有的路由器,“慢收敛”。原理如下图所示:
开放最短路径优先OSPF协议:“开放”标明oSPF协议不是受某一家厂商控制,而是公开发表的;“最短路径优先”是因为使用了Dijkstra提出的最短路径算法SPF。
OSPF最主要的特征就是使用分布式的链路状态协议。
和谁交换信息?使用洪泛法向自治系统内所有路由器发送信息,即路由器通过输出端口向所有相邻的路由器发送信息,而每一个相邻路由器又再次将此信息发往其所有的相邻路由器。最终整个区域内所有路由器都得到了这个信息的一个副本。(类似于广播的形式)
交换什么?发送的信息就是与本路由器相邻的所有路由器的链路状态(本路由器和哪些路由器相邻,以及该链路的度量/代价――费用、距离、时延、带宽等)。
多久交换一次?只有当链路状态发生变化时,路由器才向所有路由器洪泛发送此信息。
最后,所有路由器都能建立一个链路状态数据库,即全网拓扑图。
1.每个路由器发现它的邻居结点 【HELLO问候分组】,并了解邻居节点的网络地址。
2.设置到它的每个邻居的 成本度量metric。
3.构造 【DD数据库描述分组】,向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息。
4.如果DD分组中的摘要自己都有,则邻站不做处理;如果有没有的或者是更新的,则发送 【LSR链路状态请求分组】 请求自己没有的和比自己更新的信息。
5.收到邻站的LSR分组后,发送 【LSU链路状态更新分组】 进行更新。
6.更新完毕后,邻站返回一个 【LSAck链路状态确认分组】 进行确认。
只要一个路由器的链路发生变化,就会进行第五六步:泛洪发送【LSU链路状态更新分组】进行更新。更新完毕后,邻站返回一个【LSAck链路状态确认分组】进行确认。
7.使用Dijkstra根据自己的链路状态数据库构造到其他节点间的最短路径。
为了使OSPF能够用于规模很大的网络,OSPF将一个自治系统再划分为若干个更小的范围,叫做区域。每一个区域都有一个32位的区域标识符(用点分十进制表示)。区域也不能太大,在一个区域内的路由器最好不超过200个。
其中的R3 P4 P7都叫区域交界路由器。处于两个区域交界。
R6叫自制系统边界路由器,他要连接到别的自制系统上。
区域内部的所有路由器就叫做区域内部路由器了。
这样虽然让自制系统拓扑结构更加复杂,但是能让每个区域内部交换路由信息的通信量大大减少。所以OSFP协议才应用于规模大的自治系统。
OSFP直接用IP数据报传输。考纲上对于OSFP协议的描述是网络层协议,但是也有人说他是传输层协议,这就仁者见仁智者见智了,但是考试可不敢不按考纲来。
1.每隔30min,要刷新一次数据库中的链路状态。
2.由于一个路由器的链路状态只涉及到与相邻路由器的连通状态,因而与整个互联网的规模并无直接关系。因此当互联网规模很大时,OSPF协议要比距离向量协议RIP好得多。
3.OSPF不存在坏消息传的慢的问题,它的收敛速度很快。
交换网络可达性的问题,即到达某个网络所要经过的一系列AS。
发生变化时更新有变化的部分。
BGP所交换的网络可达性的信息就是要到达某个网络所要经过的一系列AS,当BGP发言人互相交换了网络可达性的信息后,各BGP发言人就根据所采用的策略从收到的路由信息中找出到达各AS的较好路由。
为了防止一直兜圈子,自治系统是按照树形结构进行连接的。
BGP发言人交换路径向量:
自治系统AS2的 BGP发言人通知主干网AS1的BGP发言人:“要到达网络N1、N2、N3和N4可经过AS2。”
主干网还可发出通知:“要到达网络N5、N6和N7可沿路径(AS1, AS3)。”
一个BGP发言人与其他自治系统中的BGP发言人要交换路由信息,就要先建立TCP连接,即通过TCP传送,然后在此连接上交换BGP报文以建立BGP会话(session),利用BGP会话交换路由信息。
BGP是应用层协议,借助TCP传送。之所以使用TCP,是为了提供更加可靠的服务,同时简化路由选择协议。
BGP支持CIDR,因此BGP的路由表也就应当包括目的网络前缀、下一跳路由器,以及到达该目的网络所要经过的各个自治系统序列。
在BGP刚刚运行时,BGP的邻站是交换整个的 BGP路由表。但以后只需要在发生变化时更新有变化的部分。这样做对节省网络带宽和减少路由器的处理开销都有好处。
1.OPEN(打开)报文:用来与相邻的另一个BGP发言人建立关系,并认证发送方。
2.UPDATE(更新)报文:通告新路径或撤销原路径。
3.KEEPALIVE(保活)报文:在无UPDATE时,周期性证实邻站的连通性;也作为oPEN的确认。
4.NOTIFICATION(通知)报文:报告先前报文的差错;也被用于关闭连接。
RIP是一种分布式的基于距离向量的内部网关路由选择协议,通过广播UDP报文来交换路由信息。
OSPF是一个内部网关协议,要交换的信息量较大,应使报文的长度尽量短,所以不使用传输层协议(如UDP或TCP),而是直接采用IP。
BGP是一个外部网关协议,在不同的自治系统之间交换路由信息,由于网络环境复杂,需要保证可靠传输,所以采用TCP。
协议 | RIP | OSFP | BGP |
---|---|---|---|
类型 | 内部 | 内部 | 外部 |
路由算法 | 距离向量 | 链路状态 | 路径向量 |
传递协议 | UDP | IP | TCP |
路径选择 | 跳数最少 | 代价最低 | 较好,非最佳 |
交换节点 | 和本节点相邻的路由器 | 网络中所有的路由器 | 和本节点相邻的路由器 |
交换内容 | 当前本路由器知道的全部信息,即自己的路由表 | 与本路由器相邻的所有路由器的链路状态 | 若是首次,则为整个路由表,否则只是路由表中有变化的部分。 |
单播用于发送数据包到单个目的地,且每发送一份单播报文都使用一个单播IP地址作为目的地址。是一种点对点传输方式。
发送者和每一个接收者之间需要单独的数据信道。
广播是指发送数据包到同一广播域或子网内的所有设备的一种数据传输方式,是一种点对多点传输方式。(给一堆人,不管用户需求)
当网络中的某些用户需要特定数据时,组播数据发送者仅发送一次数据,借助组播路由协议为组播数据包建立组播分发树,被传递的数据到达距离用户端尽可能近的节点后才开始复制和分发,是一种点对多点传输方式。(这一堆人谁需要才给谁)
组播提高了数据传送效率。减少了主干网出现拥塞的可能性。组播组中的主机可以是在同一个物理网络,也可以来自不同的物理网络(如果有组播路由器的支持,组播路由器也就是可以支持组播协议的路由器)。
IP组播地址让源设备能够将分组发送给一组设备。属于多播组的设备将被分配一个组播组IP地址(一群共同需求主机的相同标识)。
组播地址范围为224.0.0.0~239.255.255.255(D类地址),一个D类地址表示一个组播组。只能用作分组的目标地址。源地址总是为单播地址。
① 组播数据报也是“尽最大努力交付”,不提供可靠交付,应用于UDP。
② 对组播数据报不产生lCMP差错报文。
③ 并非所有D类地址都可以当做组播地址。
同单播地址一样,组播IP地址也需要相应的组播MAc地址在本地网络中实际传送帧。组播MAC地址以十六进制值01-00-5E打头,余下的6个十六进制位是根据IP组播组地址的最后23位转换得到的。
TCP/IP协议使用的以太网多播地址的范围是:从01-00-5E-00-00-00到01-00-5E-7F-FF-FF .
IP地址中第五到九折五位不一样,其他都一样的D类地址,他们映射到mac地址时是一样的mac地址,有可能会被误判成同一个组播组。有可能你在看女主播,他在看男主播,你俩出现这种情况,你俩看见的都是不男不女的人妖主播。
因此,收到多播数据报的主机,还要在P层利用软件进行过滤,把不是本主机要接收的数据报丢弃。
IGMP协议(网际组管理协议)让路由器知道本局域网上是否有主机(的进程)参加或退出了某个组播组。
该协议可以避免组播数据报发送给R4,避免R1、R2发送给未参加组播的主机。
使用IGMP协议的路由器并不知道参加组播的路由器个数,也不会知道这些主机具体都是谁。只知道自己的辖区内到底有没有。
ICMP与IGMP都是网络层协议,并且都使用IP数据报传递报文。
① 某主机要加入组播组时,该主机向组播组的组播地址发送一个IGMP报文,声明自己要称为该组的成员。
② 本地组播路由器收到lGMIP报文后,要利用组播路由选择协议把这组成员关系发给因特网上的其他组播路由器。
③ 本地组播路由器周期性探询本地局域网上的主机,以便知道这些主机是否还是组播组的成员。
④ 只要有一个主机对某个组响应,那么组播路由器就认为这个组是活跃的;如果经过几次探询后没有一个主机响应,组播路由器就认为本网络上的没有此组播组的主机,因此就不再把这组的成员关系发给其他的组播路由器。
PS:组播路由器知道的成员关系只是所连接的局域网中有无组播组的成员。只要组播组中一个主机响应了,其他主机会通过监听得知已经有人替我们发言了,便不会继续吱声了,避免不必要的通信量。
组播路由选择协议目的是找出以源主机为根节点的组播转发树。树可以有效避免数据报兜在路由器堆堆里边兜圈子儿。
对不同的多播组对应于不同的多播转发树;同一个多播组,对不同的源点也会有不同的多播转发树。
① 链路状态路由算法
② 距离向量路由算法
③ 协议无关的组播(稀疏 / 密集):稀疏密集指的是组播组中主机离得近还是远。
移动IP不同于DHCP协议的地址分配。比如你在西安工作,因为工作原因要去曹县出差,但你却还能使用以前在西安的IP,进行一些删库跑路的事情,
移动Ip技术是移动结点(计算机/服务器等)以固定的网络IP地址,实现跨越不同网段的漫游功能,并保证了基于网络IP的网络权限在漫游过程中不发生任何改变。
移动节点:具有永久IP地址的移动设备。
归属代理(本地代理):一个移动结点拥有的就“居所”称为归属网络,在归属网络中代表移动节点执行移动管理功能的实体叫做归属代理。
外部代理(外地代理):在外部网络中帮助移动节点完成移动管理功能的实体称为外部代理。
永久地址(归属地址/主地址):移动站点在归属网络中的原始地址。
转交地址(归属地址/主地址):移动站点在归属网络中的原始地址。
① 在外部代理登记获得一个转交地址,离开时注销。
② 外地代理向本地代理登记转交地址。
① 本地代理截获数据报
② 本地代理再封装数据报,新的数据报目的地址是转交地址,发给外部代理(使用隧道技术,前面有讲过)。
③ 外部代理拆封数据报,发送给A。
A用自己的主地址作为数据报源地址,用B的IPp地址作为数据报的目的地址。
① 在新外部代理登记注册一个转交地址。
② 新外部代理给本地代理发送新的转交地址(覆盖旧的)。
③ 通信。
① A向本地代理注销转交地址。
② 按原始方式通信。
路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。
根据所选定的路由选择协议构造出路由表,同时经常或定期地和相邻路由器交换路由信息而不断地更新和维护路由表。
根据**转发表(路由表得来)**进行分组转发。
若收到RIP/OSPF分组等,则把分组送往路由选择处理机,而不进行输出;若收到数据分组,则查找转发表并输出。
若路由器处理分组的速率赶不上分组进入队列的速率,则队列的存储空间最终必定减少到零,这就使后面再进入队列的分组由于没有存储空间而只能被丢弃。
路由器中的输入或输出队列产生溢出是造成分组丢失的重要原因。
路由器:可以互联两个不同网络层协议的网段。
网桥:可以互联两个物理层和链路层不同的网段。
集线器:来什么我发什么,不能互联两个物理层不同的网段。
能否隔离冲突域 | 能否隔离广播域 | |
---|---|---|
物理层设备(中继器,集线器) | × | × |
链路层设备(网桥、交换机) | √ | × |
网络层设备(路由器) | √ | √ |
路由表根据路由选择算法得出的,主要用途是路由选择,总用软件来实现。它包括:目的网络IP地址、子网掩码、下一跳IP地址、接口,以及默认路由(不知道往哪发的时候默认往哪发)
转发表由路由表得来,可以用软件实现,也可以用特殊的硬件来实现。转发表必须包含完成转发功能所必需的信息,在转发表的每一行必须包含从要到达的目的网络到输出端口和某些MAC地址信息的映射。
(PS:该笔记所对应的学习资料b站链接:2019 王道考研 计算机网络)