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

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

文章目录

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

参考

图解网络介绍 | 小林coding

  • TCP/IP 网络模型有哪几层?
  • 键入网址到网页显示,期间发生了什么?
  • Linux 系统是如何收发网络包的?

一、网络模型有哪几层

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

    • OSI 参考模型

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

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

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

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

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

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

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

    • TCP/IP 模型

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

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

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

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

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

  • TCP/IP 四层结构:

  • 每一层的封装格式:

    img

  • 应用层只需要专注于为用户提供应用功能,比如 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 的消息格式

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

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

HTTP 请求报文结构:

  1. 请求行:包含了请求方法、请求的资源路径以及HTTP协议版本。例如:
GET /index.html HTTP/1.1
  1. 请求头部:包含了请求的一些附加信息,如HostUser-AgentContent-Type等。每个请求头部都是以一个键值对的形式表示。例如:
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 请求,会包含请求体,其中包含了客户端发送给服务器的数据。例如:

key1=value1&key2=value2

HTTP 响应报文结构:

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

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

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

域名解析的工作流程

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

TCP 报文头部的格式:

TCP 包头格式

或:

TCP 层报文

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

TCP 三次握手

TCP 分割数据:

MTU 与 MSS

MTU VS MSS:

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

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

IP 报文头部的格式:

IP 包头格式

或:

IP 层报文

路由表查询、路由

路由规则判断

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

MAC 包头格式

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

ARP 广播

查看 ARP 缓存:

ARP 缓存内容

MAC 报文:

MAC 层报文

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

数据包

交换机的 MAC 地址表:

交换机的 MAC 地址表

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

路由器转发

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

网络分层模型

相关文章:

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

文章目录 参考一、网络模型有哪几层DMANAPI 机制二、键入网址到网页显示,期间发生了什么?1. HTTP2. DNS3. 协议栈4. TCP5. IP6. MAC7. 网卡8. 交换机9. 路由器10. 服务器 与 客户端的互相扒皮(添加、删除头部信息)参考图HTTP 请求…...

Docker 容器 mysql 配置主从

1、前提条件 集群的条件下 服务器 172.16.11.195 13316:3306 服务器 172.16.11.196 13317:3306 配置好主数据库和从数据 2、配置主从数据库 2.1使用portainer 来管理容器 建立数据库密码 新增配置文件 # mysql-master.cnf [mysqld] server_id110 log-binmysql-binrela…...

64. UE5 RPG 创建新的双手攻击怪物

在上一篇文章中,我们实现了新的功能,现在可以创建多个普通攻击动画,并且可以根据你所使用的普通攻击动画,设置不同的攻击位置。比如,你使用武器,那么攻击位置需要从武器上获取,如果你没有持有武…...

(求一个整数各位数的和)编写程序,读取一个在0和1000之间的整数,并将该整数的各位数字相加。例如:整数是 932,各位数字之和为14。

(求一个整数各位数的和)编写程序,读取一个在0和1000之间的整数,并将该整数 的各位数字相加。例如:整数是 932,各位数字之和为14。 提示:利用操作符%分解数字,然后使用操作符/去掉分解出来的数字。例如: 932%10-2 932/10-93。下面是一个运行示…...

大模型参加高考,同写2024年高考作文,及格分(通义千问、Kimi、智谱清言、Gemini Advanced、Claude-3-Sonnet、GPT-4o)

大家好,我是章北海 今天高考,上午的语文结束,市面上又要来一场大模型参考的文章了。 我也凑凑热闹,让通义千问、Kimi、智谱清言一起来写一下高考作文。 公平起见,不加任何其他prompt,直接把题目甩过去。…...

【因果推断python】24_倾向得分2

目录 倾向加权 倾向得分估计 倾向加权 好的,我们得到了倾向得分。怎么办?就像我说过的,我们需要做的就是以此为条件。例如,我们可以运行一个线性回归,它仅以倾向得分为条件,而不是所有的 X。现在&#xff…...

部件库(Widget Factory)

部件库(Widget Factory) 部件库,也被称为Widget Factory,是一个强大的工具,用于创建、存储和管理可重用的软件组件。在本文中,我们将深入探讨部件库的概念、重要性、以及如何在现代软件开发中使用它。 什么是部件库? 部件库是一个集合,其中包含了各种预先构建的软件…...

tomcat启动闪退解决办法

检查端口冲突: Tomcat默认使用8080端口,如果该端口已被其他应用占用,Tomcat将无法启动。解决办法:更改Tomcat使用的端口号或关闭占用该端口的其他应用。 更改Tomcat端口号:打开Tomcat安装目录下的conf文件夹&#xff0…...

OpenStack云平台管理

