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

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

文章目录

      • 2.键入网址到网页显示,期间发生了什么?
      • 2.1真实地址查询DNS:
      • 2.2**协议栈:**上半部分是负责收发数据的TCP和UDP协议,下面一半是用IP协议控制网络包收发操作,在互联网上传数据时,数据会倍切分成一块块的数据报,而将数据包发送给对方的操作就是由IP负责的。
      • 2.3可靠传输TCP:
        • 2.3.1三次握手
        • 2.3.2TCP分割数据
        • 2.3.3 TCP报文生成
      • 2.4远程定位IP
        • 2.4.1多个网卡,就会有多个IP地址,那IP头部的源地址应该选择哪个IP呢?
        • 2.4.2IP 报文生成
      • 2.5两点传输-----MAC
        • 2.5.1mac 包头格式
        • MAC发送方和接受方如何确认?
        • 既然知道要发给谁,如何获取对方的MAC?
        • 广播获取的MAC地址会缓存。使用arp -a查看ARP缓存内容。
        • MAC报文包含接受方和发送方的MAC地址,并且有上层协议类型。
      • 3、出口网卡
      • 3.1送别者——交换机
      • 4、路由器
      • 5、数据包到达服务器

在这里插入图片描述

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

​ 对URL进行解析,发送给Web服务器的请求信息。http:(协议) +//+ web服务器 + / + 目录名 + /+ …+ 文件名。服务器后面表示文件的路经名。

​ web服务器文件路径:web 服务的根目录(/),

​ **没有文件的路径名?**则请求默认文件。

生产HTTP请求信息? 对URL进行解析后,浏览器就确定了Web服务器和文件名,接下来就是根据这些信息生成HTTP请求信息。

2.1真实地址查询DNS:

​ 域名, www.server.com. com后面还有一点表示根域名。下一层就是.com顶域名。

​ DNS作用:查询服务器域名对应的 IP 地址,根域的DNS服务器信息保存在所有DNS服务器(真实的物理实例服务器)。所有DNS服务去都可以找到和访问DNS服务器,所有只要客户端找到任意以太DNS服务器就可以通过它找到根域DNS服务器,然后再一路找到下层的某台DNS服务器。

域名解析流程:

​ 1、客户端首先发出一个DNS请求,发送给本地的DNS服务器(TCP/IP协议设置中填写DNS服务器地址)。

​ 2、本地域名服务器接受到客户端请求后,缓存表格中能找到www.server.com(域名),直接返回IP地址。如果没有,本地DNS会去问它的根域名服务器。

​ 3、根DNS收到来自本地的DNS的请求后,发现后置是.com , 说"www.server.com"这个域名是.com区域管理,将.com顶级域名服务器地址给你,

​ 4、本地DNS收到.com顶级域名服务器的地址后,发送请求到。com域DNS服务器中询问“老二,你能告诉我www.server.com”的ip地址吗?

​ 5、.com 域名服务器说:”我给你负责www.server.com“区域的权威的DNS服务器地址,你去问他应该能做到,

​ 6、然后本地DNS于是转向问权威DNS服务器:”老三,WWW.server.com“的域名解析地址是多少?

​ 7、权威DNS服务器查询后将对应的IP地址XXXXX,告诉本地DNS。

​ 8、本地DNS再将IP地址返回给客户端,客户端和目标建立连接。

​ 至此,我们完成了DNS的解析。如果问路一般。

​ 每次解析域名都要经过这么多步骤吗?

浏览器会先查看,自身有没有这个域名的缓存,如果有,就直接返回,如果没有,就去问操作系统,操作系统也会去看自己的缓存,如果有就直接返回,没有去hosts文件查看,最后才回去问DNS服务器。

2.2**协议栈:**上半部分是负责收发数据的TCP和UDP协议,下面一半是用IP协议控制网络包收发操作,在互联网上传数据时,数据会倍切分成一块块的数据报,而将数据包发送给对方的操作就是由IP负责的。

​ DNS 获取 ip后,就可以把HTTP的传输工作交给操作系统中的协议栈。

​ (应用程序)Soket库。

