共计 5260 个字符,预计需要花费 14 分钟才能阅读完成。
综述
分层的概念
OSI 模型的网络分为 7 层,理论的 TCP/IP 有四层,采纳二者联合的形式,将网络分为 5 层,这 5 层自上而下是:应用层、传输层、网络层、链路层、物理层。
简单的程序都要分层,所以整个网络被分为了 5 层,以下是从浏览器发送申请开始,到服务器接管申请,整个过程依照分层的形式的工作流程,以下叙述中的函数,在名称上可能并没有这样的函数,只是为了表白含意
假如在浏览器上进行领取,此时应用的就是 TCP 传输。调用 send_tcp(buffer)
函数,buffer 中的内容就是 HTTP 申请,调用这个函数时,还会增加 TCP 头部,并记录一下应用的源端口号,而后发往下一层。调用 send_layer3(buffer)
函数,往 buffer 局部增加 IP 头部,记录一下源 IP 地址和目标 IP 地址。而后持续发往下一层,调用 send_layer2(buffer)
函数,往 buffer 中增加 MAC 头,记录源 MAC 地址和目标 MAC 地址,源 MAC 地址就是本机的 MAC 地址。如果指标机器与本机在同一个网内,那么目标 MAC 地址就是对应的 MAC 地址;若指标机器在外网,那么就要通过肯定的协定找到 MAC 地址,总之是不能空着。而后就交给操作系统应用网卡发包
应用网卡发包时,须要排队,因为不止有一个程序须要发包,排队遵循的规定,下文具体阐明
服务器接管包,能够开启混淆模式,意思是说网卡接管所有的包,而后判断这个包是不是发给本人的。假如服务器接管到了方才浏览器收回的申请包,那么服务器会调用 process_layer2(buffer)
函数,取下 MAC 头,发现是发给本人的,那么就将摘掉 MAC 头部残余的局部,发往上一层。上一层调用 process_layer3(buffer)
函数,取下 IP 头部,发现 IP 头部中的目标 IP 地址和本人的 IP 统一,那么阐明的确是发给本人的;如果不统一就转发进来。摘掉 IP 头部之后,查看这个包的内容。假如是 TCP 报文,就调用 process_tcp(buffer)
函数解决,UDP 就调用 process_udp(buffer)
。而后判断是一个发动,还是一个应答,又或者是一个失常的数据包,而后别离由不同的逻辑进行解决。如果是发动或者应答,接下来可能要发送一个回复包;如果是一个失常的数据包,就须要交给下层,监听某个端口的程序。
只有在网络上的包,就是残缺的,能够有上层没下层,但不能够有下层没上层。
ifconfig 命令
在 Windows 上查看本机 IP 的命令是 ipconfig
,而在 Linux 等零碎上查看本机 IP 的命令是 ifconfig
,除了这个命令,还能够应用 ip addr
查看本机 IP。它们两个的不同之处在于,前者属于 net-tools 工具包中的命令,后者属于 iproute2 中的命令,后者更新。所以此处应用 ip addr
来解释命令的各种后果,以下就是执行此命令的后果
IP 地址的分类
上图中,倒数第 4 行中 inet 之后的内容就是本机的 IP 地址,由 32 个二进制数字组成,上面的 inet6 示意对应的 IPV6 的地址。
IP 地址分为 A、B、C、D、E 五类,其中 D 类用作组播地址,E 类地址保留,仅作为搜寻、试验开发之用。所以 A、B、C 类地址才是个别状况下应用的。
这三类地址中都是由网络号和主机号组成的,A 类地址的第 1 个字节是网络地址,其余 3 个字节是主机地址,而全 0 和全 1 有其余用处,所以 A 类 IP 的无效地址范畴是 1: 0: 0: 1 ~ 126: 255: 255: 254,一共是 1600 多万个。B 类地址的前两个字节是网络号,后两个字节是主机号;C 类前三个字节是网络号,最初一个字节是主机号。
依据 A、B、C 类调配 IP 地址有诸多不便,很容易造成节约,所以采纳了 CIDR 的形式调配
无类型域间选路 (CIDR)
因为采纳 A、B、C 类别划分 IP 地址有诸多的问题,所以采纳 CIDR 的形式。也就是应用子网掩码的模式。
子网掩码由间断的 1 和间断的 0 组成,将子网掩码与 IP 地址对应,1 的局部就是网络号,0 的局部就是主机号。为了简便示意,通常会在 IP 地址前面增加网络号的位数,比方上图中 IP 地址的前 20 位就是网络号。
私有 IP 和公有 IP。私有 IP 是拜访公网时用到的,公有 IP 是在局域网内应用的,例如在家里的 IP 通常都是 192.168.1.x
图中 IP 地址前面的 brd 就是播送地址,再前面的 scope 对于 eth0 而言值是 global,示意这张网卡能够对外,能接管来自各个中央的包,相对而言下面第 3 行显示 host lo 就示意这张网卡仅能够供本机相互通信。lo 的全称是 loopback,又叫做环回接口,往往会被调配到 127.0.0.1 这个地址。这个地址用于本机通信,通过内核解决后间接返回,不会在任何网络中呈现
MAC 地址
在 IP 地址的上一行,就是 MAC 地址,应用 6 个 16 进制数示意。MAC 地址号称全网惟一,就像是身份证一样,而且具备肯定的定位性能。MAC 地址的通信范畴比拟小,在一个局域网外面,就会应用 MAC 地址确定是哪一台主机要接管包
MAC 地址是全网惟一的,然而仍旧是不能仅应用 MAC 地址而不应用 IP 地址,也就是晓得对方的 MAC 地址,也不能不应用 IP 地址就把包送到。与寄快递相似,MAC 地址相当于用户的身份证,身份证具备肯定的定位性能,然而晓得用户的身份证,也仍旧不能把快递送到用户手中。IP 地址才具备近程定位的性能,IP 地址相当于收货地址,将报文送往某一个网内,此时才须要 MAC 地址确定接管包的主机
网络设备状态
在 MAC 地址的上一行,被 “<>” 围住的内容,叫 net_device flags, 网络设备的状态标识。
- UP 示意网卡处于启动状态
- BOARDCAST 示意这个网卡有播送地址,能够发送播送包
- MULTICAST 示意网卡能够发送多播包
- LOWER_UP 示意 L1 是启动的,也就是说网线插着
- 前面的 mtu1500 示意最大传输单元 MTU 是 1500,是以太网的默认值,示意包含 MAC 头部的包不能超过 1500 个字节,超过就须要分片传输。
- qdisc 叫做排队规定(queuing discipline),指的是如果有多个包期待发送,这些包在队列外面的排队规定。
最简略的规定是 pfifo,也就是先入先出,不对数据包做任何解决。
还有一种形式是: pfifo_fast,它的队列包含 3 个波段(band),band0 优先级最高,band2 优先级最低,在波段外部采纳先入先出的规定。数据包是依照服务类型 (Type of Service TOF) 被调配到三个波段里的,TOS 是 IP 头外面的一个字段,代表了以后包是高优先级的还是低优先级的。
如果 band 0 外面有数据包,零碎就不会解决 band 1 外面的数据包,band 1 和 band 2 之间也是一样。数据包是依照服务类型(Type of Service,TOS)被调配到三个波段外面的。TOS 是 IP 头外面的一个字段,代表了以后的包是高优先级的,还是低优先级的
DHCP
上文中提到,查看本机 IP 的命令有: ifconfig
和 ip addr
,配置主机的 IP 也能够应用这两个命令。应用 net_tools 工具: ifconfig eth1 11.11.11.11/11
和 ifconfig eth1 up
即可;应用 iproute2: ip addr add 10.10.10.1/24 dev eth1
和 ip link set up eth1
即可。然而为了和局域网配套,不能随便设置 IP 地址。
假如旁边有一台机器,IP 地址是 192.168.1.2,本人的主机 IP 设置成了 10.10.11.11. 尽管间隔很近,然而如果执行 ping 192.168.1.2
也还是不通,即使这两台机器应用的是同一个交换机。起因如下:
网络上的包都是残缺的 ,晓得本人的 IP 是 10.10.11.11 以及目标 IP 地址是 192.168.1.2,也还是无奈发包,因为指标 MAC 地址不晓得。若两台机器在同一个网里,零碎则会发送 ARP 包,通过目标 IP 地址来获取目标 MAC 地址。然而此时的两个 IP 显然不在同一个网里,因为它们的网络号不一样。既然 不在同一个网里,零碎就会把包发送给网关。对于 192.168.1.2 这台机器,尽管目标 IP 和本人的雷同,然而因为目标 MAC 地址是网关的 MAC 地址,所以它的网卡不会接管这个包。
如果没有配置网关,那么就没有目标 MAC 地址,如此这个数据包也就无奈发送进来。当然,也不能将网关配置为 192.168.1.2,因为网关和以后的网络要是同一个网段,显然这两个 IP 不是同一个网段。
DHCP 动静主机配置协定
当主机地位产生挪动,从一个网挪动到了另一个网里,就须要重新配置 IP,为了缩小这部分的工作量,所以有了 DHCP 动静配置 IP。DHCP 相当于租房,在租期内能够应用某个 IP,租约到期或者主机下线,对应的 IP 就会被发出,供其它新接入的主机应用
DHCP 工作原理
运行 DHCP 须要有一个 DHCP 服务器 (DHCP Server),对立治理某个局域网下所有的 IP 地址。
此时若有一个新的主机接入,那这台主机只有本人的 MAC 地址,没有 IP 地址,所以它会 发送播送,目标 IP 地址是 255.255.255.255,播送包里封装了 UDP,UDP 包里封装了 BOOTP,DHCP 是 BOOTP 的升级版。此时 DHCP Server 收到播送包,晓得有一台主机新退出了网络,须要租给它调配一个新的 IP 地址 (DHCP Offer),同时保留调配给这个主机的 IP,从而不会为其余 DHCP 客户端调配这个 IP 地址。在这个过程中,DHCP Server 依然采纳播送的形式发送租约信息,因为此时新主机还没有 IP
新主机收到回复后,会向网络中发送一个 DHCP Request 播送包,包中蕴含 客户端的 MAC 地址 、 承受租约的 IP 地址 、 提供此租约的 DHCP 服务器地址 等。若有多个 DHCP 服务器,那么主机会应用 最先达到 的租约信息,并通知其余 DHCP Server 曾经承受了某个租约信息,申请撤销它们提供的 IP 地址,以便供其它新主机应用。因为此时还没有失去 DHCP Server 的确认,所以主机依然应用播送的形式。
DHCP Server 接管到客户机的 DHCP Request 后,会播送一个 DHCP ACK 的音讯包,示意曾经承受客户机的抉择,并将这一 IP 地址的非法租用信息以及其余配置信息都放入该播送包,发给客户机。最终 租约达成的时候,也须要播送,让网内的主机都通晓
IP 地址的发出和续租
既然是租用 IP 地址,那么就会有租约到期的时候。如果主机下线那么 IP 地址就会被发出。客户机会在租期到了 50 % 的时候,间接向为其提供 IP 地址的 DHCP 服务器发送 DHCP Request 音讯包。客户机接管到该服务器回应的 DHCP ACK 音讯包,会依据包中所提供的新的租期以及其余曾经更新的 TCP/IP 参数,更新本人的配置。如此,IP 租用更新就实现了
预启动执行环境 (PXE)
除了为新退出局域网的电脑设置 IP 地址外,DHCP 协定还能够为新退出局域网的电脑装置操作系统。集体购买的 PC 机预装了操作系统,而例如数据中心的机器,一下子可能会有几百台空机器,逐态装置的工作量极大,而应用 DHCP 协定预启动执行环境 (PXE) 即可
操作系统启动的过程,首先要启动 BIOS,此时只能干一件很小的事件,就是读取硬盘的 MBR 启动扇区,将 GRUB 启动起来,而后将势力交给 GRUB,GRUB 加载内核、加载作为根文件系统的 initramfs 文件;而后将势力交给内核;最初内核启动,初始化整个操作系统。
所以装置操作系统的过程,只能插在 BIOS 启动之后,因为没有装置操作系统之前,连启动扇区都没有。所以这个做成叫做预启动执行环境 (PXE)
PXE 协定分为客户端和服务端,因为还没有操作系统,只能先把客户端放在 BIOS 里。等启动 BIOS 时,就把 PXE 客户端放入内存中,就能连贯服务器进行一些操作。首先 PXE 客户端本人也须要有一个 IP 地址,获取 IP 地址的形式就是前文中提到的 DHCP 的形式。此外,在 DHCP Server 中另外配置 next-server 令其指向 PXE 服务地址,还有初始启动文件 filename。
如此 PXE 客户端启动后,发送 DHCP 申请之后,除了能失去 IP 地址,还能晓得 PXE 服务器在哪里,也能够晓得如何从 PXE 服务器上下载文件,初始化操作系统
PXE 的启动过程
首先启动 PXE 客户端,第一步是通过 DHCP 协定向 DHCP Server 申请一个 IP 地址,在 DHCP Server 租给这台主机 IP 地址时,也会告知 PXE 服务器的地址、启动文件 pxelinu.0
而后,PXE 客户端晓得要去 PXE 服务器下载文件后,就能初始化机器。于是就开始下载,应用的是 TFTP 协定。所以在 PXE 服务器上还须要有 TFTP 服务器。PXE 客户端向 TFTP 服务器申请下载这个文件,于是 TFTP 服务器就开始传输这个文件
PXE 客户端收到这个文件后,开始执行。这个文件会批示客户端,向 TFTP 服务器申请计算机的配置信息 pxelinux.cfg. 于是 TFTP 服务器会给 PXE 客户端一个配置文件,阐明内核、initramfs 文件的地位。PXE 客户端会申请这些文件
最初启动 linux 内核