访问一次网站的全过程

news2024/10/6 14:37:00

目录

流程图:

一、应用层开始

1. 在浏览器输入https://www.baidu.com

2. DNS获取IP地址

3. 根据HTTP协议生成HTTP请求报文

应用层结束

二、传输层开始

4. TCP三次握手

传输层结束

三、网络层开始

5. IP寻址

6. ARP协议获取MAC地址

网络层结束

四、数据链路层开始

7. MAC寻址

数据链路层结束

8. 物理层传输

9. 服务器接受请求

10. 服务端处理请求返回

11. 主机收到后回复tcp确认报文,经过几轮发送首页文件发送完毕12. 浏览器接受完毕后,发送tcp断开报文,与百度服务器进行四次断开


流程图:

一、应用层开始

1. 在浏览器输入https://www.baidu.com

浏览器接收url开启网络请求线程,URL主要包括以下部分:
protocol:协议头https/http
host:主机域名www.baidu.com
port:端口号(默认):443/80

2. DNS获取IP地址

  • 客户端发起获取IP地址请求,浏览器首先要做的事情就是解析这个域名,一般来说,浏览器会首先查看本地硬盘的 hosts 文件,看看其中有没有和这个域名对应的规则,如果有的话就直接使用 hosts 文件里面的 ip 地址。
  • 如果在本地的 hosts 文件没有能够找到对应的 ip 地址,浏览器会发出一个 DNS请求到本地DNS服务器。本地DNS服务器一般都是你的网络接入服务器商提供,比如中国电信,中国移动。
  • 查询你输入的网址的DNS请求到达本地DNS服务器之后,本地DNS服务器会首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回结果,此过程是递归的方式进行查询。如果没有,本地DNS服务器还要向DNS根服务器进行查询。
  • DNS根服务器没有记录具体的域名和IP地址的对应关系,于是告诉本地DNS服务器,你可以到域服务器上去继续查询,并给出域服务器的地址。这种过程是迭代的过程。
  • 本地DNS服务器继续向域服务器发出请求,在这个例子中,请求的对象是.com域服务器。.com域服务器收到请求之后,也不会直接返回域名和IP地址的对应关系,而是告诉本地DNS服务器,你的域名的解析服务器的地址。
  • 最后,本地DNS服务器向域名的解析服务器发出请求,这时就能收到一个域名和IP地址对应关系,本地DNS服务器不仅要把IP地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。如果url里不包含端口号,则会使用该协议的默认端口号。

3. 根据HTTP协议生成HTTP请求报文

HTTP报文一般包括了: 请求/响应行,请求/响应头部,空白行,请求体/响应数据。

应用层结束

在应用层将要发送的数据内容形成了应用层的报文data,发送到传输层。

二、传输层开始

4. TCP三次握手

握手过程:

  • 第一次握手:客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 Seq。此时客户端处于 SYN_Send状态。
  • 第二次握手:服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,并且也是指定了自己的初始化序列号Seq,同时会把客户端的 Seq + 1 作为 ACK Number 的值,表示自己已经收到了客户端的 SYN,此时服务器处于 SYN_REVD的状态
  • 第三次握手:客户端收到 SYN 报文之后,会发送一个 ACK 报文,当然,也是一样把服务器的 Seq + 1 作为回复 ACK Number的值,表示已经收到了服务端的 SYN 报文,此时客户端处于 establised状态。
  • 服务器收到 ACK 报文之后,也处于 establised 状态,此时,双方以建立起了链接。

传输层结束

这些数据通过传输层发送(tcp)。数据会被送到传输层处理,在这里报文打上了传输头的包头,主要包含端口号,以及tcp的各种制信息。然后把待发送的数据段发送到网络层。

三、网络层开始

5. IP寻址

