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

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

文章目录

    • 首先进入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阶段协议栈阶段TCP阶段IP阶段MAC网卡交换机路由器抵达 首先进入HTTP阶段 1.解析对应的URL,访问一个对应的服务器xxx.com的一个文件index.html; 2 使用DNS查询对应的ip地址,通过DNS服务器进行查找 3 组装http报文,生成h…...

字节9.3秋招研发笔试 【后端方向】第三题

题目 小红拿到了一个无向图,初始每人节点是白色,其中有若干个节点被染成了红色。小红想知道,若将 i 号节点染成红色,当前的红色连块的数量是多少? 你需要回答i∈[1,n] 的答案。 定义,若干节点组成一个红色连通块&am…...

Solidity 小白教程:8. 变量初始值

Solidity 小白教程:8. 变量初始值 变量初始值 在solidity中,声明但没赋值的变量都有它的初始值或默认值。这一讲,我们将介绍常用变量的初始值。 值类型初始值 boolean: falsestring: “”int: 0uint: 0enum: 枚举中的第一个元素address: …...

时序预测 | MATLAB实现EEMD-SSA-LSTM、EEMD-LSTM、SSA-LSTM、LSTM时间序列预测对比

时序预测 | MATLAB实现EEMD-SSA-LSTM、EEMD-LSTM、SSA-LSTM、LSTM时间序列预测对比 目录 时序预测 | MATLAB实现EEMD-SSA-LSTM、EEMD-LSTM、SSA-LSTM、LSTM时间序列预测对比预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 时序预测 | MATLAB实现EEMD-SSA-LSTM、E…...

京东搜索EE链路演进 | 京东云技术团队

导读 搜索系统中容易存在头部效应,中长尾的优质商品较难获得充分的展示机会,如何破除系统的马太效应,提升展示结果的丰富性与多样性,助力中长尾商品成长是电商平台搜索系统的一个重要课题。其中,搜索EE系统在保持排序…...

【C++】反向迭代器精讲(以lIst为例)

目录 二,全部代码 三,设计思路 1. 讨论 2. 关于迭代器文档一个小细节 结语 一,前言 如果有小伙伴还未学习普通迭代器,请参考这篇文章中的普通迭代器实现。 【STL】list用法&试做_底层实现_花果山~~程序猿的博客-CSDN…...

时序预测 | MATLAB实现基于PSO-GRU、GRU时间序列预测对比

时序预测 | MATLAB实现基于PSO-GRU、GRU时间序列预测对比 目录 时序预测 | MATLAB实现基于PSO-GRU、GRU时间序列预测对比效果一览基本描述程序设计参考资料 效果一览 基本描述 MATLAB实现基于PSO-GRU、GRU时间序列预测对比。 1.MATLAB实现基于PSO-GRU、GRU时间序列预测对比&…...

2023年高教社杯 国赛数学建模思路 - 案例:感知机原理剖析及实现

文章目录 1 感知机的直观理解2 感知机的数学角度3 代码实现 4 建模资料 # 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 感知机的直观理解 感知机应该属于机器学习算法中最简单的一种算法,其…...

Java 利用pdfbox将图片和成到pdf指定位置

业务背景:用户在手机APP上进行签名,前端将签完名字的图片传入后端,后端合成新的pdf. 废话不多说,上代码: //控制层代码PostMapping("/imageToPdf")public Result imageToPdf(RequestParam("linkName&…...

大数据课程K19——Spark的电影推荐案例推荐系统的冷启动问题

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握Spark的案例——电影推荐; ⚪ 掌握Spark的模型存储; ⚪ 掌握Spark的模型加载; ⚪ 掌握Spark的推荐系统的冷启动问题; 一、案例——电影推荐 1. 基于用户的推荐 1. 说明 我们现…...

Docker-安装(Linux,Windows)

目录 前言安装版本Docker版本说明前提条件Linux安装使用YUM源部署获取阿里云开源镜像站YUM源文件安装Docker-ce配置Docker Daemon启动文件启动Docker服务并查看已安装版本 使用二进制文件部署 Windows安装实现原理安装步骤基本使用 参考说明 前言 本文主要说明Docker及其相关组…...

若依富文本 html样式 被过滤问题

一.场景 进入页面,富文本编辑框里回显这条新闻内容,如下图, 然后可以在富文本编辑框里对它实现再编辑,编辑之后将html代码提交保存到后台数据库。可以点击详情页进行查看。 出现问题:在提交到后台controller时&#x…...

VS Code 快速消除前置空格和常用快捷键

目录 介绍: 消除前置空格:SHIFTTAB 常用的 VS Code 快捷键 介绍: 在使用 Visual Studio Code (VS Code) 进行代码编辑时,熟练掌握一些快捷键和编辑技巧可以大幅提高开发效率。本文将重点介绍如何使用快捷键 SHIFTTAB 快速消除代…...

【跟小嘉学 Rust 编程】二十五、Rust命令行参数解析库(clap)

系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学…...

gRPC远程进程调用

gRPC远程进程调用 rpc简介golang实现rpc方法一net/rpc库golang实现rpc方法二jsonrpc库grpc和protobuf在一起第一个grpc应用grpc服务的定义和服务的种类grpc stream实例1-服务端单向流grpc stream实例2-客户端单向流grpc stream实例3-双向流grpc整合gin...

