(异构网络互联时利用路由器,路由器是第三层设备,向传输层及以上层次隐藏下层的具体实现,所以网络层及网络层以下协议可以不同,但是网络层之上的协议数据是路由器所不能处理的,因此网络层以上的高层协议必须相同。
注意区别:各种网络在物理层互联时要求数据传输率和链路层协议相同。数据链路(即逻辑链路)与链路(即物理链路)
注意:当有私有地址时,转发需要借助NAT来转换为公共地址,所以网络地址也会改变。(私有地址→NAT→公共地址)网络地址:IP地址,源、目的均不变数据链路层地址(交通工具):MAC地址,源、目的均改变
在通信子网中,因出现过量的分组而引起的网络性能下降的现象称为拥塞。-拥塞观察方法:观察网络的吞吐量与网络负载的关系。-如果网络负载↑,网络的吞吐量明显小于正常的吞吐量,那么网络就可能已进入“轻度拥塞”;-如果网络负载↑,吞吐量↓,那么网络就可能已进入拥塞状态;-如果网络负载继续↑,而吞吐量↓到0,那么就可能已进入死锁状态。-作用:确保子网能够承载所达到的流量,这是一个全局性的过程,涉及各个方面的行为:主机、路由器及路由器内部的转发处理过程等。单一地增加资源并不能解决拥塞。-分类:-开环控制(即未闭,事先控制):在设计网络时事先考虑周到-闭环控制(即运作时控制):事先不考虑,采用监测网络系统取监视,然后解决。
每个结点仅与它的直接邻居交谈,它为它的邻居提供从自己到网络中所有其它节点的最低费用估计。
注意:这里的距离是一个抽象的概念,如RIP就将距离定义为“跳数”。跳数是指从源端口到目的端口所经过的路由个数,每经过一个路由器,跳数+1。(直接连接距离为1,-1之后直接被丢弃了,不转发出去,因为目的地址就在本网络直接连接)
“好消息快,坏消息慢”(慢收敛是导致发生路由回路的根本原因)路由器之间不断传递无效的路由信息。这种条件下,路由器对无法到达的网络路由不予理睬,(一直以为可以到达)导致用户的发往该不可达网络的数据包不停在网络上循环发送(没有出路),最终造成网络资源的严重浪费。路由环路:就是数据包不断在这个网络传输,始终到达不了目的地,导致掉线或者网络瘫痪。路由收敛:是指当路由环境发生变化后,各路由器调整自己的路由表以适应网络拓扑结构的变化,最终达到稳定状态(路由表与网络拓扑状态保持一致)。
最常见的距离-向量路由算法是RIP算法,它采用“跳数”作为距离的通量。
子网使用距离向量算法,下面的向量刚刚到达路由器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到达所有结点的最短路径是?-C到B的距离是6,那么从C开始通过B到达各节点的最短距离向量是(11,6,14,18,12,8)(即B的向量+6)-同理,通过D到达各节点的最短距离向量是(19,15,9,3,12,13)-通过E到达各节点的最短距离向量是(12,11,8,14,5,9)-比较三个向量,分别取最短的距离组成一个新的向量(11,6,0,3,5,8)。注意:从C到C自己的距离为0。
每个结点通过广播的方式与所有其他结点交谈,但它仅告诉它们与它直接相连的链路的费用。(这点就像数据结构中的path[],一个找一个往上找,就能构成一个完整的路径)
链路状态路由算法要求每个参与该算法的结点都具有完全的网络拓扑信息。它们主动测试所有邻接结点的状态,定期地将链路状态传播给所有其他结点(或称路由节点)。
“链路状态”就是说明本路由器都和哪些路由器相邻,以及该链路的“度量”(metric)
典型的链路状态算法是OSPF算法。
这里的例子与Dijsktra算法一致,所以省略。
边界网关协议BGP使用的算法
因特网将整个互联网划分为许多较小的自治系统(注意一个自治系统中包含很多局域网),路由选择按照层次的方式进行。
注意:采用层次路由时,OSPF将一个自治系统再划分为若干区域,每个路由器都知道在本区域内如何把分主路由到目的地的细节,但不用知道其他区域的内部结构。采用分层次划分区域的方法虽然会使交换信息的种类增多(额外的区域信息),但也会使OSPF协议更加复杂(要处理不同的区域)。但这样做却能使每个区域内部交换路由信息的通信量大大减小,因而使OSPF协议能够用于规模很大的自治系统中。
很多同学可能会想有了IP地址,为什么还需要MAC地址?其实事实上IP地址理论上确实可以完全取代MAC地址。但是由于MAC地址先一步出现,而IP地址是后一步出现的,所以有历史遗留的问题,所以我们在规划取代方案的时候,我们需要考虑成本因素。相当于我们已经建好了一个高达100层的大楼,却仅仅因为地基的外表不符合我们的心意,就将大楼整个爆破拆除,重新修建,这是很不划算的一件事情。所以我们能做的仅仅只是在这个地基的基础上进行兼容,继续向上修建。
一个IP分组由首部和数据两部分组成。首部前一部分的长度固定,共20B,是所有IP分组必须具有的。在首部固定部分的后面是一些可选字段,其长度可变(最长为40B),用来提供错误检测及安全等机制。
注意区别标识和标志,在中文上“标识”同“标志”,主要区分其英文。
注意:IP数据报经过路由器R转发时,可能需修改IP分组头中的①源IP地址:私有地址和Internet上的主机通信时,须由NAT路由器进行网络地址转换,把IP数据报的源地址转换为NAT路由器的一个全球IP地址。②TTL:IP数据报每经过一个路由器,TTL值就-1。③首部校验和④总长度字段、标志字段、片偏移字段:若IP分组的长度超过输出链路的MTU,则这些字段也会变化。
注意:路由器收到TTL=1包时,会查本地路由表。(-1后,变成0,直接丢了,直接连接,不转发)如果直连,意味着马上就达到目的主机了,那么就从相应网口发送出去;如果路由表中,目的主机还要经过其它路由器(非直连),它会判断出,下一个路由器收到包,ttl减1后,包必然被丢弃。于是路由器就不发送了。丢弃包同时,向源主机,发送ICMP数据包(而非超时的数据包),通知超时。
网络层的路由器执行的分组转发算法如下:
注意:得到下一跳路由器的IP地址后并不是直接将该IP地址填入待发送的数据报,而是将该IP地址转换成MAC地址(通过ARP),将其放到MAC帧首部中,然后根据这个MAC地址找到下一跳路由器。
在不同网络中传送时,MAC帧中的源MAC地址和目的MAC地址要发送变化,但是网桥在转发帧时,不改变帧的源地址,请注意区分。网络地址不变,链路层地址变化(层次化)(即源、目的地址不变,只是交通工具(途中经过的物理设备)改变了)
IPV4中,0.0.0.0地址被用于表示一个无效的,未知的或者不可用的目标。
用途总结
用来表示目标机器不可用。
127.0.0.1属于{127,}集合中的一个,而所有网络号为127的地址都被称之为回环地址,所以回环地址!=127.0.0.1,它们是包含关系,即回环地址包含127.0.0.1。
回环地址:所有发往该类地址的数据包都应该被loopback。
用途
相比127.0.0.1,localhost具有更多的意义。localhost是个域名,而不是一个ip地址。之所以我们经常把localhost与127.0.0.1认为是同一个是因为我们使用的大多数电脑上都讲localhost指向了127.0.0.1这个地址。
在ubuntu系统中,/ets/hosts文件中都会有如下内容:
127.0.0.1localhost127.0.1.1jason-Lenovo-V3000#ThefollowinglinesaredesirableforIPv6capablehosts::1ip6-localhostip6-loopbackfe00::0ip6-localnetff00::0ip6-mcastprefixff02::1ip6-allnodesff02::2ip6-allrouters上面第一行是几乎每台电脑上都会有的默认配置。
但是localhost的意义并不局限于127.0.0.1。
localhost是一个域名,用于指代thiscomputer或者thishost,可以用它来获取运行在本机上的网络服务。
在大多数系统中,localhost被指向了IPV4的127.0.0.1和IPV6的::1。
127.0.0.1localhost::1localhost所以,在使用的时候要注意确认IPV4还是IPV6
127.0.0.1是一个环回地址。并不表示“本机”。0.0.0.0才是真正表示“本网络中的本机”。
在实际应用中,一般我们在服务端绑定端口的时候可以选择绑定到0.0.0.0,这样我的服务访问方就可以通过我的多个ip地址访问我的服务。
比如我有一台服务器,一个外放地址A,一个内网地址B,如果我绑定的端口指定了0.0.0.0,那么通过内网地址或外网地址都可以访问我的应用。但是如果我之绑定了内网地址,那么通过外网地址就不能访问。所以如果绑定0.0.0.0,也有一定安全隐患,对于只需要内网访问的服务,可以只绑定内网地址。
连接到因特网上的每台主机(或路由器)都分配一个32比特的全球唯一标识符,即IP地址。传统的IP地址是分类的地址,分为A、B、C、D、E五类。IP地址→分类的IP地址→(为了解决IP地址用完)划分子网(3级结构)→(为了解决路由器危机)构成超网(CIDR)→地址转换(NAT)(ISP接入需要)
这个划分方法是不是很眼熟,没错,就是可变长子网划分的划分方法。(每次都分一半走)010110111011110
注意:与上面的127.0.0.1只能本机访问不同,如果路由配置为此0.0.0.0,那么其他机器也能通过本机ip在局域网或者公网环境中访问本机,这样项目的路径ip就是当前服务主机的ip。即配置127.0.0.1只能本机自我访问,而配置0.0.0.0可以给其他机器来通过当前服务主机ip来访问本机。
注意:实际使用时,由于路由器对广播域的隔离,255.255.255.255等效为本网络的广播地址。
注意:一台主机可以有多个IP地址,但是必须要属于多个逻辑网络(子网)。(不然A→B,B有两个IP地址,不知道发给哪一个)
等长子网划分→可变长子网划分→CIDR
子网划分:在IP地址中增加了一个“子网号字段”,使两级IP地址变成了三级IP地址。-子网划分纯属于一个单位内部的事情。单位对外仍然表现为没有划分子网的网络。-从主机号(host-id)借若干比特作为子网号(subnet-id),IP地址={<网络号>,<子网号>,<主机号>}注意:子网掩码只是把IP地址的主机号这部分进行再划分,而不改变IP地址原来的网络号。
使用变长子网掩码VLSM(VariableLengthSubnetMask)可进一步提高IP地址资源的利用率。
在变长子网掩码(VLSM)的基础上又进一步研究出无分类编址方法,它的正式名字是无分类域间路由选择CIDR(ClasslessInter-DomainRouting)。CIDR消除了传统的A类、B类和C类地址以及划分子网的概念,因而可以更加有效地分配IPv4的地址空间。
超网(supernetting)是与子网类似的概念——IP地址根据子网掩码被分为独立的网络地址和主机地址。超网(supernetting),也称无类别域间路由选择(CIDR),它是集合多个同类互联网地址的一种方法。
“斜线记法”(slashnotation),又称为CIDR记法,即在IP地址后面加上一个斜线“/”,然后写上网络前缀所占的位数(这个数值对应于三级编址子网掩码中1的个数)
例如,如果一个单位需要2000个地址,那么就给它分配一个2048地址的块(即8个连续的C类地址),而不是一个完整的B类地址。这样可以大幅度提高IP地址空间的利用率,减小路由器的路由表大小,提高路由转发能力。类比:相当于有一种小蛋糕和一种大蛋糕,一块小蛋糕吃不饱,一块大蛋糕太太太太太多了,所以就吃3个小蛋糕,刚刚好。
-**CIDR地址块**中的**地址数一定是2的整数次幂**,**实际可指派**的地址数通常为**$2^N-2$**,N表示主机号的位数。注意:在无分类的地址分配网络时,子网号不需要-2,主机号个数****应该-2才能得到可分配的个数。(与子网划分的分类的地址不同)
一个CIDR地址块可以表示很多地址,这种地址的聚合常称为路由聚合(routeaggregation),也称为构成超网(supernetting)。它使得路由器中的一个项目可以表示很多个(如上千个)原来传统分类地址的路由。例如,从路由器R1到网络206.1.0.0/16~206.1.128.0/16的路由的下一跳均为R2,那么如果采用传统分类地址的路由记录路由表,这样就要从206.1.0.0/24记录到206.1.128.0/24,记录很多项;如果采用CIDR地址块的路由聚合,只需记录共同的最长前缀206.1.0.0/16即可。将众多项聚合为了一项。-路由表须具有相同的下一跳地址-须选取相同网络前缀的最长部分
注意:一定要记得最后两个可以平分,否则会多分配一位,造成浪费。
网络地址转换(NAT,NetworkAddressTranslation)是指通过将专用(私有)网络地址(如Intranet内联网)转换为公用地址(如Internet互联网),从而对外隐藏内部管理的IP地址。它使得整个专用网只需要一个全球IP地址就可与因特网连通,由于专用网本地IP地址是可重用的,所以NAT大大节省了IP地址的消耗。
这些地址只能用于机构的内部。这种采用私有IP地址的互联网络称为专用互联网或本地互联网。私有IP地址也称为可重用地址。
注意:使用NAPT将物理地址与端口号转换,即旧的IP地址+端口号→新的IP地址+端口号,这样就可以把专用网络中的主机地址对外转换时,用不同端口号分开。
注意:****普通路由器在转发IP数据报时,不改变其源IP地址或目的IP地址。而NAT路由器在转发IP数据报时,一定要更换其IP地址(转换源IP地址或目的IP地址)。普通路由器仅工作在网络层,而NAT路由器转发数据报时需要查看和转换传输层的端口号。
注意:转换时,本地IP地址:端口必须全部匹配才能进行转换;一旦不匹配,则丢弃。(添加新的表项是管理员的工作)
总的来说,****IP地址在网络中体现的是“我在哪里”(现居住地),而mac地址则在二层通信中体现“我是谁”(身份证)。身份证永远不变,而现居住地是可能改变的。
(“我是XXX(IP地址),硬件地址是XXX,我想知道主机XXX(IP地址)的硬件地址”)(“我是你要找的XXX,硬件地址是XXX”)
应用层协议,基于UDP动态主机配置协议(DynamicHostConfigurationProtocol,DHCP)常用于给主机动态地分配IP地址,它提供了即插即用联网的机制,这种机制允许一台计算机加入新的网络和获取IP地址而不用手工参与。DHCP是应用层协议,它是基于UDP的。
注意:这些是一台主机通过WIFI或4G能够上网的前提条件。网关地址:接入Internet路由器地址
注意:本过程中,客户端和服务器端都需要通过广播方式来进行交互,因为在DHCP执行期间,客户端和服务器端都没有标识自己身份的IP地址,因此不可能通过单播的形式进行交互。采用UDP而不采用TCP的原因也很明显:TCP需要连接,如果连对方的IP地址都不知道,那么更不可能通过双方的套接字建立连接。
网际控制报文协议(InternetControlMessageProtocol,ICMP):为了提高IP数据报交付成功的机会,在网络层使用ICMP来让主机或路由器报告差错和异常情况。
回时掩路:荒山野岭
注意:PING工作在应用层,它直接使用网络层的ICMP,而未使用传输层的TCP或UDP。Traceroute/tracert工作在网络层。
使用IPV6可以让我们的所有主机都拥有自己的公网IP,每一个主机都可以直接访问到世界上任意的一个主机,而无需申请公网IP或者处于同一局域网内。
例如,4BF5:0000:0000:0000:BA5F:039A:000A:2176→4BF5:0:0:0:BA5F:39A:A:2176
4BF5::BA5F:39A:A:2176
邻居发现协议(NeighborDiscoveryProtocol,NDP或ND)是TCP/IP协议栈的一部分,主要与IPv6共同使用。它工作在网络层,负责在链路上发现其他节点和相应的地址,并确定可用路由和维护关于可用路径和其他活动节点的信息可达性。
邻居发现协议(NDP)替代了IPv4的ARP,并且添加了新的功能。它的所有功能都是基于ICMPv6报文来实现。NDP基于ICMPv6实现,NDP使用的所有报文均封装在ICMPv6报文中,所以ND被认为是3层协议。在三层完成地址解析,主要好处是:地址解析在三层完成,不同的二层介质可以采用相同的地址解析协议。可以使用三层的安全机制避免地址解析攻击。使用组播方式发送请求报文,减少了二层网络的性能压力。
功能:
路由协议用于路由器之间不断地交换路由信息,并根据接到的信息,运行路由算法,优化更新路由,维持路由器有一个动态的优化的路由表。
应用层协议,基于UDP(一对多,广播)路由信息协议(RoutingInformationProtocol,RIP)是内部网关协议(IGP)中最先得到广泛应用的协议。RIP是一种分布式的基于距离向量的路由选择协议,其最大的优点就是简单。
注意:故RIP只适用于小型互联网。距离向量路由可能会出现环路的情况,所以规定了最高跳数。
每个路由表羡慕都有三个关键数据:<目的网络N,距离d,下一跳路由器X>。对于每个相邻路由器发送过来的RIP报文,执行如下步骤:
开放最短路径优先(OpenShortestPathFirst,OSPF)协议是使用分布式链路状态路由算法的典型代表,也是内部网关协议的一种。
注意:最终所有的路由器都能建立一个链路状态数据库(即全网的拓扑结构图)
划分区域的好处就是将利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个自治系统,这就减少了整个网络上的通信量。在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的情况。
注意:由于采用洪泛法,为了减少通信量,OSPF协议不使用UDP数据报传送,而是直接使用IP数据报传送。
应用层协议,基于TCP边界网关协议(BorderGatewayProtocol,BGP)是不同自治系统的路由器之间交换路由信息的协议,是一种外部网关协议。边界网关协议常用于互联网的网关之间。路由表包含目的网络前缀、下一跳路由器及到达该目的网络所要经过的各个自治系统序列。
注意:BGP所交换的网络可达性信息:(路径向量,即到达某个网络所经过的路径)就是要到达某个网络(用网络前缀表示)所要经过的一系列AS(即自治系统)。路径向量与距离向量不同,路径向量只考虑路径可达。
问题:****RIP使用UDP,OSPF使用IP,而BGP使用TCP。这样做有何优点?RIP协议采用UDP是因为RIP每周期需全网组播路由信息,路由信息数目较大,故使用UDP协议可以提高效率;OSPF本身提供主从协商机制,可以保证可靠的传输,另外全网路由器保持着同样的一个LSDB(链路状态数据库),即每个路由器都有全网的拓扑结构图,当拓扑发生变化时仅用修改部分,需要携带的变更信息较少,通过IP协议即可完成;BGP为边界网关协议,因携带的路由信息较多,且可能跨不同网络传送路由信息,为保证可靠性,需使用TCP协议,可兼顾容量和可靠性。
注意:主机组播时仅发送一份数据,只有数据在传送路径(路由器)出现分岔时才将分组复制后继续转发。
主机使用一个称为IGMP的协议加入组播组。同时,要使路由器知道组播组员的信息,需要利用因特网组管理协议(InternetGroupManagementProtocol,IGMP)。
IP组播使用D类地址格式。每个D类IP地址标志一个组播组。注意:并非所有的D类地址都可作为组播地址。
注意:组播IP地址与以太网硬件地址的映射关系不是唯一的,因此受到组播数据报的主机,还要再IP层利用软件进行过滤,把不是本主机要接收的数据报丢弃。
助记:(距离产生美,虽然是一组的,但是也要保持“1”点距离)(8*3=24,24-1=23)
支持移动性的因特网体系结构与协议共称为移动IP,它是为了满足移动节点(计算机、服务器、网段等)在移动中保持其连接性而设计的。
即移动IP为移动主机设置了两个IP地址,即主地址和辅地址(转交地址)。移动主机在本地网时,使用的是主地址。当移动到另一个网络时,需要获得一个临时的辅地址,但此时主地址仍然不变。从外网一会本地网时,辅地址改变或撤销,而主地址仍然保持不变。
注意:在移动节点移动后,本地代理是不知道此时移动节点的地址的(家里人不知道现在你去哪玩了),但移动节点永远知道它的本地代理的地址(但你永远知道回家的路),所以它先向外部代理申请一个辅地址(也就是转交地址),通过这个转交地址与自己的本地代理相联系,注册,而此时的本地代理就知道了移动节点现在所处的位置,从而能把通信对端发送的数据通过外部代理转交给移动节点。-首先结点找到外部网段的外部代理,并向它申请一个辅地址(外部代理的地址)-有了辅地址后,结点将在本地代理上注册当前的辅地址-本地代理将主、辅地址的映射记录下来-然后就可以分组路由了-本地代理在收到通信对端发送给移动节点的分组后,采用隧道技术(将分组封装在以辅地址为目的地址的IP包内,再套一层),转交给外部代理,最后到达移动节点-在移动节点继续移动到其他网段时,向本地代理注销主、辅地址绑定。
这里不细致展开。
虚拟局域网(VirtualLocalAreaNetwork,VLAN)是一组逻辑上的设备和用户,这些设备和用户并不受物理位置的限制,可以根据功能、部门及应用等因素将它们组织起来,相互之间的通信就好像它们在同一个网段中一样,由此得名虚拟局域网。
路由器是一种具有多个输入输出端口的专用计算机,其任务是连接不同的网络(连接异构网络)并完成路由转发。连接网络、存储转发、路由选择、隔离广播域
根据特定的路由选择协议构造出路由表,同时经常或定期地和相邻路由器交换路由信息而不断地更新和维护路由表。
这也就解释了为什么路由器是网络层设备,但是能使用RIP等应用层协议了。路由器的功能只到网络层,但是使用的协议可能超过网络层。(如同步行和飞机的功能都是代步,只是一个使用的道具比较高端而已)
路由算法负责填充和更新路由表;转发功能则根据路由表的内容来确定当每个分组到来时应该采取什么动作(如从哪个端口转发出去)。
路由聚合需要:①相同的下一跳地址(下一跳地址与接口一一对应),②相同网络前缀的最长部分
注意:要按照目的地址和那条路由条目最长匹配。
由此可知,同一个子网不能使用不同的子网号。因为当使用不同子网号时,双方发送数据包时都会发送到路由器,而路由器收到时,发现一个找不到路由项,一个是该路由器端口冲突域内部的发送(属于自己网段的交流),所以不予转发,丢弃。(即源站和目的站处在同一网段,这时不需要经过设备进行转发)
IEEE802.11:无线连接(WIFI)类似于有线的集线器,不隔离冲突域,wireshark开启monitor模式可直接抓包(有密码的需要设置密码解密)。
正是因为路由器很万能,既可以隔离冲突域,又可以隔离广播域,即可以有线,又可以无线,所以我们日常生活也不区分适用场景,直接用它。
在这三类地址中,绝大多数的IP地址都是公有地址,需要向国际互联网信息中心申请注册。但是在IPv4地址协议中预留了3个IP地址段,作为私有地址,供组织机构内部使用。这三个地址段分别位于A、B、C三类地址内:
在公网(连Internet的)是看不到这些IP的,使用这些IP一定是你在公司或学校内网中,比如公司路由下。
这些私有地址在公司(组织)内网中,可重复出现在不同公司组织内部。
理论上每个公网IP(公网地址)下都可以在其内网(如学校、公司内部网络或者你宿舍宽带分配的内网ip)分配私网地址(如下图),即公网地址全球唯一不可重复,但是每个公网地址下的私网地址可以重复,因为这些私网地址,就是分配给内网使用的,一般公网上是访问不到这些内网地址的。