丰富的线上&线下活动,深入探索云世界
做任务,得社区积分和周边
最真实的开发者用云体验
让每位学生受益于普惠算力
让创作激发创新
资深技术专家手把手带教
遇见技术追梦人
技术交流,直击现场
海量开发者使用工具、手册,免费下载
极速、全面、稳定、安全的开源镜像
开发手册、白皮书、案例集等实战精华
为开发者定制的Chrome浏览器插件
网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输。
网络层需要解决的问题:
但是这种服务不适用于大型的网络,比如在中国的春运期间,每个人都有不同的回家方式,中间也会遇到各种状况,所以回家的路径就很不稳定,不可能每个人都能够买到直达家乡的火车票,中途也会更换交通工具,所以这种服务得不到很大的应用。
就像刚才提到的春运一样,每个人自己选择回家的路径,中途可能会更换交通方式或者路径。
但这样可能带来数据报的误码、丢失、重复和失序的问题,但仍然是尽最大努力进行交付。
在TCP/IP网络通信时,为了保证能正常通信,每个设备都需要配置正确的IP地址,否则无法实现正常的通信。
IP地址(IPv4地址)由32位正整数来表示,IP地址在计算机是以二进制的方式处理的。
而人类为了方便记忆采用了点分十进制的标记方式,也就是将32位IP地址以每8位为组,共分为4组,每组以「.」隔开,再将每组转换成十进制。
实际上,IP地址并不是根据主机台数来配置的,而是以网卡。像服务器、路由器等设备都是有2个以上的网卡,也就是它们会有2个以上的IP地址。
因此,让43亿台计算机全部连网其实是不可能的,更何况IP地址是由「网络标识」和「主机标识」这两个部分组成的,所以实际能够连接到网络的计算机个数更是少了很多。
互联网诞生之初,IP地址显得很充裕,于是计算机科学家们设计了分类地址。
IP地址分类成了5种类型,分别是A类、B类、C类、D类、E类。
只有A、B、C类地址课分配给网络中的主机或路由器。
A类地址
A类地址中有一个环回测试地址,不指派,网络号全0也不指派。
B类地址
C类地址
D、E类地址
而D类和E类地址是没有主机号的,所以不可用于主机IP,D类常被用于多播,E类是预留的分类,暂时未使用。
多播地址用来做什么?
多播用于将包发送给特定组内的所有主机。
还是举班级的栗子,老师说:“最后一排的同学,上来做这道数学题。”,老师指定的是最后一排的同学,也就是多播的含义了。
由于广播无法穿透路由,若想给其他网段发送同样的包,就可以使用可以穿透路由的多播。
A、B、C分类地址最大主机个数是如何计算的呢?
最大主机个数,就是要看主机号的位数,如C类地址的主机号占8位,那么C类地址的最大主机个数:2^8-2=256
为什么要减2?
在IP地址中,有两个IP地址是特殊的:
广播地址用来做什么?
用于在同一个链路中相互连接的主机之间发送数据包。
IP分类的优点
不管是路由器还是主机解析到一个IP地址时候,我们判断其IP地址的首位是否为0,为0则为A类地址,那么就能很快的找出网络地址和主机地址。
IP分类的缺点
问题1.为什么要划分子网?
问题2:怎么划分子网?
带着问题找答案-->
A类地址由一千多玩个,B类地址有六万多个,而C类地址只有254个,不同类别地址含有的地址数差距太多,所以导致选C类太少,选A类太多,多了浪费,少了不够用,还有分配的一个地址只能在一个单位的同一个网络使用,其他单位的网络不能使用,所以多了浪费,少了又只能换大的,而大的又太大。
如果单位新增加了很多计算机,就需要将原来的网络划分成多个独立的网络,如果为其他网络申请更多的地址,则会带来很多弊端:
那么怎么解决这个问题呢:
可以从IP地址的主机号中借用一些位来区分子网号,就可以利用原有网络中剩余的大量IP地址
新问题:如果未在图中标记子网号部分,那么我们和计算机又如何知道分类地址中主机号有多少比特是被用作子网号了呢
答案:子网掩码
32比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特作为子网号,IP地址从两级结构的分类IP地址变成了三级结构的划分子网的IP地址
练习:
默认的子网掩码
课后总结
问题1:为什么要有无分类地址
问题2:什么是无分类地址
带着问题去学习-->
IP地址还是不够用,为了能过够解决IP地址枯竭的问题,而诞生了无分类分址,听名称就可以知道把原来的A类、B类、C类全归结到一类,原先每一类的可用的地址数是固定的,存在着很大的资源浪费,无分类之后,我们就可以自己想怎么分就怎么分地址。
知识延申:上一节的划分子网虽然在一定程度上缓解了因特网在发展中遇到的困难,但是数量巨大的C类网因为其网络空间太大而地址空间太小导致并没有充分利用资源,而因特网的IP地址仍在加速消耗,整个IPv4地址空间面临全部耗尽的威胁。
概念
练习
注意的是
路由耦合
一个路由器如果要把自己所在网络内的所有主机ip地址都发给别的路由器,但是路由器转发表保存不了这么多,而且效率更低,可以找到这个路由器所有的主机的共同前缀来存储在转发表内
解题步骤
练习:求路由聚合后的网络地址
课后小结
问题1:定长子网掩码和变长子网掩码分别是什么
问题2:它俩有什么区别
问题3:用来解决什么问题
定长的划分子网
变长的子网掩码
分配原则:每个子块的起点位置不能随意选取,只能选取块大小整数倍的地址作为起点,建议先给大的子块分配。
补充
五个子网的划分的网络地址,只写出了最后一个字节
个人思考:
定长和变长子网掩码就和前面所学过的IPv4地址划分是一样的,由于A类B类划分很浪费资源,出现了无分类编址,这个也是同理。
还有一个问题,就是定长的子网掩码方式可能会导致不够用,如果申请到的是C类网络,那么如果有很多个子网,而且有些子网中有很多主机,那么就回导致一个子网的主机地址不够用的问题,而其他地址有剩余却不能用,所以还是使用变长的子网掩码的利用率最大
总结
问题1:IP数据报是如何发送的
问题2:IP数据报是如何转发的
源主机如何知道目的主机是否与自己在同一个网络中?
首先我们知道每个网络的网络地址是不同,所以我们可以根据网络地址的不同判断是都同属于一个网络,如何得到源主机和目的主机的网络地址呢?我们可以使用地址掩码与主机地址进行AND操作。
一个网络中的主机为了和其他网络种的主机进行通信,必须要经过一个路由器进行转发,那么就需要指定一个默认的路由器进行转发,称为默认网关
路由器转发
从路由表中寻找匹配过程:
路由器隔离广播域
如果一个路由器收到了来自本网络的广播信号,则不会进行转发
在巨大的互联网中如果每个路由器都进行广播转发,那么将会发送广播风暴
如果路由器收到本网络向其他网络的广播信号,也不会转发。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xe3QNIRH-1662651469675)(image-20220403215727364.png)]
路由器只能确保分组有没有出错,但不能确保会不会丢失,分组时单个转发的,丢失了路由器没办法知道啊
主机1的默认官网应该是连接Internet的路由器,但是了DHCP服务器
主机发送IP数据包
路由器转发IP数据包
使用静态路由配置可能残生的路由环路错误:
如何配置静态路由
如果是某个网络与该路由器直连,那就是直连网络,可以直接得到
如果不是,需要人工配置路由器,比如说R1要传到蓝色网络
默认路由
路由环路:如果要连到因特网中的某个网络,要把因特网中所有的网络都配置到路由表中吗?当然不可能,所以对于因特网中的所有网络的目的网络,可以使用默认路由:0.0.0.0
如果在路由表中找不到想要的目的网络,就转发到默认路由,让默认路由去找
特定主机路由
为了网络管理人员对网络的管理和测试,测试该主机能不能接收到信息
如果某个网络故障,路由表会删去该路由,导致其他路由想要转发到该网络而在路由表中找不到目的路由,只能转发到默认路由,为了解决该问题,加上黑洞路由
静态和动态相比较
路由选择协议
路由器基本结构
路由器可以分为路由选择部分和分组转发部分。
转发表是由路由选择协议得来的。二者分工合作,相互协作。
RIP使用跳数作为度量来衡量到达目的网络的距离。
RIP认为好的路由就是距离最短的路由,也就是所通过的路由器数量最少的路由。
如果由多条距离相等的路由,可以进行等价负载均衡。
RIP存在“坏消息传得慢”的问题
最短路径优先是因为用了Dijkstra提出的最短路径算法SPF
OSPF是基于链路状态的,而不像RIP那样是基于距离向量的。不会产生路由回路。
OSPF不限制网络规模,更新效率高,收敛速度快。
链路状态是指本路由器都和哪些路由器相连,以及相应的链路的代价。(代价可以用来表示费用、距离、时延、带块等等,这些由网络管理人员来决定)
总体流程
OSPF由以下五种分组类型:
洪泛法这样发送的话,每个路由器都要向系统内所有网络都发送一遍自己的链路状态信息,会导致有大量的数据包被发送在网络中,会造成网络阻塞,降低效率。为了解决这个问题,我们可以指定几个路由器来做组长的角色,其他组员都向组长发送自己的信息,这样组长把这些信息整合之后在发给每一个组员,这样就能缓解网络负荷。
如果一个网络很大的话,这样发送负担依然很重。
为了解决这一问题,可以将网络划分为若干个更小的范围,叫做区域。
这样像行政规划一样:省--市--县...。
主干区域就像省会一样。
在不同自治系统内,度量路由的代价(距离、带宽、费用等)可能不同。因此,对于自治系统之间的路由选择,使用“代价”作为度量来寻找最佳路由是不行的。
所以BGP只能力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。
在配置BGP的时候,每个自治系统的管理员要选择至少一个路由器作为该自治系统的BGP发言人。
不同自治系统的BGP发言人要交换路由信息,首先必须建立TCP连接。
BGP发言人除了允许BGP外,还必须允许自己所在自治系统所使用的内部网关协议。
网络包在复杂的网络传输环境里,常常会遇到各种问题。
当遇到问题的时候,总不能死个不明不白,没头没脑的作风不是计算机网络的风格。所以需要传出消息,报告遇到了什么问题,这样才可以调整传输策略,以此来控制整个局面。
ICMP主要的功能包括:确认IP包是否成功送达目标地址、报告发送过程中IP包被废弃的原因和改善网络设置等。
在IP通信中如果某个IP包因为某种原因未能达到目标地址,那么这个具体的原因将由ICMP负责通知。
终点不可达:当路由器或主机不能交付数据报时,就像源点发送终点不可达报文。
源点抑制:当路由器或主机由于拥塞而丢弃数据报时,就像源点发送源点抑制报文,使源点知道应当把数据阿波的发送速率放慢。
参数问题:当路由器或主机收到IP数据报时,根据其首部检验和字段发现首部在传输过程中出现了误码,就丢弃该数据包,并向源点发送参数问题报文。
改变路由:路由器发现有更好的路径到达目的地址,就会给源点发送改变路由报文,让源点选择更好的路径。
回送请求和回答:ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。收到此报文的主机必须给源主机或路由器发送回送回答报文。这种询问报文用来测试目的站是否可达及了解其有关状态。
同一个子网下的主机A和主机B,主机A执行ping主机B后,中间发生了什么?
ping命令执行的时候,源主机首先会构建一个ICMP回送请求信息数据包。
ICMP数据包内包含多个字段,最重要有两个:
然后,由ICMP协议将这个数据包连同地址192.168.1.2一起交给IP层。IP层将以192.168.1.2作为目的地址,本机IP地址作为源地址,协议字段设置为1表示是ICMP协议,再加上一些其他控制信息,构建一个IP数据包。
接下来,需要加入MAC头。如果在本地ARP映射表中查找出IP地址192.168.1.2所对应的MAC地址,则可以直接使用;如果没有,则需要发送ARP协议查询MAC地址,获得MAC地址后,由数据链路层构建一个数据帧,目的地址是IP层传过来的MAC地址,源地址则是本机的MAC地址;还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送出去。
主机B收到这个数据帧后,先检查它的目的MAC地址,并和本机地址对比,如符合就接受,否则丢弃。
接收后检查该数据帧,将IP数据包从帧中提取出来,交给本机的IP层,同样,IP层检查完后,将有用的信息提取后交给ICMP协议。
主机B会构建一个ICMP回送相应消息数据包,回送响应数据包的类型字段为0,序号为接收到的请求数据包中的序号,然后再发送出去给主机A。
用来测试IP数据包从源主机到达目的主机要经过哪些路由器
如何实现:故意设置特殊的TLL,来追踪去往目的地时沿途经过的路由器。它的原理就是利用IP包的生存期限从1开始按照顺序递增的同时发送UDP包,强制接收ICMP超时消息的一种方法。
当TLL设置为1时,遇到第一个路由器就会发送超时信息报文给源主机,这样源主机就确定了沿途中遇到的第一个路由器。
解析来TLL设置为2,遇到的第二个路由器就会发送超时信息报文给源主机,这样就确定了第二个路由器,以此反复,直到到达目的主机。
这样的过程,traceroute就可以拿到了所有的路由器IP。
发送方是如何直到发出的UDP包是否到达了目的主机呢
traceroute在发送UDP包时,会填入一个不可能的端口号值作为UDP目标端口号(大于3000)。当目的主机,收到UDP包后,会返回ICMP差错报文消息,但这个差错报文消息的类型是「端口不可达」。
所以,当差错报文类型是端口不可达时,说明发送方发出的UDP包到达了目的主机。
由于IP地址的短缺,一个机构能够申请到的IP地址数往往小于本机构所拥有的主机数。考虑到互联网也不安全,一个机构内也并不需要把所有的主机都接入到外部的互联网中。
在很多情况下,很多主机还是和本机构内的其他主机进行通信(一个大学)。
假定一个机构内部的计算机通信才是采用TCP/IP协议,那么从原则上讲,对于这些仅在机构内部使用的计算机就可以由本地机构自行分配其IP地址。这些IP地址只在机构内部有效,不需要向互联网的管理机构申请全球唯一的IP地址。这样就可以大大节约宝贵的IP地址资源。
但是,如果任意选择一些IP地址作为本机构内部使用的本地地址,那么很有可能内部使用的IP地址和互联网中的某个IP地址重合,这样就会出现地址的二义性问题。
问了解决这一问题,互联网管理机构指明了一些专用地址来用于机构的内部通信,而不能用于互联网上的主机通信。换言之,专用地址只能用于本地地址而不能用作全球地址。在互联网中的所有路由器,对目的地址是专用地址的数据报一律不进行转发。
加入一个很大的机构遍布世界各地,这些部门要交换信息,要怎么做呢?
使用IP隧道技术实现虚拟专用网
前面说的是一个机构的机构专用网进行通信,那如何实现机构内部的主机和互联网上的主机进行通信呢?
网络地址转换技术需要在专用网络连接到互联网的路由器上安装NAT软件,装有NAT软件的路由器叫做NAT路由器。这个路由器至少有一个IP地址。
这样一来,一个网络内部的所有使用本地地址的主机和外部通信时,都可以使用NAT路由器上将其IP地址转换为全球IP地址,才能和互联网连接。
NAT路由器的工作原理
由此可见,当NAT路由器有n各全球IP地址时,专用网内最多可以同时有n台主机向互联网发送数据报,这样可以使专用网内较多数量的主机轮流使用NAT路由器有限数量的全球IP地址。
显然,通过NAT路由器的通信必须由专用网内的主机发起。专用网外的主机要发起通信,NAT路由器收到后就不知道发给谁,因为全球IP地址是公共的,使用它的主机随时会变。所以专用网内部的主机不饿能直接充当服务器。
为了能让专用网内的主机都可以同时通信,可以用网络地址和端口号来区分各个主机。而且路由器上可以只有一个全球IP地址。
NAPT将源IP地址和TCP端口都进行切换,现在NAPT把专用网内不同的源IP地址都转换为同样的全球IP地址,只是端口号不同。
由于NAT/NAPT都依赖于自己的转换表,因此会有以下的问题: