python网站开发集成环境,网站关键字设置,源码时代,尤溪县建设局网站文章目录 一、网络功能概述二、SDN基本概念三、路由算法与路由协议概述四、IP数据报格式五、IP数据报分片六、IPv4地址七、网络地址转换NAT八、子网划分和子网掩码九、无分类编址CIDR十、ARP协议十一、DHCP协议十二、ICMP协议十三、IPv6十四、RIP协议与距离向量算法十五、OSPF协… 文章目录 一、网络功能概述二、SDN基本概念三、路由算法与路由协议概述四、IP数据报格式五、IP数据报分片六、IPv4地址七、网络地址转换NAT八、子网划分和子网掩码九、无分类编址CIDR十、ARP协议十一、DHCP协议十二、ICMP协议十三、IPv6十四、RIP协议与距离向量算法十五、OSPF协议与链路状态算法十六、BGP协议十七、IP组播十八、移动IP十九、网络层设备 一、网络功能概述 二、SDN基本概念 三、路由算法与路由协议概述 四、IP数据报格式 对于IP数据报分成了两部分一个是首部和数据部分。
数据部分就是运输层的传送单元有TCP段也有UDP段。这个首部也可以称之为IP数据报的头部需要注意的是在网络层这一章的IP数据报和分组不用做太细的区分。但我们要清楚它们仍有一定的区别对于一个IP数据报如果过大我们会给它进行一个分片分片下来的小单位就是网络层的传输单元“分组”
我们发送数据的时候是从首部开始然后逐个比特再去发送。这个首部我们又给它细分成了两个部分第一部分是固定部分第二部分叫可变部分。固定部分必须要有可变部分不一定需要。 下面我们看一下具体的首部有哪些字段。
固定部分长度固定是20字节1字节8比特1比特就是1位所以我们这里用位来对首部进行划分。 版本 版本字段是0-4也就是版本字段占4位。它是指使用ip协议版本的是ipv4还是ipv6。
首部长度 首部长度占4位也就是0000-1111可以表示16个数而首部长度的单位是4字节也就是说如果首部长度的数据是1111那么就是15*460字节的首部长度。
首部长度可以是0000吗这个是不行的因为固定部分是20字节我们用20字节除4字节单位长度20/45所以首部长度的数据最少要是5开始对应二进制是0101
填充 而当我们ip分组的首部长度不是4字节的整数倍时就没办法用首部长度表示了所以我们会有这样一个填充字段。
填充字段的意义就是把整个首部填充成4字节的整数倍这样首部长度才能对应的表示出来
这样后面的数据部分就会从4字节的整数倍开始。 我们常用的首部是20字节也就是只有固定部分没有可变部分首部长度的比特序列也就是0101也就是5
区分服务 区分服务是只期望获得哪种类型的服务比如我现在手里有一个数据报想把它优先发出去那我们就可以用区分服务来强调优先级。实际应用中很少用区分服务。
总长度 是指首部长度数据部分也就是整个ip数据报的长度。这里需要和首部长度做一个区分。
首部长度的单位是1B
总长度占16位也就是可以用16位二进制数表示那么总长度最大值216-1也就是65535再乘以1字节(一个单位)也就是65535B这是ip数据报长度的上限。但是实际生活中是不会达到这个上限的因为如果长度过大我们还需要对它进行分片来满足这个数据链路层的一个MTU最大数据传输单元的要求
标识、标志、片偏移 后面讲ip数据报分片着重讲这里先跳过
生存时间 生存时间(TTL)time to live它表示ip分组的保质期也就是ip分组在网络中的一个寿命它每经过一个路由器它的生存时间就会减一。如果最后这个生存时间变成0了这个数据报就会丢弃掉。
至于为什么要设置生存时间是为了防止无法交付的数据报无限制的在网络中兜圈子。 举个例子 我们某个主机要发送一个分组而发送过程要经过大大小小的网络再到达目的主机。 假设现在3个路由器R1 R2 R3 分组首先从R1转发到R2再到R3后面可能又到R1了这样其实就很消耗网络资源了。 协议 协议是指数据部分所用的协议也就是我们运输层传下来的报文段是什么样的协议。 具体来说有如下协议它们分别对应一定的字段值。我们着重记忆TCP和UDP两协议 我们简单记忆一下 TCP是面向连接的所以它非常”6“ UDP是不面向连接的对于不面向连接的传输数据比较容易被遗弃。因为如果不建立连接那么这个链路是不可靠的。因此这个数据经常会发生丢包的现象也就是被遗弃掉了。遗弃就是”17“。
首部检验和 它占的位数是16位顾名思义就是检验首部的字段为什么用”和“呢这个是因为检验首部使用的方法是二进制求和。
需要注意首部检验和只检验首部它不检验数据部分。之所以要有首部检验和是因为我们在数据传输过程中数据报每经过一个路由器路由器都需要重新计算一下首部检验和。因为一些字段比如生存时间、标志、片偏移都可能发生变化。所以我们要通过检验和来检验一些发生变化后数据报有没有出错。如果出错就把数据报丢弃掉如果没错就继续传输。
源地址、目的地址 它们的长度都是32位也就是我们现在常用的ipv4ipv4对应的ip地址长度就是32位。
可选字段 可选字段长度是可变的它的范围是0-40B是用来支持排错、测量的。
填充字段 这个是为了实现补全的功能是为了让ip数据报长度是4字节的整数倍。
五、IP数据报分片 在链路层上每一个数据帧都有一个可封装数据的上限这个上限就叫做最大传送单元mtu
对于以太网来说mtu就是1500字节。 ip分组也称之为ip数据报它分为首部和数据部分 ip数据报经过封装成为链路层的数据帧封装过程就是在分组前面加头分组后面加尾 中间部分是ip分组这个数据部分有一个最大要求这个最大要求就是mtu不能超过这个上限值以太网中数据帧的数据部分最大就是1500字节。
如果我们要传送的数据报长度超过了链路的mtu怎么办 我们的解决办法就是分片这种分片的解决办法前提是这个ip分组同意
有些ip分组不愿意分片但是不分片就无法往下传递了于是就会返回一个icmp的差错报文这个icmp后面再详细讲。
我们下面来学一下分片的方法。 分片就需要结合ip数据报首部中的”标识、标志、片偏移“来理解。 标识 标识是指同一数据报的分片只要是同一数据报的分片它都会使用相同的标识也就是说一个原始的数据报如果它的长度超过了mtu那么它就需要进行分片每分的一小片它都和原来的数据报使用同一个标识。
标志 标志字段占3位但是只有2位是有意义的 中间的位DF1表示不允许分片DF0表示允许分片 最后一位MF1表示后面还有分片MF0表示后面没有分片了。
片偏移 这个字段是告诉我们这个分片是在原先分组哪个位置上。 这个字段共占13位以8B为单位。 如果一个分片的片偏移数据为1那么这个分组在原先分组中相对位置就是1*8B 简单记忆单位1总8片首4
六、IPv4地址 整个大的互联网也就是因特网是非常单一的网络。ip地址其实就是在给这个网络中的每一台主机或者每一个主机的接口以及路由器的接口都赋予一个标识符使之能够标识这个主机的接口以及路由器的接口。这样我我们根据ip地址就可以很容易的在因特网中进行寻址了。
而由于世界上的设备非常的多如果每一个设备都有一个属于自己的ip地址我们怎么分配呢
分类的IP地址 第一阶段分类的ip地址就是把一个很大的ip地址空间进行一个划分分成几类。
子网的划分 第二阶段随着时代的发展我们所需分配的地址变多了这个分类的ip地址其实已经不太能满足人们的应用了所以对于ip地址的改进就出现了子网的划分。
构成超网 第三阶段就是构成超网也就是CIDR技术这是目前比较新的技术是一种无分类的编址方法。
子网划分和构成超网我们后面会详细解释这里先学习分类的ip地址 身份证可以唯一标识一个人ip地址也可以唯一标识一个主机或者路由器。 IP地址前8位是网络号后24位是主机号这种32位机器是可以识别的。 但是为了方便人们操作我们写成了点分十进制我们把每一个字节8位写成十进制数中间用点分割开就可以了。我们做题中也是用的点分十进制。 上图中总共有6个网络但只有2种类型的网络。 上图粉色部分是一种网络它们都是路由器的一个接口连接的主机以及链路层设备网桥所构成的局域网所以都叫做一个网络。
比如最左边的一个网络我们可以用222.1.3.0表示主机号全0剩下网络号不变这就标识着这样一整个局域网。我们这里称之为LAN1。
最右边一个网络它有一个网桥网桥是不能够分割广播域的所以用网桥(链路层设备)连接起来的网段仍然是一个局域网而且也只能有一个网络号所以这个LAN3所对应的网络号就是222.1.2.0只要是属于LAN3范围的主机和设备它们的ip地址网络号都是222.1.2剩下的主机号位置各部相同。
再来看剩下的几个路由器每个路由器都有三个端口看路由器出去几条线 七、网络地址转换NAT 路由器对私有IP地址不会进行转发也就是说私有IP地址在外网/因特网中是无效的。
那这种私有IP地址能否和外网中的主机进行通信呢这个是可以的也就是我们本节要讲的网络地址转换NAT技术。
NAT技术也很简单只需要在专用网和因特网之间的路由器上装一个NAT的软件然后这个路由器就会变成NAT路由器 这种路由器至少有一个有效的外部全球IP地址也可以有多个 所有使用本地地址的主机在和外界进行通信的时候都需要经历这样一个NAT路由器的地址转换就可以实现和外部主机的通信。
专用网内的主机要把自己的数据发出去就需要用路由器上的全球IP地址做一个伪装 外网的其他主机要给这个专用网上的主机发送数据目的地址也是填的路由器的地址。然后路由器再把数据分发给具体的主机。
这个网络地址转换的实现的一个关键就是NAT路由器它有一个NAT的转换表。 这个转化表主要分为两列广域网端、局域网端外网端、本地网端 每份信息都包含两个部分一个是我们常用的点分十进制的ip地址另一个就是端口号 比如172.38.1.5:40001这个172.38.1.5是ip地址40001是端口号 ps端口号是传输层会学到的它可以唯一标识主机中的某一个具体进程
下面来看一下A给B发送信息具体流程 A在网络层这里会封装上源IP地址和目的IP地址 到了传输层会进一步封装加上端口号假设我们设它的端口号是30000
这个数据报到了NAT路由器本地网的代表就需要实现了一个网络地址转换了 怎么进行转换其实就是把源ip地址和端口号两个字段替换一下替换就按照转化表中对应外网中所用的ip地址。也就是把源ip替换成路由器的ip地址端口号替换成40001 转换后的数据报就可以在因特网中被路由器及主机识别与转发 这样的数据报到了B端B端也可以正确接收。
再看一个例子B主机要给C主机发送数据它会先准备好一个数据报贴上源地址和目的地址。源地址就是B主机的IP地址目的地址就是NAT路由器的地址本例中是172.38.1.5 然后再到传输层上封装上端口号假设我们这里端口号是40002 这种数据报就可以在网络上转发了现在它经过因特网传到了NAT路由器那这个NAT路由器就要把这个数据报查看一下再把地址转换一下才能分发给本地网络的某台主机。
根据转发表中的178.38.1.5:40002它知道要转发给本地的192.168.0.4:30001 转换后的数据报就可以传给本地网的C主机了。 八、子网划分和子网掩码 分类IP地址有如下的缺点 1.IP地址空间的利用率有时很低 比如A类地址A类地址网络号占1个字节主机号占3个字节。A类中的每一个网络可以分配的主机个数至少有1000w个然而有的网络会对连接在网络上的计算机数目有一定的限制那根本是不可能达到1000w个这么多的。这样就造成了资源的浪费。
2.两级IP地址不够灵活 比如说有个单位他可能需要在一个新的地点马上开通一个新的网络但是在申请一个新的IP地址之前他需要跟这个ISP因特网服务供应商申请一系列的IP地址这样操作就不够灵活了。
那有没有办法可以随时随地的灵活的增加我们单位的网络而不是事先去找ISP去申请一些新的网络号。这个方法就是我们本节要讲的子网划分。 子网划分就是把原先的主机号较高部分拿出来作为子网号剩下的部分再作为一个主机号。
子网划分的规则比如要不要划分子网、怎么划分子网都是可以自己决定的。 需要注意的是如果划分了子网后对外仍然会表现成一个网络而表现的网络号是原先的网络号。简言之本单位外的网络是看不见子网的。
子网号可以一位也没有除了网络号全是主机号子网号最多是留两位给主机号。 IP地址必须是有意义的一定要分配给主机的某个接口或者路由器的某个接口。因为如果主机号只剩下1位了1位要么是0要么是1。而我们之前讲过全0或全1这种特殊的IP地址是不能被指派的。 ps全0是指本网络全1是广播分组。
下面看子网划分的具体例子 现在某单位申请到了B类IP地址。 上图的路由器相当于是单位的保卫处任何一个想要进入这个单位的数据报/IP分组都需要经过这个路由器才能够进入到这个单位的各个主机中。
现假设路由器连接的网络地址是145.13.0.0
也就是说所有能到达上图这样一个网络的分组都会经过这个路由器再转发到这个单位的各个主机中。也就是说只要有一个数据报它的目的地址是145.13.xx.xx只要是这样的数据报它都会经过这个路由器。
而进入单位中后可以看到下图这个单位是划分了三个子网。我们这里假定子网号占8位主机号也占8位。即使划分了子网这个路由器所连接的网络对外展示的仍然是一个网络。因为外面不知道这个单位内部进行了怎么样的子网划分只知道是145.13.0.0这样一个网络。
现在假定有一个数据报它的目的IP地址是145.13.3.10也就是它想发给下图红色圈圈出来的主机。 但它作为外部世界过来的IP分组它只知道我应该传给这个路由器但是怎么传给接下来的主机呢这就涉及子网掩码了。
首先是刚才那个数据报表示成二级IP地址是下图这样。橙色表示网络号蓝色表示主机号。
二级IP地址会有一个它对应的子网掩码可以看到这个子网掩码还是很简单的网络号就是全1主机号就是全0。用点分十进制表示就是子网掩码255.255.0.0也就是说子网掩码是由一系列连续的1和0构成的。
1的个数取决于网络号的个数网络号有多少位1就有多少位。剩下的主机号自然对应的就是0的位数。
如果要使得一个外部世界的IP分组进入都本单位的一个子网的某一台主机内就需要那个路由器实现一个识别的功能。它需要从收到的IP分组中提取这个目的IP地址进而根据这个目的IP地址判断应该发给本单位的哪一个子网然后再发送给那个子网。
因此就会把这个分组再写成一个三级IP地址的形式这里就要把子网号提出来了。 这个三级IP地址它的子网掩码就是算上了子网号剩下的主机位数才是对应全0的位数 不管是二级还是三级IP地址你就记住主机全0其他部分都是1
那知道了子网掩码怎么知道数据报是要分给哪个子网?这里就需要进行一个与的运算用子网掩码与IP地址逐位相与就得到了子网网络地址。 按上图的例子也就是把145.13.3.10和三级IP地址的子网掩码相与。 ps与运算全1为1遇0为0其实就是这个 相与后就得到了所需的子网网络地址。
下面看一下具体的例题
现在已知主机IP地址也知道它所配置的子网掩码怎么知道网络地址 这个很简单只需要用IP地址和子网掩码相与。
这个相与的过程并不需要把所有的位都写出来我们只需要看子网掩码的第三个地方。因为前面都是1相与出来肯定还是原先的141.14。而子网掩码的最后一个全是0相与出来肯定全是0所以只需要看第三位怎么样即可。
72对应的二进制数是 01001000
192对应的二进制是是 11000000
相与结果 01000000
相与结果对应的十进制就是64因此我们对应的网络地址就是141.14.64.0
下面是二进制和十进制一些常见的对应大家可以简单记一下 广播分组就是广播地址它提示我们目的地址一定是一个广播地址。广播地址的特点就是主机号全1。这样我们就可以排除A选项。下面我们进行详细判断首先子网掩码的第三个自字节是252它对应的二进制数是1111 1100。我们根据子网掩码就可以判断出来前面22位都是1255.255.252前面一共是886个1还有2个0然后剩下的10位是主机号 主机号全0剩下的全1。已经知道全1的有22位那剩下的32-2210是主机号的位数。
上图中IP地址的第三个字节77对应二进制0100 1101如果我们是需要向该主机所在子网内发送一个广播分组那就需要看这个IP地址中子网号的部分我们根据这个子网掩码知道了子网号是占6位B类网络的网络号是16位这里网络号是22位说明有6位子网
所以我们取77二进制数的前6位0100 11然后子网号后面都是主机号了 还原一下是0100 1100后面补的两位0是属于后面主机号的0转换成十进制是76
也就是180.80.76这个就是这个主机所在的子网号
而我们所需的目的地址也就是题目中要的广播分组那就是把主机号全改成1即可 是22位网络号也就是该子网的网络号不变把后面的全改成1 也就是变成了180.80.79.255 九、无分类编址CIDR 1992年的时候B类地址很快就分配完毕了因为B类地址是用2字节作为网络号2字节作为主机号。相对A类和C类B类这种居中的划分方式是性价比最高的。
除此之外路由表当中的这个表项它是在急剧增长的。因为网络的普及越来越多的设备加入到互联网中所以每一个路由表里面的项目从原来的几千个增长到后面的几万个。对于一个很庞大的路由表来说这是很难维护的。
于是人们就发明出一种无分类的编址形式CIDR就是在子网这个概念的启发之下把整个网络号和子网号合并在一起称之为网络前缀再次回到了二级IP地址的形式。虽然看起来似乎回到了起点但是它和之前的网络号、主机号是不一样的。这个网络前缀的位数是可变长的。所以它可以很灵活的调整网络号的长度自然就调整了主机号的长度所以CIDR这种形式现在也被广泛的使用起来了。 那当我们又回到了这种IP地址如何表示它的网络前缀呢只需要在IP地址后加一个斜杠/比如128.14.32.0/20
对于网络前缀都相同的我们会给它起一个名字叫做CIDR地址块 取20位作为前缀那我们就把前20位进行一个标粗那剩下的12位就是主机号。 那我们就可以根据这样一个地址形式来判断它所在的CIDR地址块里面最小地址和最大地址分别是什么其实也就是把剩下的主机号换成全0或者全1 这个地址块就是128.14.32.0/20,也就是主机号全0表示本网络这个网络就是CIDR地址块。 我们也可以称之为/20地址块
虽然无分类编址消除了划分子网的概念但它还是会沿用子网的一些名词这里有一个地址掩码的概念也可以称之为CIDR里面的子网掩码。它和之前学过的子网掩码一样都是由m个1在后面接上n个0表示。1所在的位就是网络号所在的位置剩下的0表示的是主机号的位置。
对于/20地址块其实就是下图这样一种子网掩码的表示形式也就是网络前缀有多少位子网掩码的1就有多少位。
来看一个例题加深一下理解 对于上面这个地址我们可以看到它用的是无分类编址的表示形式 /27表示有27位网络前缀也就是说网络号占27位主机号占32-275位
问题1这个地址块包含多少个ip地址 答25个
问题2地址块的最小/最大地址 答最小地址就是令主机号全0最大地址就是令主机号全1 因为这里网络号占27位那192.199.170.82的前3个数都可以不看 就看82转换成二进制是01010010 前3位还是网络号后面5位是主机号 把主机号全换成0或者1即为所求。
问题3CIDR地址块是多少 答也就是把主机号全0表示本网络其实就是问题2求的最小地址。
问题4这个地址所在的CIDR地址块它的子网掩码或者地址掩码是多少 答即网络号27位全1剩下5位主机号全1这就是子网掩码。 构成超网这是指将多个子网聚合成一个较大的子网叫构成超网也可以称为路由聚合、地址聚合
上图有一个路由器r1和r2相连r2有多个端口。其中一个端口连着网络1另一个连着网络2。 那么r1这个路由器就要维护一个路由表这个路由表里面所包含的主要信息就是包括目的网络以及要传到这个目的网络要走哪个接口。 我们r1到r2和r2到r1都是走一条路它们就都会记录一个接口a。
如果后面连的网络增加下面的路由表也会继续往下进行填充如果这个路由表的表项疯狂增长的话其实路由器是不好维护的。
因此我们在CIDR这里会提供一个路由聚合的方式。具体的方法就是把网络前缀缩短以达到下图这样的效果。
最后这个r1的路由表就可以把相同接口的合并到一起形成一个新的网络。这个网络如何来求其实就是将所有网络的地址取交集。
首先这个网络的网络前缀都相同都占了17位。那这两个网络的前两个字节肯定是相同的 所以这里我们只需要看最关键的第三个字节一个是0一个是128
0转换成二进制就是 0000 0000
128转换成二进制就是1000 0000如何求合体后的聚合网络只需要将这两个网络的网络地址取交集那这两个网络的前16位都是一样的但是17位就不一样了。那我们只能取前16位做它们的合体网络 也就是206.1.0.0/16 我们求的是网络地址网络地址是网络号前16位不变令后面主机号全0。
下面是构成超网的一个例题 某路由表中有转发接口相同的四条路由表项也就是说对于这四条路他们在这个路由器里面都会走相同的一个转发接口因此就可以把这四个路由进行聚合其目的网络地址分别就是上面问题中几个。现在要我们求聚合后的目的网络地址。
首先把四个网络地址写下来可以发现它们都是21位的网络前缀也就是除了前面这两个字节第三个字节又占用了5位作为网络号。剩下的32-2111位作为主机号。 记下来我们就把关键的第三个字节形成二进制
可以看到第三个字节前3位是一样的后面就不同了。所以我们取交集就取到第三字节的第3位即可。 所以我们的前缀位数88319位所以排除BD选项 而四个地址合并之后19位后的应该是主机号全0 也就是聚合后的目的网络地址第三个字节是001 00000 转换成十进制是32 所以答案选C 来看一个例题 我们只需要用一个目的地址和这几个网络的掩码按位相与然后看是否匹配。如果匹配成功再来看所有成功的这些目的网络里面谁的网络前缀最长就选那个路由器。
ps图中全0的目的网络是默认路由也可以称之为默认网关什么时候可以用到它就是在所有的路由表的目的网络中没有任何一个目的网络是和我这个分组的地址相匹配那这个时候就需要走默认路由。默认路由接下来会交付给另一个路由器进行同样的一个过程。
下面我们来详细算一下 进入R0的分组的目的地址132.19.237.5
对于132.0.0.0/8这个目的网络它的子网掩码是前8位为1后24位为0 然后子网掩码和这个目的地址按位相与根据这样一个子网掩码的形式我们可以直接得到他们两的匹配结果是132.0.0.0/8这个是匹配的
再看132.0.0.0/11它作为网络前缀子网掩码是前11位1后21位0 然后子网掩码和这个目的地址按位相与
子网掩码第二个字节是 1110 0000
目的地址第二个字节19转换成二进制是0001 0011
相与结果是 0000 0000转换成十进制是0所以第二个字节还是132.0.0.0/11也是匹配成功的
接下来看第三个目的网络132.19.232.0/22它的网络前缀是22位所以它的子网掩码前22位是1后面的32-2210位是0 也就是第一二个字节全1第三个字节前6位是1后2位是0
子网掩码第三个字节是 1111 1100
目的地址第三个字节237转换成二进制是1110 1101
相与结果是 1110 1100转换成十进制是236匹配结果就是132.19.236.0/22这个匹配结果和目的网络是不匹配的。
综上我们是在132.0.0.0/8和132.0.0.0/11两个匹配结果中选一个而我们是符合最长前缀匹配规则所以我们选择132.0.0.0/11
十、ARP协议
发送数据的时候需要经历一个对数据的封装和解封装的过程但是具体封装什么内容则需要根据我们不同层次的一个协议规定。
比如说我们在网络层要加头在链路层要加头加尾。 这两个头里面最重要的就是加了ip地址和mac地址。也就是逻辑地址和物理地址。
本节主要是把发送过程的一些具体细节讲清楚。
现在1号主机要发送数据它发送数据就需要对数据进行封装就需要经历五层结构。在应用层如果主机1要发送数据给主机3主机1和主机3在一个网段内
在传输层就会把一个大报文分段形成报文段也就是传输层的传输单元。 这里是否需要分段需要根据应用层数据大小决定。 接下来到网络层网络层就拿其中一个报文段来看比如这里选择了1号报文段 会对1号报文段进行封装加上ip地址一个是源主机ip地址另一个是目的主机ip地址。
这里的ip1是源主机填入的ip3是怎么获得的呢这个是传输层讲的内容根据dns我们可以把ip3填入。网络层就实现了这样一个封装也就是从报文段形成了一个ip数据报也可称为分组分组通常是指我们数据报分片后的结果。
至于为什么要分片因为我们要传输的链路它的链路层协议要求的最大传输单元有一个MTU要根据这个MTU来决定我们要不要在网络层进行分片。假设这里就不分片了就构成一个IP数据报。
接下来到链路层封装这里的封装就是加上mac地址这个mac地址除了源mac地址也就是mac1之外还需要加入一个目的mac地址。也就是这个3号主机的mac地址。
但我们现在是不知道mac3的怎么把mac3填入这就涉及本节所讲的ARP协议
首先对于每一个主机以及每一个路由器它都有这样一个ARP高速缓存你可以想象成一个小的仓库这个仓库里存的是ip地址和mac地址的映射。也就是某个ip地址它对应的mac地址应该是什么。
当然这个高速缓存所存的所有的表项都是一个局域网内部的。 比如说2号主机ip地址和mac地址映射3号主机ip地址和mac地址映射以及左边这个路由器的左边的端口ip地址和mac地址的映射。 假设我们现在查询自己的这个仓库发现1号主机的高速缓存中有一个表项上面写着3号主机的ip地址及对应的mac地址那我们就可以很容易的把3号的mac地址填入然后实现一个封装加头加尾这里的尾部通常是FCS帧检验序列。 但是假如这个ARP高速缓存中并没有发现3号主机的ip地址及它的这个mac地址的映射那我们就没办法一下子填上mac3 我们还是要使用这个ARP协议首先是广播一个ARP分组请求也就是这个一号主机它要发送的这样一个数据帧数据帧的主要部分如下
第一个部分是它自己的ip地址第二个是它要查询的mac地址对应的主机ip地址第三个是它字节的mac地址第四个则是目的物理地址。
这里的物理目的地址填的是全F也就是全1代表这个局域网内一个有广播效果的帧。也就是这个分组从1号主机发出来之后经过集线器再到交换机这里交换机发现是广播分组则会把这个分组从交换机的所有端口转发出去。 经过交换机转发连在交换机上的所有主机都会收到但是只有3号才会响应因为ARP请求分组第二个参数是IP3。
然后3号主机会返回一个响应分组这个分组是只从3号到1号而不会转发给其他端口。这个响应分组包括ip地址和物理地址它会告诉1号主机3号主机的ip地址和对应的mac地址是多少。也就是把这个映射返回给1号主机。
后面1号主机收到这个响应分组就知道了mac3应该填多少 下面就是封装加一个帧检验序列加上FCS之后就构成了一个传输单元也就是一个数据帧然后就可以放物理层上传输了。 因此这样一个文件或者这个主机要发送的数据就经过网络层封装ip地址到链路层封装mac地址然后再形成比特流的形式或者信号的形式在链路上传输。
上述情况是针对源主机和目的主机是在一个网络内的如果不在一个网络内怎么办
答案还是使用ARP协议只不过mac地址获取方式和前面也有所差别了。 比如现在1号主机要和5号主机进行通信。
主机1要发送文件先是经过传输层分成报文段再到网络层对每一个报文段进行封装加上ip地址源ip地址是ip1目的ip地址是ip5 接下来到链路层封装首先要装上原来的物理地址mac1mac1就是自己的这个主机的mac地址然后还应装目的主机的mac地址。
我们还是要先看一下在ARP高速缓存中有没有ip5以及它的mac地址 但5号主机的ip地址和mac地址肯定是没有的因为我们知道ARP高速缓存它内部存储的都是这一个局域网内的ip地址和mac地址映射他肯定查不到这个5号主机的。
那1号主机就会先用自己的子网掩码和这个目的ip地址相与一下看是不是在字节的这个网段内后面发现不在一个网段内就需要查询默认网关的mac地址
ps这个默认网关其实就是左边这个路由器也就是左边这个网段和外界沟通的路由器。这个路由器是局域网连入因特网的关口所以我们叫它网关每一个主机都知道字节的默认网关是谁。
因此这个1号主机发现自己的目的主机不是和自己在一个网段它寄希望默认网关。所以这里的目的地址会填上默认网关的地址。下一跳就是默认网关。
假设我们左边这个路由器左边端口是mac6 怎么得到这个mac6还是先发送一个ARP请求分组依旧是广播的形式。 所有的设备接受到这个分组之后只有左边这个路由器会响应这样一个请求。 然后返回一个ARP响应分组
然后1号主机收到mac6进行封装加上尾部帧检验序列FCS然后就可以放到物理层上传输了。 然后假设这个数据在链路上传输到了路由器这里然后路由器会对这个数据进行一个解封装和封装。解封装就是最高到网络层因为路由器是一个三层设备解到网络层后再封装加ip地址ip1和ip5是不变但是物理地址要变了因为这里数据到了一个新的网络内。源mac地址和目的mac地址应该由连路由器的mac7到下一个路由器的mac8 然后过程和前面类似两个ip地址至始至终都不变只变mac地址。
这里mac5获取方法还是和以前一样这个路由器向它网络内所有主机发送一个广播的ARP请求分组然后如果有对应的主机那就会回复一个单播ARP响应分组。然后就知道了mac5。 十一、DHCP协议
我们主机在通信的时候一定要具备一个ip地址那主机如何获得ip地址呢
主要有两种方法静态配置和动态配置。
静态配置 主要配置ip地址、子网掩码、默认网关 默认网关其实是算作这样一个局域网内所有主机和外界交流的关口通常是指一个路由器的一个接口的ip地址。
动态配置 每个教室它都可能是一个网段对于每一个网段内其实都会有几台DHCP服务器、交换机、主机。。。
因为我们在教学楼里面我们的手机和电脑这种不是长时间固定在一个位置的。所以我们就需要给这种移动设备动态的分配一个ip地址这个就是DHCP服务器分配的。 如果某台主机离开了作用范围刚才给它分配的ip地址就会收回了。 十二、ICMP协议
ICMP协议是在网络层和传输层之间的协议所以这个ICMP协议是起到一个桥梁的作用它的作用就是为了更有效的转发ip数据报和提高交付成功的机会。
通信的过程中总会有一些分组会出错。对于出错的分组我们在网络层的处理就是把它丢弃掉丢弃完之后还需要发送一个ICMP差错报告报文。 下面我们来看一些ICMP报文的一个结构 ICMP报文是装在IP数据报的数据部分ICMP协议是网络层的协议它作为数据部分再加上IP数据报的首部就形成了一个数据报就可以发出去了。
ICMP报文具体如下 首先是1个字节的类型、1一个字节的代码、2个字节的校验和 然后4字节是取决于ICMP报文的类型 再往下是数据部分它的长度也是取决与ICMP报文的类型。
ICMP报文主要有两种类型 ps组播是一点到多点广播是一点到所有点注意区分。 十三、IPv6 随着时代的发展IPv4的地址很快就被耗尽了尽管后面出了CIDR和NAT技术但是也治标不治本。
于是就出现了新的方法也就是IPv6这个可以根本上解决地址耗尽的问题。因为IPv6是从地址的位数上来扩充长度的该方法是解决地址耗尽的根本方法。
举个例子我在上海买个房子这房子非常小md为了尽可能利用空间只能在墙上放一些小格子然后在小格子里面填满东西。这就类似CIDR和NAT技术它只是在原来地址长度的基础上对地址进一步划分。而IPv6这种方法就像是我直接买了个超大号的别墅再也不用拘束了
另外由于IPv4它首部除了固定部分之外还有一定可变部分并且那固定部分20字节占的字段多了所以也需要改进一下首部格式使得这个字段变得少一些。这样还能加快路由器的处理效率。
简言之需要改进首部格式来实现一个快速处理和转发数据报的功能另外就是要支持QoS
psQoS就是服务质量
下面看一下IPv6数据报的格式 IPv6数据报包括两个部分一个是基本首部另一个是有效载荷
有效载荷又包括两部分一个是选项部分它里面是各种扩展的首部另一个就是数据部分。就相当于我们把IPv4中的可变部分挪到了这个有效载荷中。
所以这里IPv6的基本首部就是固定的40字节这些扩展首部其实就是对于这个数据报有一些新的要求比如说这个数据报要增加某些功能就放到这个扩展首部中来实现。
所以IPv6这种数据报格式因为它有了扩展首部的部分所以使得原来的IPv4首部中一些不必要的部分就可以先不用了如果需要用的话就直接把它放到扩展首部中就可以了。
下面是IPV6数据报的格式基本首部占固定40字节有效载荷是不固定的它包括可扩展首部和数据部分
扩展首部是可有可无的根据我们的数据报的具体要求看他要不要提供其他服务如果需要就在扩展首部这里填充。
版本 这个和IPv4数据报的版本是一样的都是指明了这个协议的版本 IPv6协议版本字段就是6
优先级 这个其实就是在区分数据报的类别以及声明这个数据报的优先级是否要对这个数据报进行优先处理就是要看这个优先级怎么规定。
流标签 “流”是指互联网络上从特点源点到特定终点的一系列数据报所有属于同一个流的数据报都有同样的流标签。
就比如A主机要给B主机发送一系列的数据报这一系列的数据报都像是一组的数据报所以我们就可以称之为一个流的。一个流中的所有数据报它们的流标签都是一样的。
这有点类似我们IPv4中的标识位IPv4中的标识位是指对这个数据报分片之后每一个数据报它的所有分片都具有同一个标识位。
有效载荷长度 顾名思义就是有效载荷部分长度有多少位。 这里要和IPv4区分IPv4标识长度有两个字段一个叫做首部长度字段另一个叫做总长度字段。首部长度字段是指首部的大小总长度则是首部数据部分大小。
这里的有效载荷长度是指扩展首部加数据部分大小。
下一个首部 下一个首部标识的是下一个扩展首部或者上层的协议首部
假如我们现在有一个数据报这个数据报除了基本首部40字节之外它还有3个扩展首部假设为扩展首部1、扩展首部2、扩展首部3然后就是数据部分。 对于这3个扩展首部它们都有一个字段也就是下一个首部字段。
基本首部也有下一个首部字段基本首部的下一个首部字段就是扩展首部1 扩展首部1的下一个首部字段就是扩展首部2 。。。 扩展首部3的下一个首部字段就是数据部分。
跳数限制 跳数限制相当于IPv4中的TTL也就是生存时间。 如果跳数限制变成了0路由器就会把这个数据报丢弃并且会返回一个icmp差错报告报文。
源地址和目的地址 IPv6源地址和目的地址位数都是128位在IPv4中它的源地址和目的地址都是32位。可见IPv6在地址上进行了非常大的扩充基本上地球上每个沙子都能分配到ip地址。只能说一句nb 红色和粗体部分要记住其他的了解即可。
我们知道IPv6的地址非常多一共128位16个字节如果还用点分十进制那这个地址就会非常长了。所以我们这里有一个新的表达形式
一般形式冒号十六进制记法
每4位我们用一个16进制数表示每4个16进制数为1组一共8组。
压缩形式 就是遇到前面有0的时候把多余的0删了就行保证每组最少一个数字 任播是IPv6独有的一种地址它的实质还是1对1但表现形式是1对多的一个通信。所以它也只能做目的地址
举个例子 假设某台主机的ip数据报中封装的目的地址是一个任播地址它就会给这个任播组内的一台主机发送数据报这一台主机通常是离他最近的那台。
十四、RIP协议与距离向量算法 在比较小的网络中通常是使用RIP协议。
RIP协议它要求网络中每一个路由器都维护从他自己到其他每一个目的网络的唯一最佳距离记录。
每个路由器都有一个路由表这个路由表里的表项其实就是他自己到其他的目的网络的距离记录。这个有一个要求距离不是任意距离而是最佳距离也就是最短路由经过路由器跳数最短的。这样的路径选择方式就是最佳距离所以称之为距离向量就是因为它维护的是一个路由表路由表有很多的表项很多表项组在一起就像是一组距离。 路由器的路由表主要有3列目的网络、距离、下一跳路由器 根据这个路由表就可以说明这个路由器它到某一个目的网络最短距离以及要走这样的距离下一跳应该交给哪个路由器。
这里有一个直接交付直接交付是指这个路由器和目的网络是直接相连的。 如果是间接相连就需要先交给其他路由器了。 十五、OSPF协议与链路状态算法 自治系统划分区域之后他分为了两个主要的区域一个叫主干区另一个就是普通的区域。
主干区的标识符规定是全0的它的作用是来连通其他的下层区域。
关于区域划分这块还需要掌握几个非常重要的路由 主干区域中的路由又称位主干路由器包括R5、R6也包括R3、R4、R7 因为R3、R4、R7在连接两个区域的边缘上它既可以叫做主干路由器也可以叫做区域边界路由器。
第三种路由器叫做自治系统边界路由器因为在主干路由器中有一个路由器它需要连接到其他的自治系统AS中所以这个路由器叫做自治系统边界路由器。
第四种路由器是区域内部路由器就是在普通的下层区域内部的所有路由器都是区域内部路由器。
采用这种分层次划分区域的办法虽然使得交换信息的种类增多了同时也使得OSPF协议更加复杂。但是这样做可以使每个区域内部交换路由信息的通信量大大的减少。因而OSPF协议就可以使用于规模较大的自治系统了。 十六、BGP协议 十七、IP组播 广播会给整个局域网的所有主机发送数据报不管对方主机想不想要这个 就像一个男的不分青红皂白给所有女的表白不管对方有没有男朋友。
组播也是发给很多的主机但是相比广播不同的是组播只会给有相同需求的主机发送一个数据报。而且它并不会在发送端就复制它会直到要到下一个路由器才会把数据报进行一个复制然后分发给这个网络中的组播组的主机。
组播就像一个男的向多个女生表白但是他只找没有男朋友的女生。 单播的方式每一个待接收的主机都要和发送站点建立一个单播之间的连接。因此在原站点这里它就需要根据有多少个人要接收我的数据他就复制多少份。比如现在有90个主机要接收数据它就需要复制90份IP数据报然后再分发到各个主机中。
可以看到在实际传输时占用的带宽和资源是很多的。就是因为在发送者和每一个接收者之间都需要单独的数据信道。 组播可以提高数据传输速率减少主干网中出现拥塞的可能性。也就是这个源站点发送方它不需要事先复制很多份数据报就一份数据报传输过去到路由器的时候再复制几份具体复制几份取决于路由器下面有几条链路。复制之后每一个链路上还是只有一个数据报这个局域网中的主机只要还是属于这同一个组播组的就可以收到这样一个组播的数据报。
组播组中的主机可以是在同一个物理网络中也可以在一个局域网内。当然也可以在不同的物理网络中这个时候就需要有组播路由器的支持。组播路由器是指可以运行组播协议的路由器这一类路由器既可以运行组播协议也可以运行单播协议。
比如下图中红色圈的主机它们也可以是同一个组播组这样如果要发送数据给这个组播组的数据报就要走R2、R3、R4的路由器再分发给这个组播组当中的成员主机。
现在就有一个问题在发送的时候怎么找到对应的主机呢或者我们怎么知道某些主机是不是一个组播组的呢这就涉及下面要讲的IP组播地址了。 我们知道因特网在进行通信的时候每一个主机都需要有一个全球唯一的IP地址如果某个主机现在想要接收某个特定的多播组的分组。怎么才能使这个多播数据报传送到这个主机中呢
显然这个组播数据报它的目的地址一定不能写这个主机他自己的IP地址因为如果这样写的话只能发给这个主机其他的同属一个组播组中的主机是收不到这个数据报的因此就需要有一个新的地址比如这个主机中再产生一个新地址来接收这个组播的数据报。
当然其他属于这个组播组中的主机就可以有这样一个IP组播地址然后接收到发送给它们所在的组播组的数据报。
因此IP组播地址就是让原设备能够将分组发送给一组设备。属于同一个多播组组播组当中的设备都会被分配一个组播组的IP地址也就是很多主机他们都会有一个组播地址如果他们是一个组播组的话那他们的组播地址是一样的。
但是这个组播地址并不是任何一个主机生来就有的如果这个主机要实现接收组播数据报的功能比如说我现在要看直播或者我要加入一些视频会议那我这个手机就有一个组播IP地址了。
组播地址只能作为分组的目标地址 举个例子现在我们看直播某个主播是被多人看的。相当于组播是源站它把这个信息通过组播的方式发给这些主机因为这些主机他是属于一个组播组的。但是反过来就不可以了如果你一个人同时看多个直播那画面一定是很混乱的。
IP组播的一个典型过程如下图所示我们可以看到图主要是分成了两个部分。 一个是因特网范围内的组播另一个是硬件组播
这其实就是对IP组播的进行一个分类一种是只能在本局域网内进行的硬件组播另一种是因特网范围内也就是还没有进入到局域网的这个范围的因特网范围内组播。 硬件组播是很简单也很重要的因为现在大部分主机都是通过连在局域网然后再连入因特网下面就来看一下关于硬件组播的相关问题。 硬件组播其实就是在局域网范围内对于一个组播的数据报我们应该怎么样给这些主机或者给哪些主机。
这里就可以结合我们前面学的单播。比如说现在发了一个单播数据报它进入局域网后应该交付给哪个主机那就要看这个主机的MAC地址了。
同样在硬件组播这里也是要根据MAC地址来找到可以接收组播数据报的主机。
在组播这里也有一种MAC地址的标识就是01-00-5E只要这个MAC地址是这个打头的它一定是一个组播MAC地址。那就要做好准备要发给这个局域网中的一部分主机了具体发给哪些主机要看剩下部分。
把01-00-5E转换成16位前面都是固定的这些用它们表示多播。后面1位0是最高位也是固定好的正数的意思 那么最低位就剩下了23位这23位其实也就决定了这样一个局域网内它的多播地址范围。也就是全0到全1 而最低的23位需要和他的ip地址有一个映射关系。 psMAC地址要和ip地址有一个映射关系来决定是不是同属一个多播组
因为我们知道一个D类IP地址标识的是一个组播组因此我们就把这个IP地址映射成MAC地址。那就变成了一个MAC地址可以映射一个组播组。需要注意的是在这个D类IP地址中有5位是不固定的2532种可能 假如我们现在有两个D类IP地址如下图所示 可以看到它们不固定的5位是不一样的但是后面23位一样。
其实这两个主机应该是属于不同的组播组因为他们的IP地址不一样但是我们看映射到MAC地址这里因为在组播中IP地址和MAC地址的映射只在最后的23位前面都是固定好的所以虽然这两个地址前面不一样但是它们映射到mac地址上也是一样的。
那这两个不同的IP地址到最后居然是映射成了同一个mac地址那到一个局域网内明明是两个组播组的现在居然并成一个组播组了。这就出现严重问题了需要解决这个问题。 解决办法就是需要进行过滤对于收到多播数据报的主机还要在ip层利用软件进行过滤把不是本主机要收到的数据报丢弃了。这就是为了解决那5位不一样但剩下23位一样的问题。
关于硬件组播这里可能会考察IP地址和MAC地址进行一个映射比如说给你一个IP地址让你来映射成他的组播的MAC地址。 那我们先要看清选项前面一定是01-00-5E然后把IP地址后23位写到MAC地址的后23位。然后转换成16进制每4位一个数那么就是最后的组播mac地址。
接下来来看另一个重点IGMP协议和组播路由选择协议
刚才我们讲了IP组播的两种类型一个是在本局域网内进行硬件多播另一个则是在因特网的范围内进行多播。这两个协议就是在因特网的范围内要使用的协议。
IGMP协议 它是在一个路由器内部所使用的协议它就是要让连在一个局域网上的组播路由器知道他所连的局域网上面是不是还有主机参加/退出了某个组播组。
简言之一个组播路由器通过IGMP协议就可以知道他所连的局域网中是不是还有可以接收组播数据报的主机了。 组播路由选择协议 既然是路由选择那很容易就知道他是在路由器之间进行一个路径选择的问题。
而且如果只有IGMP协议是不足以完成组播的一整个流程的。连接在局域网上的组播路由器还必须要和其他的路由器因特网上的其他路由器进行一个协同的合作进行一个信息的交换才能够把这个组播的数据报用最小的代价来传送给组播组当中的全部成员。 十八、移动IP 十九、网络层设备