当前位置: 首页 > article >正文

浅谈网络 | 通信协议

目录

  • 一、一些问题
    • 1、TCP 在进行三次握手的时候,IP 层和 MAC 层对应都有什么操作呢?
    • 2、 二层设备处理的包里,有没有 HTTP 层的内容呢?
    • 3、通过 SSH 登录到公有云主机里面,都需要经历哪些过程?
    • 4、打开一个电商网站,都需要经历哪些过程?
  • 二、为什么要网络分层?
    • 网络数据包在经过不同网络层时的处理流程
  • 三、 Ifconfig&ip addr
  • 四、DHCP与PXE

协议三要素
语法,就是这一段内容要符合一定的规则和格式。例如,括号要成对,结束要使用分号等。
语义,就是这一段内容要代表某种意义。例如数字减去数字是有意义的,数字减去文本一般来说就没有意义。
顺序,就是先干啥,后干啥。例如,可以先加上某个数值,然后再减去某个数值。

用一个下单的过程,看看互联网世界的运行过程中,都使用了哪些网络协议:

  1. 浏览器发起请求(域名解析)
    DNS 或 HTTPDNS 查询:用户在浏览器输入网址(URL),浏览器需将域名(如www.kaola.com)转换成 IP 地址。通过 DNS 或 HTTPDNS 协议,浏览器查询得到了对应的 IP 地址,例如 106.114.138.24。
    URL 转换成 IP:域名就像网络的“地址簿”,将人类记忆的域名转成计算机识别的 IP 地址,这是访问的第一步。
  2. 请求的封装与传输层协议
    应用层协议:浏览器通过 HTTP/HTTPS 协议将请求打包,其中包含访问请求的具体内容。
    传输层协议选择:根据请求的类型选择 UDP 或 TCP,但一般的 HTTP 和 HTTPS 使用 TCP 协议,确保连接的可靠性和数据完整性。
    端口号:TCP 协议中的端口号帮助定位目标应用程序,例如浏览器的动态端口和电商服务器的 HTTPS 端口(默认 443),操作系统利用端口将收到的数据包转发给合适的应用进程。
  3. 网络层与 IP 路由
    IP 层封装:传输层封装完成后,将数据包交给网络层,网络层添加源 IP(浏览器所在的 IP 地址)和目标 IP(服务器的 IP 地址)。
    路由选择:操作系统检查目标 IP 地址。如果是外部地址(如外网),则会通过默认网关转发出去。默认网关的 MAC 地址通过 ARP 协议解析获取。
  4. 数据包的路由传输
    ARP 协议:浏览器通过 ARP 协议询问本地网关的 MAC 地址,然后将封装有目标 IP 的数据包发送给网关。
    网关的路由转发:数据包到达网关(路由器),路由器根据其路由表决定下一跳,逐级找到到达目标服务器的最佳路径。
    多跳传输:每个路由器就像旅途中的城关,将数据包沿着路由协议(如 OSPF 或 BGP)确定的路径逐跳转发,直到到达目标网络。
  5. 到达目标服务器
    目的地的 ARP 解析:当数据包进入目标服务器的网络,服务器通过 ARP 获取最终 MAC 地址并接收数据包。
    解封装与传输层确认:服务器依次拆开封装的包,确认传输层协议为 TCP,并通过端口号找到监听的应用进程(如 Tomcat)。
    TCP 的确认机制:每个 TCP 包有确认响应,以确保数据传输的可靠性。若数据丢失,TCP 会自动重传,而不会由浏览器重新发送请求。
  6. 应用层的业务处理
    应用层请求处理:服务器的接待进程(例如 Tomcat)接收 HTTP 请求内容,将其拆分为具体操作,例如处理订单、扣减库存、计算支付金额等。接待进程协调这些业务模块,保证订单处理的正确性。
    RPC 调用:业务模块间通信使用 RPC(远程过程调用),通过协议实现模块间的透明交互。RPC 自动处理网络连接,使调用方无需处理复杂的网络通信细节。
  7. 返回响应到用户
    HTTPS 响应返回:业务处理完成后,服务器将响应结果封装成 HTTPS 包,沿着与请求路径相反的方向返回至客户端。
    浏览器显示结果:数据包最终返回用户浏览器,显示订单处理成功或支付完成的消息。

一、一些问题