​ **(协议栈)**Tcp,UDP -》 IP,ip协议包括ICMP协议和ARP协议,ARP用于根据IP地址查询以太网MAC地址。ICMP协议告知网络包传送过程中产生的错误以及各种控制信息。

​ IP下面的驱动程序:网卡驱动程序,

​ 物理硬件网卡:硬件。

“原来我需要那么多大佬的协助啊,那我先去找找 TCP 大佬。

IP 地址的确定过程包括

  1. 应用程序通过 Socket 指定本地和远程 IP 地址。
  2. 域名解析(DNS)将域名转换为 IP 地址。
  3. 操作系统和网络设备(如路由器、NAT)处理 IP 地址的路由和转发。

2.3可靠传输TCP:

​ HTTP是基于TCP协议传输的,所有这里我们先了解下TCP协议。‘

​ TCP包头格式:

在这里插入图片描述

2.3.1三次握手

client 发送(syn)请求报文,server端返回SYN-ACK报文(响应和请求),client端返回ack报文。

所以三次握手目的是保证双方都有发送和接收的能力

2.3.2TCP分割数据

HTTP的数据较长,TCP需要把HTTP的数据拆分成一块块的发送,而不是一次性发送所有数据。

MTU:一个网络包的最大长度,以太网协议1500字节,

MSS:除去IP和TCP头部之后,一个网络包所能容纳的TCP数据的最大长度。

2.3.3 TCP报文生成

Tcp报文头部就是会存放在HTTP头部+数据。

2.4远程定位IP

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

IP协议需要源地址IP和目标地址IP以及协议号,06表示TCP协议。

源地址IP:客户端ip,目标地址ip:web服务器IP。

2.4.1多个网卡,就会有多个IP地址,那IP头部的源地址应该选择哪个IP呢?

通过路由表中的Destination目标地址,来区分各个网卡对应的子网,没有子网则使用默认网关发送到getway(路由器地址),网关的IP地址是具有路由功能的设备的IP地址。

2.4.2IP 报文生成

对TCP报文加上IP报文头,然后IP报文会携带协议信息,指明TCP协议。

2.5两点传输-----MAC

2.5.1mac 包头格式

MAC 头部是以太网使用的头部,它包含了接受方和发送方的MAC地址等信息,用于两点之间的传输。mac包头的协议类型只使用:

0800: IP协议。

0806:ARP协议。

MAC发送方和接受方如何确认?

发送方的MAC地址获取:MAC地址网卡生产时写入ROM。

接受方的MAC地址获取:查询路由表,在路由表中找到相匹配的条目,然后把包发给对应的网关(也就是gateway的IP地址),

既然知道要发给谁,如何获取对方的MAC?

ARP 协议(ip层协议)会在以太网中以广播的形式,对以太网所有地址查询IP地址是谁?请告诉我MAC地址。

广播获取的MAC地址会缓存。使用arp -a查看ARP缓存内容。
MAC报文包含接受方和发送方的MAC地址,并且有上层协议类型。

3、出口网卡

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

起始帧分界符是一个用来表示包起始位置的标记。末尾的FCS(帧校验序列)用来检查包传输过程是否有损坏。

最后网卡会将包转为电信号,通过网线发送出去。

3.1送别者——交换机

交换机的设计是将网络包原样转发到目的地。交换机工作在MAC层,也称二层网络设备。

交换机的包接受操作:首先,电信号到达网线接口,交换机里的模块进行接收,接下来交换机里的模块将电信号转换成数字信号。

通过包末尾的FCS校验错误,如果没问题则放到缓冲区。这部分操作基本和计算机的网卡相同。

查询一下这个包的接受方MAC地址是否已经在MAC地址表中有记录了。mac地址表中包含设备的mac地址和设备连接在交换机的那个端口上。找不到mac地址的话,表明该地址的设备还没有向交换机发送过包,直接发送所有端口。如果接收方 MAC 地址是一个广播地址,那么交换机会将包发送到除源端口之外的所有端口。

4、路由器

网络经过交换机之后,到达路由器,并在此背转发到下一个路由器或目标设备。

