当你打开一个网页,到底发生了什么?——计算机网络

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: 当你打开一个网页,到底发生了什么?——计算机网络

计算机网络体系结构中的各个层次都做了哪些工作呢?又用到了哪些协议呢?

首先,在OSI七层协议体系结构中,我们把计算机网络由上至下分为七个层次:应用层,表示层,会话层,运输层,网络层,数据链路层和物理层。

然而,OSI模型作为法律上的国际标准并未被使用,被广泛使用的是事实上的国际标准,著名的TCP/IP四层网络模型,从上到下分为:应用层,运输层,网际层和网络接口层。

但是我们在学习计算机网络时往往采用五层体系结构,从上至下依次为:应用层,运输层,网络层,数据链路层和物理层。


1. 查找本机IP地址

如果你是一台处于局域网中的机器,你会通过DHCP(动态主机配置协议, Dynamic Host Configuration Protocol)获取其配置信息而不需要手工干预,配置信息包括(1) IP地址;(2) 子网掩码;(3) 默认路由器的IP地址;(4) 域名服务器的IP地址。在你和外界互联网进行通信时,要经过NAT(网络地址转换,Network Address Translation)来将局域网的私有IP地址转换为全球IP地址。

2. 查找目标IP地址

接下来我们需要找到目标的IP地址,这时就需要使用DNS(域名系统,Domain Name System)啦。浏览器分析指向页面的URL后,首先我们会检查DNS缓存中是否缓存了页面对应的IP地址,如果刚好缓存了,直接返回就好了。如果没有缓存,我们就必须让DNS一级一级地向上查找,直至解析出域名对应的IP地址。


3. 浏览器与服务器建立TCP连接

这时候我们就要使用著名的三次握手的方法来建立TCP连接啦。

为什么要采用三次握手呢?可以看一下我发布的另一篇文章。


4. 浏览器发出http请求

浏览器与服务器建立TCP连接后,浏览器就可以向服务器发送http请求啦。那么在这个过程中会使用哪些协议呢?我们来分析一下。


首先http协议是应用层协议,需要使用到运输层提供的服务,具体来说就是TCP协议。


而TCP属于运输层协议,又需要使用到网络层提供的服务,也就是IP协议。IP数据报在不同的AS(自治系统)中进行传送时,需要使用边界网关协议BGP来选择路由。在AS内部,使用RIP(使用UDP进行传送)和OSFP(直接用IP数据包传送)来选择路由。


IP协议继续向下使用数据链路层的服务,将IP数据包重新组成MAC帧进行传送(使用点对点协议PPP)。MAC帧传送时就需要MAC地址,于是就需要地址解析协议ARP进行IP地址到MAC地址的映射。然后数据就可以经过物理链路传输啦。


5. 服务器通过响应http请求把页面文件传送给浏览器

这个步骤使用的协议和上一个步骤是相同的。


6. 释放TCP连接

这里一定要注意,TCP是面向连接的,使用完毕一定要释放的。


7. 浏览器解释文件,并显示

这里就不重点分析啦,因为这个问题我们着重分析计算机网络。


总结

在整个过程中,我们使用的协议主要有:

应用层:

http:定义了浏览器怎样向服务器请求文档,以及服务器怎样把文档传送给浏览器。

运输层:

TCP:面向连接的,可靠的,面向字节流的协议。

UDP:无连接的,尽最大努力交付,面向报文的协议。

网络层:

IP:提供简单灵活的、无连接的、尽最大努力交付的数据报服务。

ARP:把IP地址解析为硬件地址,它解决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题。

RIP:分布式的基于距离向量的路由选择协议,只适用于小型互联网。RIP按固定的时间间隔与相邻路由器交换信息,交换的信息是自己当前的路由表。

OSPF:分布式的链路状态协议,适用于大型互联网。OSPF只在链路状态发生变化时,才用向本自治系统中的所有路由器,用洪泛法发送与本路由器相邻的所有路由器的链路状态信息。

