计算机网络学习笔记:第四章.网络层

本文是《计算机网络》的自学课程,视频地址为:https://www.bilibili.com/video/av47486689。仅做个人学习使用,如有侵权,请联系删除


第四章:网络层

image-20191103203518443

两种服务

image-20191103203812480
核心问题就是,可靠传输是要每一个环节都实现,还是只有端系统实现。

虚电路服务

image-20191103204038318
虚电路服务指定路径,甚至可以不指定地址

数据报服务

image-20191103204109014
数据报服务并不预先指定路径,而只是指定目标--更灵活

image-20191103204452605
选择使用的就是数据报服务

两种方式对比

image-20191103204618313
上面的图仔细看

虚拟互联网

中间设备

image-20191103211234722
转发器就可以理解为集线器

注意,路由器是在网络层的称呼

image-20191103214747508
在操作系统中,网关指的是路由器接口的地址习惯上,网关都用本网段的第一个地址,也就是.1.1这种:用中间的容易重复

网络互联的问题

image-20191103215059327
image-20191103215223851

网络互联和虚拟网络互联的区别

image-20191103215306698
image-20191103215402862

IP协议

image-20191103215440323
四个协议之间的关系:

image-20191103215529281

IP地址

ipv4的地址由32位二进制组成,我们常用的是十六进制的结果

image-20191103221105877
前三部分是网络ID,第四部分是主机ID,处于同一个网段的设备网络ID都一样--所以在局域网下,确定一台设备只需要传输主机ID就够了,这也是大家的习惯表示方法:用主机ID来表示设备

IP地址分类

image-20191103233552066
image-20191103233430102
更详细的说明:

image-20191103233614564
所以:

  • 第一部分为1-127的,是A类(0开头,最大是127,不能全0)
  • 第一部分是128-191的,是B类
  • 192-223的,是C类

可用主机数量:

image-20191103234423456
从A类到C类,每个网络中最大主机数逐步减少的原因是主机ID占用的字节越来越少,其对应的是网络数需求大、单个网络规模小的应用场景

https://zhidao.baidu.com/question/105223133.html

主机号全1为子网广播地址,主机号全0为子网网络地址(代表网络本身),这两个地址在任何网络中都不能分配给主机用。

子网号全0或者全1要看网络设备所使用的路由器协议支持不支持,以前的老版的协议都是不支持,新版本可以支持,老的书籍或者资料都不用全0和全1子网,新的允许用。

拓展:NAT技术:解决ipv4地址不够的问题

来源:https://www.zhihu.com/question/51999867

作者:车小胖

IPv4虽然被瓜分完毕,这些被瓜分的IPv4地址依然还在,只是在运营商、大机构手里。

最早运营商还可以给宽带用户分配一个全球唯一的公网IPv4地址,用户小明可以直接访问Internet,Internet上的用户也可以访问到小明。记住一点,Internet上,IPv4地址唯一,所以大家可以互相找到对方。

现在地主家的余粮也不多了,于是地主选择给用户分配私有的IPv4地址,比如 10.x.x.x/8,这个地址谁都可以使用,这样势必不会唯一,如果让小明地址为“10.x.x.x/8”IP包进入 Internet,则会造成严重的混乱。

注意,这里私有地址采用A类,就是因为A类地址单个网络下支持的设备多啊,一个运营商也不会有很多网络,255就够了.另外,10网段的地址是保留地址,这样就避免了私网Ip和公网ip弄混的问题

所以小明私有IPv4地址,在进入Internet之前会被运营商转换为一个全球唯一的公网IPv4地址,这个是地主家的余粮,等返程的IP包到达运营商时,再转换为小明的私有IPv4地址,这项技术叫地址转换,NAT

对于TCP/UDP用户流量,运营商是根据端口号来识别不同的用户会话,端口号65535个,理论上一个公网IPv4,可以支持65535个用户会话。

对于ICMP用户流量,根据ID来识别不同用户会话,ID也有65535个,理论上一个公网IPv4,可以支持65535个用户会话。

还有一项技术叫MPLS VPN,主要用于跨国公司互联全球各地的办公室,客户使用私有IPv4,可以把MPLS VPN看成一台路由器,用于交换各地办公室的路由,这个路由空间和Internet是隔离的,所以相当于公司内部的局域网一样。

