趣谈网络协议2

来自极客时间《趣谈网络协议》linux

1.网络分层的真正含义是什么?web

在这里插入图片描述
那 TCP 在三次握手的时候,IP 层和 MAC 层在作什么呢?固然是 TCP 发送每个消息,都会带着 IP 层和 MAC 层了。由于,TCP 每发送一个消息,IP 层和 MAC 层的全部机制都要运行一遍。而你只看到TCP 三次握手了,其实,IP 层和 MAC 层为此也忙活很久了。浏览器

这里要记住一点:只要是在网络上跑的包,都是完整的。能够有下层没上层,绝对不可能有上层没下层。服务器

因此,对 TCP 协议来讲,三次握手也好,重试也好,只要想发出去包,就要有 IP 层和 MAC 层,否则是发不出去的。网络

常常有人会问这样一个问题,我都知道那台机器的 IP 地址了,直接发给他消息呗,要 MAC 地址干啥?这里的关键就是,没有 MAC 地址消息是发不出去的。less

因此若是一个 HTTP 协议的包跑在网络上,它必定是完整的。不管这个包通过哪些设备,它都是完整的。svg

所谓的二层设备、三层设备,都是这些设备上跑的程序不一样而已。一个 HTTP 协议的包通过一个二层设备,二层设备收进去的是整个网络包。这里面 HTTP、TCP、 IP、 MAC 都有。什么叫二层设备呀,就是只把 MAC 头摘下来,看看究竟是丢弃、转发,仍是本身留着。那什么叫三层设备呢?就是把 MAC头摘下来以后,再把 IP 头摘下来,看看究竟是丢弃、转发,仍是本身留着。微服务

小结云计算

总结一下今天的内容,理解网络协议的工做模式,有两个小窍门:
1.始终想象本身是一个处理网络包的程序:如何拿到网络包,如何根据规则进行处理,如何发出去;
2.始终牢记一个原则:只要是在网络上跑的包,都是完整的。能够有下层没上层,绝对不可能有上层没下层。操作系统

2.ifconfig命令行

五类IP地址:

在这里插入图片描述
CIDR:

CIDR是由于ABC类地址分配数量不知足需求了。

CIDR(无类别域间路由,Classless Inter-Domain Routing),CIDR 对原来用于分配A类、B类和C类地址的有类别路由选择进程进行了从新构建。CIDR用 13-27位长的前缀取代了原来地址结构对地址网络部分的限制(3类地址的网络部分分别被限制为8位、16位和24位)。

这种方式打破了原来设计的几类地址的作法,将 32 位的 IP 地址一分为二,前面是网络号,后面是主机号。从哪里分呢?你若是注意观察的话能够看到,10.100.122.2/24,这个 IP 地址中有一个斜杠,斜杠后面有个数字 24。这种地址表示形式,就是 CIDR。后面 24 的意思是,32 位中,前 24 位是网络号,后 8 位是主机号。

伴随着 CIDR 存在的,一个是广播地址,10.100.122.255。若是发送这个地址,全部 10.100.122 网络里面的机器均可以收到。另外一个是子网掩码,255.255.255.0。

将子网掩码和 IP 地址进行 AND 计算。前面三个 255,转成二进制都是 1。1 和任何数值取 AND,都是原来数值,于是前三个数不变,为 10.100.122。后面一个 0,转换成二进制是 0,0 和任何数值取AND,都是 0,于是最后一个数变为 0,合起来就是 10.100.122.0。这就是网络号。将子网掩码和 IP地址按位计算 AND,就可获得网络号

公有IP地址和私有IP地址:

在平常的工做中,几乎不用划分 A 类、B 类或者 C 类,因此时间长了,不少人就忘记了这个分类,而只记得 CIDR。可是有一点仍是要注意的,就是公有 IP 地址和私有 IP 地址。

在这里插入图片描述
咱们继续看上面的表格。表格最右列是私有 IP 地址段。平时咱们看到的数据中内心,办公室、家里或学校的 IP 地址,通常都是私有 IP 地址段。由于这些地址容许组织内部的 IT 人员本身管理、本身分配,并且能够重复。所以,你学校的某个私有 IP 地址段和我学校的能够是同样的。

这就像每一个小区有本身的楼编号和门牌号,大家小区能够叫 6 栋,咱们小区也叫 6 栋,没有任何问题。可是一旦出了小区,就须要使用公有 IP 地址。就像人民路 888 号,是国家统一分配的,不能两个小区都叫人民路 888 号。

举例:一个容易“犯错”的 CIDR

