首页 > 其他分享 >22 URL到网卡:网络数据流动

22 URL到网卡:网络数据流动

时间:2023-05-03 13:55:34浏览次数:30  
标签:缓存 22 URL IP TCP 网卡 mac 数据包

输入URL,从一个请求到响应都发生了什么事?

常规网络交互过程:1、从客户端发起网络请求,用户态的应用程序会生成HTTP请求报文,并通过DNS协议查找到对应的远端 IP地址;2、在套接字生成以后进入内核态,游览器会委托操作系统内核协议栈中的上半部分,即TCP/UDP协议发起连接请求;3、然后由协议栈下半部分的ip协议进行封装,使数据包具有远程定位能力;4、经过MAC层处理,找到接收方的目标MAC地址;5、最终数据包在经过网卡转化成电信号经过交换机、路由器发送到服务端,服务端经过处理拿到数据,再通过各种网络协议把数据响应给客户端;6、客户端拿到数据;7、客户端与服务端之间反复交换数据,客户端的页面就会发生变换;

网络分层和网络协议:

通过网络分层简化问题难度;网络数据传输过程中,不同的设备之间的传输数据的格式,需要定义一个数据标准,因此有了网络协议;

发起请求阶段(应用层):

应用层是工作在操作系统的用户态;

  用户输入:在游览器中输入URL:

输入时,游览器会根据我们的输入内容,先匹配对应的URL以及关键词,给出输入建议,同时检查URL的合法性,并且在URL前后补全URL;每个网络栏的地址都符合 通用URI 的语法;

