今天是星期二,你好不容易今天准点下班,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地址是人们在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请求报文之中,然后,服务器收到这个请求报文之后,根据协议规范解析报文,然后给你返回相应报文之后,你才能看到你想要看的网站页面。
(4)TCP的三次握手
TCP的中文名叫做传输控制协议,是供已经连接因特网的计算机进行通信的通信协议。TCP是互联网协议之一,也是主要的协议之一。
TCP/IP 定义了电子设备(比如计算机)如何连入因特网,以及数据如何在它们之间传输的标准。所以讨论这个问题,必须要涉及到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站,开始看起快乐肥宅剧。
写到这里,觉得用这句话结尾,应该是最好的:
哪有什么岁月静好,不过是有人在替你负重前行。