路由器是基于IP设计,俗称三层网络设备,路由器的各个端口都具有MAC地址和IP地址。

而交换机是基于以太网设计的,俗称二层网络设备,交换机的端口不具有MAC地址。

路由器基本原理

类似于网卡具有IP地址,接受端口会接受发给自己的以太网包,然后路由表查询转发目标,再由相应的端口作为发送方将以太网包发送出去。

路由器的包接受操作:查看mac是否是发给自己的,是则放到缓冲区,否则就丢弃这个包。

查询路由表确定输出端口:完成包接受操作之后,路由器就会去掉包开头的MAC头部。MAC头部的作用就是将包送达路由器,使用子网掩码和IP地址计算出网关地址即是匹配的路由路径。

路由器的发送操作:

网关为空表示到达终点,否则表示还未到达终点。知道ip地址后使用ARP协议根据ip地址查询MAC地址,并将查询的结结果作为接受方的MAC地址。

之后将填写输出端口的 MAC 地址,然后发送给下一个交换机,交换机根据mac地址选择端口,然后继续发送给下一个路由器,然后不断重复直到网络包到达目的地。

综上:源IP地址和目的IP地址是不会变的,网络包传输的过程中变化的只有mac地址。

5、数据包到达服务器

开始解析数据包,先后依次查看MAC地址是否符合服务器上的地址,然后是IP地址是否符合服务器的IP地址。然后查看TCP的报文头中的序列号,是否是我想要的,如何使就放入缓存返回ACK。TCP服务器存在端口号,然后HTTP的服务器监听这个端口号,取出数据将包发送给HTTP。服务器的HTTP进程解析请求,然后将网页封装成HTTP响应报文,HTTP响应报文也要穿上TCP、IP、MAC头部,目的地址使客户端IP地址。重复之前的流程,知道client接受到响应数据。最后客户端离开,向服务器发送TCP四次挥手,至此双方的连接就断开了。


http://www.xdnf.cn/news/717.html

相关文章:

  • Arduino示例代码讲解:Project 08 - Digital Hourglass 数字沙漏
  • DAY 50 leetcode 1047--栈和队列.删除字符串中的所有相邻重复项
  • Spring MVC 如何体现 Model-View-Controller 各自的职责?它们之间是如何协作的?
  • 【Linux】进程状态
  • 【仓颉 + 鸿蒙 + AI Agent】CangjieMagic框架(17):PlanReactExecutor
  • OpenCV 自适应背景更新 cv2.accumulateWeighted
  • 【OC】AVPlayerLayer的学习
  • PG psql --single-transaction 参数功能
  • 秘密任务 3.0:如何通过 JWT 认证确保 WebSockets 安全
  • c++基础·左值右值
  • HBase安装与基本操作指南
  • 安卓单机斗地主,具备休闲挑战等多模式
  • paddleocr出现: [WinError 127] 找不到指定的程序解决办法
  • 一招解决所以Maven找不到依赖包的问题
  • 即插即用模块(1) -MAFM特征融合
  • javascript day4
  • LicheeRV Nano 与Ubuntu官方risc-v 镜像混合
  • 12【生命周期·入门】为何需要与显式标注 (`‘a`):让编译器读懂引用的“有效期”
  • Oracle--SQL基本语法
  • lmm-r1开源程序是扩展 OpenRLHF 以支持 LMM RL 训练,用于在多模态任务上重现 DeepSeek-R1
  • Eureka搭建
  • BeautifulSoup 库的使用——python爬虫
  • 算法—合并排序—js(场景:大数据且需稳定性)
  • 23种设计模式-结构型模式之装饰器模式(Java版本)
  • C#进阶学习(八)常见的泛型数据结构类(3)SortedDictionary<TKey, TValue>与SortedList<TKey, TValue>
  • 大语言模型推理能力的强化学习现状理解GRPO与近期推理模型研究的新见解
  • PG CTE 递归 SQL 翻译为 达梦版本
  • 将 JSON 字符串转化为对象的详细笔记 (Java示例)
  • 【AI量化第26篇】以配置为核心的工程化研究管理——基于miniQMT的量化交易回测系统开发实记
  • 15. 三数之和