咱们来看 16.158.165.91/22 这个 CIDR。求一下这个网络的第一个地址、子网掩码和广播地址。

MAC地址:

网络设备的状态标识:

小结
怎么样,看起来很简单的一个命令,里面学问很大吧?经过这一节,但愿你能记住如下的知识点,后面都能用得上:
1.IP 是地址,有定位功能;MAC 是身份证,无定位功能;
2.CIDR 能够用来判断是否是本地人;
3.IP 分公有的 IP 和私有的 IP。

3.DHCP与PXE:IP是怎么来的,又是怎么没的?

DHCP:Dynamic Host Configuration Protocol,DHCP,动态主机设置协议,主要有两个用途:用于内部网或网络服务供应商自动分配IP地址;给用户用于内部网管理员做为对全部计算机做中央管理的手段。

DHCP主要做用是集中的管理、分配IP地址,使网络环境中的主机动态的得到IP地址、Gateway地址、DNS服务器地址等信息,并可以提高地址的使用率。

PXE更多了解参考:https://blog.csdn.net/chinamasala/article/details/77650902

一个问题:旁边的机器都是 192.168.1.x,我非得配置一个 16.158.23.6,会出现什么现象呢?

不会出现任何现象,就是包发不出去呗。为何发不出去呢?我来举例说明。

192.168.1.6 就在你这台机器的旁边,甚至是在同一个交换机上,而你把机器的地址设为了16.158.23.6。在这台机器上,你企图去 ping192.168.1.6,你以为只要将包发出去,同一个交换机的另外一台机器立刻就能收到,对不对?

但是 Linux 系统不是这样的,它没你想得那么智能。你用肉眼看到那台机器就在旁边,它则须要根据本身的逻辑进行处理。

还记得咱们在第二节说过的原则吗?只要是在网络上跑的包,都是完整的,能够有下层没上层,绝对不可能有上层没下层。

因此,你看着它有本身的源 IP 地址 16.158.23.6,也有目标 IP 地址 192.168.1.6,可是包发不出去,这是由于 MAC 层还没填。

本身的 MAC 地址本身知道,这个容易。可是目标 MAC 填什么呢?是否是填 192.168.1.6 这台机器的MAC 地址呢?

固然不是。Linux 首先会判断,要去的这个地址和我是一个网段的吗,或者和个人一个网卡是同一网段的吗?只有是一个网段的,它才会发送 ARP 请求,获取 MAC 地址。若是发现不是呢?

Linux 默认的逻辑是,若是这是一个跨网段的调用,它便不会直接将包发送到网络上,而是企图将包发送到网关。

若是你配置了网关的话,Linux 会获取网关的 MAC 地址,而后将包发出去。对于 192.168.1.6 这台机器来说,虽然路过它家门的这个包,目标 IP 是它,可是无奈 MAC 地址不是它的,因此它的网卡是不会把包收进去的。

若是没有配置网关呢?那包压根就发不出去。

若是将网关配置为 192.168.1.6 呢?不可能,Linux 不会让你配置成功的,由于网关要和当前的网络至少一个网卡是同一个网段的,怎么可能 16.158.23.6 的网关是 192.168.1.6 呢?因此,当你须要手动配置一台机器的网络 IP 时,必定要好好问问你的网络管理员。若是在机房里面,要去网络管理员那里申请,让他给你分配一段正确的 IP 地址。固然,真正配置的时候,必定不是直接用命令配置的,而是放在一个配置文件里面。不一样系统的配置文件格式不一样,可是无非就是 CIDR(无类别域间路由,Classless Inter-Domain Routing)、子网掩码、广播地址和网关地址。

DHCP(动态主机配置协议)

原来配置 IP 有这么多门道儿啊。你可能会问了,配置了 IP 以后通常不能变的,配置一个服务端的机器还能够,可是若是是客户端的机器呢?我抱着一台笔记本电脑在公司里走来走去,或者白天来晚上走,每次使用都要配置 IP 地址,那可怎么办?还有人事、行政等非技术人员,若是公司全部的电脑都须要 IT人员配置,确定忙不过来啊。

所以,咱们须要有一个自动配置的协议,也就是称动态主机配置协议(Dynamic Host ConfigurationProtocol),简称DHCP。

有了这个协议,网络管理员就轻松多了。他只须要配置一段共享的 IP 地址。每一台新接入的机器都经过DHCP 协议,来这个共享的 IP 地址里申请,而后自动配置好就能够了。等人走了,或者用完了,还回去,这样其余的机器也能用。