1、TCP 在进行三次握手的时候,IP 层和 MAC 层对应都有什么操作呢?

  1. TCP 三次握手过程:
    第一次握手:客户端向服务器发送 SYN 包,请求建立连接。
    第二次握手:服务器收到 SYN 包后,返回一个 SYN-ACK 包以确认。 >第三次握手:客户端收到 SYN-ACK 包,返回一个 ACK 包,连接正式建立。
  2. IP 层的操作: 在每次握手时,TCP 会封装数据包,并在网络层(即 IP 层)加入 IP 头部,包含源 IP 和目的 IP 地址。
    路由选择:如果客户端和服务器不在同一个网络,IP 层负责确定数据包的路由路径,从源 IP 经过多个路由器,最终到达目的 IP。
    分片与重组:如果数据包过大,IP 层可能会对其进行分片。每个分片带着 IP 头,传输至目标地址后,重新组合成完整的数据包。
  3. MAC 层的操作: MAC 层是在数据链路层(第二层)上工作的,负责在局域网中找到目标设备的物理地址(MAC 地址)并传输数据。
    ARP 协议(地址解析协议):在每次握手前,IP 层需要通过 ARP 查询目标 IP 地址对应的 MAC 地址(如果尚未缓存)。
    例如,客户端会向局域网广播一个 ARP 请求,询问目标 IP 的 MAC 地址。目标设备回应其 MAC 地址,之后数据包中会包含这个 MAC
    地址。 帧的封装:当 IP 层准备好数据包后,MAC 层会封装它,生成包含源 MAC 和目的 MAC 的帧,用于局域网内传输。
    数据帧的传输:在局域网中,交换机会使用 MAC 地址表决定数据帧的转发路径,使其到达目标 MAC 地址。

在三次握手中,IP 层负责路由和 IP 地址管理,确保数据包从源 IP 发送到目的 IP。而MAC 层负责局域网内的传输,通过 ARP 获取 MAC 地址并进行帧封装,使数据帧能在局域网内正确路由。

2、 二层设备处理的包里,有没有 HTTP 层的内容呢?

当我们发送一个 HTTP 包时,它确实包含了七层的内容,但在网络传输过程中,它仍然会经过二层设备。实际上,网络通信过程会经过多个层次,每一层都会在自己的层次上处理部分信息。

  1. 二层设备的职责:二层设备(如交换机)主要处理的是数据链路层(Layer 2),关注 MAC地址,用于在同一个网络段内传输数据包。二层设备会读取帧的头部信息(例如源 MAC 地址和目的 MAC 地址),然后根据
    MAC地址表来决定数据帧的转发路径。
  2. HTTP 包在二层的处理:HTTP 包的内容是在七层(应用层)工作的,但它会经过 OSI 模型中的各个层级封装后传输。HTTP请求会在应用层封装,然后依次向下经过传输层(通常使用 TCP 协议),再到网络层(例如
    IP层),最后封装到数据链路层。二层设备收到的包已经是完整的帧,但它只会关注二层的内容(如 MAC 地址),并不会查看更高层的信息(如
    HTTP 头部)。
  3. 二层设备是否包含七层内容:二层设备只关注二层的数据,但这些数据包确实包含了更高层的内容。即便是七层(HTTP)的数据包,经过封装后到达二层,它仍然携带了HTTP
    数据;只是二层设备不处理或解读 HTTP 头部,而是直接根据 MAC 地址信息进行转发。

即使是七层的 HTTP 数据包,它也必须经过二层设备,但二层设备不会解析或处理其中的 HTTP 内容。

