当前位置:网站首页>【网络基础】浏览器输入一个URL之后,都发生了什么(详细讲解)
【网络基础】浏览器输入一个URL之后,都发生了什么(详细讲解)
2022-08-02 03:33:00 【Money、坤】
1. 前置知识
想要了解浏览器输入一个URL之后都发生了什么,我们要先认识以下几个知识
- TCP/IP五层模型
TCP/IP是一组协议的代名词,他还包括许多协议,组成了TCP/IP协议簇,TCP/IP通讯协议采用了5层的层次结构,每一层都呼叫他的下一层所提供的的网络来完成自己的需求,主要分为以下五层:
层次从上到下依次是:
- 应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远 程访问协议(Telnet)等。
- 传输层:负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机。
- 解决问题:解决进程间通信问题
- 网络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表 的方式规划出两台主机之间的数据传输的线路(路由)。
- (1)工作设备:路由器(Router)。
- (2)解决问题:解决跨局域网通信问题
- 数据链路层:负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线 上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。
- (1)工作设备:交换机(Switch)、集线器。
- (2)解决问题:解决一个局域网内部通信问题
- 物理层:负责光/电信号的传递方式。比如现在以太网通用的网线(双绞 线)、早期以太网采用的的 同轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。
物理层的能力决定了最大传输速率、传输距离、抗干扰性等。- (1)工作设备:集线器(Hub)。
- (2)解决问题:解决传输介质通信问题
- DNS协议
- 1.什么是DNS协议?
DNS(域名系统)协议是一个应用层协议,可以将域名和IP地址相互映射的以层次结构分布的数据库系统,简单来说就是域名和ip之间相互转换的协议。
- 2.什么是域名?
比如www.baidu.com ,就是我们经常用的百度的域名,域名主要是为了人们方便记忆而设置的,而在网络传输中,是通过ip寻找主机的而不是域名,所以每一个域名都会对应一个ip,我们可以通过ping的方式来获取到域名对应的ip:
其中36.152.44.95就是百度的域名对应的ip地址,ping 的时候使用ip地址和使用域名会有同样的效果
- ARP协议
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址(MAC);收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
- NAT技术
NAT是路由器使用的一种技术,NAT能够将私有ip对外通信是转为全局ip,也就是一种将私有ip和全局ip相互转换的一种技术,可以很好地解决ip地址数量不够的问题。
对于NAT还存在着一个问题,就是当同一局域网内,有多个主机都访问同一外网服务器,那么对于服务器返回的数据中,目的ip都是相同的,那么NAT路由器如何判断这个数据包发送给局域网的那个主机?
为了解决这个问题又有了新技术就是NAPT技术,NAPT技术使用ip+端口来建立这个关联关系
2. 输入URL,发送请求流程
- 2.1域名解析
在浏览器输入一个URL之后,第一步就是基于DNS域名转IP协议获取到请求的IP也就是目的IP
- 2.2封装
得到了目的IP之后,就要对请求的数据进行封装,封装是时从上到下进行封装,封装的顺序就是应用层、传输层、网络层、数据链路层、物理层
1.应用层
当发送一个请求时,第一步封装就是在应用层,在应用层中,会根据应用层的HTTP协议将请求封装成HTPP格式,然后将封装好的数据交给传输层进一步封装
2.传输层:
传输层得到应用层封装好的数据之后,传输层基于TCP协议进一步封装,在原有的数据中加上源端口和目的端口,然后发送给网络层
3.网络层:
网络层得到传输层的数据之后,基于IP协议继续封装,封装的时候是不知道MAC地址的,获取方式就是使用ARP地址解析协议,首先查看目的主机和源主机是否在同一网段,将目的IP和子网掩码按位相与得到网段,如果在同一网段就直接通过ARP获取目的MAC,如果不在同一网段就将数据交给网关处理,使用APR查找网关的MAC,目的MAC就是网关的MAC,最后加上源IP和目的IP,然后发送给数据链路层
4.数据链路层:
数据链路层得到网络层的数据之后基于以太网帧封装,加上帧头和帧尾,其中包含源MAC和目的MAC
5.物理层:
负责光信号和电信号的互相转换,以及透明的传输比特流。
- 2.3分用
网关得到数据报之后先进行从下到上分用
1.数据链路层
在数据链路层解析出数据帧,剥离帧头帧尾,取出IP数据报交给网络层
2.网络层
网络层拿到网络层数据报之后,再解析,去掉网络层协议报头,再交给传输层
3.传输层
传输层得到传输层协议报之后,解析,去除传输层包头,交给应用层
4.应用层
应用层得到数据报之后,解析应用层数据包,得到请求内容 分用完成之后,继续封装,这次封装时,进行以下操作:
(1) 要修改源IP、源端口、源MAC、目的MAC
(2)然后基于NAPT技术,将局域网IP,端口修改为公网IP,端口
(3)基于路由技术,在路由表中查询下一跳设备IP
(4)在通过ARP查找MAC地址
- 2.4 响应
在路途中经过的设备,都需要经过以上的封装和分用,最后一步将请求消息成功交给目的主机后,先分用,然后交给目的端口对应的应用程序处理响应
当应用时tomcat时:首先解析HTTP请求,然后判断URL请求的时静态资源还是动态资源
(1)当请求资源时静态资源时,直接返回静态的响应数据
(2)当请求时servlet时,首先将HTTP协议数据封装HTTPServletRequest,然后调用service()方法,调用子类重写的doXXX()方法
(3)执行完毕之后,tomcat将HTTP响应基于HTTPServletResponse封装
(4)返回响应,从上到下封装,然后返回响应给请求的主机
边栏推荐
猜你喜欢
随机推荐
[Arduino uses a rotary encoder module]
如何快速搭建属于自己的物联网平台?
使用飞凌嵌入式IMX6UL-C1板子——qt+opencv环境搭建
联阳IT6561|IT6561FN方案电路|替代IT6561方案设计DP转HDMI音视频转换器资料
VCA821可变增益放大器
【科普贴】I2C通讯协议详解——偏软件分析和逻辑分析仪实例分析
所有子字符串中的元音 —— LeetCode - 2063
基础IO(上):文件管理和描述符
“520” 如何正确地用代码向 ta 表白?
【MQ-2 可燃气体和烟雾传感器与 Arduino 配合使用】
[Arduino connected to GP2Y1014AU0F dust sensor]
WebApp 在线编程成趋势:如何在 iPad、Matepad 上编程?
【nRF24L01 与 Arduino 连接实现无线通信】
【科普贴】SD卡接口协议详解
[Arduino connects the clock module to display the time on LCD1602]
【plang 1.4.5】编写坦克(双人)游戏脚本
联阳(ITE)IT66021FN:HDMI转RGB芯片 3D 资料
【Arduino 连接 SD 卡模块实现数据读写】
idea中创建jsp项目详细步骤
向龙芯2K1000板子上烧写中标麒麟系统