OpenStack云平台管理 文章目录 OpenStack云平台管理资源列表基础环境一、部署Openstack二、创建网络和路由2.1、删除默认的网络2.2、创建网络和路由2.2.1、创建外部网络2.2.2、创建内部网络 2.3、创建路由 三、创建实例3.1、配置实例3.2、配置NAT转换 四、绑定浮动IP地址五、添…...

内部类(超详细)

内部类 一:初始内部类 (1)什么是内部类? 类的五大成员:属性、方法、构造方法、代码块、内部类 举例:在A类的内部定义B类,B类就被称为内部类 public class Outer {// 外部类public class Inter {// 内部类} } public class Test {// 外部其他类public static void m…...

Android的SELinux详解

标签: Android的SELinux详解; SELinux;Enforcing; Android的SELinux详解 概述 SELinux(Security-Enhanced Linux)是一个Linux内核模块和用户空间工具的集合,提供强制访问控制(MAC)机制。Android引入SELinux以增强系统的安全性,通过限制进程的权限来减少安全漏洞的…...

R语言中的列表list

基础 在R语言中的最常用的向量有两种: 第一种,原子向量 像字符型向量,数值型向量,逻辑型向量这些,它们共有的一个特点是,向量里面的值是同质的。当你用数值型向量时,里面所有值都是数值型的。…...

10、有条件提前退出关键字Return From Keyword If【robot framework】

在 Robot Framework 中,Return From Keyword If 是一个有用的关键字,它允许你在特定条件下从关键字中返回。这在需要在满足某个条件时提前退出关键字的情况下特别有用。 以下是 Return From Keyword If 的语法和使用示例: 语法 Return From…...

JAVA开发的一套(智造制造领航者云MES系统成品源码)saas云MES制造执行系统源码,全套源码,支持二次开发

JAVA开发的一套(智造制造领航者云MES系统成品源码)saas云MES制造执行系统源码,全套源码,支持二次开发 1990年11月,美国先进制造研究中心AMR(Advanced Manufacturing Research)就提出了MES&#…...

探究JSON和XML:两种常见的数据交换格式之异同

在软件开发和数据交换领域,JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)是两种广泛使用的数据交换格式。它们都具有将数据结构化并在不同系统之间进行传输和解析的能力,但在实际应用…...

SQL查询的优化方案

SQL查询优化是一个重要的数据库管理任务,它可以帮助提升查询性能,减少响应时间和系统资源消耗。以下是一些关键的优化策略及其示例: 1. 使用索引 (Indexing) 优化说明: 索引能够显著加快数据检索速度,特别是对于大表上的查询。为…...

【C语言题解】1、写一个宏来计算结构体中某成员相对于首地址的偏移量;2、写一个宏来交换一个整数二进制的奇偶位

🥰欢迎关注 轻松拿捏C语言系列,来和 小哇 一起进步!✊ 🌈感谢大家的阅读、点赞、收藏和关注 💕希望大家喜欢我本次的讲解💕 目录👑 1、写一个宏,计算结构体中某变量相对于首地址的偏…...

LabVIEW阀性能试验台测控系统

本项目开发的阀性能试验台测控系统是为满足国家和企业相关标准而设计的,主要用于汽车气压制动系统控制装置和调节装置等产品的综合性能测试。系统采用工控机控制,配置电器控制柜,实现运动控制、开关量控制及传感器信号采集,具备数…...

Flutter 中的 LayoutBuilder 小部件:全面指南

Flutter 中的 LayoutBuilder 小部件:全面指南 Flutter 是一个功能丰富的 UI 框架,它允许开发者使用 Dart 语言来构建高性能、美观的跨平台应用。在 Flutter 的布局系统中,LayoutBuilder 是一个强大的组件,它可以根据父容器的约束…...

webman中创建udp服务