3、通过 SSH 登录到公有云主机里面,都需要经历哪些过程?

  1. DNS 解析(域名到 IP 地址的转换) 输入主机名:你在 SSH 客户端中输入公有云主机的域名(例如 cloud.example.com)时,系统需要先获取目标主机的 IP 地址。 本地 DNS 缓存检查:客户端会先查询本地 DNS
    缓存,如果已经缓存了域名对应的 IP 地址,则直接使用。如果没有,则向 DNS 服务器请求解析。 递归查询:如果本地没有缓存,客户端会向
    DNS 服务器发送域名查询请求。DNS 服务器会进行递归查询,直到找到对应的 IP 地址,然后将其返回给客户端。 获得 IP 地址:DNS
    解析完成后,客户端获得公有云主机的 IP 地址,以便进行后续的网络通信。

  2. TCP 三次握手建立连接 客户端发送 SYN 包:客户端向目标主机的 IP 地址发送一个 SYN 包,表示希望建立连接。这个包会到达服务器的 22 端口(默认 SSH 服务端口)。 服务器响应 SYN-ACK 包:公有云主机上的 SSH
    服务器接收到 SYN 包后,回应一个 SYN-ACK 包,表示接受连接请求。 客户端回应 ACK 包:客户端收到服务器的 SYN-ACK
    包后,发送一个 ACK 包,确认连接已经建立。此时 TCP 连接正式建立完成,双方进入“已连接”状态。 三次握手建立的 TCP 连接为
    SSH 协议的加密通信提供了可靠的基础传输通道。

  3. SSH 握手与加密会话建立 SSH 握手主要是为了确保通信的安全性,具体过程如下:
    版本交换:客户端和服务器首先交换协议版本信息,以确保双方使用兼容的 SSH 版本。
    算法协商:客户端和服务器协商将要使用的加密算法、散列算法和密钥交换算法,以确保传输的机密性和完整性。 密钥交换:通过密钥交换算法(通常是
    Diffie-Hellman 或 ECDH),客户端和服务器交换密钥材料,生成对称会话密钥。
    服务器身份验证:服务器向客户端发送数字证书,客户端验证服务器的公钥以确认其身份,避免连接到恶意服务器。
    对称会话密钥生成:客户端和服务器使用交换的密钥材料生成一个对称会话密钥,用于加密会话中的数据。这种对称加密确保了数据的机密性和完整性。

  4. SSH 用户身份验证 SSH 用户身份验证确保是合法用户尝试访问主机。
    身份验证方式:通常支持多种身份验证方式,如密码、SSH 密钥、或基于证书的验证。公有云主机一般使用 SSH 密钥验证,这比密码更安全。
    密钥验证: 生成密钥对:客户端预先生成 SSH 密钥对,包括私钥(保存在本地)和公钥(上传到服务器)。
    公钥验证:客户端将自己的公钥上传至公有云主机的 ~/.ssh/authorized_keys
    文件中。连接时,服务器会检查客户端提供的私钥签名是否与存储的公钥匹配。
    签名验证:服务器验证签名后确认身份,允许连接。如果私钥不匹配或验证失败,连接会被拒绝。

  5. 建立加密会话和数据传输 进入加密会话:身份验证成功后,客户端和服务器开始加密会话。所有传输数据都使用生成的会话密钥进行加密,确保数据的安全性。
    命令与响应:在建立加密会话后,客户端可以开始输入命令,例如文件传输、远程管理操作等,服务器则执行命令并返回结果。数据传输过程中通过加密的信道保障数据机密性,防止第三方窃听或篡改。
    保持连接:SSH 通常支持会话保持,客户端和服务器会定期发送心跳包,确保连接正常、空闲状态保持,避免意外断开。

  6. 连接关闭与资源释放 客户端退出:当客户端完成操作并输入 exit 命令或关闭 SSH 客户端时,客户端会向服务器发送连接终止请求。 四次挥手:为了确保数据的完整性和顺利断开连接,TCP 协议会执行四次挥手过程,释放连接资源。 客户端发送 FIN 包,表示准备关闭连接。
    服务器响应 ACK 包,确认收到连接关闭请求。 服务器发送 FIN 包,表示自己也准备关闭连接。 客户端响应 ACK 包,确认连接关闭。
    会话终止:经过四次挥手后,连接彻底关闭,双方资源被释放,整个 SSH 会话结束。

本地电脑通过 SSH 连接公有云主机的过程主要涉及以下步骤:

DNS 解析:将公有云主机域名解析为 IP 地址。
TCP 三次握手:建立可靠的 TCP 连接。
SSH 握手与加密会话建立:通过密钥交换和算法协商生成加密信道。
身份验证:客户端验证身份,服务器确认合法用户。
加密会话与数据传输:在加密信道中进行命令操作和数据传输。
连接关闭与资源释放:执行四次挥手,安全断开连接,释放资源。

