IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 当你登录B站的0.5秒里,你的电脑背着你做了n件事 -> 正文阅读

[网络协议]当你登录B站的0.5秒里,你的电脑背着你做了n件事

今天是星期二,你好不容易今天准点下班,6点打卡。

心情因为下班的到来正美,恰好外卖小哥在小区门口遇见你,把你点的奢华外卖送到你手上。

哎呀,心情更美了。

进门打开电脑,把外卖放在桌上,极具仪式感准备登录b站开一部快乐肥宅剧配饭时,你发现:

在浏览器网址框内输入www.bilibili.com之后,经过0.5秒的反应时间,就会看到b站的主页。

这时,你的筷子一顿,脑海里开始不受控制的思考起一个神秘的问题:

“这0.5秒的时间内,电脑是做了多少操作,才找到b站这个页面的?”

这就是老杨今天要分析的问题:

在这简单的0.5秒反应时间的背后,为了找到b站这个页面,你的电脑到底飞速干了多少活儿、

1、分析这个问题前,你需要了解的基础问题

(1)IP地址和域名有啥区别?

首先,我们要知道,平时我们在这个浏览器搜索的网址并不是IP地址,而是域名。

像www.bilibili.com,它就是一个典型的域名,图上的知乎也是。

那B站的IP地址是啥?是110.76.40.240。

域名的出现主要是方便人们记忆,一大串数字对于你来说记起来肯定不如bilibili快。

问你百度的IP地址是啥,你不太清楚;但问你百度的网址是啥,你马上就能想起www.baidu.com,就是这么个道理。

IP地址究竟是啥?

老杨再之前的文章里详细分析过:如何形象生动的解释IP地址、子网掩码和网关?

简单来说,IP地址是人们在Internet上为了区分数以亿计的主机而给每台主机分配的一个专门的地址,通过IP地址就可以访问到每一台主机。TCP/IP中也是使用IP地址和端口号来确定网络上某一台主机上的某一个程序。

IP本身没有什么实际的意义,很难记忆,所以才有了域名。

但是路由器只认识二进制的IP地址,所以,你记住了域名,电脑记不住,就会出现一个问题:当你使用域名访问某一个网站时,需要先将域名翻译成对应的IP地址,这个过程叫做“域名解析”。

诶?我平时输入的时候可没有翻译过啊,这背后是谁再操作?

老杨第二点就给你说明白。

补充一个小技巧:如果你想查看某一个网站的IP地址,要咋整?

老杨平时喜欢用ping来查看:通过win+R打开cmd ,输入ping+空格+域名就可以了。

(2)DNS又是啥?

DNS(Domain Name System)是指域名系统,它主要是提供一种从主机名到IP地址的目录服务。而DNS协议是指将域名转换为IP地址的一个规则。

这就是第一点里提及的“域名解析”。你平时输入网址的时候,没有人给你翻译成IP地址,但是客户端自动就是可以跳转到对应的页面去,就是DNS在后面的默默奉献。

为啥要特地整一个DNS呢?

因为一开始,咱们的域名和IP的对应关系都存在host的文件里。

如果一个新的计算机要接入网络,或者某个IP需要改改,都要去信息中心定期对文件里的内容进行更新,延迟了很久,操作起来也贼麻烦。

所以才有了自动翻译机——DNS系统。

所以,当你输入www.bilibili.com时,再你按下回车键后,停顿的1-2秒内,DNS系统已经悄悄地帮你把这个b站的域名翻译成110.76.40.240给路由器看,这才能跳到你想要看到的二次元页面。

(3)HTTP是啥?

看到下面这张图,你就会发现你几乎时时刻刻都在能看到它:

但老杨这里想讲的是HTTP协议。

HTTP协议超文本传输协议(英文:Hyper Text Transfer Protocol,缩写:HTTP)是一个应用层协议,也是互联网上应用最为广泛的一种网络协议。

而HTTP报文是HTTP协议一种纯文本的数据格式,分为请求报文和响应报文,两种报文都具有类似的结构,分别由三个部分构成:起始行、首部、主体。

当一个你用你的电脑登录一个网站时,通过HTTP协议将这个你请求的这个“内容”封装到HTTP请求报文之中,然后,服务器收到这个请求报文之后,根据协议规范解析报文,然后给你返回相应报文之后,你才能看到你想要看的网站页面。