webman是workerman的web开发框架 可以很容易的开启udp服务 tcp建议使用gatewayworker webman GatewayWorker插件 创建udp服务: config/process.php中加入: return [// File update detection and automatic reloadmonitor > [ ...........], udp > [handler > p…...

Vue 学习笔记 总结

Vue.js 教程 | 菜鸟教程 (runoob.com) 放一下课上的内容 Vue练习 1、练习要求和实验2的用户注册一样,当用户输入后,能在下方显示用户输入的各项内容(不需要实现【重置】按钮) 2、实验报告中的实验小结部分来谈谈用JS、jQuery和…...

云计算导论(3)---分布式文件系统

文章目录 1. 概述2. 基本架构3. GFS和HDFS4. 云存储 1. 概述 1. 文件系统是操作系统用来组织磁盘文件的方法和数据结构。  传统的文件系统指各种UNIX平台的文件系统,包括UFS等,它们管理本地的磁盘存储资源,提供文件到存储位置的映射&#xf…...

后端进阶-分库分表

文章目录 为什么需要分库为什么需要分表 什么时候需要分库分表只需要分库只需要分表 分库分表解决方案垂直分库水平分库垂直分表水平分表 分库分表常用算法范围算法hash分片查表分片 分库分表模式客户端模式代理模式 今天跟着训练营学习了分库分表,整理了学习笔记。…...

Apple开发者应用商店(AppStore)描述文件及ADHOC描述文件生成

创建AD HOC描述文件 1.选中Profiles,然后点击加号创建 2.创建已注册设备可安装描述文件 3.选择要注册的id 4.选择证书 5.选择设备 6.输入文件名,点击生成 7.生成成功,点击下载...

【Git】修改设置 git 的 username、email

设置全局的本地用户名称和用户邮箱 参考:使用git config --global设置用户名和邮件 git config --global user.name "xxx" git config --global user.email "xxx.com"git config --list git config命令的–global参数,用了这个参数…...

python脚本打包为exe并在服务器上设置定时执行

python脚本打包为exe并在服务器上设置定时执行 1. Python脚本打包2. 将打包好的Python脚本放入服务器3. 在服务器上设置其定时执行 1. Python脚本打包 首先,下载pyinstaller 键盘winR打开终端,输入命令:pip install pyinstaller,…...

STM32-呼吸灯仿真

目录 前言: 一.呼吸灯 二.跑马灯 三. 总结 前言: 本篇的主要内容是关于STM32-呼吸灯的仿真,包括呼吸灯,跑马灯的实现与完整代码,欢迎大家的点赞,评论和关注. 接上http://t.csdnimg.cn/mvWR4 既然已经点亮了一盏灯,接下来就可以做更多实验了, 一.呼吸灯 在上一个的基础上…...

【AI基础】第三步:纯天然保姆喂饭级-安装并运行chatglm2-6b

chatglm2构建时使用了RUST,所以在安装chatglm2之前,先安装RUST。 此系列文章列表: 【AI基础】第一步:安装python开发环境-windows篇_下载安装ai环境python-CSDN博客 【AI基础】第一步:安装python开发环境-conda篇_mini…...

Spring Security系列之Handler

概述 与Spring、Spring MVC、Spring Boot一样,Spring Security里也有很多Handler接口、可以分为两大类,一类是普通的XxxHandler(见名知意),另一类是对应的ServerXxxHandler(RequestRejectedHandler除外&am…...

Thinkphp使用Elasticsearch查询

在Thinkphp中调用ES,如果自己手写json格式的query肯定是很麻烦的。我这里使用的是ONGR ElasticsearchDSL 构建 ES 查询。ongr ElasticsearchDSL 的开源项目地址:GitHub - ongr-io/ElasticsearchDSL: Query DSL library for Elasticsearch。ONGR Elastics…...

青岛崂山区网站建设/百度ai营销中国行

2.1 Java虚拟机——JVMJVM(Java Virtual Machine ):Java虚拟机,简称JVM,是运行所有Java程序的假想计算机,是Java程序的运行环境,是Java 最具吸引力的特性之一。我们编写的Java代码,都运行在 JVM 之上。跨平…...

成都疫情最新情况今天/视频优化软件

数组&#xff1a;查找O(1)&#xff0c;插入删除O(n) 链表&#xff1a;查找O(n)&#xff0c;插入删除O(1) nxt[ i ] 是 i 点的下一个点 #include<cstdio> using namespace std; int dat[110],nxt[110]; int main() {int n,m;scanf("%d%d",&n,&m);for(in…...

wordpress网盘资源/seo优化排名技术百度教程

...

企业安全文化建设程序/seo刷关键词排名优化

终端输入就可以了 安装macOS Sierra后&#xff0c;会发现系统偏好设置的“安全与隐私”中默认已经去除了允许“任何来源”App的选项&#xff0c;无法运行一些第三方应用。 如果需要恢复允许“任何来源”的选项&#xff0c;即关闭Gatekeeper&#xff0c;请在终端中使用spctl命令…...

成都网站app开发/网络广告投放渠道有哪些

1、父组件传值给子组件------->子组件使用 props 属性接收 2、子组件传值给父组件-------->子组件通过$emit 传递&#xff08;自定义事件传递&#xff09;&#xff0c;父组件通过属性名称接收 3、父组件&#xff0c;子组件&#xff0c;兄弟组件相互传值------>需要 …...

一个wordpress程序搭建多个网站/seo平台是什么

最近仔细研读了苹果官网最新的设计规范。网上没有找到很满意的翻译版本&#xff0c;于是自己老老实实的啃了几遍官方文档&#xff0c;顺便把学习笔记输出给大家分享一下。这里有几点要提醒一下大家&#xff1a;这是简明笔记&#xff0c;只选了重点内容&#xff0c;不是通篇逐字…...