4、打开一个电商网站,都需要经历哪些过程?

  1. 输入 URL 和浏览器解析 你在浏览器的地址栏中输入电商网站的 URL,例如 https://www.onlinestore.com,并按下 Enter。 浏览器检查输入内容,如果未指定协议(如
    HTTPS),默认会尝试使用 HTTPS 连接,拼接为 https://www.onlinestore.com。
  2. DNS 解析(将域名转换为 IP 地址) 本地 DNS 缓存检查:浏览器首先检查是否已经缓存了目标域名对应的 IP 地址。如果缓存存在且有效,则跳过 DNS 查询。 DNS 服务器查询:若缓存中没有该 IP 地址,浏览器会向 DNS 服务器发起 DNS
    查询请求。 递归查询:如果 DNS 服务器也没有该记录,它会向根 DNS 服务器递归查询,逐级寻找 authoritative DNS
    服务器来获取目标域名的 IP 地址。 获取 IP 地址:DNS 解析完成后,返回目标服务器的 IP 地址,浏览器使用该 IP 地址建立连接。
  3. TCP 三次握手建立连接 客户端发送 SYN 包:浏览器向目标 IP 地址发送 SYN 包,请求建立连接(默认端口为 443)。 服务器响应 SYN-ACK 包:电商网站的服务器收到 SYN 包后,回复一个 SYN-ACK 包,表示同意连接。 客户端发送 ACK
    包:浏览器收到服务器的 SYN-ACK 包后,发送 ACK 包确认连接成功建立。至此,TCP 连接建立完成,为后续的 HTTP
    请求提供传输通道。
  4. SSL/TLS 握手(如果是 HTTPS 连接) 版本和加密算法协商:浏览器和服务器协商 SSL/TLS 版本及加密算法(如 AES、SHA)。 服务器证书验证:服务器发送数字证书给浏览器,浏览器验证证书是否可信、有效,以确保连接到的是真实的电商网站。
    会话密钥生成:双方通过密钥交换算法(如 Diffie-Hellman)生成对称会话密钥,用于加密会话中的数据。
    加密会话开始:握手完成后,浏览器和服务器开始加密传输,确保通信内容的安全性。
  5. 发送 HTTP 请求 构建 HTTP 请求:在连接建立和 SSL/TLS 加密后,浏览器向服务器发送第一个 HTTP 请求,通常是 GET 请求,要求加载网站的主页内容(例如 GET / HTTP/1.1)。
    请求头信息:请求中包含头部信息,包括浏览器类型、语言偏好、授权信息、Cookie 等,服务器据此调整响应内容。 发送
    Cookie:如果浏览器曾经访问过该网站,则会包含之前存储的 Cookie 信息,帮助识别用户和定制内容。
  6. 服务器接收请求并处理 服务器路由:服务器根据 URL 路径将请求分发到对应的处理模块。例如,/home 路径可能会引导到主页渲染模块。 后端逻辑处理:服务器的后端系统(例如
    Python、Node.js)处理请求,可能会执行各种逻辑操作,比如读取用户信息、获取推荐商品、处理促销信息等。
    数据库查询:服务器访问数据库获取数据,比如商品信息、用户数据、购物车内容等,进行页面内容的动态生成。 生成 HTTP 响应:服务器将数据生成
    HTML 文档,包含 CSS、JavaScript 等资源链接,并打包成 HTTP 响应。
  7. 返回 HTTP 响应和数据传输 HTTP 响应发送:服务器将生成的 HTTP 响应发送给浏览器,包含网页内容和资源文件链接。 数据包传输:HTTP 响应通过 TCP 连接返回,所有数据都经过加密传输,确保数据的完整性和安全性。
    分块传输:如果内容较大,响应会分为多个数据包逐块发送,浏览器接收数据并逐步处理,提升加载速度。
  8. 浏览器渲染流程 解析 HTML:浏览器解析服务器返回的 HTML,逐步构建 DOM 树(文档对象模型),表示页面结构。 解析 CSS:浏览器下载并解析 CSS 文件,构建 CSSOM 树(CSS 对象模型),定义页面的样式。 JavaScript
    执行:浏览器下载并执行 JavaScript 文件,可能会动态修改 DOM 树和 CSSOM 树,实现页面的交互效果。 合成渲染树:浏览器将
    DOM 树和 CSSOM 树合成为渲染树,用于生成页面的布局和样式。
    布局和绘制:浏览器根据渲染树计算各元素的布局位置,然后绘制到屏幕上,用户可见页面内容。
  9. 加载其他资源 异步加载:HTML 中的 < img > 标签加载图片,或 < iframe > 标签嵌入外部内容,浏览器会异步请求这些资源,以便主页面尽快显示。
    渲染优化:浏览器会缓存常用资源(如图标、字体、JavaScript),加速页面加载。
    内容展示与交互:页面内容加载完成后,用户可以进行操作,如点击产品、查看详情、加入购物车等,浏览器会响应这些操作并执行相应的
    JavaScript 代码。
  10. 浏览器缓存和后续请求 缓存策略:服务器返回的资源文件(如图片、CSS)通常会包含缓存策略,浏览器缓存这些资源用于后续访问。 减少重复请求:如果用户在短时间内访问同一页面,浏览器会优先从缓存中读取资源,减少请求次数,加快加载速度。

打开一个电商网站时的完整过程包括以下步骤:

DNS 解析:将域名转换为 IP 地址。
TCP 三次握手:建立 TCP 连接。
SSL/TLS 握手:建立加密通道。
发送 HTTP 请求:请求页面内容。
服务器处理请求:生成 HTML 和数据内容。
返回 HTTP 响应:数据包通过 TCP 加密传输。
浏览器渲染页面:解析 HTML、CSS、执行 JavaScript。
异步加载资源:加载图片、视频等外部资源。
用户交互和响应:支持购物车、导航等交互功能。
缓存和优化:浏览器缓存资源,加快后续访问。

