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 地址表

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

路由器转发

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

网络分层模型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/849453.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3【六】setup的使用和setup的返回值

Vue3【六】setup的使用和setup的返回值 setup函数的使用,和vue2的选项式不同 vue3的组合式使用的是setup函数 通过返回值将数据和方法传到页面 返回值也可以是一个箭头函数 setup先于 data和method执行所有无法读取到this和data,method的内容&#xff0c…

顶顶通呼叫中心中间件-asr录音路径修改(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件-asr录音路径修改(mod_cti基于FreeSWITCH) 录音路径模板。如果不是绝对路径,会把这个路径追加到FreeSWITCH的recordings后面。支持变量,比如日期 ${strftime(%Y-%m-%d)}。最后一个录音文件路径会保存到变量 ${cti_asr_last_record_…

C语言详解(动态内存管理)1

Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥💥个人主页:奋斗的小羊 💥💥所属专栏:C语言 🚀本系列文章为个人学习…

Django 传递额外参数给视图函数

本书1-7章样章及配套资源下载链接: https://pan.baidu.com/s/1OGmhHxEMf2ZdozkUnDkAkA?pwdnanc 源码、PPT课件、教学视频等,可以从前言给出的下载信息下载,大家可以评估一下。 在Django框架中,URLconf模块还支持一种传递额外参数给视图函…

2024-06-07 Unity 编辑器开发之编辑器拓展8 —— Scene 窗口拓展

文章目录 1 Handles 类1.1 Scene 响应函数1.2 自定义窗口中监听 Scene1.3 Handles 常用 API2.2.1 颜色控制2.2.2 文本2.2.3 线段2.2.4 虚线2.2.5 圆弧2.2.6 圆2.2.7 立方体2.2.8 几何体2.2.9 移动、旋转、缩放2.2.10 自由移动 / 旋转 2 Scene 窗口中显示 GUI3 HandleUtility4 G…

Python 将CSV文件转为PDF文件

CSV文件通常用于存储大量的数据,而PDF文件则是一种通用的文档格式,便于与他人共享和打印。将CSV文件转换成PDF文件可以帮助我们更好地管理和展示数据。本文将介绍如何通过Python编程将CSV文件导出为PDF文件。 Python Excel库安装及介绍 在 Python 中&am…

GIGE 协议摘录 —— GVSP 协议(三)

系列文章目录 GIGE 学习笔记 GIGE 协议摘录 —— 设备发现(一) GIGE 协议摘录 —— GVCP 协议(二) GIGE 协议摘录 —— GVSP 协议(三) GIGE 协议摘录 —— 引导寄存器(四) GIGE 协议…

华为面经整理

文章目录 实习第一面准备提问相关算法相关 第一面结果提问环节 总结 实习 第一面准备 提问相关 操作系统有哪些功能 进程管理: 进程调度、进程同步和通信、多任务处理 内存管理: 内存分配、虚拟内存技术、内存保护 文件系统管理: 文件存储…

基础概念解析:SOCKS5代理究竟是什么?SOCKS5代理ip使用场景有哪些?

在当今数字化时代,网络安全和隐私保护已成为我们日常生活中不可忽视的问题。随着网络攻击手段的日益复杂,如何安全地访问互联网资源成为了一个亟待解决的问题。SOCKS5代理作为一种先进的网络协议,为我们提供了解决这一问题的有效方案。 本文…

活动预热丨在 AGI Playground 2024 遇见一群 RTE+AI 的 Builders

6 月 22、23 日,北京。 AGI Playground 2024,这个夏日最火热的 AGI 盛会。 王小川、杨植麟等 AGI 创业者悉数参加。 RTE 开发者社区的 builders 和 RTE Open Day 也将在现场! 我们将为大家呈现两大板块: 01 实时开发挑战 Wor…

OpenCV-最小外接圆cv::minEnclosingCircle

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 函数原型 void minEnclosingCircle(InputArray points, Point2f& center, float& radius); 参数说明 InputArray类型的…

从openstack环境中将服务器镜像导出的简单办法

1 登录openstack的页面,找到计划导出的主机信息。 通过实例名称, IP地址,找到对应的记录。点击实例名称,进入详情页。 在这里主要可以知道,当前主机在服务器上的文件ID,可以按这个ID去找对应的目录。 还可…

Nvidia Jetson/Orin/算能 +FPGA+AI大算力边缘计算盒子:无人机自主飞行软件平台

案例简介 所主导开发的 Generalized Autonomy Aviation System (GAAS) 是为无人机以及城市空中交通 (UAM, Urban Air Mobility) 所设计的开源无人机自主飞行框架。通过 SLAM、路径规划和 Global Optimization Graph 等功能为无人机提供在无 GPS 与外部通信情况下的自主飞行功…

【经典设计】构建业务架构的3大视图

在软件设计过程中,架构设计、功能设计和数据设计是三个不同层次的设计工作。而业务架构是系统整体规划中重要的基础工作,通常用业务架构图来表达业务架构。 业务架构定义了企业的治理结构、业务能力、业务流程、业务数据。业务能力说明企业做什么&#x…

想不到,AI爆发的趋势下,我会这么快被AI替代...

大家好,我是向阳 AI横空出世后,不少行业受到了冲击。第一批因AI失业的人,也已经出现了! 他们是游戏设计师、原画设计师、服装设计师……社交媒体上,不断能看到这样的新闻:引入AI后,某游戏公司…

<microros> 如何自定义uROS2数据类型

如何自定义数据类型 在microros中,我们可以看到,官方给我们提供了很多数据类型。 如果我们在实际使用的时候,这些类型无法满足我们的传输要求怎么办呢? 官方也提供了自定义数据类型的办法。 参考: https://github…

【活动通知 — 线上 Meetup】:ES|QL 及 B 站 Elasticsearch 平台实践 - 6 月 19 日

会议时间 2024年6月19日 19:00 — 21:00 参与方式 线上直播:Elastic 中国社区官方博客,elasticstack B 站号。链接请参考下面的报名地址。 活动议程 19:00-19:50 主题演讲:Elasticsearch 简单而高效的管道查询语言 - ES|QL 讲师&#xff…

想要提升地推效果吗?试试Xinstall数据查看功能,让您事半功倍!

在如今竞争激烈的移动互联网时代,地推作为一种直接有效的推广方式,受到了越来越多企业和品牌的青睐。然而,地推过程中产生的数据如何高效地收集、整理和分析,成为了摆在推广者面前的一大难题。Xinstall作为一款专业的App推广工具&…

AWS S3存储桶中如何下载文件

AWS S3存储桶中如何下载文件 1.单个下载 AWS S3 控制台提供了下载单个文件的功能,但是不支持直接在控制台中进行批量下载文件。您可以通过以下步骤在 AWS S3 控制台上下载单个文件:   1.1登录 AWS 管理控制台。   1.2转到 S3 服务页面。   1.3单击…

将web项目打包成electron桌面端教程(二)vue3+vite+ts

说明:我用的demo项目是vue3vitets,如果是vue2/cli就不用往下看啦,建议找找其他教程哦~下依赖npm下载不下来的,基本换成cnpm/pnpm/yarn就可以了 一、项目准备 1、自己新创建一个,这里就不过多赘述了 2、将需要打包成…