admin 管理员组

文章数量: 887016

程序员一定被问过这个问题:

我在浏览器输入一个网址,后面发生了什么?

有人要说了,这么老的问题也拿出来说:

就是HTTP协议呀,服务端也使用HTTP协议接收,我们就是这么做的,很简单。。。

上面的回答可能是很多工程师真实的工作体验,现在的技术领域分工高度发达,我们引入一个库就可以高效地开发应用了,完全不需要也没时间去了解底层发生了什么。

那么底层究竟发生了什么呢?事实上这个老问题真的不算简单,可延伸的幅度非常宽广,我们按照下面几个问题慢慢展开:

问题1: 生成HTTP报文后,怎么发出去的?
问题2: 网络为啥要分层呢?我直接发不就行了吗?
问题3: 怎么找到我要访问的服务器呢?
问题4: 我的数据丢了怎么办?
问题5:不是还有个Socket吗?我们用的是Socket长连接,它是第几层啊?
问题6: 我们用的是HTTPS,它和HTTP一样属于应用层吗?

HTTP(Hyper Text Transport Protocol)全称是超文本(扩展的文本)传输协议,HTTP协议诞生的目的就是传输HTML文本,后面逐渐迭代出HTTP/1.0、HTTP/1.1、HTTP/2 和 HTTP/3这些版本,迭代带来的是更好的性能和更加丰富的能力。

TIP: 协议(Ptotocol): 在计算机领域,理解为双方都要遵守的约定。

本文会高频地提到“协议”这个词(如HTTP、TCP、UDP等),为了解决不同场景的问题,计算机领域的前辈们制定了大量的协议,这些协议的凝结着解决问题的智慧。

先看一下HTTP协议的报文格式:

HTTP协议的报文格式

如果你有幸参与过HTTP服务的初期搭建,可能做过一些平时不需要关注的工作: 比如HTTP的版本选择、Header的生成和解析等,后面的同事运气足够好的话,常常会不知道这些东西的存在。

现在你应该知道了,一次HTTP请求,就是以上面的报文格式发出请求和收到响应的过程。

好的,文章结束了,告辞!


对这个解释有位同学非常不满意,甚至有点想骂人(能讲点我不知道的吗),然后抛出一个问题:

问题1: 生成HTTP报文后,怎么发出去的?

如果问老程序员,他会说发给了下层,下面还有好几层。。。

网络的分层模型

与很多大型项目解决方案类似,网络的基本处理框架也是分层。每一层负责自己的事情,处理完成后丢给上层(接收场景)或下层(发送场景)。越下层能力越通用。我们以实际使用的TCP/IP模型为例,如下图。

TCP/IP网络模型

如上图所示,TCP/IP的模型分为5层,从下到上依次是: 物理层、MAC层、IP层、传输层、应用层。我们用到的HTTP协议就属于应用层。

很多人会把IP层叫网络层,把MAC层叫数据链路层,网络层和数据链路层的说法来自OSI模型(有7层),当然没必要太较真,了解就好。

基本模型了解后,我们就知道了,生成HTTP报文后,会发送到下面的传输层,然后一层一层地向下传输。那么一次HTTP请求的过程大概就是。。。这样:

好的,文章结束了,告辞!

本文标签: 经历了 http