因此说,若是是数据中内心面的服务器,IP 一旦配置好,基本不会变,这就至关于买房本身装修。DHCP 的方式就至关于租房。你不用装修,都是帮你配置好的。你暂时用一下,用完退租就能够了。

解析DHCP的工做方式

当一台机器新加入一个网络的时候,确定一脸懵,啥状况都不知道,只知道本身的 MAC 地址。怎么办?先吼一句,我来啦,有人吗?这时候的沟通基本靠“吼”。这一步,咱们称为DHCP Discover。

新来的机器使用 IP 地址 0.0.0.0 发送了一个广播包,目的 IP 地址为 255.255.255.255。广播包封装在UDP 里面,UDP 封装在 BOOTP 里面。其实 DHCP 是 BOOTP 的加强版,可是若是你去抓包的话,极可能看到的名称仍是 BOOTP 协议。

在这个广播包里面,新人大声喊:我是新来的(Boot request),个人 MAC 地址是这个,我尚未IP,谁能给租给我个 IP 地址!

格式就像这样:

在这里插入图片描述

若是一个网络管理员在网络里面配置了DHCP Server的话,他就至关于这些 IP 的管理员。他马上能知道来了一个“新人”。这个时候,咱们能够体会 MAC 地址惟一的重要性了。当一台机器带着本身的 MAC地址加入一个网络的时候,MAC 是它惟一的身份,若是连这个都重复了,就没办法配置了。

只有 MAC 惟一,IP 管理员才能知道这是一个新人,须要租给它一个 IP 地址,这个过程咱们称为DHCPOffer。同时,DHCP Server 为此客户保留为它提供的 IP 地址,从而不会为其余 DHCP 客户分配此 IP地址。

DHCP Offer 的格式就像这样,里面有给新人分配的地址。

在这里插入图片描述
DHCP Server 仍然使用广播地址做为目的地址,由于,此时请求分配 IP 的新人尚未本身的 IP。DHCP Server 回复说,我分配了一个可用的 IP 给你,你看如何?除此以外,服务器还发送了子网掩码、网关和 IP 地址租用期等信息。

新来的机器很开心,它的“吼”获得了回复,而且有人愿意租给它一个 IP 地址了,这意味着它能够在网络上立足了。固然更使人开心的是,若是有多个 DHCP Server,这台新机器会收到多个 IP 地址,简直受宠若惊。

它会选择其中一个 DHCP Offer,通常是最早到达的那个,而且会向网络发送一个 DHCP Request 广播数据包,包中包含客户端的 MAC 地址、接受的租约中的 IP 地址、提供此租约的 DHCP 服务器地址等,并告诉全部 DHCP Server 它将接受哪一台服务器提供的 IP 地址,告诉其余 DHCP 服务器,谢谢大家的接纳,并请求撤销它们提供的 IP 地址,以便提供给下一个 IP 租用请求者。

在这里插入图片描述

此时,因为尚未获得 DHCP Server 的最后确认,客户端仍然使用 0.0.0.0 为源 IP 地址、255.255.255.255 为目标地址进行广播。在 BOOTP 里面,接受某个 DHCP Server 的分配的 IP。

当 DHCP Server 接收到客户机的 DHCP request 以后,会广播返回给客户机一个 DHCP ACK 消息包,代表已经接受客户机的选择,并将这一 IP 地址的合法租用信息和其余的配置信息都放入该广播包,发给客户机,欢迎它加入网络你们庭。

在这里插入图片描述
最终租约达成的时候,仍是须要广播一下,让你们都知道。

IP 地址的收回和续租
既然是租房子,就是有租期的。租期到了,管理员就要将 IP 收回。

若是不用的话,收回就收回了。就像你租房子同样,若是还要续租的话,不能到了时间再续租,而是要提早一段时间给房东说。DHCP 也是这样。

客户机会在租期过去 50% 的时候,直接向为其提供 IP 地址的 DHCP Server 发送 DHCP request 消息包。客户机接收到该服务器回应的 DHCP ACK 消息包,会根据包中所提供的新的租期以及其余已经更新的 TCP/IP 参数,更新本身的配置。这样,IP 租用更新就完成了。

好了,一切看起来完美。DHCP 协议大部分人都知道,可是其实里面隐藏着一个细节,不少人可能不会去注意。

接下来,我就讲一个有意思的事情:网络管理员不只能自动分配 IP 地址,还能帮你自动安装操做系统!

预启动执行环境(PXE):

