04 | HTTP世界全览(下):与HTTP相关的各种协议

小结

这次我介绍了与 HTTP 相关的各种协议,在这里简单小结一下今天的内容。

TCP/IP 是网络世界最常用的协议,HTTP 通常运行在 TCP/IP 提供的可靠传输基础上;
DNS 域名是 IP 地址的等价替代,需要用域名解析实现到 IP 地址的映射;
URI 是用来标记互联网上资源的一个名字,由“协议名 + 主机名 + 路径”构成,俗称 URL;
HTTPS 相当于“HTTP+SSL/TLS+TCP/IP”,为 HTTP 套了一个安全的外壳;
代理是 HTTP 传输过程中的“中转站”,可以实现缓存加速、负载均衡等功能。

1、四层模型:应用层、传输层、网际层、链接层
2、IP协议主要解决寻址和路由问题
3、ipv4,地址是四个用“.”分隔的数字,总数有2^32个,大约42亿个可以分配的地址
4、ipv6,地址是八个用“:”分隔的数字,总数有2^128个。
5、TCP协议位于IP协议之上,基于IP协议提供可靠的(数据不丢失)、字节流(数据完整)形式的通信,是HTTP协议得以实现的基础
6、域名系统:为了更好的标记不同国家或组织的主机,域名被设计成了一个有层次的结构
7、域名用“.”分隔成多个单词,级别从左到右逐级升高。
8、域名解析:将域名做一个转换,映射到它的真实IP
9、URI:统一资源标识符;URL:统一资源定位符
10、URI主要有三个基本部分构成:协议名、主机名、路径
11、HTTPS:运行在SSL/TLS协议上的HTTP
12 、SSL/TLS:建立在TCP/IP之上的负责加密通信的安全协议,是可靠的传输协议,可以被用作HTTP的下层
13、代理(Proxy):是HTTP协议中请求方和应答方中间的一个环节。既可以转发客户端的请求,也可以转发服务器的应答。
14、代理常见种类:匿名台历、透明代理、正向代理、反向代理
15、代理可以做的事:负载均衡、内容缓存、安全防护、数据处理。

在这里插入图片描述

问答

一个请求由DNS解析到指定的IP ,然后通过URI确定要访问哪些资源。最后通过 TCP/IP 进行路由寻址以及数据的传输。
但是一台机子上有多个应用 , 可能两个相同的应用运行在同一个主机上 ,有着两个不同的进程。 那么根据URI是指定从哪个进程里获取数据呢 。
这时候是不是根据端口号来判定 , 但是URI上并没有显式的让我们看出是哪个端口号 ??

作者回复: uri会有默认端口号,比如http默认是80,用tcp连接必须要同时指定ip地址和端口。
服务器进程在指定端口上监听,然后tcp就可以建立连接。

tcp与udp的丢包问题

可以对比一下udp,udp不保证数据完整,会丢包,使用udp的应用需要自己处理丢包,保证数据完整,而使用tcp的应用就不需要考虑这些。

在unix系统上http可以依赖一种进程间传输的机制Unix domain socket进行传输,这是因为满足了底层的可靠的传输。这句话意思是说,http不一定在tcp/ip之上进行传输?只要底层满足可靠传输的都可以?

作者回复: 当然了,这就是http灵活性的体现。

所以127.0.0.1, 172.17.0.1都是指unix domian socket进行的进程间通信是吗?

作者回复: 这些数字形式的都是ip地址,unix domian socket的形式是“unix:xxxx”。

http可以建立在不可靠传输UPD协议之上吗?好像谷歌的QUIC协议就是基于UDP协议。http对下层协议有什么强制的依赖?我看回答区有个同学说了,依赖于TCP/IP的拆包和封包。谢谢

作者回复: HTTP不能直接用udp,下层必须是可靠的,不能丢包。
新的http/3是建立在quic之上的,quic是可靠的传输协议。

TCP/IP

这个协议栈有四层,最上层是“应用层”,最下层是“链接层”,TCP 和 IP 则在中间:TCP 属于“传输层”,IP 属于“网际层”

现在我们使用的 IP 协议大多数是 v4 版,地址是四个用“.”分隔的数字,例如“192.168.0.1”,总共有 2^32,大约 42 亿个可以分配的地址。看上去好像很多,但互联网的快速发展让地址的分配管理很快就“捉襟见肘”。所以,就又出现了 v6 版,使用 8 组“:”分隔的数字作为地址,容量扩大了很多,有 2^128 个,在未来的几十年里应该是足够用了。

