一个HTTP的流程

news2024/11/15 19:41:47

1,键入一个URL后浏览器将URL进行解析

2,浏览器解析URL后,需要查询服务器域名对应的IP地址。

流程如下:查询缓存- >客户端发送DNS请求-> 根DNS,根DNS根据 .COM-> 顶级域名服务器,根据baidu->权威DNS服务器

3.获取IP后,将HTTP传输给操作系统中协议栈。

 应用程序(浏览器)通过调用 Socket 库,来委托协议栈工作。协议栈的上半部分有两块,分别是负责收发数据的 TCP 和 UDP 协议,它们两会接受应用层的委托执行收发数据的操作。协议栈的下面一半是用 IP 协议控制网络包收发操作,在互联网上传数据时,数据刽被切分成一块块的网络包,而将网络包发送给对方的操作就是由 IP 负责的。

此外 IP 中还包括 ICMP 协议和 ARP 协议。

  • ICMP 用于告知网络包传送过程中产生的错误以及各种控制信息。

  • ARP 用于根据 IP 地址查询相应的以太网 MAC 地址。

4,生成TCP报文-->IP报文--->MAC地址

5,IP 生成的网络包只是存放在内存中的一串二进制数字信息,没有办法直接发送给对方。因此,我们需要将数字信息转换为电信号,才能在网线上传输,也就是说,这才是真正的数据发送过程。

负责执行这一操作的是网卡,要控制网卡还需要靠网卡驱动程序

网卡驱动从 IP 模块获取到包之后,会将其复制到网卡内的缓存区中,接着会其开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列

 

6 首先来到交换机。交换机的设计是将网络包原样转发到目的地。交换机工作在 MAC 层,也称为二层网络设备。和网卡不同,交换机的端口不具有 MAC 地址。如果收到的包的接收方 MAC 地址为 00-02-B3-1C-9C-F9,正好在交换机表中有记录,那么根据端口列的信息,可知这个地址位于 3 号端口上,然后就可以通过交换电路将包发送到相应的端口了。所以,交换机根据 MAC 地址表查找 MAC 地址,然后将信号发送到相应的端口。当 MAC 地址表找不到指定的 MAC 地址会怎么样?交换机无法判断应该把包转发到哪个端口,只能将包转发到除了源端口之外的所有端口上,无论该设备连接在哪个端口上都能收到这个包。

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

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

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

路由器的端口具有 MAC 地址,因此它就能够成为以太网的发送方和接收方;同时还具有 IP 地址,从这个意义上来说,它和计算机的网卡是一样的。

当转发包时,首先路由器端口会接收发给自己的以太网包,然后路由表查询转发目标,再由相应的端口作为发送方将以太网包发送出去。

首先,电信号到达网线接口部分,路由器中的模块会将电信号转成数字信号,然后通过包末尾的 FCS 进行错误校验。

如果没问题则检查 MAC 头部中的接收方 MAC 地址,看看是不是发给自己的包,如果是就放到接收缓冲区中,否则就丢弃这个包。

总的来说,路由器的端口都具有 MAC 地址,只接收与自身地址匹配的包,遇到不匹配的包则直接丢弃。

完成包接收操作之后,路由器就会去掉包开头的 MAC 头部。

MAC 头部的作用就是将包送达路由器,其中的接收方 MAC 地址就是路由器端口的 MAC 地址。因此,当包到达路由器之后,MAC 头部的任务就完成了,于是 MAC 头部就会被丢弃

接下来,路由器会根据 MAC 头部后方的 IP 头部中的内容进行包的转发操作。

转发操作分为几个阶段,首先是查询路由表判断转发目标。实在找不到匹配路由时,就会选择默认路由,路由表中子网掩码为 0.0.0.0 的记录表示「默认路由」。发送出去的网络包会通过交换机到达下一个路由器。由于接收方 MAC 地址就是下一个路由器的地址,所以交换机会根据这一地址将包传输到下一个路由器。。

接下来,下一个路由器会将包转发给再下一个路由器,经过层层转发之后,网络包就到达了最终的目的地。

不知你发现了没有,在网络包传输的过程中,源 IP 和目标 IP 始终是不会变的,一直变化的是 MAC 地址,因为需要 MAC 地址在以太网内进行两个设备之间的包传输。

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

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

