http、TCP/IP、https理解与简单延伸

2021-05-06  本文已影响0人  叶叶叶同学

HTTP

看到比较通俗又准确的描述应该是这个:HTTP是在计算机世界里专门为两点之间传输文字、图片、视频、音频等超文本数据的约定和规范

有个关键概念是:数据在两点间传输,但是中间允许有“中转”或者“接力”,只要不打扰基本的数据传输,就可以添加任意的额外功能,例如安全认证、数据压缩、编码转换等等,优化整个传输过程。所以才有http加一层验证,优化成https

类比的话,有点像我们一个新项目,要制定接口文档,制定接口请求方式和报文格式,这叫约定与规范。

具体约定了什么,有很多,前端比较关注大概就是:

  • 2xx开头的表示“成功处理了请求”,比如200
  • 3xx开头的表示“未完成请求,需要进一步操作”,比较常见的是304 Not Modified
  • 4xx开头的表示“请求错误,服务端无法处理”,比如404 Not Found, 403 Forbidden,401 Not Authorized
  • 5xx开头表示“服务器本身错误”,比如500 interal Server Error

TCP/IP

HTTP只是一个规范,而这个规范的具体apply,就需要往下看到TCP/IP层了,也就是"HTTP over TCP/IP"的概念

IP即Internet Protocol,也就是我们经常看到的“192.168.x.x”,解决寻址和路由问题,相当于地址、门牌号。使用IP地址这个概念定位互联网这张大网上每一台机器

这里可以扩展下IPv4和IPv6

  • IPv4,格式类似于"192.168.0.1"四组数字,每组数字取值范围是0~255,也就是256个数,2的8次方,那么四组,也就是2的32次方,这也就意味着IPv4的总共“门牌号”只有2的32次方个,不足以满足当前互联网地址要求(越来越多),所以才有IPv6(当然,IPv4能用这么久有原因了,其一是NAT(Network Address Translation,网络地址转换)技术,即一个公网地址供给一个小局域网使用,这样几十上百台电脑在同一个小局域网内也可以只需要一个公网地址了
  • IPv6,格式类似于“2001:0db8:85a3:08d3:1319:8a2e:0370:7344”,别蒙,解释下来就知道了。较之前的四组,改成分为了八组,每组包含4位数,而这四位数用十六进制,这也就是为什么会出现字母了,那么就可以进行计算,地址扩容后可以达到:2的4次方(即16,一位数)4次相乘(四位数),得出的数是2的16次方,有8组,8次相乘,即2的(16乘8)次方,2的128次方个地址。除了地址扩容,其优点和省略写法可以自行搜寻,此文推荐

讲完IP就到TCP了,即"Transmission Control Protocol",即也是一种协议标准,其实现,最著名就是“TCP三次握手”了。

要理解其内容,得先明了其目的,之所以有三次握手,是为了保证:报文传输给了对的人(点),且对应的人(点)接收、发送能力正常

目的知道了,来看内容。一个TCP报文如下


image.png

而在“握手”(即发包到接收的过程)过程里,需要特别关注的地方在

image.png

其实没必要硬背,了解场景和限制,就能很快理解

互联网是张很大的网,每个网的节点有可能是发送者也可能是接受者,而报文传输规范了报文的结构(比如有确认号seq、SYN位、ACK位等等),即报文传输结构基本是固定的,而同一时间段内,某一个节点有可能会接收到N条报文,那么就需要一套机制来保证:

然后回过头去想,就比较简单了

推荐结合阅读这篇文章这篇文章

内有TCP四次挥手流程,自行阅读

理解了TCP三次握手,就可以来看https了,其实就是加一层

image.png

而https验证阶段如下

image.png

推荐阅读

引申可以回答这么一个问题了:当浏览器键入地址,到渲染页面,中间发生了什么?

  1. 域名解析
  2. 发起TCP的三次握手
  3. 建立起TCP连接后发起http请求
  4. 服务器响应http请求,浏览器得到html代码
  5. 浏览器解析html代码,并请求html代码中的资源(css JavaScript 图片)
  6. 浏览器对页面进行渲染呈现

推荐阅读

上一篇下一篇

猜你喜欢

热点阅读