面试题--从键盘输入网站到网页显示,之间发生了什么

文章目录

    • 首先进入HTTP阶段
    • 协议栈阶段
    • TCP阶段
    • IP阶段
    • MAC
    • 网卡
    • 交换机
    • 路由器
    • 抵达

首先进入HTTP阶段

1.解析对应的URL,访问一个对应的服务器xxx.com的一个文件index.html;
2 使用DNS查询对应的ip地址,通过DNS服务器进行查找
3 组装http报文,生成http报文请求

步骤1:解析URL,访问对应服务器的一个文件(index.html)
当我们需要访问一个特定的网站并获取其中的某个文件时,首先需要解析URL以获取服务器的主机名和文件路径。例如,假设我们的URL是https://www.example.com/index.html。解析该URL,我们可以获得以下信息:

协议(Protocol):https
主机名(Host):www.example.com
文件路径(Path):/index.html
步骤2:使用DNS查询对应的IP地址,通过DNS服务器进行查找
在我们知道主机名之后,需要将主机名解析为对应的IP地址,以便能够建立与服务器的网络连接。这一过程通常使用DNS(Domain Name System)完成。DNS是一个分布式的服务,将域名(如www.example.com)映射到对应的IP地址。我们将向本地系统配置的DNS服务器发送查询请求,该服务器将返回与主机名对应的IP地址。

步骤3:组装HTTP报文,生成HTTP请求报文
一旦我们获得了服务器的IP地址,我们可以建立TCP连接,并向服务器发送HTTP请求报文。HTTP请求报文是由客户端发送给服务器的消息,其中包含了与所需文件有关的信息和请求头。对于我们的例子,我们将发送一个GET请求来获取index.html文件。

HTTP请求报文包括以下主要部分:

请求行(Request Line):包含HTTP方法(GET/POST/PUT等),文件路径和协议版本。
请求头(Request Headers):包含关于请求的其他元数据,例如Accept、User-Agent、Host等。
请求体(Request Body):对于GET请求,通常为空。
组装好HTTP请求报文后,将其发送到服务器的IP地址,通过建立的TCP连接向服务器发送请求。服务器接收到请求后,将处理请求并返回相应的响应信息,包括所请求的文件的内容。

以上是在访问一个特定文件时的一般流程,涉及到URL解析、DNS查询和HTTP请求报文的生成与发送。

协议栈阶段

协议栈阶段 :协议栈内分为几个部分,分别承担不同的工作。网络应用程序通过socket库来指示操作系统的协议栈工作
在这里插入图片描述
其中,IP中还包括了ICMP和ARP协议,一个用来管理IP,一个用来询问MAC地址

协议栈是计算机网络中实现网络通信的软件模块集合。它由多个层次构成,每个层次都负责特定的功能和任务。常见的协议栈是TCP/IP协议栈,它包括了多个协议层,如应用层、传输层、网络层和数据链路层。

网络应用程序通过调用操作系统提供的socket库与协议栈进行交互,向协议栈发出请求和接收响应,以实现网络通信。socket库提供了一组API,使应用程序可以通过协议栈与其他计算机进行数据传输。

在协议栈的TCP阶段,建立TCP连接的过程通常使用三次握手(three-way handshake)。三次握手包括以下步骤:

第一次握手:客户端向服务器发送一个带有SYN(同步)标志的TCP报文段,表示客户端要建立连接。
第二次握手:服务器收到客户端的SYN报文段后,回复一个带有SYN/ACK(同步/确认)标志的报文段,表示可以建立连接。
第三次握手:客户端收到服务器的SYN/ACK报文段后,向服务器回复一个带有ACK标志的报文段,表示连接已建立。
通过三次握手,建立的TCP连接可以开始进行数据的可靠传输。

在IP协议中,确实包含了ICMP(Internet Control Message Protocol)和ARP(Address Resolution Protocol)这两个重要的子协议。

ICMP是用于在IP网络中发送错误报告、诊断和管理功能的协议。它提供了一种机制,可以向发送IP数据包的设备报告网络连接、数据包丢失、超时等方面的错误信息。

ARP是用于将IP地址映射到物理网络地址(如MAC地址)的协议。当设备需要发送数据包到另一个设备时,它需要知道目标设备的物理地址才能正确地传递数据包。ARP协议提供了一种机制,通过发送ARP请求广播来查询目标设备的物理地址,然后将其映射到发送设备的ARP缓存中,以便后续的通信。