TCP 协议是“Transmission Control Protocol”的缩写,意思是“传输控制协议”,它位于 IP 协议之上,基于 IP 协议提供可靠的、字节流形式的通信,是 HTTP 协议得以实现的基础。

“可靠”是指保证数据不丢失,“字节流”是指保证数据完整,所以在 TCP 协议的两端可以如同操作文件一样访问传输的数据,就像是读写在一个密闭的管道里“流动”的字节。

URI/URL

有了 TCP/IP 和 DNS,是不是我们就可以任意访问网络上的资源了呢?

还不行,DNS 和 IP 地址只是标记了互联网上的主机,但主机上有那么多文本、图片、页面,到底要找哪一个呢?就像小明管理了一大堆文档,你怎么告诉他是哪个呢?

所以就出现了 URI(Uniform Resource Identifier),中文名称是 统一资源标识符,使用它就能够唯一地标记互联网上资源。

URI 另一个更常用的表现形式是 URL(Uniform Resource Locator), 统一资源定位符,也就是我们俗称的“网址”,它实际上是 URI 的一个子集,不过因为这两者几乎是相同的,差异不大,所以通常不会做严格的区分。

我就拿 Nginx 网站来举例,看一下 URI 是什么样子的。

http://nginx.org/en/download.html

HTTPS

HTTPS 就相当于这个比喻中的“火星文”,它的全称是“HTTP over SSL/TLS”,也就是运行在 SSL/TLS 协议上的 HTTP。

注意它的名字,这里是 SSL/TLS,而不是 TCP/IP,它是一个负责加密通信的安全协议,建立在 TCP/IP 之上,所以也是个可靠的传输协议,可以被用作 HTTP 的下层。

因为 HTTPS 相当于“HTTP+SSL/TLS+TCP/IP”,其中的“HTTP”和“TCP/IP”我们都已经明白了,只要再了解一下 SSL/TLS,HTTPS 也就能够轻松掌握。

SSL 的全称是“Secure Socket Layer”,由网景公司发明,当发展到 3.0 时被标准化,改名为 TLS,即“Transport Layer Security”,但由于历史的原因还是有很多人称之为 SSL/TLS,或者直接简称为 SSL。

SSL 使用了许多密码学最先进的研究成果,综合了对称加密、非对称加密、摘要算法、数字签名、数字证书等技术,能够在不安全的环境中为通信的双方创建出一个秘密的、安全的传输通道,为 HTTP 套上一副坚固的盔甲。

你可以在今后上网时留心看一下浏览器地址栏,如果有一个小锁头标志,那就表明网站启用了安全的 HTTPS 协议,而 URI 里的协议名,也从“http”变成了“https”。

代理

代理(Proxy)是 HTTP 协议中请求方和应答方中间的一个环节,作为“中转站”,既可以转发客户端的请求,也可以转发服务器的应答。

代理有很多的种类,常见的有:

匿名代理:完全“隐匿”了被代理的机器,外界看到的只是代理服务器;
透明代理:顾名思义,它在传输过程中是“透明开放”的,外界既知道代理,也知道客户端;
正向代理:靠近客户端,代表客户端向服务器发送请求;
反向代理:靠近服务器端,代表服务器响应客户端的请求;

上一讲提到的 CDN,实际上就是一种代理,它代替源站服务器响应客户端的请求,通常扮演着透明代理和反向代理的角色。

由于代理在传输过程中插入了一个“中间层”,所以可以在这个环节做很多有意思的事情,比如:

负载均衡:把访问请求均匀分散到多台机器,实现访问集群化;
内容缓存:暂存上下行的数据,减轻后端的压力;
安全防护:隐匿 IP, 使用 WAF 等工具抵御网络攻击,保护被代理的机器;
数据处理:提供压缩、加密等额外的功能。

关于 HTTP 的代理还有一个特殊的“代理协议”(proxy protocol),它由知名的代理软件 HAProxy 制订,但并不是 RFC 标准,我也会在之后的课程里专门讲解。

发布了62 篇原创文章 · 获赞 0 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_40720919/article/details/96592750
04