划重点:这就是网络分层的精髓,一层的内部实现无需知晓其上层、或下层协议字段。(其实就是各自独立实现、互不依赖)

特殊IP地址
  1. TCP/IP协议规定,凡IP地址中的第一个字节以“1110”开始的地址都叫多点广播地址。因此,任何第一个字节大于223小于240的IP地址是多点广播地址;
  2. IP地址中的每一个字节都为0的地址(“0.0.0.0”)对应于当前主机;
  3. IP地址中的每一个字节都为1的IP地址(“255.255.255.255”)是当前子网的广播地址;
  4. IP地址中不能以十进制“127”作为开头,127.0.0.1是回送地址,指本地机,一般用来测试使用。回送地址(127.x.x.x)是本机回送地址(Loopback Address),即主机IP堆栈内部的IP地址,主要用于网络软件测试以及本地机进程间通信,无论什么程序,一旦使用回送地址发送数据,协议软件立即返回之,不进行任何网络传输。 属于保留测试地址,不能用
  5. 同时网络ID的第一个6位组也不能全置为“0”,全“0”表示本地网络。
  6. 169.254.x.x:Windows选择‘自动获得ip地址'但没有返回时临时自己选择的一个地址。这种的效果就是网络有问题的都在一个网段里,也实现了'局域网'23333
  7. 10.x.x.x:保留的A类地址,可以用于做私网地址
  8. 172.16.0.0-172.31.0.0:保留的B类地址
  9. 192.168.0.0-192.168.255.0:保留的C类地址

子网掩码

image-20191104000545641
子网掩码只有一个作用:将ip地址划分为网络地址和主机地址两个部分

image-20191104002818473
为什么我们已经有了ip分类,却还需要子网掩码:

来源:https://www.zhihu.com/question/41172810

1、分类在先,子网掩码在后。在没有子网掩码时,单播的主类地址ABC三类在使用中太过浪费,又不够灵活。所以出现了子网划分,划分子网后,整个网络对外部表现仍为一个网络,当外来的数据报要到达这个网络内部的某个子网时,路由器如何把它转发给指定的子网?此时需要子网掩码来表示。所以先有主类分类,人们觉得主类分类不方便灵活,才有了子网划分,为了标识子网,才有子网掩码。

所以,子网掩码是无类ip地址的产物,就是之前那张图说过的:

image-20191103233552066
在无分类编址中,IP地址是必须要与其对应的子网掩码成对出现的,否则就无法表明其子网

但是子网掩码是建立在ip地址分类的基础上的,因为ip地址分类已经把蛋糕分好了,子网掩码只是对分好的蛋糕再进行拆分出售时候的技术:

来源:https://www.zhihu.com/question/26403524

为什么要分A类,B类和C类?
1:估计是历史原因导致的,现在所有的A类地址都在美国
2:初期设想互联网规模不会有那么大,为了尽可能的使每个网内终端都能获得一个公有IP(可以自由的被外网访问),分出了A类地址那么庞大的地址空间,其实A类地址分下去之后,这个网络地址内肯定还会细分出更多的子网络地址给路由器,因为不可能有那么大的交换机能够连接所有终端,即使这样,仍然有很多IP地址浪费。

A类网络地址数量较少,可以用于主机数达1600多万台的大型网络。 A 类占整个地址空间的 50%。 然而,只有 126 个组织可以分配 A 类网络地址。 有趣的是,每个组织都可以为 16,000,000 台主机提供地址。 超大型组织会分配整个 A 类地址块。 时至今日,仍有公司和政府组织拥有 A 类地址。 例如,通用电气公司拥有 3.0.0.0/8,苹果电脑公司拥有 17.0.0.0/8,美国 邮政总局拥有 56.0.0.0/8。

B 类占整个地址空间的 25%。 最多 16,384 个组织可以分配 B 类网络地址,每个网络可以支持 65,534 台主机。 只有那些特大型的公司/组织或政府部门有可能会使用到所有 65,000 个地址。 与 A 类网络类似,B 类地址空间浪费许多 IP 地址。

