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

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介: 当你打开一个网页,到底发生了什么?——计算机网络

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

首先,在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从业者体验企业级架构的实战训练。
目录
相关文章
|
18天前
|
数据采集 存储 API
网络爬虫与数据采集:使用Python自动化获取网页数据
【4月更文挑战第12天】本文介绍了Python网络爬虫的基础知识,包括网络爬虫概念(请求网页、解析、存储数据和处理异常)和Python常用的爬虫库requests(发送HTTP请求)与BeautifulSoup(解析HTML)。通过基本流程示例展示了如何导入库、发送请求、解析网页、提取数据、存储数据及处理异常。还提到了Python爬虫的实际应用,如获取新闻数据和商品信息。
|
2月前
|
数据采集 存储 Scala
挖掘网络宝藏:利用Scala和Fetch库下载Facebook网页内容
本文介绍了如何使用Scala和Fetch库下载Facebook网页内容,同时通过爬虫代理服务(以亿牛云为例)绕过网络限制。代码示例展示了配置代理服务器、多线程爬取及内容存储的过程。注意实际应用时需替换代理服务器配置和目标URL,并考虑应对复杂的反爬虫机制。此方法兼顾匿名性和效率。
挖掘网络宝藏:利用Scala和Fetch库下载Facebook网页内容
|
3月前
|
域名解析 弹性计算 缓存
DNS问题之无法通过域名访问如何解决
DNS服务器是负责将域名转换为IP地址的服务,它是互联网上实现域名解析的关键基础设施;本合集将探讨DNS服务器的工作原理、配置方法和常见问题处理,帮助用户理解和优化DNS服务的使用。
76 2
|
10月前
|
机器学习/深度学习 移动开发 算法
Python垃圾识别系统,TensorFlow+Django网页框架+深度学习模型+卷积网络【完整代码】
垃圾识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对5种垃圾数据集进行训练,最后得到一个识别精度较高的模型。并基于Django,开发网页端操作平台,实现用户上传一张垃圾图片识别其名称。
166 0
|
9月前
|
编解码 前端开发 JavaScript
响应式图像优化:如何根据用户设备和网络条件优化网页中的图像,以提高用户体验和加载速度。
响应式图像优化:如何根据用户设备和网络条件优化网页中的图像,以提高用户体验和加载速度。
|
10月前
|
机器学习/深度学习 编解码 算法
鸟类识别系统python+TensorFlow+Django网页界面+卷积网络算法+深度学习模型
鸟类识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Django框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
202 0
鸟类识别系统python+TensorFlow+Django网页界面+卷积网络算法+深度学习模型
|
10月前
|
机器学习/深度学习 算法 搜索推荐
Python交通标志识别系统,TensorFlow+Django网页+深度学习模型+卷积网络【完整代码】
使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Django,开发网页端操作平台,实现用户上传一张图片识别其名称
108 0
Python交通标志识别系统,TensorFlow+Django网页+深度学习模型+卷积网络【完整代码】
|
Web App开发 数据采集 移动开发
他们渲染了一百万个网页,来了解网络如何崩溃
最近在 medium 上看到这篇“比较新鲜的”文章 《We rendered a million web pages to learn how the web breaks》 觉着不错(老外确实敢想敢做),遂翻译分享,以期拓宽视野、引人思考。本瓜不会去逐字翻译,旦求一个表意流畅。其间也会或加入自己的看法,或引用其它。总之,事儿就是这么个事儿,希望您喜欢~
|
网络协议 网络架构
「从URL到网页🌏」构建计算机网络知识体系-04
「从URL到网页🌏」构建计算机网络知识体系-04
85 0
「从URL到网页🌏」构建计算机网络知识体系-04
|
网络协议 前端开发
「从URL到网页🌏」构建计算机网络知识体系-03
「从URL到网页🌏」构建计算机网络知识体系-03
112 0
「从URL到网页🌏」构建计算机网络知识体系-03