当你在搜索框按下enter的一刹那发生了什么?

当你在搜索框按下enter的一刹那发生了什么?

当你打开Google浏览器,输入www.baidu.com后按下enter,一秒不到的时间百度的搜索页面就呈现眼前。
也许有时你会产生疑惑,这背后的运行机制到底是怎么样的,我希望能够借助这篇文章帮你解答这个问题。

现在,让我们开始向网络通信的世界迈出第一步。


1.DNS服务器

类似http://www.baidu.com 这样的网址被称为URL(统一资源定位符)。其中http是协议名称,www是网络服务标识,baidu.com是域名。

要找资源必然要先找有该资源的地方,域名就是这个地方的代号,这个地方被人们称为服务器(一种专门用于响应服务请求,并处理的计算机)。区分计算机的逻辑地址被称为IP,一串由四位0-255组成的数字。

想要找到一台联网的计算机,只需要知道它的IP地址即可。那域名与IP地址又是什么关系?这就如同机器语言与高级语言的区别,一种给计算机看,一种给人看。所以如同高级语言要运行需要编译一般,域名也要通过某个过程转变为IP地址,这个过程叫域名解析。域名解析依靠DNS服务器来完成,这个服务器如同电话本记录着每个域名对应的IP地址。

既然我们想要发送数据需要知道IP地址,那么我们又如何得知DNS服务器的IP地址呢?在Windows电脑可以通过控制面板查询网络信息,其中显示的信息如下图

网络信息

图1.Windows电脑上的网络信息

所以,我们要想得到www.baidu.com的页面必须先将baidu.com发送给DNS服务器,再从DNS服务器上获得对应的域名。那么数据又是怎样从一台计算机发送到另一台计算机的呢?

2.TCP/IP协议族

这时,TCP/IP协议族就开始发挥作用。依照抽象的不同,人们把该协议分为四层,由上至下分别为:

  • 应用层
  • 传输层
  • 网络层
  • 链路层。

HTTP协议处在应用层,该层专门向用户提供应用服务时通信的活动。广为人知的TCP和UDP位于传输层,该层提供处于网络连接中的两台计算机之间的数据传输。网络层存在IP协议,决定了在网络上流动数据包的运输路线。链路层是处理网络连接的硬件设备。

HTTP协议接受到浏览器需要www.baidu.com页面的请求后,将该请求按照固定的格式转成一个数据包,再发送给传输层,传输层给数据添加一定标识表明传输的方式,添加源端口和目标端口(端口犹如邮箱,数据需要经过端口才能被接收)。接着走到了网络层,IP协议给数据包首尾添加源IP和目标IP后传给了链路层。链路层添加源Mac地址和目标Mac地址。这一层层的发送前的准备被人们称为封装。

你可能疑惑既然已经有了IP地址为什么还要Mac地址?你可以把IP地址想象成一个人的住址,Mac地址想象成一个人的身份证号,IP地址是逻辑地址,能够改变,Mac地址是网卡上的序列号,难改变。

如果数据到了目标服务器,目标服务器从链路层开始一层层拆包,如果发现不是发送给自己的数据立马丢弃。

简化的流程可以见下图
封装和拆包过程

图2封装与拆包过程

3.路由器

现在,我们已经知道数据是以什么样的方式从计算机发送的,可是要想抵达另一台计算机,我们需要某些设备将这两台计算机连接起来。这样的连接设备主要有四种:网线、集线器、交换机、路由器。

为简单起见,我们只需要知道网线和路由器是如何工作的即可。网线传输的是数据信号而非电流,所以一根网线最多只能使两台计算机通信。为了解决这个问题,先后出现了集线器、交换机、路由器。路由器是能够转发数据使两个或两个以上的网络能够通信的设备。图1中出现的默认网关即路由器。

当一台计算机发送数据时,如果目标计算机的IP地址与之不处于同一个网段,它将把数据发送给默认网关,此时数据包上的目标Mac地址是默认网关的网卡序列。默认网关再将数据进行转发,发送时会将Mac地址改变为下一台计算机的Mac地址。在这转发过程中,目标IP始终没有变化。

我们知道数据的收发不可能凭空进行,这一层层的转发又是依赖什么设备?因为电话基础设施已经把世界连接起来,我们需要一种设备能够把网络信息变成电话设施可以处理的信息,这个设备叫做调制解调器。

当然,转发数据并非是你搭建了一个路由器就可以开始的,这里还需要一个能够管理路由器的网络设施,即 互联网服务提供商(ISP)。

通过上述知识,我们可以得知一台计算机发送数据给不在同一网段的计算机,它需要将数据发送给默认网关,再经由调制解调器将网络信息转换为模拟信号传输给ISP,ISP将这些信号传输给相应的路由器进行下一步收发。其中IP协议决定了数据传输路径即从一台路由器怎么知道传输的下一台路由器。

4.TCP三次握手

终于网络传输的曙光就在眼前,我们的数据发送给了DNS服务器,可是又一个问题出现了——我们怎么知道数据已经成功发送了。放心,此时传输层的TCP协议展现了它的威力。TCP协议利用发送应答、超时重传、错误校验、流量控制实现了传输的可靠性。

你必须要知道的一点是TCP的三次握手,这保证了收发双方都能够接收到数据。如果一台计算机与另一台计算机想要通信,它不会立马发送数据,而是先发送一个标记为syn的数据,目标计算机对该数据进行处理后标记为ack,与其产生的syn数据一起发送回去。源计算机检查ack的值是否符合预期,如果符合预期,对发送来的syn数据进行处理标记为ack后再发送给目标计算机。目标计算机检查ack的值是否符合预期,如果符合预期就可以进入下一步数据收发环节。

客户端 服务器 TCP三次握手 SYN ACK+SYN ACK request response loop [process] 客户端 服务器

那想要与目标计算机断开通信呢?此时需要TCP的四次挥手,因为这篇文章关注的是开始通信的过程,对此不多加赘述。

5.总结

现在,想必你的困惑已经得到了解答。

当你按下enter时,浏览器将请求发给http协议,再一层层发送封装,到链路层通过网线亦或调制解调器将数据发送给路由器,路由器再经IP协议确定传输路线,将数据转发给ISP,ISP控制的路由器再层层转发终于到了DNS服务器。此时TCP三次握手,确定收发双方都已经做好收发数据的准备,DNS服务器再将baidu.com的对应IP和端口发送回来。于是再经过上述过程,baidu服务器返回请求的资源,终于baidu的页面呈现了出来。

注意,这篇文章只讲述了HTTP协议下的通信,HTTPS通信过程与之存在差异。

如果想要了解HTTPS与HTTP之间的区别可以参见《HTTPS 详解》

如有错误,欢迎指正,最后贴下参考资料:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值