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

news2025/1/16 18:49:50

文章目录

    • 首先进入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.coloradmin.cn/o/960515.html

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

相关文章

成集云 | 多维表自动查询快递100信息 | 解决方案

源系统成集云目标系统 方案介绍 产品详情 维格表是一种新一代的团队数据协作和项目管理工具,它结合了可视化数据库、电子表格、实时网络协同、低代码开发技术四项功能,且支持API与可视化看板,操作简单,能提升中小企业的数字化生…

python网络编程

文章目录 socket套接字客户端/服务模型linux文件描述符fdLinux网络IO模型详解网络服务器Apache VS Nginx生产者消费者-生成器版客户端/服务端-多线程版IO多路复用TCPServer模型异步IO多路复用TCPServer模型 socket套接字 套接字(socket)是抽象概念,表示T…

【数据分享】1901-2022年1km分辨率的逐月降水栅格数据(免费获取/全国/分省)

气象指标在日常研究中非常常用,之前我们给大家分享过来源于国家青藏高原科学数据中心提供的气象指标栅格数据(均可查看之前的文章获悉详情): 1901-2022年1km分辨率逐月平均气温栅格数据1901-2022年1km分辨率逐年平均气温栅格数据…

wsl中使用宝塔每次都要绑定账号问题解决

环境:windows11、wsl2、Ubuntu20.04、宝塔8.0.24 1、开启Hyper-V,如果是家庭版使用下面代码启用Hyper-V,创建个.cmd文件保存后使用管理员权限运行(需要重启电脑) pushd "%~dp0" dir /b %SystemRoot%\servi…

QT6配置Android环境的多次尝试

可能用到的链接:https://www.androiddevtools.cn/#(Android开发工具) https://developer.android.google.cn/studio(Android studio 下载) https://www.oracle.com/java/technologies/downloads(java下载&a…

【pyinstaller 怎么打包python,打包后程序闪退 不打日志 找不到自建模块等问题的踩坑解决】

程序打包踩坑解决的所有问题 问题1 多个目录怎么打包 不管你包含多个层目录,引用多么复杂,只需要打包主程序所在文件即可,pyinstaller会自动寻找依赖包,如果报错自建模块找不到,参照问题3 pyinstaller main.py问题2…

QT创建可移动点类

效果如图所示&#xff1a; 创建新类MovablePoint&#xff0c;继承自QWidget. MovablePoint头文件: #ifndef MOVABLEPOINT_H #define MOVABLEPOINT_H#include <QWidget> #include <QPainter> #include <QPaintEvent> #include <QStyleOption> #includ…

——滑动窗口

滑动窗口 所谓滑动窗口&#xff0c;就是不断的调节子序列的起始位置和终止位置&#xff0c;从而得出我们要想的结果。也可以理解为一种双指针的做法。 leetcode76 class Solution {public String minWindow(String s, String t) {char[] schars s.toCharArray();char[] tc…

需要在Activity间传递大量的数据,能有哪些方法?

在Activity间传递的数据一般比较简单&#xff0c;可是有时分实践开发中也会传一些比较复杂的数据&#xff0c;尤其是面试问道当遇到需求在Activity间传递很多的数据怎么办&#xff1f; Intent 传递数据的巨细是有约束的&#xff0c;它大约能传的数据是1M-8K&#xff0c;原因是…

【狂神】Spring5笔记(10-19)

又是美好而努力的一天呀~ __ /|* * * * * * / * * * / * * * * / * * * * * * * happy valentines day * * * * …

python基础之miniConda管理器

一、介绍 MiniConda 是一个轻量级的 Conda 版本&#xff0c;它是 Conda 的精简版&#xff0c;专注于提供基本的环境管理功能。Conda 是一个流行的开源包管理系统和环境管理器&#xff0c;用于在不同的操作系统上安装、管理和运行软件包。 与完整版的 Anaconda 相比&#xff0c…

CSS transition 过渡

1 前言 CSS过渡(transition)可以在一个元素切换到另一种状态时为其定义平滑的过渡效果。 例如&#xff0c;用户鼠标悬停在按钮上时&#xff0c;按钮颜色平滑的从一个颜色过渡到另一个颜色。 .btn:hover{background-color: red;color: black; }默认悬停效果 添加过渡效果 .b…

2.(Python数模)线性规划问题

Python解决线性规划问题 参考了以下博文 https://blog.csdn.net/m0_46692607/article/details/126784109?spm1001.2014.3001.5506 目标是解决以下的线性规划&#xff0c;程序计算出目标函数的最大值&#xff0c;并在最大值下取得的x1x2x3对应值。 源代码如下&#xff1a; …

MybatisPlus(2)

前言&#x1f36d; ❤️❤️❤️SSM专栏更新中&#xff0c;各位大佬觉得写得不错&#xff0c;支持一下&#xff0c;感谢了&#xff01;❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 上篇我们简单介绍了MybatisPlus的方便之处&#xff0c;这篇来深入了解Myb…

探索生成式人工智能的前景

一、什么是生成式人工智能&#xff1f; 生成式人工智能&#xff08;Generative AI&#xff09;是一类人工智能&#xff08;AI&#xff09;技术和模型&#xff0c;旨在创建新颖的内容。与简单的复制不同&#xff0c;这些模型通过利用从训练数据集中收集到的模式和见解&#xff…

飞桨花滑骨骼点动作识别比赛记 2

基于 PaddleVideo 的花滑骨骼点动作识别 2s-AGCN配置文件节点流配置文件 2s-agcn_ntucs_joint_fsd.yamlMODEL 字段DATASET 字段PIPELINE 和 INFERENCE 字段OPTIMIZER 字段 agcn2s.pygraph输入通道数 骨骼流 Dataset 和 Pipeline配置文件DATASETPIPELINE 源码skeleton.pyskeleto…

Elasticsearch 7.6 - API高阶操作篇

ES 7.6 - API高阶操作篇 分片和副本索引别名添加别名查询所有别名删除别名使用别名代替索引操作代替插入代替查询 场景实操 滚动索引索引模板创建索引模板查看模板删除模板 场景实操一把索引的生命周期数据迁移APIGEO(地理)API索引准备矩形查询圆形查询多边形查询 自定义分词器…

Spring理解,重要概念及图解,2023秋招spring常见八股文

按照自己的需求&#xff0c;找到自己不会的地方去解决 1.Spring的核心 1&#xff09;Spring的两大核心&#xff1a;IoC和AOP Spring框架包含众多模块&#xff0c;如Core、Testing、Data Access、Web Servlet等&#xff0c;其中Core是整个Spring框架的核心模块。Core模块提供…

进程的挂起状态

进程的挂起状态详解 当我们谈论操作系统和进程管理时&#xff0c;我们经常听到进程的各种状态&#xff0c;如“就绪”、“运行”和“阻塞”。但其中一个不那么常被提及&#xff0c;但同样重要的状态是“挂起”状态。本文将深入探讨挂起状态&#xff0c;以及为什么和在何时进程…

linux中安装nodejs,卸载nodejs,更新nodejs,git,linux中安装nginx并配置

文章目录 node的安装与卸载&#xff08;更新版本&#xff09;卸载nodejs安装新版本node git安装与拉取代码安装解决 linux git 每次推拉(push/pull)代码都要输入用户名密码的问题 nginx 安装、配置和卸载安装nginx配置**.conf 文件内容 nginx 卸载 注意&#xff0c;我的是Ubunt…