二、为什么要网络分层?

  1. 让设计更简单
    分层设计就像盖楼,每层只负责自己该做的事情。
    物理层:负责怎么把信号传输出去。
    数据链路层:负责在局域网内找到正确设备。
    网络层:负责找到路,把数据送到另一个网络。
    传输层:负责数据的完整性。
    应用层:负责显示网页、打开应用。
    每层做好自己的一部分,整个过程更有条理,也便于理解。

  2. 提高兼容性
    网络分层就像盖楼时的建筑标准,不同的品牌和设备可以一起使用,因为每一层的标准都是一样的。
    比如,网络层的 IP 地址是全球通用的,不管是苹果、华为、戴尔生产的设备都可以使用 IP 地址来定位和通信。

  3. 方便排查问题
    如果数据传输遇到问题,我们可以按层来检查,逐层排除故障,就像逐层检查水管漏水的问题。
    比如:无法上网时,可以先检查物理层(网线是否连接),再检查网络层(IP 地址是否正确)等。

  4. 升级方便
    如果需要更新某层的技术,比如从有线网升级到 Wi-Fi,只需替换物理层,而不影响传输层以上的网页、应用等其他功能。
    每层可以独立更新,而不会影响到其他层。这让网络可以随着科技发展而升级,比如 4G 到 5G。

  5. 更安全
    分层的设计可以让每一层都加上自己的保护措施,层层保护,确保数据安全。
    比如在传输层可以加密数据,在应用层可以设置密码,这样即便某一层出问题,其他层也可以提供保护。

计算机网络分层是为了实现各层独立、提高灵活性、将复杂问题分解成小问题,从而使设计、实现和维护更加高效。

网络数据包在经过不同网络层时的处理流程

在这里插入图片描述

  1. 接收网络包并处理 当一个网络包经过网口时,程序首先检查它是否需要处理这个包。如果网口处于混杂模式,程序会接收所有经过的网络包;否则,它只会接收目标 MAC地址与自己匹配的包。
  2. 调用 process_layer2(buffer) 处理数据链路层 进入process_layer2(buffer) 函数后,程序会从 Buffer 中解析出二层的 MAC 头部,并根据目标 MAC 地址判断是否需要继续处理。 如果目标 MAC地址与本机匹配,说明该包是发给本机的,则进入下一步;否则,程序会丢弃该包。
  3. 调用 process_layer3(buffer) 处理网络层 在 process_layer3(buffer) 中,程序会解析并移除 IP 头部,检查目标 IP 地址。 如果目标 IP 地址不是本机地址,程序会将包转发至其他网络设备;如果 IP 地址是本机的,则继续处理。程序根据 IP 头中的协议字段,判断是 TCP 包还是 UDP 包,并相应地进入下一步。
  4. 调用 process_tcp(buffer) 处理传输层(以 TCP 为例) 在 process_tcp(buffer) 中,程序解析 TCP 头部,检查是否是新连接的发起、响应包或正常数据包。
    如果是新连接请求或响应,则需要发送回复包;如果是正常数据包,程序会根据端口号将其交给对应的应用程序处理(如 HTTP 请求交给浏览器处理)。
  5. 交给应用层(浏览器)处理 根据 TCP 头中的端口号,程序将数据包交给监听该端口的应用程序,例如浏览器。
    浏览器会解析 HTTP 内容并显示页面。用户可能点击页面,浏览器捕获到点击事件,生成新的 HTTP 请求并传送给网络层处理。
  6. 发送网络包的流程 浏览器通过端口向传输层发送 HTTP 请求数据。 程序调用 send_tcp(buffer),为 Buffer 中的 HTTP 内容添加 TCP 头部(包括源端口和目标端口)。 调用 send_layer3(buffer),为 Buffer 添加 IP
    头部(包括源 IP 和目标 IP)。 最后调用 send_layer2(buffer),为 Buffer 添加 MAC 头部(包括源 MAC和目标 MAC)。如果目标 MAC 地址未知,程序会通过 ARP 协议查询。
  7. 完成发送 Buffer 中已包含完整的 MAC、IP、TCP 头部和 HTTP 数据,程序将其从网口发出,完成一次网络通信的发送流程。

OSI 七层模型架构图:
在这里插入图片描述

三、 Ifconfig&ip addr

如果在非常小的 Linux 系统中,发现既没有 ifconfig 命令,也没有 ip addr 命令。这个时候,可以自行安装 net-tools 和 iproute2 这两个工具。当然,大多数时候这两个命令是系统自带的。

root@test:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether fa:16:3e:c7:79:75 brd ff:ff:ff:ff:ff:ff
    inet 10.100.122.2/24 brd 10.100.122.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fec7:7975/64 scope link 
       valid_lft forever preferred_lft forever

这个命令显示了这台机器上所有的网卡;

  1. Loopback 接口 (lo)
1: lo::表示接口编号(1)和接口名称(lo),lo 是 Linux 系统中默认的回环接口(loopback interface),用于本地通信测试。

<LOOPBACK,UP,LOWER_UP>:接口状态标志。

LOOPBACK:表示这是一个回环接口。
UP:接口已经启用。
LOWER_UP:物理链路已经连接。
mtu 65536:最大传输单元(MTU),表示接口可以传输的最大数据包大小。回环接口的 MTU 设置较大,因为它不经过物理网络。