C 类占整个地址空间的 12.5%。 许多组织可以获得 C 类网络,但是限于它们能够连接的主机总数。 事实上,在许多情况下,C 类地址对于大多数中型企业来说通常太小。

大家可能注意到了,每个ip地址后面有一个斜杠,它代表的就是子网掩码,但不是直接表示子网掩码的数字,而是代表32位子网掩码(二进制形式)中前面的“1”的个数。

子网划分

image-20191104003019819
CIDR可以实现非常灵活的子网划分:

例如对一个C类网络,使用子网掩码255.255.255.128,就将一个C类网络划分为两个子网了,这就比单纯用ABCDE类来判断方便不少

image-20191104004632062
路由器的地址就是计算机的网关,一般用本网段的第一个地址,但是不一定是1,像上图中就是从129(主机号0是子网网络地址,不能分配给主机用)开始的

点对点

对于一些点对点网络,子网掩码可以到255.255.255.252,也就是可用主机地址一共有4个,抛去网络地址和广播地址正好两个,够点对点用

变长子网划分

好理解,要组建多个子网且每个大小不一样的时候就怎么干,划分的子网掩码长度不一样

超网

image-20191104010350902
超网是为了解决类似“一个C类不够,一个B类太大,只能用两个C类但是怎么合起来”的问题,这种情况下,局域网的通信还要涉及到路由器,很麻烦

实现超网(合并网络)是通过修改子网掩码实现的:

image-20191104010922180
image-20191104011107485

IP地址与MAC地址

拓展:为什么ip地址没有代替mac地址?

来源:https://www.zhihu.com/question/21011060

以太网发明出来的时候,IP还没有垄断网络层协议,那时还有Novell网的IPX/SPX协议、DEC公司开发的CLNP网络协议,以及Apple公司开发的Apple Talk协议,以太网需要支持这所有的网络层协议,如果没有MAC地址,势必需要网卡解读网络层协议头的地址信息,而每一种网络层的地址都大相径庭,所以增加了以太网卡的实现复杂度。

而网卡有了MAC地址,可以不依赖于任何网络层协议,可以独立判断一个以太帧是否接收(依据MAC地址匹配),这样大大简化了网卡的实现。

即使以后出现更多的网络层协议,网卡也无需太多的改变,这就是网络分层的精髓,一层的内部实现无需知晓其上层、或下层协议字段。

image-20191104011231485
通信过程:

  1. A通过子网掩码做与运算,发现目标和自己不在一个网段,所以将数据给路由器,目标MAC地址写路由器M2的MAC地址,这样交换机才能把数据传给M2(交换机在数据链路层,交换机在网络层,所以交换机不能读ip地址)

  2. 路由器收到后查找路由表,查到这一网段的目标MAC地址(也就是路由器M4的MAC地址),然后修改数据中的目标MAC地址,注意源MAC地址修改成了发出端口M3的地址

  3. 目标路由器从路由表查询到Ip地址对应的MAC地址进行传输

    注意,集线器是物理层设备,它基本上是不参与这一过程的,集线器不具有“智能”

注意在上面的传输中,ip地址是全程没有变化的,只有MAC地址变了

所以说,MAC地址取代ip地址的条件是数据传输不涉及到网络层设备、能得到所有设备的物理地址(也就是MAC地址)。这个不是做不到,至少是在ip地址不使用NAT的前提下和ip实现的技术是差不多的,但是ip比没有规律的MAC好管理和分配的多

代理服务器

例如有一台设备安装了代理软件,而路由器只允许这台设备上网,其他设备需要先访问这台设备、通过这台设备上网。而这台设备就通过控制mac地址来控制网络,这种方式就不能用来对付其他网段的设备,因为它没办法得到其他网段设备请求的真实MAC地址,得到的是路由器输出口的。

ARP协议

ARP协议负责将Ip地址解析为mac地址,解析的方法就是广播,其实就是拿着Ip地址发广播求回复,回复之后就把ip和mac地址对写到表里了,下一次再用Ip访问就能直接使用mac物理地址了。

当然,既然使用了广播,安全性就一定有问题了。例如有其他设备冒充目标设备回应,这就是arp欺骗

p2p终结者、网络执法官等软件