关于HTTP状态码的科普内容,感兴趣的小友可以戳这里:网络状态码302和303的区别究竟是啥?

(4)TCP的三次握手

TCP的中文名叫做传输控制协议,是供已经连接因特网的计算机进行通信的通信协议。TCP是互联网协议之一,也是主要的协议之一。

TCP/IP 定义了电子设备(比如计算机)如何连入因特网,以及数据如何在它们之间传输的标准。

所以讨论这个问题,必须要涉及到TCP这个东西。

详解TCP三次握手:如果TCP不握手三次,改成两次或者四次会怎样?

2、计算机是怎么在全球这么多设备里,找到我要的那个网站的?

说完上面四个基础概念,我们再绕回题目本身。

老杨首先要纠个错啊,计算机本身是不会找到你想要的那个网站的,它只是了解到你的“需求”之后,再去找“别人”处理这件事。

这个“别人”就是路由器。路由器的世界也是层级分明,计算机问离它最近的路由器,这个村子里的路由器不知道的话,就会网上禀报,报到县里的、镇里的、城里的、全国的,一个个往上禀报,总有一个路由器会知道。

毕竟骨干的路由器知道网络世界里的所有“路径”,最后找到你需要的那个服务器,路由器发起了请求连接,你就能登录上。

并且,老杨还要再解释一点,IP地址并不是像大海捞针一样的搜寻的。因为全球的IP地址都已经是固定好且唯一的标识,这就和我们的世界地图一样, 具有唯一性。

地址们都在嗷嗷待哺的等待着人们的“需求”,这个“需求”不仅可以被动的靠路由器一层一层传输,也可以靠0.0.0.0这个“万能喇叭”来实现。一旦对应的网站服务器能接收到你的请求,就会双眼放光,开始一番猛如虎的连接操作,在1-2秒内,你就能看到对应的网站页面。

那路由器,到底是怎么具体的找到我想要的那个网站的呢?

3、当你在登录网站的2秒内,计算机到底做了多复杂的工作?

根据前面两个大点,我们再捋一遍背后的整个操作过程。

(终于可以用上第一点里的知识点了)

小杨下班回家打开电脑,把外卖放在桌上,极具仪式感准备登录b站开一部快乐肥宅剧配饭。

他在浏览器网址框内输入www.bilibili.com,这里的网址是域名,所以需要“翻译”成计算机能看懂的语言,就需要"DNS"出场。

所以,在你按下回车键enter之后:

你的浏览器会率先使用DNS获得对应的IP地址。

如果本地的DNS服务器没有,就像更高级的DNS服务器求助,一直到你获得了B站的IP地址:110.76.40.240。

获取到了110.76.40.240之后,登录这个IP地址的需求就变成了你的“请求”。浏览器会把你的这个“请求”变成HTTP请求报文发送给TCP。

在这个发送的过程里,就出现了最经典的“TCP的三次握手”场景。

具体是咋握手的,我们看这里:

首先,TCP先收到了服务器发来的请求“有个用户要登录B站看番”。

这时候它有点慌,心里想:这个请求靠不靠谱啊?必须要测试一下,验证验证可不可靠!

所以,TCP设计的“三次握手”出现了,为的是让这俩货接触一下,自证清白,获取TCP的信任。

你的计算机给服务器发消息,“诶哥们,我能不能登个B站啊?”

服务器说:“可以啊大兄弟,这点小事算啥,你收得到我的信息吗?”

计算机说:“收到了!真是太好了,感恩的心感谢有你,祝哥们发大财!”

通过这三次握手,TCP确认了“我要登录B站看番”是ok的,接下来,它就会把你这个请求再次打包成一个IP报文,发送给B站的服务器。

在B站确认你的请求之后,它也会发送一个IP报文给你,以此表示确认建立链接。

经历上述几个过程以后,(也就是你在输入框里输入网址并按回车后的0.5秒内)你顺利打开了B站,开始看起快乐肥宅剧。

写到这里,觉得用这句话结尾,应该是最好的:

哪有什么岁月静好,不过是有人在替你负重前行。

原创:老杨丨8年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部

?

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-02 11:45:12  更:2021-09-02 11:46:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:01:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码