qdisc noqueue:队列调度器(queueing discipline)类型。noqueue 表示这个接口不需要排队(因为它只用于本地传输)。

state UNKNOWN:接口状态,由于回环接口不需要实际的物理连接,所以显示为 UNKNOWN。

group default:接口所属的组(默认组)。

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00:表示链路层(数据链路层)的 MAC 地址。回环接口没有实际的 MAC 地址,所以显示为 00:00:00:00:00:00。

inet 127.0.0.1/8 scope host lo:IPv4 地址。

127.0.0.1/8:这是本地回环地址,子网掩码为 /8(255.0.0.0),即 127.0.0.1-127.255.255.255 范围内的 IP 地址都属于回环地址。
scope host:作用域是 host,仅在本机使用。
valid_lft forever preferred_lft forever:该地址的有效期(valid lifetime)和优先有效期(preferred lifetime)是永久的,即不会失效。
inet6 ::1/128 scope host:IPv6 地址。

::1/128:IPv6 回环地址,::1 是 IPv6 的本地回环地址,等价于 IPv4 的 127.0.0.1。
scope host:表示该地址的作用域是本地(host)。
valid_lft forever preferred_lft forever:地址的有效期和优先有效期是永久的。
  1. 以太网接口 (eth0)
2: eth0::接口编号(2)和接口名称(eth0),eth0 是默认的第一个有线以太网接口。

<BROADCAST,MULTICAST,UP,LOWER_UP>:接口状态标志。

BROADCAST:接口支持广播。
MULTICAST:接口支持多播。
UP:接口已经启用。
LOWER_UP:物理链路已经连接。
mtu 1500:最大传输单元为 1500 字节,这是以太网接口的默认值。

qdisc pfifo_fast:队列调度器类型,pfifo_fast 表示默认的先进先出(FIFO)队列。

state UP:接口处于启用状态。

group default:接口所属的组。

qlen 1000:队列长度,表示接口可以处理的最大数据包数量为 1000 个。

link/ether fa:16:3e:c7:79:75 brd ff:ff:ff:ff:ff:ff:链路层(数据链路层)信息。

fa:16:3e:c7:79:75:接口的 MAC 地址。
brd ff:ff:ff:ff:ff:ff:广播地址,用于在网络上发送广播消息。
inet 10.100.122.2/24 brd 10.100.122.255 scope global eth0:IPv4 地址信息。

10.100.122.2/24:接口的 IPv4 地址,子网掩码为 /24(255.255.255.0),即该地址属于 10.100.122.0 到 10.100.122.255 的子网。
brd 10.100.122.255:广播地址,用于向同一子网的所有设备发送数据。
scope global:作用域为 global,表示该地址可用于公网通信。
valid_lft forever preferred_lft forever:地址的有效期和优先有效期是永久的。
inet6 fe80::f816:3eff:fec7:7975/64 scope link:IPv6 地址信息。

fe80::f816:3eff:fec7:7975/64:接口的链路本地 IPv6 地址,fe80:: 是链路本地地址前缀。
scope link:作用域为 link,表示该地址仅在本地网络中有效。
valid_lft forever preferred_lft forever:地址的有效期和优先有效期是永久的。

在 IP 地址的后面有个 scope,对于 eth0 这张网卡来讲,是 global,说明这张网卡是可以对外的,可以接收来自各个地方的包。对于 lo 来讲,是 host,说明这张网卡仅仅可以供本机相互通信。

lo 全称是loopback,又称环回接口,往往会被分配到 127.0.0.1 这个地址。这个地址用于本机通信,经过内核处理后直接返回,不会在任何网络中出现。

MAC 地址
在 IP 地址的上一行是 link/ether fa:16:3e:c7:79:75 brd ff:ff:ff:ff:ff:ff,这个被称为MAC 地址,是一个网卡的物理地址,用十六进制,6 个 byte 表示。
MAC 地址更像是身份证,是一个唯一的标识。它的唯一性设计是为了组网的时候,不同的网卡放在一个网络里面的时候,可以不用担心冲突。从硬件角度,保证不同的网卡有不同的标识。
MAC 地址是有一定定位功能的,只不过范围非常有限。MAC 地址的通信范围比较小,局限在一个子网里面。例如,从 192.168.0.2/24 访问 192.168.0.3/24 是可以用 MAC 地址的。一旦跨子网,即从 192.168.0.2/24 到 192.168.1.2/24,MAC 地址就不行了,需要 IP 地址起作用了。

网络设备的状态标识
<BROADCAST,MULTICAST,UP,LOWER_UP> 是干什么的?这个叫作net_device flags,网络设备的状态标识。