p2p终结者软件使用arp欺骗,将其他设备解析的路由器地址骗为自己的地址,使得所有设备都要先经过自己才能上网

网络执法官软件可以控制同一网段下不同设备之间两两连接的通断。它是在其他设备发送广播时发送一个不存在的MAC地址,使得连接失败

Arp防火墙可以解决这个问题,它的原理其实是不接受一次询问有多个回答,否则就报错说有网络欺骗

通过arp欺骗之后的流量截获,我们还可以对未加密的数据包进行抓包,截获其他信息

RARP:逆向ARP

已经一个设备的MAC地址,请求一个ip地址,例如家用计算机的ip自动获取功能

IP数据报

image-20191104101037177
详细来看:

image-20191104101111047
版本:指明ipv4还是ipv6

区分服务:用来指明这个数据包的优先级,对实时性要求高的先传输(QoS,服务质量)

标识:计数器,每产生一个数据包,就增加1

标志:表示是否分片

image-20191104101704432
协议:image-20191104140228188
协议号举例:

image-20191104140336843
TCP是6,UDP是17

首部校验和:

image-20191104140457700
发送方:原码相加 ,并将高位叠加到低位,取反 ,得到反码求和结果,放入校验和
接收方:将所有原码相加,高位叠加,取反, 如全为0,则正确

可变部分:image-20191104140939209
数据包分片

把大包分割为小包

image-20191104101734009

来源:https://www.cnblogs.com/balaamwe/archive/2011/12/23/2299135.html

对于网络层的上层协议而言(这里以TCP/IP协议族为例)它们对“水管”粗细不在意,它们认为这个是网络层的事情。网络层IP协议会检查每个从上层协议下来的数据包的大 小,并根据本机MTU的大小决定是否作“分片”处理。

上面的除以8是干什么,这是因为RFC规定了对IP数据报分片,除最后一片外,其他片的数据长度均要求为8字节的整数倍。所以计算偏移也可以直接用除以8的结果表示:

image-20191104102431121

数据包生存时间

TTL(time to live),是一个数字。数据包每经过一个路由器,TTL就减去1.等到TTL为0时就不再转,而是直接丢弃,路由器传输的结果就是TTL传输中过期。

TTL的意义是避免成环后一些不存在的请求被重复传递。我们也可以利用TTL实现一些其他操作,例如将TTL设置为1、2\3来探测数据传输的过程中经过了几个路由器

ping

路由器可以设置不允许Ping,这不会影响到路由器对于数据的传输,只是不能直接访问路由器了而已

数据路由:数据包转发

路由器在不同网段转发数据包

网络畅通的条件:能去能回

  • 能去:沿途的路由器必须知道目标网络下一跳给哪个接口
  • 能回:沿途的路由器必须知道源网络下一跳给哪个接口

静态路由

来源:https://baike.baidu.com/item/%E9%9D%99%E6%80%81%E8%B7%AF%E7%94%B1

路由项(routing entry)由手动配置,而非动态决定。与动态路由不同,静态路由是固定的,不会改变,即使网络状况已经改变或是重新被组态。一般来说,静态路由是由网络管理员逐项加入路由表

使用静态路由的另一个好处是网络安全保密性高。动态路由因为需要路由器之间频繁地交换各自的路由表,而对路由表的分析可以揭示网络的拓扑结构网络地址等信息。因此,网络出于安全方面的考虑也可以采用静态路由。不占用网络带宽,因为静态路由不会产生更新流量。

但是大型和复杂的网络环境通常不宜采用静态路由。一方面,网络管理员难以全面地了解整个网络的拓扑结构;另一方面,当网络的拓扑结构和链路状态发生变化时,路由器中的静态路由信息需要大范围地调整,这一工作的难度和复杂程度非常高。当网络发生变化或网络发生故障时,不能重选路由,很可能使路由失败。

image-20191104142222075
例如上图,在不手动配置路由表的情况下,计算机可以Ping通A、B的地址,因为这个是第一个路由器本来就知道的

但是计算机是不能ping通C的地址的,因为虽然第一个路由器知道C所在的网段、可以将数据包传递给C,但是第二个路由器是不知道计算机所在的网段的地址是在哪个端口的,所以不可以。