操做系统通常启动过程:
首先,启动 BIOS。这是一个特别小的小系统,只能干特别小的一件事情。其实就是读取硬盘的 MBR 启动扇区,将 GRUB 启动起来;而后将权力交给GRUB,GRUB 加载内核、加载做为根文件系统的 initramfs 文件;而后将权力交给内核;最后内核启动,初始化整个操做系统。

预启动执行环境(Pre-boot Execution Environment),简称PXE。

PXE背景能够是例如:解决几百台空的机器安装系统和自动分配IP这样的问题,这事儿其实仔细一想,仍是挺有难度的。安装操做系统,应该有个光盘吧。数据中内心不能用光盘吧,想了一个办法就是,能够将光盘里面要安装的操做系统放在一个服务器上,让客户端去下载。可是客户端放在哪里呢?它怎么知道去哪一个服务器上下载呢?客户端总得安装在一个操做系统上呀,但是这个客户端原本就是用来安装操做系统的呀?

PXE 协议分为客户端和服务器端,因为尚未操做系统,只能先把客户端放在 BIOS 里面。当计算机启动时,BIOS 把 PXE 客户端调入内存里面,就能够链接到服务端作一些操做了。

首先,PXE 客户端本身也须要有个 IP 地址。由于 PXE 的客户端启动起来,就能够发送一个 DHCP 的请求,让 DHCP Server 给它分配一个地址。PXE 客户端有了本身的地址,那它怎么知道 PXE 服务器在哪里呢?对于其余的协议,都好办,要么人告诉他。例如,告诉浏览器要访问的 IP 地址,或者在配置中告诉它;例如,微服务之间的相互调用。

可是 PXE 客户端启动的时候,啥都没有。好在 DHCP Server 除了分配 IP 地址之外,还能够作一些其余的事情。这里有一个 DHCP Server 的一个样例配置:

ddns-update-style interim;
ignore client-updates;
allow booting;
allow bootp;
subnet 192.168.1.0 netmask 255.255.255.0
{
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
option time-offset -18000;
default-lease-time 21600;
max-lease-time 43200;
range dynamic-bootp 192.168.1.240 192.168.1.250;
filename "pxelinux.0";
next-server 192.168.1.180;
}

按照上面的原理,默认的 DHCP Server 是须要配置的,无非是咱们配置 IP 的时候所须要的 IP 地址段、子网掩码、网关地址、租期等。若是想使用 PXE,则须要配置 next-server,指向 PXE 服务器的地址,另外要配置初始启动文件 filename。

这样 PXE 客户端启动以后,发送 DHCP 请求以后,除了能获得一个 IP 地址,还能够知道 PXE 服务器在哪里,也能够知道如何从 PXE 服务器上下载某个文件,去初始化操做系统。

解析 PXE 的工做过程:

首先,启动 PXE 客户端。第一步是经过 DHCP 协议告诉 DHCP Server,我刚来,一贫如洗,啥都没有。DHCP Server 便租给它一个 IP 地址,同时也给它 PXE 服务器的地址、启动文件 pxelinux.0。

其次,PXE 客户端知道要去 PXE 服务器下载这个文件后,就能够初始化机器。因而便开始下载,下载的时候使用的是 TFTP 协议。因此 PXE 服务器上,每每还须要有一个 TFTP 服务器。PXE 客户端向 TFTP服务器请求下载这个文件,TFTP 服务器说好啊,因而就将这个文件传给它。

而后,PXE 客户端收到这个文件后,就开始执行这个文件。这个文件会指示 PXE 客户端,向 TFTP 服务器请求计算机的配置信息 pxelinux.cfg。TFTP 服务器会给 PXE 客户端一个配置文件,里面会说内核在哪里、initramfs 在哪里。PXE 客户端会请求这些文件。

最好,启动 Linux 内核。一旦启动了操做系统,之后就啥都好办了。

在这里插入图片描述
附注:PXE(Pre-boot Execution Environment)是由Intel设计的协议,它可使计算机经过网络启动。协议分为client和server两端,PXE client在网卡的ROM中,当计算机引导时,BIOS把PXE client调入内存执行,并显示出命令菜单,经用户选择后,PXE client将放置在远端的操做系统经过网络下载到本地运行

更多能够参考:https://blog.csdn.net/chinamasala/article/details/77650902

好了,这一节就到这里了。我来总结一下今天的内容: 1.DHCP 协议主要是用来给客户租用 IP 地址,和房产中介很像,要商谈、签约、续租,广播还不能“抢单”; 2.DHCP 协议能给客户推荐“装修队”PXE,可以安装操做系统,这个在云计算领域大有用处。