相关文章

【Linux后端服务器开发】管道设计

目录 一、管道通信 二、匿名管道 1. 匿名管道通信 2. 匿名管道设计 三、命名管道 comm.hpp client.cc serve.cc 一、管道通信 进程通信 数据传输:一个进程需要将它的数据发送给另一个进程 资源共享:多个进程之间共享同样的资源 通知事件&…

Matlab建模实战学习——(规划问题)

1.Matlab函数linprog()的使用 1.1 Matlab基本描述 1.2 函数linprog() 三种表达形式 [x,fval] linprog(c,A,b)[x,fval] linprog(c,A,b,Acq,bcq)[x,fval]linprog(c,A,b,Aeq,beq,lb,ub) 其中 x返回的是决策向量的取值&#xf…

K8S应用服务安全(最小特权 策略方案 资源限制 调用限制 沙箱)

应用服务安全 1 应用服务安全1.1 最小特权1.1.1 基础知识1.1.2 安全上下文1.1.3 资源实践1.1.4 特权基础1.1.5 特权实践1.1.5 PSP实践 1.2 策略方案1.2.1 OPA简介1.2.2 特权策略1.2.3 策略进阶 1.3 资源限制1.3.1 AppArmor简介1.3.2 基础知识1.3.2 应用实践 1.4 调用限制1.4.1 …

Git装机基础配置

Git在开发中可谓是必用的工具软件了,下面介绍下装机必须的几个配置 配置用户身份 git config –global user.name “Your Name” git config –global user.email “emailexample.com”// 例如: git config –global user.name “xiaowag” git config …

openpnp - 负压传感器DP102的设置

文章目录 openpnp - 负压传感器DP102的设置概述笔记上电后的画面查看模式进入设置模式输出1检测模式输出2检测模式输出1和输出2的常态(常开/常闭状态)设置动作响应时间输出动作颜色的设置压力单位的设置回到正常的运行模式输出1下限的设置输出1上限的设置输出2下限的设置输出2上…

有趣的命令——————用shell脚本实现三角形(直角三角形、等腰三角形)

直角三角形 vim zhijiao.sh 输入以下内容&#xff1a;#!/bin/bashread -p "几层的三角形:" nfor ((i1;i<$n;i)) dofor ((jn;j>i;j--))doecho -n " "donefor ((j1;j<i;j))doecho -n "*"doneecho done例&#xff1a; 测试&#xff1a; 等…

JDBC事务操作

1、 事务概述 事务的概念&#xff1a;逻辑上的一组SQL语句&#xff08;一个或者多个&#xff09;执行的时候要么全部执行成功&#xff0c;要么全部执行失败。 事务的案例&#xff1a;转账案例&#xff1a;一个账户中的余额减少&#xff0c;另一个账户中的余额增加。 更新数据…

Docker笔记 Docker架构与常用命令

大家好 我是积极向上的湘锅锅&#x1f4aa;&#x1f4aa;&#x1f4aa; 1. Docker 架构 首先Docker由三大部分组成 Clients:客户端 通过docker的客户端操作命令&#xff0c;然后命令发送到daemon&#xff08;守护进程&#xff09;里面去执行操作Hosts&#xff1a;主机 主机包…

Linux——内核概念

一、内核 什么是内核&#xff1f; 计算机是由各种外部硬件设备组成的&#xff0c;如内存、cpu、硬盘等。如果每个应用都要和这些硬件对接通信协议&#xff0c;就太麻烦了&#xff0c;所以这个工作就由内核来负责。内核作为软件连接硬件设备的桥梁&#xff0c;使应用开发者只需…

C++常用库函数 1.缓冲区操作函数

函数名&#xff1a;memchr 函数原型&#xff1a;void *memchr(const void *buf&#xff0c;int c&#xff0c;sizet count)&#xff1b; 参数&#xff1a;buf 缓冲区的指针&#xff1b;c 查找的字符&#xff1b;count 检查的字符个数。 所需头文件&#xff1a;<cstring&g…

Python算法中的时间复杂度与空间复杂度