什么是继承

提示:继承基础概念 文章目录 一、继承1.1 基础概念1.2 继承作用与继承方式1.2 继承中的隐藏1.3 类中构造、析构在继承方面知识1.4 继承知识拓展 一、继承 1.1 基础概念 继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许在保持原有类特性…...

QT连接数据库

目录 数据库 数据库基本概念 常用的数据库 SQLite3基础 SQLite特性: QT连接数据库 1.1 QT将数据库分为三个层次 1.2 实现数据库操作的相关方法 sql语句(常用) 1)创建表格 2)删除表格 3)插入记录 …...

navicat访问orcal数据库

1)因为不能直接访问服务器,所以通过中介进行了端口转发; 2)依然不能访问,提示netadmin权限什么错误; 3)下载了一个 PLSQL Developer 13.0.0.1883 版本,自带的instantclient 好像不…...

Linux中查找某路径下,包含某个字符串的所有文件

path表示需要查找的路径,string表示需要包含的字符\字符串 grep -rnw path -e "string"只查找包含特定string的所有.c和.h文件 grep --include\*.{c,h} -rnw -rnw path -e "string" 除去所有.o文件,查找其他文件是否包含特定strin…...

常见信号滤波方法(卡尔曼滤波、滑动平均、异常值剔除)的原理解析与C语言实现

常见信号滤波方法(卡尔曼滤波、滑动平均、异常值剔除)的原理解析与C语言实现 日期作者版本备注2023.09.04Dog TaoV1.0完成文档的初始版本。 文章目录 常见信号滤波方法(卡尔曼滤波、滑动平均、异常值剔除)的原理解析与C语言实现前…...

WebGL模型矩阵

前言:依赖矩阵库 WebGL矩阵变换库_山楂树の的博客-CSDN博客 先平移,后旋转的模型变换: 1.将三角形沿着X轴平移一段距离。 2.在此基础上,旋转三角形。 先写下第1条(平移操作)中的坐标方程式。 等式1&am…...

Flutter:WebSocket封装-实现心跳、重连机制

前言Permalink Flutter简介 Flutter 是 Google推出并开源的移动应用开发框架,主打跨平台、高保真、高性能。开发者可以通过 Dart语言开发 App,一套代码同时运行在 iOS 和 Android平台。 Flutter提供了丰富的组件、接口,开发者可以很快地为 F…...

c语言中:struct timespec

在C语言中,struct timespec 是一个结构体,通常用于处理时间和时间间隔。这个结构体通常包含以下两个成员: tv_sec:这是一个长整型(long),用于存储秒数。它表示时间的整数部分,即秒数…...

Mendix如何实现导出文件

刚刚接触Mendix低代码两周,花了一周在b站看初级视频然后考完初级,第二周开始做个列表查询感觉照葫芦画瓢没啥难度。但最近要求写个导出列表数据,在mendix社区翻了翻,这个功能算是常见的。找了mendix官方提供的Docs磕磕盼盼才实现了…...

在IIS服务器上安装SSL证书(2023配置启用HTTPS部署教程)内容来源SSL市场网

https://www.sslmarket.com.cn/146.html...

如何处理ChatGPT与用户之间的互动和反馈?

处理ChatGPT与用户之间的互动和反馈是关于改进和优化用户体验的关键方面。这涉及到在聊天、对话和交互中建立积极的用户关系,同时利用用户的反馈来不断改进ChatGPT的性能和功能。本文将探讨如何有效地处理ChatGPT与用户之间的互动和反馈,以提供更好的用户…...

微服务-gateway鉴权

文章目录 一、前言二、gateway鉴权1、依赖配置2、编写代码3、GlobalFilter详解3.1、GlobalFilter简介3.2、GlobalFilter自定义执行顺序3.2.1、实现Order接口实现自定义执行顺序 一、前言 网关是介于客户端和服务器端之间的中间层,所有的外部请求都会先经过 网关这一…...

NET7快速开发一个商品管理模块-商品列表开发(一)

商品管理模块,一般包含以下几个模块: 商品列表:这里可以看到所有已发布的商品信息列表。 商品管理:添加商品、编辑商品以及删除商品。 具体功能如下图: 1.商品列表 2.添加商品 3.商品SKU编辑...

0829|C++day7 auto、lambda、C++数据类型转换、C++标准模板库(STL)、list、文件操作

一、思维导图 二、【试编程】将实例化类对象写入容器后,写入.txt文本中,再重新定义一个类容器,将.txt中的内容读取出来,输出到终端 封装一个学生的类,定义一个学生这样类的vector容器, 里面存放学生对象(至…...

SpringBoot连接MySQL数据库实例【tk.mybatis连接mysql数据库】

文章目录 一、数据库表二、引入依赖三、修改配置文件四、公共组件1、BaseController2、BaseService3、IService4、BaseMapper 五、代码1、Application2、Student实体类3、Controller4、Service5、ServiceImpl6、Mapper7、Mapper.xml 一、数据库表 CREATE TABLE student (id i…...