这些协议在协议栈中各自扮演重要角色,确保网络通信的可靠性和正确性。

TCP阶段

来到TCP阶段,通过建立三次握手建立TCP连接
如果HTTP请求消息过长大于MSS长度,就需要分片
最后拆分完成后加上TCP的首部,在已经建立好的连接中进行数据传输

在建立好的TCP连接中进行数据传输时,如果HTTP请求消息的长度超过了最大分段长度(Maximum Segment Size,MSS),就需要对消息进行分片。

分片是将较大的数据包分割成较小的片段,以适应网络传输的要求。每个分片都会加上TCP的首部,以便在接收端重新组装数据。TCP首部包含了序列号、确认号、校验和等字段,用于确保数据的正确传输和有序接收。

在发送端,TCP会将消息分割为适当大小的分片,确保每个分片都不超过MSS的限制。然后,为每个分片加上TCP首部,并将它们发送到接收端。

在接收端,TCP会按照序列号将分片重新组装成原始的HTTP请求消息。TCP会使用确认号和序列号来追踪已接收的分片,并确保按照正确的顺序重新组装数据。

这样,即使HTTP请求消息很长,超过了MSS的限制,TCP仍然能够有效地传输数据,保证数据的完整性和有序性。使用分片和TCP的首部信息,可以在已经建立好的TCP连接中进行长消息的传输。

IP阶段

首先,根据网卡确定一个合适的IP地址

然后进行位于运算,计算出对应的子网掩码

生成一个IP的报文,然后加载TCP前面

生成一个IP报文前,需要先确定一个合适的IP地址。在IPv4网络中,IP地址由32位组成,通常用四个十进制数(0-255)表示,例如192.168.0.1。在选择IP地址时,需要确保与现有网络中的其他设备不冲突。可以使用DHCP(动态主机配置协议)自动获取可用的IP地址,或手动分配一个不与其他设备冲突的静态IP地址。

根据IP地址,再确定子网掩码。子网掩码用于划分网络中的网络主机和子网。它由32位二进制数字表示,其中连续的1表示网络部分,连续的0表示主机部分。子网掩码的大小决定了网络的子网数量和主机数量。常见的子网掩码有255.255.255.0(用于划分一个局域网)和255.255.0.0(用于划分一个较大的网络)等。

进行位与运算时,将IP地址和子网掩码进行逐位的与运算,可以得到网络地址。位与运算的规则是,对应位上的值如果都为1,则结果为1;否则,结果为0。例如,如果IP地址是192.168.0.1,子网掩码是255.255.255.0,进行位与运算后,得到的网络地址是192.168.0.0。

最后,加载TCP头部。TCP(传输控制协议)是一种用于可靠传输数据的协议。TCP报文包括源端口号、目的端口号、序列号、确认号等信息。加载TCP头部意味着在IP报文中添加TCP相关的信息,使得报文可以通过TCP协议进行传输。

综上所述,生成一个IP报文并加载TCP前面,需要先确定一个合适的IP地址,然后根据该地址确定子网掩码,最后在IP报文中添加TCP头部信息。

MAC

最后加上MAC头部
可以通过ARP获取对方的MAC地址

添加MAC头部和获取对方的MAC地址是在链路层进行的。在发送IP报文之前,需要通过ARP(地址解析协议)获取目标主机的MAC地址。

ARP用于将IP地址映射到MAC地址,以便在局域网中发送数据帧。当发送方需要将数据发送到某个目标IP地址时,首先会检查ARP缓存,看是否已经有目标IP地址对应的MAC地址。如果没有,就会发送一个ARP请求广播来询问局域网中的设备,谁拥有该IP地址对应的MAC地址。目标主机接收到ARP请求后,会向发送方回复一个ARP响应,包含自己的MAC地址。发送方将接收到的MAC地址保存在ARP缓存中,供以后的通信使用。

一旦获得目标主机的MAC地址,就可以在生成的IP报文前添加以太网的MAC头部。MAC头部包含发送方和接收方的MAC地址,以及以太网帧类型等信息。将IP报文与MAC头部组合起来,形成完整的数据帧,然后通过以太网进行发送。