BGP:不同AS的路由器之间交换路由信息的协议,是一种路径向量路由选择协议。BGP力求寻找一条能够到达目的网络(可达)且比较好的路由(不兜圈子),而并非要寻找一条最佳路由。

NAT:使用网络地址转换NAT技术,可以在专用网络内部使用专用IP地址,而仅在连接到因特网的路由器使用全球IP地址。这样就大大节约了宝贵的IP地址。

数据链路层:

PPP:在数据链路层提供的是不可靠的数据报服务。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
7月前
|
数据采集 存储 API
网络爬虫与数据采集:使用Python自动化获取网页数据
【4月更文挑战第12天】本文介绍了Python网络爬虫的基础知识,包括网络爬虫概念(请求网页、解析、存储数据和处理异常)和Python常用的爬虫库requests(发送HTTP请求)与BeautifulSoup(解析HTML)。通过基本流程示例展示了如何导入库、发送请求、解析网页、提取数据、存储数据及处理异常。还提到了Python爬虫的实际应用,如获取新闻数据和商品信息。
1091 2
|
网络协议 Windows
网络连接正常但百度网页打不开显示无法访问此网站解决方案
网络连接正常但百度网页打不开显示无法访问此网站解决方案
1050 0
网络连接正常但百度网页打不开显示无法访问此网站解决方案
|
3月前
|
缓存 网络协议 CDN
在网页请求到显示的过程中,如何优化网络通信速度?
在网页请求到显示的过程中,如何优化网络通信速度?
188 59
|
3月前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
109 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
6月前
|
数据采集 存储 数据挖掘
Python网络爬虫实战:抓取并分析网页数据
使用Python的`requests`和`BeautifulSoup`,本文演示了一个简单的网络爬虫,抓取天气网站数据并进行分析。步骤包括发送HTTP请求获取HTML,解析HTML提取温度和湿度信息,以及计算平均温度。注意事项涉及遵守robots.txt、控制请求频率及处理动态内容。此基础爬虫展示了数据自动收集和初步分析的基础流程。【6月更文挑战第14天】
445 9
|
6月前
网络编程中的互联网协议 , IP地址 , 域名 , 端口 , 架构 , 网页数据请求 , 响应码
网络编程中的互联网协议 , IP地址 , 域名 , 端口 , 架构 , 网页数据请求 , 响应码
|
网络安全 数据库 数据安全/隐私保护
2021年中职“网络安全“江西省赛题—B-10:网页深入
2021年中职“网络安全“江西省赛题—B-10:网页深入
74 0
|
7月前
|
Python
使用Python的Requests库进行网络请求和抓取网页数据
【4月更文挑战第20天】使用Python Requests库进行网络请求和网页数据抓取的步骤包括:安装库(`pip install requests`)、导入库、发送GET/POST请求、检查响应状态码、解析内容、处理Cookies、设置请求头以及异常处理。通过`response`对象访问响应信息,如`status_code`、`text`、`content`和`cookies`。可设置`headers`模拟用户代理,用`try-except`处理异常。
103 7
|
7月前
|
数据采集 存储 Scala
挖掘网络宝藏:利用Scala和Fetch库下载Facebook网页内容
本文介绍了如何使用Scala和Fetch库下载Facebook网页内容,同时通过爬虫代理服务(以亿牛云为例)绕过网络限制。代码示例展示了配置代理服务器、多线程爬取及内容存储的过程。注意实际应用时需替换代理服务器配置和目标URL,并考虑应对复杂的反爬虫机制。此方法兼顾匿名性和效率。
挖掘网络宝藏:利用Scala和Fetch库下载Facebook网页内容
|
7月前
|
Python
如何使用Python的Requests库进行网络请求和抓取网页数据?
【4月更文挑战第19天】使用Python Requests库进行网络请求和网页数据抓取:安装库,导入requests,发送GET/POST请求,检查状态码(如`status_code==200`表示成功),解析响应内容(如`response.text`),处理Cookies和请求头,以及用try-except捕获异常。更多功能可深入学习Requests库。
97 2