第一个路由器内不手动添加的话,有路由项:

image-20191104143533141
手动添加:

image-20191104143723034
输入目标网络的ip和子网掩码以及本路由器的端口,注意必须输入网络的ip,也就是主机名是0的那个,这个命令表示本路由器的这个端口可以到达这个网络

网络规模较小的一般用静态路由就可以

默认网关

什么是默认网关:

来源:https://www.zhihu.com/question/21787311

网关是默认的数据出口。如果你的数据不知道往哪里走的话,那么他会去默认网关那里报道。

默认网关事实上不是一个产品而是一个网络层的概念,PC本身不具备路由寻址能力,所以PC要把所有的IP包发送到一个默认的中转地址上面进行转发,也就是默认网关。这个网关可以在路由器上,可以在三层交换机上,可以在防火墙上,可以在服务器上,所以和物理的设备无关。

即使是计算机,也有自己的路由表:

image-20191104144000070
第一条是默认路由:计算机的网关就是默认路由。

添加默认路由:

image-20191104144242746
计算机如果添加多个网关、有多个默认路由,就会认为有多条路径来到其他设备,这会导致丢包的问题,尤其是一个路由连接外网,一个连接内网的情况下。丢包倒不是不能访问,只是会导致访问缓慢。所以一台机器应该只有一个默认路由

网关是本网段的一个出口

默认路由和网关的区别

来源:https://www.zhihu.com/question/279498905

默认路由是路由功能中的术语,大概意思就是路由器在对数据进行选路的时候对于不晓得该走哪的数据无脑丢到默认路由上去。一般家用路由器上除了本地直连路由外就只设置个默认路由

网关一般是针对于终端来说的,比如电脑,手机这些。网关对于终端来说就是除了访问局域网时,要到别的网络里溜达溜达的时候的一个城门。也就是一个网络连接另外个网络的关卡。

总结一下,默认路由是个指路牌,认不到路就走这。网关是一个围城的城门洞,你想出去只能走这。

本质上这俩是一个玩意,只是在不同场景下的马甲,比如终端中设置的网关本质上来说也是默认路由,只是对自己发出来的包进行选路

PS:电脑上插两个网卡接两个网络后打开数据转发功能后就是个路由器,这时候设置的网关就可以叫默认路由了

负载均衡

来源:http://developer.51cto.com/art/201902/592284.htm

当请求到来时,为了将请求均衡的分配到后端服务器,负载均衡程序将从服务对应的地址列表中,通过相应的负载均衡算法和法则,选取一台服务器进行访问,这个过程称为服务的负载均衡。

路由表查找

image-20191104150441520
以树型结构查找,储存时也要按规律排序存储

ICMP协议

image-20191104200320342
image-20191104200949169
询问是否通,返回差错报告报文说明是否通

重定向报文:路由器发现有更优的访问路径时返回重定向报文,这样下一次请求就不再去找默认网关了

image-20191104201401151
注意发送的数据包的数据段其实是没用的,收到之后直接就去掉了,只保留首部,再加上ICMP首部以生成ICMP差错报告报文返回。

patping

patping会检测路径上每一个路由器是否联通,从而便于查错。但是注意路由器可能设置访问策略,不允许ping自己

image-20191104204342137
那个百分比是丢包率。可以观察哪个环节丢包比较严重,看是哪里出现了问题。

在Linux下,类似的命令叫mtr(my traceroute):

image-20191104204710389
在HKping学校教务网站:

image-20191104204852481

RIP协议:动态路由协议

RIP是万维网最早的动态路由协议

  1. 周期性广播:路由器每隔30秒广播自己的网段,以适用网络可能的动态变化
  2. 其他路由器会在路由表记录下这个网段以及从这里访问那个网段要经过的路由器数量(跳数,这就是RIP考虑最佳路径的唯一标准,没有考虑带宽等其他因素),但转发表中只记录最佳路径(到某个网段可能有多条路径可选)
  3. RIP认为16跳是最大跳数,16和再大就认为不可到达了
  4. 如果某一设备超过3个周期没有广播自己的网段,就认为宕机,其他设备会通知和自己相连的设备,该网段已不可通过自己访问

