xiaolingcoding 图解网络笔记——基础篇

文章目录

  • 参考
  • 一、网络模型有哪几层
  • DMA
  • [NAPI 机制](#NAPI 机制)
  • 二、键入网址到网页显示,期间发生了什么?
    • [1. HTTP](#1. HTTP)
    • [2. DNS](#2. DNS)
    • [3. 协议栈](#3. 协议栈)
    • [4. TCP](#4. TCP)
    • [5. IP](#5. IP)
    • [6. MAC](#6. MAC)
    • [7. 网卡](#7. 网卡)
    • [8. 交换机](#8. 交换机)
    • [9. 路由器](#9. 路由器)
    • [10. 服务器 与 客户端的互相扒皮(添加、删除头部信息)](#10. 服务器 与 客户端的互相扒皮(添加、删除头部信息))
    • 参考图
      • [HTTP 请求报文结构:](#HTTP 请求报文结构:)
      • [HTTP 响应报文结构:](#HTTP 响应报文结构:)

参考

图解网络介绍 | 小林coding

一、网络模型有哪几层

  • OSI 七层结构 VS TCP/IP四层结构

    • OSI 参考模型

      • 应用层,负责给应用程序提供统一的接口;

      • 表示层,负责把数据转换成兼容另一个系统能识别的格式;

      • 会话层,负责建立、管理和终止表示层实体之间的通信会话;

      • 传输层,负责端到端的数据传输;

      • 网络层,负责数据的路由、转发、分片;

      • 数据链路层,负责数据的封帧和差错检测,以及 MAC 寻址;

      • 物理层,负责在物理网络中传输数据帧;

    • TCP/IP 模型

      • 应用层,负责向用户提供一组应用程序,比如 HTTP、DNS、FTP 等;

      • 传输层,负责端到端的通信,比如 TCP、UDP 等;

      • 网络层,负责网络包的封装、分片、路由、转发,比如 IP、ICMP 等;

      • 网络接口层,负责网络包在物理网络中的传输,比如网络包的封帧、 MAC 寻址、差错检测,以及通过网卡传输网络帧等;

    • 由于 OSI 模型实在太复杂,提出的也只是概念理论上的分层,并没有提供具体的实现方案。事实上,我们比较常见,也比较实用的是四层模型,即 TCP/IP 网络模型,Linux 系统正是按照这套网络模型来实现网络协议栈的。

  • TCP/IP 四层结构:

  • 每一层的封装格式:

  • 应用层只需要专注于为用户提供应用功能,比如 HTTP、FTP、Telnet、DNS、SMTP等

  • 应用层是工作在操作系统中的用户态,传输层及以下则工作在内核态

  • 端口:设备作为接收方时,传输层则要负责把数据包传给应用,但是一台设备上可能会有很多应用在接收或者传输数据,因此需要用一个编号将应用区分开来,这个编号就是端口

  • 我们不希望传输层协议处理太多的事情,只需要服务好应用即可,让其作为应用间数据传输的媒介,帮助实现应用到应用的通信,而实际的传输功能就交给下一层,也就是网络层Internet Layer)。

  • 网络层负责将数据从一个设备传输到另一个设备,世界上那么多设备,又该如何找到对方呢?因此,网络层需要有区分设备的编号,这个编号就是 IP 地址。

  • IP 协议的作用:

    • 寻址

    • 路由。路由表来确定数据包从源主机到目标主机的传输路径

  • IP 地址 = 网络号 + 主机号,配合子网掩码计算。

  • 子网掩码的格式又叫 CIDR 格式。CIDR格式中的网络前缀长度指定了网络地址中网络部分的长度,它决定了网络中可用的IP地址数量。较小的前缀长度表示更大的网络,而较大的前缀长度表示更小的网络。如192.0.2.0/24:表示一个拥有256个IP地址的网络,其中包括192.0.2.0192.0.2.255之间的所有地址。

  • 网络接口层主要为网络层提供「链路级别」传输的服务,负责在以太网、WiFi 这样的底层网络上发送原始数据包,工作在网卡这个层次,使用 MAC 地址来标识网络上的设备。

  • 网络接口层的传输单位是帧(frame),IP 层的传输单位是包(packet),TCP 层的传输单位是段(segment),HTTP 的传输单位则是消息或报文(message)。但这些名词并没有什么本质的区分,可以统称为数据包。

  • Linux 网络协议栈:

    • 应用程序需要通过系统调用,来跟 Socket 层进行数据交互;

    • Socket 层的下面就是传输层、网络层和网络接口层;

    • 最下面的一层,则是网卡驱动程序和硬件网卡设备

DMA

DMA(Direct Memory Access,直接内存访问)是一种计算机技术,用于提高数据传输速度和系统性能。DMA 允许外部设备(如硬盘驱动器、网络适配器等)直接访问计算机内存,而无需经过中央处理器(CPU)的直接参与。

优点:

  • 提高性能:由于 DMA 控制器可以在不影响 CPU 的情况下执行数据传输,因此可以显著提高系统的性能和效率。
  • 减少 CPU 开销:DMA 可以减少 CPU 处理数据传输的负担,使 CPU 可以更多地专注于执行其他任务。
  • 降低能耗:减少了 CPU 参与数据传输的次数,从而降低了系统的能耗。
  • 支持大数据传输:DMA 可以支持大容量数据的快速传输,例如大文件的读写、网络数据的传输等。

然而,DMA 也存在一些潜在的安全风险,因为外部设备可以直接访问内存,可能会导致数据泄露或者安全漏洞。因此,在设计系统时需要考虑安全性,并采取适当的措施来保护系统的数据安全。

NAPI 机制

为了解决频繁中断带来的性能开销,Linux 内核在 2.6 版本中引入了 NAPI 机制 ,它是混合「中断和轮询」的方式来接收网络包,它的核心概念就是不采用中断的方式读取数据 ,而是首先采用中断唤醒数据接收的服务程序,然后 poll 的方法来轮询数据。

NAPI的工作原理如下:

  1. 轮询模式(Polling Mode):NAPI机制允许网络设备在非高负载情况下使用中断模式进行数据包处理,而不是持续地轮询网络接口。这可以减少CPU的轮询负载,提高系统的整体性能。

  2. 中断抑制(Interrupt Coalescing):在高负载情况下,NAPI会暂时关闭中断,并切换到轮询模式。这样可以减少中断处理的频率,降低系统的负载。

  3. 数据包处理延迟:由于NAPI机制可以在非高负载情况下使用中断模式,因此可能会引入一定的数据包处理延迟。但是,这种延迟可以通过调整NAPI的参数来平衡系统的性能和响应时间。

二、键入网址到网页显示,期间发生了什么?

1. HTTP

解析 URL (协议、服务器主机地址、所请求的数据路径、可能得参数),生成发送给 Web 服务器的请求消息

2. DNS

域名解析------查询服务器域名对应的 IP 地址

3. 协议栈

通过 DNS 获取到 IP 后,把 HTTP 的传输工作交给操作系统中的协议栈,作为行动指南。

4. TCP

HTTP 是基于 TCP 协议传输的,三次握手建立连接,数据包大于MTU则分段,生成网络包

5. IP

TCP 模块在执行连接、收发、断开等各阶段操作时,都需要委托 IP 模块将数据封装成网络包发送给通信对象。

6. MAC

生成 IP 头部后,发送方需要在数据包前添加MAC头部(含源设备和目标设备的MAC地址),数据包就能够通过数据链路层正确地发送到目标设备

  • 如果目标主机不是本地局域网,填入的MAC地址是路由器,也就是把数据包转发给路由器,路由器一直转发下一个路由器,直到转发到目标主机的路由器,

  • 如果发现 IP 地址是自己局域网内的主机,就会 arp 请求获取目标主机的 MAC 地址,从而转发到这个服务器主机。

转发的过程中,源IP地址和目标IP地址是不会变的(前提:没有使用 NAT 网络的),源 MAC 地址和目标 MAC 地址是会变化的。

7. 网卡

网卡驱动程序控制网卡,网卡会将网络包(存放在内存中的一串二进制数字信号)转为电信号(模拟信号),通过网线发送到交换机

网卡还会附加一些必要的控制信息,如源MAC地址(表示发送方的网卡)和目标MAC地址(表示接收方的网卡)。

8. 交换机

数据包到达交换机,交换机读取数据包中的目标 MAC 地址;

交换机根据数据包中的目标MAC地址查找MAC地址表(MAC地址--端口),以确定目标设备所连接的端口,然后将信号发送到相应的端口,从而将数据包发送到目标设备的网卡。

9. 路由器

通过路由器的转发,数据包可以在不同的网络之间进行传输,实现了跨网络的通信

  • 查询路由表确定输出端口

  • 知道对方的 IP 地址之后,接下来需要通过 ARP 协议根据 IP 地址查询 MAC 地址,并将查询的结果作为接收方 MAC 地址。

  • 发送出去的网络包会通过交换机到达下一个路由器。

在网络包传输的过程中,源 IP 和目标 IP 始终是不会变的,一直变化的是 MAC 地址 ,因为需要 MAC 地址在以太网内进行两个设备之间的包传输。

10. 服务器 与 客户端的互相扒皮(添加、删除头部信息)

目的MAC地址、IP地址、TCP序列号、端口号的检验,若符合且正在监听此端口,则发送给 HTTP 进程,进行后续处理。

服务器发送 HTTP 响应报文,与上述过程类似;

客户端没有后续请求,发起 TCP 四次挥手,断开双方连接。

参考图

HTTP 报文:

HTTP(Hypertext Transfer Protocol)是用于在网络上传输超文本(如网页)的应用层协议。HTTP协议定义了客户端和服务器之间的通信方式,它是无状态 的,即每个请求都是独立的,服务器不会保留任何与之前请求相关的信息

HTTP报文是客户端和服务器之间交换的数据块,它分为请求报文和响应报文两种类型。

HTTP 请求报文结构:

  1. 请求行:包含了请求方法、请求的资源路径以及HTTP协议版本。例如:
http 复制代码
GET /index.html HTTP/1.1
  1. 请求头部 :包含了请求的一些附加信息,如HostUser-AgentContent-Type等。每个请求头部都是以一个键值对的形式表示。例如:
http 复制代码
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36
  1. 空行:请求行和请求头部之后是一个空行,用来表示请求头部的结束。

  2. 请求体(可选):对于一些请求,如 POST 请求,会包含请求体,其中包含了客户端发送给服务器的数据。例如:

http 复制代码
key1=value1&key2=value2

HTTP 响应报文结构:

  1. 状态行:包含了响应的HTTP协议版本、状态码以及状态消息。例如:
http 复制代码
HTTP/1.1 200 OK
  1. 响应头部 :与请求头部类似,包含了响应的一些附加信息,如Content-TypeContent-Length等。例如:
http 复制代码
Content-Type: text/html; charset=utf-8 Content-Length: 1234
  1. 空行:响应头部和响应体之间是一个空行。

  2. 响应体(可选):包含了服务器发送给客户端的实际数据,比如网页的HTML内容、图片、文件等。

DNS 域名解析过程(先查缓存、hosts文件,再...):

协议栈(上面的部分会向下面的部分委托工作,下面的部分收到委托的工作并执行):

TCP 报文头部的格式:

或:

TCP 传输数据之前,要先三次握手建立连接(保证双方都有发送和接收的能力):

TCP 分割数据:

MTU VS MSS:

  • MTU(Maximum Transmission Unit)是指网络通信中可以在单个数据包中传输的最大数据量。它是以字节为单位来衡量的,代表了网络中数据链路层(如以太网)能够传输的最大数据包大小。

  • MSS(Maximum Segment Size)是 TCP 协议中的一个参数,指示在 TCP 通信中单个 TCP 分段(Segment)的最大数据量。它通常是 MTU 减去 IP 头和 TCP 头的长度。

IP 报文头部的格式:

或:

路由表查询、路由

MAC 头部是以太网使用的头部,它包含了接收方和发送方的 MAC 地址等信息:

ARP 协议寻找路由器的 MAC 地址:

查看 ARP 缓存:

MAC 报文:

网络包(网卡驱动获取网络包之后,会将其复制 到网卡内的缓存区中,接着会在其开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列。):

交换机的 MAC 地址表:

查询路由表判断转发目标:

互相扒皮 ------ 服务器 与 客户端:

相关推荐
速盾cdn6 小时前
速盾:CDN是否支持屏蔽IP?
网络·网络协议·tcp/ip
yaoxin5211236 小时前
第二十七章 TCP 客户端 服务器通信 - 连接管理
服务器·网络·tcp/ip
内核程序员kevin6 小时前
TCP Listen 队列详解与优化指南
linux·网络·tcp/ip
JosieBook14 小时前
【网络工程】查看自己电脑网络IP,检查网络是否连通
服务器·网络·tcp/ip
inter_peng15 小时前
[Docker-显示所有容器IP] 显示docker-compose.yml中所有容器IP的方法
tcp/ip·docker·eureka
九州ip动态18 小时前
模拟器多开限制ip,如何设置单窗口单ip,每个窗口ip不同
tcp/ip·游戏·媒体
MapleLea1f19 小时前
26届JAVA 学习日记——Day14
java·开发语言·学习·tcp/ip·程序人生·学习方法
hgdlip21 小时前
电脑的ip地址怎么换掉:全面指南
tcp/ip·智能路由器·电脑
命里有定数1 天前
Ubuntu问题 -- 通过远程修改文件配置ubuntu服务器的静态IP (不需要到服务器现场) (通过NetworkManager)
运维·服务器·tcp/ip·ubuntu·网卡