总结,要完成生成一个IP报文并加载TCP、MAC头部的过程,除了确定IP地址、计算子网掩码和加载TCP头部外,还需要通过ARP获取目标主机的MAC地址,并将MAC头部添加到数据帧中。这样才能完成数据的封装和发送。

网卡

将数字信息转化为欸电信号,才能在网上传输
控制网卡的是网卡驱动程序
网卡将信息转化为电信号最后发送出去

确实,将数字信息在网络上传输需要将其转化为电信号。这个转换的过程由网卡(网络适配器)完成。网卡是计算机连接到网络的硬件设备,它负责在计算机和网络之间传输数据。

网卡驱动程序是控制网卡工作的软件程序。操作系统通过网卡驱动程序与网卡进行通信,控制其发送和接收数据。驱动程序将数字信息转化为适合在物理媒介上传输的电信号,并通过网线或其他网络介质将信号发送到目标设备。

在数据发送的过程中,网卡使用物理层和数据链路层协议来处理数据转换和传输。物理层协议定义了电信号的传输方式,例如在以太网中使用的双绞线传输。数据链路层协议则负责将数据分成帧,并在每个帧中添加头部和尾部信息,以支持数据的可靠传输。

一旦网卡将数字信息转化为电信号并发送出去,接收方的网卡会接收并解析电信号,将其转化回数字信息,并交给上层协议进行处理,最终传递给应用程序。

综上所述,网卡驱动程序控制网卡的工作,将数字信息转化为电信号,并通过物理媒介将信号发送到目标设备,从而实现在网络中的数据传输。

交换机

交换机本身不具有MAC地址
交换机记录着MAC地址表和对应的端口

对于以太网交换机来说,它是一个数据链路层设备,用于在局域网内的设备之间转发以太网帧。交换机具有物理地址,即MAC地址,用于标识交换机自身。

虽然交换机本身有一个MAC地址,但是它的主要功能是维护一个MAC地址表(也称为转发表或CAM表),记录着与交换机连接的各个设备的MAC地址和相应的端口号。这个表中的条目会随着网络流量的传输和设备的连接和断开而动态更新。

当交换机接收到一个以太网帧时,它会先检查帧中的目标MAC地址。如果目标MAC地址在交换机的MAC地址表中存在,交换机就会查找相应的端口号,并将帧转发到对应的端口。这称为“MAC地址学习”。

如果目标MAC地址未在交换机的MAC地址表中找到,交换机会将帧广播到所有其他端口(除了接收该帧的端口)。这样,目标设备就能收到该帧并回复一个响应,从而交换机可以学习到目标MAC地址和端口的映射关系,并更新MAC地址表。

通过维护MAC地址表,交换机能够基于MAC地址进行帧的转发,实现了数据的按需传输,提高了网络的效率和安全性。

路由器

首先根据路由器网关列判断对方地址

通过控制平面(SDN)转发

多次转发后最终到达目的地

对于路由器而言,它是一种网络设备,用于在不同网络之间转发数据。路由器不同于交换机,因为它工作在网络层,能够根据IP地址来进行数据的转发。

在数据传输之前,首先需要根据路由器的网关配置信息来确定数据的目标地址。网关是路由器所连接网络的出口,也是将数据发送到另一个网络的起点。当路由器收到一个数据包时,它会使用路由表来判断下一跳的路径,即确定数据包应该通过哪个接口转发出去。

控制平面(SDN)是一种网络架构,它将网络控制和管理功能集中在一个可编程的控制器中。使用SDN时,路由器的转发行为由集中式的控制器进行管理。控制器根据网络策略和拓扑信息,向路由器下发路由规则,指示路由器如何转发数据包。这样,路由器根据控制平面提供的转发策略来进行数据的转发操作。

数据在路由器中经过多次转发,每个路由器根据自己的路由表将数据包转发到下一个目标。通过这种逐跳转发的方式,数据最终能够到达目的地网络。每个路由器在转发过程中会更新数据包的目标MAC地址和下一跳IP地址,使其沿着正确的路径向目的地前进。

综上所述,路由器通过确定目标地址、使用控制平面进行转发以及多次逐跳转发的方式,将数据从源网络转发到目的网络。这样实现了不同网络之间的连通性和数据传输。

抵达