网络层开始负责将这样的数据包在网络上传输,如何穿过路由器,最终到达目的地址。在这里,根据目标ip地址,就需要查找下一跳路由的地址。首先在本机,要查找本机的路由表。
查找过程是这样的:

  • 根据目的地址,得到目的网络号,如果处在同一个内网,则可以直接发送,一般不在同一网络范围。 如果不是,则查询路由表,找到一个路由。
  • 如果找不到明确的路由,此时在路由表中还会有默认网关,也可称为缺省网关,IP用缺省的网关地址将一个数据传送给下一个指定的路由器,所以网关也可能是路由器,也可能只是内网向特定路由器传输数据的网关。
  • 路由器收到数据后,它再次为远程主机或网络查询路由,若还未找到路由,该数据包将发送到该路由器的缺省网关地址。而数据包中包含一个最大路由跳数,如果超过这个跳数,就会丢弃数据包,这样可以防止无限传递。路由器收到数据包后,只会查看网络层的包裹数据,目的ip。
  • 如果上面这些步骤都没有成功,那么该数据报就不能被传送。如果不能传送的数据报来自本机,那么一般会向生成数据报的应用程序返回一个“主机不可达”或 “网络不可达”的错误信息。

注意:关于NAT转换,如果是在局域网中,每台电脑都有自己的私网IP,在对外传输的时候,会经过NAT转换,改成路由器的公网IP。

6. ARP协议获取MAC地址

ARP协议是将IP地址映射成MAC地址的,由于是IP协议使用了ARP协议,因此通常把ARP协议划归为网络层,但是ARP协议的用途是为了从网络层使用的IP地址解析出在数据链路层使用的MAC地址.
获取MAC地址过程:

  • 主机生成一个具有目的IP地址(默认网关)的ARP查询报文,将该ARP报文放置在一个具有广播目的地址(例如FF:FF:FF:FF:FF:FF:FF)的以太网帧中,并向交换机发送该以太网帧,交换机将该帧交付给所有连接的设备,包括网关路由器。
  • 网关路由器在接口上收到包含该ARP查询报文的帧,发现ARP报文中目的地址IP地址匹配接口的IP地址.网关路由器因此准备一个ARP回答,指示它的MAC地址对应报文中的IP地址,它将ARP回答放在一个以太网帧中,其目的地址是源MAC地址,并向交换机发送该帧,再由交换机将该帧交付给主机。
  • 主机接收包含ARP回答报文的帧,并从ARP回答报文中抽取网关路由器的MAC地址。将这个MAC地址将与IP包共同传输给下层。

网络层结束

在网络层被打包,这样封装上了网络层的包头,包头内部含有源及目的的ip地址,该层数据发送单位被称为packet。

四、数据链路层开始

7. MAC寻址

  • 首先通过广播获取足够的MAC地址表,交换机使用MAC地址通过指向相应端口的交换结构将网络通信转向目的节点。交换机为了知道要使用哪个端口来传送单播帧,它必须首先知道自己的每个端口上都存在哪些节点。
  • 交换机使用其 MAC 地址表来确定如何处理传入的数据帧。通过记录与其每一个端口相连的节点的 MAC 地址来构建其 MAC 地址表。当某个特定端口上的某个特定节点的 MAC 地址记录到地址表之后,交换机就可以知道在后续传输中,应将目的地为该特定节点的流量从与该节点对应的端口上发出。
  • 当交换机收到传入的数据帧,而地址表中没有该帧的目的MAC地址时,交换机将把该帧从除接收该帧的端口之外的所有端口转发出去。当目的节点响应时,交换机从响应帧的源地址字段中获得的该节点的MAC地址,并将其记录在地址表中。在多台交换机互连的网络中,连接其它交换机的端口MAC地址表中记录有多个MAC地址,用来代表远端节点。通常,用于互连两台交换机的交换机端口在MAC地址表中记录了多个MAC地址。

数据链路层结束

8. 物理层传输

数据转为二进制比特流进行物理链路的传输。

9. 服务器接受请求

服务端将数据包通过数据链路层->网络层->传输层一层层的解封,最后处理HTTP中的请求。

10. 服务端处理请求返回

服务器相应请求内容,把首页文件通过响应报文回复给主机。失败返回状态码(400)。