UP 表示网卡处于启动的状态;BROADCAST 表示这个网卡有广播地址,可以发送广播包;MULTICAST 表示网卡可以发送多播包;LOWER_UP 表示 L1 是启动的,也即网线插着呢。MTU1500 是指什么意思呢?是哪一层的概念呢?最大传输单元 MTU 为 1500,这是以太网的默认值。
网络包是层层封装的。MTU 是二层 MAC 层的概念。MAC 层有 MAC 的头,以太网规定连 MAC 头带正文合起来,不允许超过 1500 个字节。正文里面有 IP 的头、TCP 的头、HTTP 的头。如果放不下,就需要分片来传输。
qdisc 全称是queueing discipline,中文叫排队规则。内核如果需要通过某个网络接口发送数据包,它都需要按照为这个接口配置的 qdisc(排队规则)把数据包加入队列。
最简单的 qdisc 是 pfifo,它不对进入的数据包做任何的处理,数据包采用先入先出的方式通过队列。pfifo_fast 稍微复杂一些,它的队列包括三个波段(band)。在每个波段里面,使用先进先出规则。

三个波段(band)的优先级也不相同。band 0 的优先级最高,band 2 的最低。如果 band 0 里面有数据包,系统就不会处理 band 1 里面的数据包,band 1 和 band 2 之间也是一样。
数据包是按照服务类型(Type of Service,TOS)被分配到三个波段(band)里面的。TOS 是 IP 头里面的一个字段,代表了当前的包是高优先级的,还是低优先级的。

pfifo和pfifo_fast都是Linux内核中用于网络流量控制的排队规则。
pfifo采用先入先出的方式处理数据包,简单且高效,但缺乏流量控制和优先级管理的能力。
pfifo_fast在pfifo的基础上引入了优先级调度的概念,通过三个不同优先级的波段来管理数据包,提高了网络流量的管理效率。
在选择使用哪种排队规则时,需要根据具体的网络环境和需求进行权衡和选择。对于需要简单且高效处理大量数据包的环境,pfifo可能是一个不错的选择;而对于需要处理具有不同优先级的数据包的环境,pfifo_fast可能更合适。
IP是怎么来的,又是怎么没的?

四、DHCP与PXE

动态主机配置协议(Dynamic Host Configuration Protocol),简称DHCP。
DHCP 的基本工作方式:

  1. DHCP Discover(我来啦,有人吗?)
    新设备刚接入网络时,就像个新来的游客,啥都不清楚,只知道自己的 MAC 地址,于是它“吼”了一声:“我来啦,有人能给我个 IP 地址吗?”这就是 DHCP Discover 步骤。在这个阶段,设备用 IP 地址 0.0.0.0 作为源地址,因为它还没有正式的 IP 地址,而目的地址是广播地址 255.255.255.255,所有网络设备都能收到。这个数据包封装在 UDP 和 BOOTP 里,虽然实际上 DHCP 是 BOOTP 的增强版,但在抓包软件里可能还会显示为 BOOTP 协议。
    在这里插入图片描述

Discover 包的内容很简单:设备带着自己的 MAC 地址,告诉网络管理员(DHCP Server)自己还没有 IP,问谁能租个 IP 地址给它。

  1. DHCP Offer(来了新人,有 IP 给你!)
    如果网络管理员已经设置了 DHCP Server,负责管理 IP 地址,就会马上知道有新人入网了。在确认 MAC 地址唯一的情况下,DHCP Server 就会给新人发送一个 DHCP Offer。DHCP Server 把这个 IP 地址“保留”给这个新人,确保不会再分配给其他设备。

在这个 Offer 包里,DHCP Server 提供了一个 IP 地址,同时也包含了子网掩码、网关和租约时间等配置信息。由于新设备还没有 IP 地址,DHCP Server 也需要通过广播方式发送 Offer 数据包,让它能接收到。
在这里插入图片描述

  1. DHCP Request(确认接收租约)
    新设备收到 DHCP Server 的 Offer 包后,发现有个 IP 可以用了,自然很开心!如果网络中有多个 DHCP Server,设备甚至可能收到多个 IP 地址(真是受宠若惊)。不过它会挑一个(通常是第一个到达的)并发送 DHCP Request 包来确认。这个 Request 包还是用广播方式发送,因为设备还在用 0.0.0.0 源地址,并把自己选定的 IP 地址、MAC 地址以及 DHCP Server 的信息包含在包中,以便告诉所有的 DHCP Server:“我决定选这个 IP 地址了,谢谢大家!”
    在这里插入图片描述

  2. DHCP Acknowledgement(正式入网)
    当 DHCP Server 收到设备的 Request 后,会广播一个 DHCP ACK 包,表示已经确认设备选的 IP 地址。这个 ACK 包包含 IP 地址的租用信息和其他配置信息,表示“欢迎加入网络大家庭!”这一步后,新设备就可以正式使用这个 IP 地址,成为网络的一部分。
    在这里插入图片描述