从外到内拨,一个一个拆

挨个核对,当完全是自己想要的就接收

收完成后发动TCP四次挥手,断开了

当从外部到内部进行网络通信时,可以按照以下步骤逐个核对和处理,直到获得所需数据并进行接收:

建立物理连接:通过物理介质(如以太网)建立网络连接,确保数据可以在发送和接收设备之间传输。
IP层处理:在网络层(IP层),对数据包进行分组和路由,根据目标IP地址决定数据包的下一跳位置。
ICMP协议:如果出现网络错误或异常情况,ICMP协议可能会生成错误报告或其他控制信息,并将其返回给发送设备。
ARP协议:如果目标设备的物理地址未知,发送设备可能会向网络上广播ARP请求以查询该地址。目标设备将通过ARP响应将其物理地址发送回发送设备,以建立数据链路层的通信。
TCP协议:建立TCP连接时,需要进行三次握手,确保双方都同意建立连接并同步初始序列号。
接收数据:在建立连接之后,接收设备可以开始接收发送设备发送的数据包,并在接收缓冲区中存储接收到的数据。
TCP四次挥手:当数据传输完毕后,发送设备和接收设备之间可以通过四次挥手的方式来结束TCP连接。这包括发送设备发送FIN(结束)报文段,接收设备确认并发送自己的FIN报文段,以及最后的确认,从而完成连接的关闭过程。
通过按照这些步骤逐个处理和核对,可以确保网络通信的可靠性并获得所需的数据。一旦数据传输完成,可以通过TCP的四次挥手来正确地断开连接。

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

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

相关文章

低成本32位单片机电动工具无感方波控制方案

RAMSUN介绍基于灵动32位微处理器MM32SPIN0230的BLDC电动工具无感方波控制方案,包括MM32SPIN0230芯片资源。 以下是电动工具无感方波控制方案的简述: MM32SPIN0230电动工具专用板 芯片介绍 MM32SPIN0230系列是灵动微MindSPIN旗下高性能的单电机控制产品…

Spring Boot框架以及它的优势

文章目录 介绍1. **简化配置**2. **快速启动**3. **自动配置**4. **集成第三方库和框架**5. **微服务支持**6. **内嵌式数据库支持**7. **健康监控和管理**8. **可插拔的开发工具**9. **丰富的社区和生态系统**10. **良好的测试支持:** 核心特性**1. 依赖注入&#…

ElasticSearch学习4--复杂查询

1、查询分类 查询所有:查询出所有数据,一般测试用。例如:match_all全文检索(full text)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如: match_query 根据单个字段…

yolov8机器视觉-工业质检

使用训练好的模型进行预测 yolo predict taskdetect model训练好的模型路径 source测试图片文件夹路径 showTrue效果展示 切换模型进行训练(yolov8s) 修改main.py训练参数文件 使用云gpu进行训练,很方便:点击链接转至在线云gpu…

面试被打脸,数据结构底层都不知道么--回去等通知吧

数据结构之常见的8种数据结构: -数组Array -链表 Linked List -堆 heap -栈 stack -队列 Queue -树 Tree -散列表 Hash -图 Graph 数据结构-链表篇 Linklist定义: -是一种线性表,并不会按线性的顺序存储数据,即逻辑上相邻…

【算法竞赛宝典】语言之争

【算法竞赛宝典】语言之争 题目描述代码展示 题目描述 代码展示 //语言之争 #include<fstream> #include<string>using namespace std;ifstream cin("language.in"); ofstream cout("language.out");string a; int n;int main() {int i;bool …

短信验证码服务

使用的是 阿里云 阿里云官网 1.找到 左上角侧边栏 -云通信 -短信服务 2.在快速学习测试处 &#xff0c;按照步骤完成快速学习&#xff0c;绑定要测试的手机号&#xff0c;选专用 【测试模板】&#xff0c;自定义模板需要人工审核&#xff0c;要一个工作日 3.右上角 获取 Acces…

敦煌网、newegg店铺优化三大方法,测评补单原来可以这样做

我们都知道敦煌网、newegg流量是一个店铺的血液&#xff0c;没有流量的支撑&#xff0c;其他也都将成为浮云。流量能够成为转化率的保证&#xff0c;如何让店铺拥有傲人的流量成为重要之重&#xff0c;店铺的流量又主要来源于以下几部分&#xff1a; 一、主要流量的来源 1.搜索…