动态路由的优先级低于静态路由,如果同时有静态和动态的话会听静态的

OSPF动态路由协议

image-20191104210842745

  • 在internet上使用
  • 开放
  • 最短路径优先

OSPF的度量值是带宽,且支持多区域,是触发式更新(只有在路由器发生变化的时候才更新)

三个表:邻居表(在局域网中每隔2秒钟给邻居发个hello包,互相打个招呼,看看是否健在)、链路状态表(路由器之间互相交换邻居表,然后每个节点计算一个完整的链路图,使用djkstra最短路径算法,从而得到到各个网段的最短路径,然后得到第三个表)、路由表

因为计算链路状态很麻烦,特别是对于大型的网络,所以一般是先对大型网络分区域,只在区域中计算路由表

image-20191104212619682
支持负载均衡、直接使用IP数据报

image-20191104212951980
配置OSPF时使用的是翻转掩码,就是子网掩码取反

BGP协议:外部网关协议

image-20191104214415413
用于连接各个自治系统,和系统内部所运行的协议(RIP、OSPF)没有关系

可以指定一些策略,实现有策略的系统互联

image-20191104214604560
每个区域有一个发言人,发言人告诉主干网自己所连接的子网

image-20191104214708986
BGP协议的特点:

image-20191104214801275

VPN

VPN(虚拟专用网,Virtual Private Network)

image-20191104215002836
目标地址是VPN服务器,对内网资源的访问数据包作为实际传输的数据包的数据部分

image-20191104215210891
通过加密,使得不安全的网络访问变得安全,相当于到内网的虚拟的专线

使用VPN相当于将电脑搬到该VPN服务器所在的内网中

建立VPN连接(Windows)

image-20191104215748219
image-20191104215812283
一个骚操作:如果一个单位没有VPN服务器但是需要连接内网资源,可以让他先连接到一个有VPN服务器的内网,然后使用该内网中另外一台电脑的远程桌面、使用该内网的内网地址来连接该电脑,从而实现访问内网资源。

image-20191104220414310
去掉“使用默认网关”有什么意义:如果不去掉,使用VPN之后访问外网资源是需要经过:主机-VPN服务器所在内网-外网资源-VPN服务器所在内网-主机,很繁琐,也不是我们使用VPN的原始目的,去掉之后就可以对于外网流量实现直接访问而不使用VPN连接了

NAT:网络地址转换

私网地址和公网地址在网关转换,网关将数据包的原地址改为网关的公网地址,源端口也替换了

计算机打开一个网站,就建立了一个回话,一个回话就涉及到本地地址和外部地址,本地地址和外部地址就涉及到端口,网站的端口都是80,但是本地的端口是随机的

正因如此,不同设备之间的端口使用没有协商,所以很容易重复,这会导致数据包返回的时候路由器不知道应该发送给哪台机器,所以在传输的时候是连数据包中的源端口也一并替换了,返回的时候根据端口确定给哪台设备(路由器会记录哪个端口对应哪个地址)

NAT是一种内网可以主动访问外网,但是外网没办法主动访问内网的技术,所以可以用来做一些其他事情,例如保密部门可以访问其他部分的资源、但是其他部门不能访问保密部门

NAT的端口映射

端口映射可以使得公网访问内网,就是我们上面说的情况的反过来

关于端口映射和内网穿透,我写过一篇博文了:https://www.cnblogs.com/jiading/p/11146787.html。这里跟着老师再做一遍

外网访问内网时,指定一个端口,然后路由器的端口映射将外端口映射为内端口(注意,此时的内端口必须是唯一的,不能重复),然后将数据包发给这个端口对应的设备。用这种技术,ip地址就写外网网关的地址,只要修改端口号就能访问内网不同内网Ip的主机了

虚拟机网卡

每个虚拟机需要一个和物理机连接的网卡(虚拟网卡,不是物理上的设备),要访问物理机上面的资源的时候应该访问网卡而不是物理机,因为他们不在一个网段。同样的,设置好虚拟机的网卡地址后,一定要在虚拟机中设置、将虚拟设备放到虚拟网卡的网段中、配置好网络连接的网关

posted @ 2019-11-06 20:05  别再闹了  阅读(885)  评论(0编辑  收藏  举报