11. 主机收到后回复tcp确认报文,经过几轮发送首页文件发送完毕
12. 浏览器接受完毕后,发送tcp断开报文,与百度服务器进行四次断开

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

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

相关文章

Modified Bessel Function of the First Kind

Abstract 最近接触到 von Mises–Fisher distribution, 其概率密度如下: f p ( x ; μ , κ ) κ p 2 − 1 ( 2 π ) p 2 I p 2 − 1 ( κ ) e κ μ ⊺ x \begin{aligned} f_{p}(\bm{x}; \bm{\mu}, \kappa) \frac{\kappa^{\frac{p}{2}-1}} {(2\pi)^{\frac{p}{2}} I_{\frac…

linux系统下,配置开机自启脚本常见的5种方法

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 所属的专栏:linux基础与进阶,shell脚本编写实战 景天的主页:景天科技苑 文章目录 linux下设置开机自动运行脚本的5种方法一、编辑/etc/rc.d/rc.local文件1、在自己需要启动的文件目录中编写一个…

CPU独占内核运行方式实现,并指定线程到特定CPU上执行

CPU独占内核运行方式实现,并指定线程到特定CPU上执行1. 隔离指定的CPU,避免其余线程run在被隔离的CPU上2. 绑定所有的interrupts(中断)到非隔离的CPU上,避免被隔离的CPU收到interrupt.3. C绑定线程运行在指定CPU也可以通过taskset来使线程/进…

一文详解WebView,不好理解就想想iframe,类比后秒懂了。

Hi,我是贝格前端工场,又到了给大家做技术扫盲的时候,本文讲一讲webview,有些老铁觉得很难懂,其实借助iframe来中转一下,就好理解了。 WebView是一种用于在应用程序中显示Web内容的组件。它可以嵌入到应用程…

免费、好用、强大的轻量级笔记软件评测

在我们不断寻找能提高个人和团队效率的工具的过程中,优质的笔记软件扮演着至关重要的角色。本文将介绍几款经过精选的免费且功能强大的笔记应用,这些应用不仅适合个人记录和整理思维,也适合团队合作和信息共享。 Joplin —— 隐私保护的开源…

京东按关键字搜索商品 API 返回值说明

京东按关键字搜索商品的API返回值说明如下: 总记录数(total_count):搜索结果的总数量。当前页码(page_no):当前请求的页码。每页记录数(page_size):每页显示…

蓝桥杯倒计时 36天-DFS练习

文章目录 飞机降落仙境诅咒小怂爱水洼串变换 飞机降落 思路&#xff1a;贪心暴搜。 #include<bits/stdc.h>using namespace std; const int N 10; int t,n; //这题 N 比较小&#xff0c;可以用暴力搜搜复杂度是 TN*N! struct plane{int t,d,l; }p[N]; bool vis[N];//用…

Elasticsearch:机器学习与人工智能 - 理解差异

作者&#xff1a;来自 Elastic Aditya Tripathi, Jessica Taylor 长期以来&#xff0c;人工智能几乎完全是科幻小说作家的玩物&#xff0c;人类将技术推得太远&#xff0c;以至于它变得活跃起来 —— 正如好莱坞让我们相信的那样 —— 开始造成严重破坏。 令人愉快的东西&#…

保护图纸不能打印,加密图纸如何加密只能看,不能打印复制

图纸是表达设计思想、传递产品信息、交流产品构思的最重要的工具&#xff0c;是企业中最重要的技术资料。 图纸作为企业重要的技术资料&#xff0c;包含了产品的核心设计、制造工艺、材料选择等关键信息。 那么&#xff0c;如何才能保护图纸呢&#xff1f; 首先&#xff0c;我…

Covalent(CQT)降低数据可用性成本,加快 Layer2 在 Web3 领域的扩张

Covalent Network&#xff08;CQT&#xff09;通过其统一 API&#xff0c;正在为 EVM Layer2 生态系统提供支持&#xff0c;减少了开发者需要导航多个数据供应商的需求&#xff0c;通过解决多链环境中的碎片化挑战&#xff0c;极大地提高了他们的效率。 通过其统一 API 支持 2…

静态源代码安全扫描工具测评结果汇总

测评背景 随着数字技术的进步&#xff0c;网络安全行业日益发展&#xff0c;企业对于DevSecOps的应用和落地的需求日益增加&#xff0c;静态源代码安全扫描工具已成为其中的关键产品或工具。同时&#xff0c;在代码安全审计或检测过程中&#xff0c;也需要选择一款合适的、好用…

动态代理详解(原理+代码+代码解析)

动态代理 1.什么是动态代理&#xff1f; 动态代理是一种在运行的时候动态的生成代理对象的技术。它在不改变原始类的情况下&#xff0c;对原始类的方法进行拦截或者增强。 2.动态代理可以实现的功能&#xff1f; 使用动态代理可以实现如下常用功能&#xff1a; 1.AOP&#x…

Python实现线性查找算法

Python实现线性查找算法 以下是使用 Python 实现线性查找算法的示例代码&#xff1a; def linear_search(arr, target):"""线性查找算法:param arr: 要搜索的数组:param target: 目标值:return: 如果找到目标值&#xff0c;返回其索引&#xff1b;否则返回 -1…

Observer 模式

文章目录 &#x1f4a1;问题引入&#x1f4a1;概念&#x1f4a1;例子&#x1f4a1;总结 &#x1f4a1;问题引入 假设有一个在线商店系统&#xff0c;用户可以订阅商品的库存通知。当某个商品的库存数量发生变化时&#xff0c;系统会自动发送通知给所有订阅了该商品的用户。设计…

Anaconda下载安装及配置pytorch环境

先解释一下Python、Anaconda、Pytorch是啥 Python是一种广泛使用的编程语言&#xff0c;在许多领域都有应用。它具有简洁的语法&#xff0c;易于学习&#xff0c;并且有大量的第三方库可以使用。 Anaconda是一个Python的包和环境管理软件&#xff0c;提供了许多用于数据科学&a…

融资利率选哪家好?

第一&#xff1a;怎么理解融资融券&#xff1f; 融资融券交易&#xff0c;又称“证券信用交易”&#xff0c;分为融资交易和融券交易。是指投资者通过向具有融资融券业务资格的证券公司提供担保物&#xff0c;借入资金买入证券&#xff08;融资交易&#xff09;或借入证券并卖…

前端基础篇-深入了解用 HTML 与 CSS 实现标题排版

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 HTML 与 CSS 概述 2.0 HTML - 标题排版 2.1 图片标签 2.2 标题标签 2.3 水平标签 2.4 实现标题排版 3.0 HTML - 标题样式(style 样式) 3.1 CSS 的引入方式 3.2…

docker学习入门篇

1、docker简介 docker官网&#xff1a; www.docker.com dockerhub官网&#xff1a; hub.docker.com docker文档官网&#xff1a;docs.docker.com Docker是基于Go语言实现的云开源项目。 Docker的主要目标是&#xff1a;Build, Ship and Run Any App, Anywhere(构建&…

ScaleKD: Distilling Scale-Aware Knowledge in Small Object Detector

ScaleKD: Distilling Scale-Aware Knowledge in Small Object Detector在小目标检测器中提取尺度感知知识 摘要 尽管通用目标检测取得了显著的成功&#xff0c;但小目标检测&#xff08;SOD&#xff09;的性能和效率仍然令人不满意。与现有的努力平衡推理速度和SOD性能之间的…

华为数通方向HCIP-DataCom H12-821题库(多选题:121-140)

第121题 以下哪些事件会导致IS-IS产生一个新的LSP? A、引入的IP路由发送变化 B、周期性更新 C、接口开销发生了变化 D、邻接Up或Down 【参考答案】ABCD 【答案解析】 第122题 以下哪些协议既支持网络配置管理又支持网络监控管理? A、Telemetry B、NETCONF C、SNMP D、LLDP …