PyTorch深度学习遥感影像地物分类与目标检测、分割及遥感影像问题深度学习优化实践技术应用

我国高分辨率对地观测系统重大专项已全面启动&#xff0c;高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成&#xff0c;将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB&#xff0c;遥感大数据时…

【unity插件】使用BehaviorDesigner插件制作BOSS的AI行为树

文章目录 前言素材插件一、基础使用二、敌人物理攻击三、敌人面向玩家四、敌人法术攻击五、随机进行攻击六、敌人不同的阶段推荐学习视频源码完结 前言 Behavior Designer是一个行为树插件&#xff0c;是一款为了让策划&#xff0c;程序员&#xff0c;美术人员方便使用的可视化…

再谈IOS开发环境配置(2023-09-01 新)

关于IOS的开发&#xff0c;需要配置证书、密钥、管理标识符、功能配置等等&#xff0c;很是繁杂&#xff0c;以前也配置过&#xff0c;这次因为重新购买了新的M1笔记本&#xff0c;准备重新配置下&#xff0c;顺便记录&#xff0c;以便查询。 如果要开发IOS&#xff0c;首先需要…

Midjourney学习(一)prompt的基础

prompt目录 sd和mj的比较prompt组成风格表现风格时代描述表情色彩情绪环境 sd和mj的比较 自从去年9月份开始&#xff0c;sd就变得非常或火&#xff0c;跟它一起的还有一个midjourney。 他们就像是程序界的两种模式&#xff0c;sd是开源的&#xff0c;有更多的可能性更可控。但是…

c#多线程—基础概念到“双色球”项目实现(附知识点目录、代码、视频)

总结&#xff1a;视频中对于多线程讲的非常透彻&#xff0c;从线程基础概念—>.net不同版本出现的线程方法—>多线程常出现问题—>双色球项目实践&#xff0c;每个知识点都有代码实操&#xff0c;受益匪浅。附上学习笔记和实操代码。 视频 目录 一、线程、进程概念及优…

华为数通方向HCIP-DataCom H12-821题库(拖拽题,知识点总结)

以下是我在现有题库中整理的需要重点关注的考点内容,如有遗漏小伙伴可以留言补充。

Linux内核源码分析 (5)多处理器调度

Linux内核源码分析 (5)多处理器调度 文章目录 Linux内核源码分析 (5)多处理器调度注&#xff1a;本章节使用的内核版本为Linux 5.6.18一、 SMT和NUMA1、SMP (对称多处理器结构)2、NUMA &#xff08;非一致内存访问结构&#xff09; 二、多核调度三、调度域和调度组四、SMP调度详…

数据结构基本概念

一、数据 数据对象-数据元素-数据项(属性)&#xff0c;前者由后者组成 二、数据结构 定义&#xff1a;按某种关系的数据元素的集合 三、数据类型 1、原子类型&#xff08;例如整型&#xff09; 2、结构类型&#xff08;由原子类型组成&#xff0c;例如数组&#xff09; 3、…

ReID网络:MGN网络(4) - Loss计算

1. MGN Loss MGN采用三元损失(Triplet Loss)。 三元损失主要用于ReID算法&#xff0c;目的是帮助网络学习到一个好的Embedding信息。之所以称之为三元损失&#xff0c;主要原因在于在训练中&#xff0c;参与计算Loss的分别有Anchor、Positive和Negative三方。 2. Triplet Lo…

力扣:82. 删除排序链表中的重复元素 II(Python3)

题目&#xff1a; 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - …

ChatGPT插件的优缺点

虽然西弗吉尼亚大学的研究人员看到了最新的官方ChatGPT插件——名为“代码解释器”&#xff08; Code Interpreter&#xff09;的教育应用潜力&#xff0c;但他们也发现&#xff0c;对于使用计算方法处理针对癌症和遗传疾病的定向治疗的生物数据的科学家来说&#xff0c;这款插…

[C/C++]指针详讲-让你不在害怕指针

个人主页&#xff1a;北海 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;C/C&#x1f91d;希望作者的文章能对你有所帮助&#xff0c;有不足的地方请在评论区留言指正&#xff0c;大家一起学习交流&#xff01;&#x1f9…