URI = scheme:[//authority]path[?query][#fragment]
URI = 方案:[//授权]路径[?查询][#片段ID]

游览器会从URL中提取出网络的地址,也叫主机名;可以为域名或IP地址;解析之后,生成HTTP请求;

  网络请求前:查看游览器缓存:

HTTP报文生成之后,会先检查本地缓存,若访问过当前的URL,会先进入缓存查询;缓存有:路由器缓存、DNS 缓存、浏览器缓存、Service Worker、Memory Cache、Disk Cache、Push Cache、系统缓存等;若游览器缓存没有命中缓存,游览器会做一个系统调用获得系统缓存中的记录,通过域名获取IP地址,返回hostent 结构;

若没有访问过,就会跳过缓存这一步;

  域名解析:DNS

游览器会委托操作系统将HTTP报文发送到对应的服务端;这之前需要查找到服务端的IP地址;为方便记忆,将IP映射为域名;

DNS服务器是一个分布式数据库:维护IP和域名的映射关系;

在域名中,层级关系是从左到右、从低到高排列的树形结构,最高一级的根节点为root节点;即根域名服务器;因为所有的域名的顶级域名都一样,因此省略;完整的 应该是 cosmos.com. ,后面的. 相当于.root ;

客户端因此只要请求到一个DNS服务器,就可以一层层递归和迭代查找所有的DNS服务器;

DNS域名解析的过程:DNS解析 > 浏览器DNS缓存 > hosts文件 > 本地DNS服务器 > ISP DNS服务器;

操作系统协议栈(传输层和网络层):

TCP/IP 协议栈最广泛;协议栈的上半部分负责和应用层通过套接字(Socket)进行交互;它可以是TCP协议或UDP协议;

应用层会委托协议栈的上半部分完成收发数据的工作;下半部分负责把数据发送到指定方的IP协议,由IP协议连接下层的网卡驱动;

  可靠性传输:建立TCP连接:

游览器通过DNS解析拿到cosmos的IP地址后,取出URL的端口,HTTP默认为80,HTTPS 默认为443;随即游览器委托协议栈向对应的IP地址发器TCP连接请求;

建立TCP三次握手操作:

发送的是TCP分组;也是一次网络通信;TCP包头用于向下层表明这是一个tcp数据包;首先是源端口号和目标端口号,接着是一串有序数字,保证TCP报文有序被接受,解决网络包乱序问题;之后是确认号,防止数据包丢失;紧接着是一些状态位,维护双方连接的状态;后面还有一个窗口,用于流量控制;

TCP层封装好数据包,向下层IP层发送;

  目的地定位:IP层:

IP协议是TCP/IP协议栈的核心; 网络数据包进入网络层后,IP层协议函数要对网络数据包进行:数据包的校验和检验;防火墙对数据包过滤;IP选项处理;数据分片和重组;接收、发送和前送;

IP层被设计成 IP寻址、路由和分包组包;IP地址并不是以主机数目进行配置的,而是根据网卡数来进行;把IP地址及相关信息组装为一个IP头,把它放在网络数据的前面形成IP包;最后将IP包发送给ip层下一层组件MAC层;

点对点传输:MAC(链路层)

网卡mac地址就是计算机网卡的物理地址;固化到网卡中,唯一且无重复;

由IP包加上mac头;mac头包括发送方的mac头,和接收方的mac头;用于两个物理地址点对点传输;此外还有一个头部字段为协议类型,有IP和ARP两种;

 发送方的mac地址只需要读取当前设备网卡的mac地址就可以获取;而接收方的mac头则需要通过ARP协议在网络中携带IP地址,在一个网络中发送广播信息,这样就能获取网络的IP地址对应的mac地址;然后给IP头加上mac头就可以成为mac数据包;

电信号的出口:网卡(物理层)

将数据包转化为电信号;mac数据包交给网卡驱动程序,而网卡驱动程序会将mac数据包写入网卡的缓冲区(网卡上的内存);网卡会在mac数据包的起止位置加入起止帧和校验序列;最后将加入起止帧和校验序列的mac数据包转化为电信号,发送出去;

客户端服务端的持续数据交换(应用层):

数据通过网卡离开了计算机,进入到局域网,通过局域网中的设备,集线器、交换机和路由器等,数据会进入到互联网,最终到达目标服务器。

服务器就会先取下数据包的 MAC 头部,查看是否匹配自己 MAC 地址。然后继续取下数据包的 IP 头,数据包中的目标 IP 地址和自己的 IP 地址匹配,再根据 IP 头中协议项,知道自己上层是 TCP 协议。之后,还要继续取下数据包 TCP 的头。完成一系列的顺序校验和状态变更后,TCP 头部里面还有端口号,此时我们的 HTTP 的 server 正在监听这个端口号,就把数据包再发给对应的 HTTP 进程。HTTP 进程从服务器中拿到对应的资源(HTML 文件),再交给操作系统对数据进行处理。然后再重复上面的过程,层层携带 TCP、IP、MAC 头部。接下来数据从网卡出去,到达客户端,再重复刚才的过程拿到相应数据。客户端拿到对应的 HTML 资源,浏览器就可以开始解析渲染了,这步操作完成后,用户最终就能通过浏览器看到相应的页面;

此时,客户端与服务端之间通过tcp协议维护了一个连接状态;若需要关闭,则进行四次挥手;

 

标签:缓存,22,URL,IP,TCP,网卡,mac,数据包
From: https://www.cnblogs.com/xuan01/p/17368862.html

相关文章

  • IDEA2022.1.2(转载)
    安装&破解的时间:2022-09-011.下载IDEA下载地址:https://www.jetbrains.com/idea/download/other.html选择版本:2022.1.2选择绿色版:2022.1.2-WindowsZIPArchive(zip)解压到自定义目录:D:\dev_tools\IntelliJ\ideaIU-2022.1.2.win2.下载破解包下载地址:https://wwi.lanzou......
  • 沁恒 CH32V208(三): CH32V208 Ubuntu22.04 Makefile VSCode环境配置
    目录沁恒CH32V208(一):CH32V208WBU6评估板上手报告和Win10环境配置沁恒CH32V208(二):CH32V208的储存结构,启动模式和时钟沁恒CH32V208(三):CH32V208Ubuntu22.04MakefileVSCode环境配置硬件部分CH32V208WBU6评估板WCH-LinkE或WCH-Link硬件环境与Windows下......
  • linux下针对指定网卡限速 wondershaper
    背景由于路由器openwrt的限速不太好用,所以需要到设备上去进行限速设置,这里使用wondershaper使用下载安装wondershaperwgethttps://ghproxy.com/https://github.com/magnific0/wondershaper/archive/refs/heads/master.zip-Owondershaper.zipunzipwondershaper.zipcdwon......
  • 2022CVPR_Toward Fast, Flexible, and Robust Low-Light Image Enhancement(SCI_main)
    1.motivation(1)低光增强不能处理复杂的场景(2)需要耗费大量的计算2.contribution(1)节省计算(2)发明了自监督的SCI模块(SCI的核心是引入额外的网络模块(自校准照明)来辅助训练,而不是用于测试)大佬链接:(11条消息)低照度增强--论文阅读【《TowardFast,Flexible,andRobustLow-Light......
  • Win11系统,VS2022编写数据库程序,小体积,绿色单文件,支持密码保护,XP到Win11都能运行
    在WIN11中用VS2022编写小体积的绿色单文件,支持密码保护,XP到WIN11都能运行的数据库程序1.用VC60建立一个Win32工程,VC60建立的工程默认是字节型的。2.用VS2010读取并转换为2010格式,再用VS2022读取,选择SDK和平台都不升级3.把wxsqlite3-4.5.1.zip\wxsqlite3-4.5.1\sqlite3se......
  • VS2022使用ClickOnce发布程序本地安装.net框架
    因为遇到下面的错误,没有在网上搜到详细解决问题的教程,费了一些时间才解决了问题,特此记录一下,也希望能帮助到其他人。 要在“系统必备”对话框中启用“从与我的应用程序相同的位置下载系统必备组件”,必须将“.NET桌面运行时6.0.14(x64)”项的文件“net6desktopruntime_x64\win......
  • Ubuntu 22.04 开启SSH
    1.更新源sudoaptupdate&&sudoaptupgrade-y2.安装SSH(OpenSSH)sudoaptinstallopenssh-server-y3.使用systemctl启动SSH服务sudosystemctlenable--nowssh4.检查ssh状态sudosystemctlstatusssh5.检查防火墙状态sudoufwstatus6.防火墙放行SSH端口......
  • Gogs 推送 URL 被解析到默认禁用的本地网络地址(Payload URL resolved to a local netw
    原帖地址:https://blog.51cto.com/u_1472521/5981347问题配置Web钩子使用本地URL出现错误。  解决方法修改​​app.ini​​​配置文件,添加参数​​LOCAL_NETWORK_ALLOWLIST​​后重启服务。如果是多个用逗号分开,例如:LOCAL_NETWORK_ALLOWLIST=drone,192.168.20.1......
  • CSP2022-06
    第一题 水题,没啥好说的#include<iostream>#include<cmath>usingnamespacestd;constintN=1e6;doublea[N];intmain(){intn;cin>>n;doublesum=0;for(inti=0;i<n;i++){cin>>a[i];......
  • 2202年了,“小样本”还值得卷吗?
    文|Severus从一个应用实验引发的思考。大家好,我是Severus,一个在某厂做中文自然语言理解的老程序员。这个主题,源自于我之前在公司内做的一次技术分享。承接上一篇文章(格局打开,带你解锁prompt的花式用法),我想要继续分享一下,我们后续尝试的实验及分析,以及我对小样本的看法。简单回......