大家好&#xff0c;当谈论算法性能时&#xff0c;经常提到两个关键的衡量标准&#xff1a;时间复杂度和空间复杂度。时间复杂度指的是随着输入规模的增长&#xff0c;执行一个算法需要的时间&#xff0c;而空间复杂度指的是一个算法在执行过程中所使用的内存量。本文将详细探讨…

机器学习-sigmoid函数和relu函数-个人解读

机器学习-sigmoid函数和relu函数-个人解读 今天博主来解读一下sigmoid函数和relu函数&#xff0c;我觉得很多同学可能都知道这两个函数是什么&#xff0c;他们干什么的&#xff0c;他们有什么用&#xff0c;但是呢&#xff1f;我想这两个常用的激活函数内在的本质&#xff0c;…

Ai数字人——为写实而生

在当今数字化时代&#xff0c;人工智能技术正成为推动各行各业发展的重要驱动力。企业需要创新的解决方案&#xff0c;以提高效率、降低成本、增强客户体验并应对市场竞争。Ai数字人作为数字化转型的关键组成部分&#xff0c;具备强大的潜力和多样化的应用场景。 根据市场研究…

dbeaver配置SQL server连接

一、需要java jdk环境&#xff0c;我用的比较新 新的&#xff0c;那坑可就来了&#xff0c;先记着 cmd中 java --version出现版本号代表安装成功 二、dbeaver新建连接SQL server 点击测试连接会自动下载驱动&#xff0c;这个时候重点报错就开始出现了 错误一&#xff1a;DBea…

【已解决】matrix contains invalid numeric entries,记录bug修改

文章目录 摘要原因解决办法图像分类网络AlexNetVGGNetGooLeNet系列ResNetDenseNetSwin TransformerMAECoAtNetConvNeXtV1、V2MobileNet系列MPViTVITSWAEfficientNet系列MOBILEVITEdgeViTsMixConvRepLKNetTransFGConvMAEMicroNetRepVGGMaxViTMAFormerGhostNet系列DEiT系列MetaFo…

CMOS图像传感器——三星ISOCELL HP2技术解析

在之前有写文章介绍三星在2022年技术日活动分享的包括图像传感器在内的各种系统相关技术的最新改进和未来愿景,可以回顾下看看。 三星ISOCELL——2022 改进与展望_沧海一升的博客-CSDN博客三星ISOCELL最新改进和未来发展趋势https://blog.csdn.net/qq_21842097/article/detai…

Stable Diffusion AI 绘画入门指南

Stable Diffusion AI 绘画入门指南 市面上用的最多的AI绘画工具是 Stable-Diffusion&#xff08;SD&#xff09; 和 Midjourney&#xff08;Mid&#xff09;&#xff0c;SD是在本地运行的服务&#xff0c;开源&#xff0c;门槛高&#xff0c;但自控性极高。而Mid作为在线的服务…

Redis——基础篇(包含redis在云服务上的docker化安装和连接以及常用命令)

初识Redis Redis为键值型数据库&#xff0c;数据以键值形式存储。没有表&#xff0c;没有约束。 认识NoSQL mysql就是典型的关系型数据库(SQL)。 目的都是数据的增删改查&#xff0c;但数据存储方式不一样。 关系型和非关系型在结构上有差异 关系型的结构一般定好后就很少修…

基于 FFmpeg 的跨平台视频播放器简明教程(六):使用 SDL 播放音频和视频

系列文章目录 基于 FFmpeg 的跨平台视频播放器简明教程&#xff08;一&#xff09;&#xff1a;FFMPEG Conan 环境集成基于 FFmpeg 的跨平台视频播放器简明教程&#xff08;二&#xff09;&#xff1a;基础知识和解封装&#xff08;demux&#xff09;基于 FFmpeg 的跨平台视频…

【unity小技巧】委托(Delegate)的基础使用和介绍

文章目录 一、前言1. 什么是委托&#xff1f;2. 使用委托的优点 二、举例说明1. 例12. 例2 三、案例四、泛型委托Action和Func1. Action委托2. Func委托 五、参考六、完结 一、前言 1. 什么是委托&#xff1f; 在Unity中&#xff0c;委托&#xff08;Delegate&#xff09;是一…