续约与释放
续约:IP 地址的租赁期到达一半时,设备会发送一个 DHCP Request 数据包请求续租,服务器会通过 ACK 数据包延长租赁期限。
释放:当设备离开网络时,会发送 DHCP Release 数据包,将 IP 地址归还 DHCP 服务器以供其他设备使用。

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

  • 在普通的情况下,笔记本电脑或个人电脑只需要手动安装一次操作系统,这一过程并不频繁,因此无需额外的复杂自动化。但在数据中心中,管理员可能需要同时部署操作系统到数百台新服务器,如果每台都手动安装,工作量巨大且不切实际。因此,管理员希望通过网络自动化安装操作系统。
  • PXE 就是为解决这一需求而设计的,能够在没有操作系统的环境下,从网络安装系统,并自动分配 IP 地址。

PXE 工作流程分解
1、启动 PXE 客户端

由于还没有操作系统,PXE 客户端被写入 BIOS 中。开机时 BIOS 加载 PXE 客户端进入内存。
PXE 客户端在启动时通过 DHCP 获取 IP 地址,并且请求其他配置信息。
2、通过 DHCP 获取 PXE 服务器信息

PXE 客户端发送 DHCP Discover 广播包,告诉 DHCP Server 设备“初来乍到”,没有 IP 地址。DHCP Server 会分配一个 IP 地址,并在回应的 DHCP Offer 中包含 PXE 服务器的地址(next-server)和启动文件(filename,例如 pxelinux.0)。
为了支持 PXE,DHCP 服务器配置中增加了 next-server 和 filename 参数,这样 PXE 客户端除了获得 IP,还能知道去哪里找 PXE 服务器和下载哪个启动文件。
3、从 PXE 服务器下载启动文件

获取到 PXE 服务器地址和启动文件名后,PXE 客户端会尝试从该服务器下载启动文件。这个下载过程使用 TFTP(Trivial File Transfer Protocol),一种简化的文件传输协议。
PXE 服务器(通常有一个 TFTP 服务器)接收到请求后,将 pxelinux.0 文件传给客户端。
4、执行启动文件,获取配置信息

PXE 客户端执行下载到的启动文件 pxelinux.0。启动文件指示客户端继续向 TFTP 服务器请求更多的配置信息(例如 pxelinux.cfg 配置文件)。
配置文件中定义了进一步的系统加载信息,包括内核位置和 initramfs 文件。这些信息指引 PXE 客户端完成操作系统的启动准备。
5、启动操作系统

PXE 客户端下载并加载 Linux 内核与 initramfs 文件,系统成功启动。
一旦内核启动,机器便有了基本操作系统的功能,可以通过网络进一步安装完整的操作系统。
关键点
PXE 的 DHCP 配置:为支持 PXE,需要在 DHCP 服务器中配置 next-server(PXE 服务器的 IP)和 filename(启动文件)。
TFTP 协议:PXE 使用 TFTP 进行文件传输,适合在无操作系统的环境中传输启动文件。
自动化安装流程:PXE 实现了操作系统的自动化部署,大大简化了数据中心中大批量服务器的初始化和安装流程。
在这里插入图片描述


http://www.kler.cn/news/368317.html

相关文章:

  • vue通过JSON文件生成WPML文件源码
  • Docker下载途径
  • Ajax:跨域 JSONP
  • 【golang】 lo.Map使用
  • vue3+vite 部署npm 包
  • 力扣每日一题打卡 684. 冗余连接
  • Leetcode刷题笔记13
  • 16天自制CppServer-day05
  • apply,call,bind手写
  • 关于Docker的docker engine stopped问题解决
  • Lesson11---stack
  • fileinclude
  • 【计算机网络 - 基础问题】每日 3 题(五十五)
  • Discuz 论坛开发一套传奇发布站与传奇开服表
  • Python中的递归函数是如何工作的,它有哪些应用场景?
  • JAVA高性能缓存项目
  • 基于SSM 的音乐播放系统设计与实现
  • vue3中mitt和pinia的区别和主要用途,是否有可重合的部分?
  • 防火墙和堡垒机有什么区别?
  • 解决 VScode 每次打开都是上次打开的文件问题
  • 密码学+加解密封装
  • 基于neo4j的医疗问诊系统
  • 【编程语言】Kotlin快速入门 - 高阶函数与运算符重载
  • PCL库中的算法封装详解
  • 数字IC后端实现Innovus |给各种IP子模块添加port buffer和antenna diode万能脚本
  • 视频编辑的创意工坊,使用视频剪辑软件将视频随机分割成两段并去声进行MP3音频和M3u8文件的生成,让视频制作更高效