访问一次网站的全过程

目录

流程图:

一、应用层开始

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.mzph.cn/news/737110.shtml

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

相关文章

CSS 02

1.复合选择器 &#xff08;1.1&#xff09;后代选择器 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0&q…

ICLR 2024 | Meta AI提出ViT寄存器结构,巧妙消除大型ViT中的伪影以提高性能

论文题目&#xff1a;Vision Transformers Need Registers 论文链接&#xff1a;https://arxiv.org/abs/2309.16588 视觉Transformer&#xff08;ViT&#xff09;目前已替代CNN成为研究者们首选的视觉表示backbone&#xff0c;尤其是一些基于监督学习或自监督学习预训练的ViT&a…

【Java EE】线程安全的集合类

目录 &#x1f334;多线程环境使用 ArrayList&#x1f38d;多线程环境使⽤队列&#x1f340;多线程环境使⽤哈希表&#x1f338; Hashtable&#x1f338;ConcurrentHashMap ⭕相关面试题&#x1f525;其他常⻅问题 原来的集合类, 大部分都不是线程安全的. Vector, Stack, HashT…

小波散射网络及其应用

1989 年,Mallat 首次提出将基于小波变换的特征提取方法用于模式识别分类中[40],若干 年后,Mallat 又提出了基于小波变换的小波散射网络这一新型网络结构,该网络主要是基于 小波变换的散射算子(Scattering operators)[41],能提取出原始信息在弹性形变、仿射变换中 的不变…

智慧城市的定义是什么?

智慧城市&#xff1a;就是运用信息和通信技术手段感测、分析、整合城市运行核心系统的各项关键信息&#xff0c;从而对包括民生、环保、公共安全、城市服务、工商业活动在内的各种需求做出智能响应。其实质是利用**的信息技术&#xff0c;实现城市智慧式管理和运行&#xff0c;…

【小白必看】永久提升代码/算法能力的6个编程习惯(推荐阅读)

前言 编程和算法能力是当代工程师的核心竞争力之一。想要快速提升自己的编程和算法能力&#xff0c;却苦于没有合适的方法&#xff1f;别担心&#xff0c;今天我将与你分享6个高效编程习惯&#xff0c;让你轻松提升编程和算法能力&#xff01; 大家好&#xff0c;我是Erik&am…

使用脚本批量下载nuscens数据集

Nuscenes 完整版数据集批量下载 需求&#xff1a; 高速下载Nuscenes完整版数据集。采用google浏览器自带工具下载&#xff0c;速度慢&#xff0c;且容易断。 数据地址 官方地址&#xff1a;https://www.nuscenes.org/nuscenes 如何获取 Nuscenes 数据集的路径 安装插件 ch…

c语言之函数递归

函数递归就是函数不断引用自己&#xff0c;这样形成一个循环 比如下面代码 #include<stdio.h> int fun(int i) {printf("%d\n",i);return fun(i1);}int main() {int num;puts("请输入一个数字");scanf("%d",&num);fun(num);return 0…

力控软件与多台不同品牌的PLC之间如何实现无线通讯?

在现代化工厂中&#xff0c;除厂级PLC系统外&#xff0c;还存在很多独立的子系统。比如&#xff0c;各个生产车间的PLC系统、或同一生产车间的不同生产流程的PLC系统。对一个大型工厂&#xff0c;由于生产线的不断改造、新老流程的不断更新&#xff0c;这些PLC系统往往是由不同…

【C++庖丁解牛】STL之vector容器的介绍及使用 | vector迭代器的使用 | vector空间增长问题

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 1.1 vector的介绍2 v…

navicat过期了,直接用idea连接mysql

1、我的是社区版&#xff0c;需要下载一个插件&#xff0c;直接搜索安装即可。 2、找到data source&#xff0c;点击mysql 3、你们熟悉的&#xff0c;输入账户密码&#xff0c;点击test Connection测试是否连接成功 4、这个本来是在右边&#xff0c;但是你可以把他挪到左边。 5…

三次握手,四次挥手基本概念及其抓包演示

目录 1.tcp三次握手 2.tcp四次挥手 3.思考问题(面试常考) 3.1 三次握手时可能出现什么攻击? 3.2 为什么是三次握手,可不可以是两次,为什么? ​编辑3.3 四次挥手的过程可以用三次完成吗? 4.抓包演示三次握手四次挥手 1.tcp三次握手 tcp协议特点:面向连接的,可靠的,流式…

【Python】一文详细介绍 plt.rcParamsDefault 在 Matplotlib 中的原理、作用、注意事项

【Python】一文详细介绍 plt.rcParamsDefault 在 Matplotlib 中的原理、作用、注意事项 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程…

OpenCV-环境搭建及基本IO接口

文章目录 使用conda安装OpenCV开发环境所有相关接口验证demo以上传至仓库窗口相关接口创建窗口&#xff1a;cv2.namedWindow调整窗口大小&#xff1a;cv2.resizeWindow显示图像&#xff1a;cv2.imshow等待输入&#xff1a;cv2.waitKey销毁所有窗口&#xff1a;cv2.destroyAllWi…

Linux第12章 - 网络管理

Linux系统配置及服务管理_第12章 网络管理 简介 Linux网络接口名称规则 Network interface names Traditionally, network interfaces in Linux are enumerated as eth0, eth1, eth2, and so on. However, the mechanism which sets these names can cause changes to which in…

【Android KOOM】KOOM Java层泄漏使用全解析

文章目录 前言初始化OOMMonitormake leak日志查看&堆快照输出源码分析篇 前言 要研究内存泄漏框架&#xff0c;KOOM是个不可忽略的优秀开源框架&#xff0c;由快手开源。这将是一个系列的文章。这篇文章作为开篇&#xff0c;来看看KOOM框架的demo是怎么制造Java层面的leak…

C++的类与对象(三):构造函数、析构函数、对象的销毁顺序

目录 类的6个默认成员函数 构造函数 语法 特性 析构函数 特性 对象的销毁顺序​​​​​​​​​​​​​​ 类的6个默认成员函数 问题&#xff1a;一个什么成员都没的类叫做空类&#xff0c;空类中真的什么都没有吗&#xff1f; 基本概念&#xff1a;任何类在什么都不…

软考73-上午题-【面向对象技术2-UML】-UML中的图4

一、构件图&#xff08;组件图&#xff09; 1-1、构件图的定义 展现了&#xff0c;一组构件之间的组织和依赖。 构件图专注于系统的静态实现图。 构件图与类图相关&#xff0c;通常把构件映射为一个、多个类、接口、协作。 【回顾】&#xff1a; 类图展示了一组对象、接口、…

题目 2146: 组合的输出

题目描述: 排列与组合是常用的数学方法&#xff0c;其中组合就是从n个元素中抽出r个元素(不分顺序且r≤n)&#xff0c;我们可以简单地将n个元素理解为自然数1&#xff0c;2&#xff0c;…&#xff0c;n&#xff0c;从中任取r个数。 现要求你用递归的方法输出所有组合。 例如n&…

SpringCloud-SpringBoot读取Nacos上的配置文件

在 Spring Boot 应用程序中&#xff0c;可以使用 Spring Cloud Nacos 来实现从 Nacos 服务注册中心和配置中心读取配置信息。以下是如何在 Spring Boot 中读取 Nacos 上的配置文件的步骤&#xff1a; 1. 引入依赖 首先&#xff0c;在 Spring Boot 项目的 pom.xml 文件中添加 …