框架图
重点来说说,与HTTP相关协议,TCP/IP, DNS, URI, HTTPS
细分
TCP/IP
是目前网络世界事实上的标准通信协议,他是一系列网络通信协议的统称,最核心的两个协议是TCP和IP,其他的还有UDP、ICMP、ARP等,共同构成了一个复杂但有层次的协议栈
协议栈有四层,最上层是应用层,最下层是链接层,TCP和IP在中间,TCP属于传输层,IP属于网际层。协议的层级关系,相当重要。
IP协议
为Internet Protocol,主要目的是解决寻址和路由问题,以及如何在两点之间传送数据包。IP协议使用IP地址的概念,来定位互联网上的每一台计算机。我们现在使用的IP协议v4版,地址是用四个"."来做分隔(192.168.01),总共有2^32,大约有42亿个可以分配的地址。但是现在不够用了。换成了v6版,v5版只有实验室在使用。
v6版,使用8组 ":"分隔的数字作为地址,容量扩大了很多,有2^128个
TCP协议
为Transmission Control Protocol,传输控制协议,位于IP协议之上,基于IP协议提供可靠的、字节流形式的通信,是HTTP协议得以实现的基础。
“可靠”是指保证数据不丢失,“字节流”是指保证数据完整。所以TCP协议里,两端可以如同操作文件一样,访问传输的数据,就像是读写在一个密闭的管道里“流动的”字节。
补充:在第二讲里,HTTP是一个传输协议,但是他不关系寻址、路由、数据完整性等传输细节,而要求这些工作都由下层来处理。因为互联网上最流行的TCP/IP协议,而他刚好满足HTTP的要求,所以互联网上的HTTP协议就运行在了TCP/IP上,HTTP over TCP/IP。
DNS
在TCP/IP协议中,使用IP地址来标识计算机,数字形式的地址对于计算机来说相当方便的,但是对于人类来说却是特别难。
所以域名系统(Domain Name System)出现了,用有意义的名字作为IP地址的等价替代。在DNS中,域名又可以叫做主机名(Host),为了更好地标记不同国家或组织的主机,让名字更好记,所以被设计成了一个有层次的结构。
域名
域名用“.”分隔成多个单词,级别从左到右逐级升高,最右边的被称为“顶级域名”,比如,com(商业公司),edu(教育机构),cn/uk(国家)...但想要使用TCP/IP协议来通信,就要使用IP地址,所以需要把域名做一个转换,映射到真实的IP,这就是所谓的域名解析。目前,全世界有13组根DNS服务器,下面再有许多的顶级DNS,权威DNS和更小的本地DNS,逐层递归地实现域名查询。
HTTP协议里,并没有明确要求,必须要使用DNS,但实际上为了方便访问互联网上的Web服务器,通常都会是用DNS来定位或标记主机名,间接地把DNS与HTTP绑定在了一起。
URI/URL
有了TCP/IP和DNS,是不是我们就可以任意访问网络上的资源了?并不行
DNS和IP地址,只是标记了互联网上的主机,但主机上有那么多文本、图片、页面,到底要找哪个?所以就出现了URI(Uniform Resource Identfier),中文名是统一资源标识符,使用他能够唯一地标记互联网上的资源。
URI有个更常用的表现形式是URL(Uniform Resource Locator),统一资源定位符,也就是网址,实际上是URI的一个子集,不过两者几乎是相同的,所以差异不大。
比如如下:
...
http://nginx.org/en/download.html
...
可以看到URI的三个基本部分:
- 协议名:即访问该资源应当使用的协议,在这里是HTTP
- 主机名:即互联网上主机的标记,可以是域名或IP地址,在这里是nginx.org
- 路径:即资源在主机上的位置,使用"/"分隔多级目录,在这里是,/en/download.html。
HTTPS
在TCP/IP,DNS和URI的加持下,HTTP协议可以自由地穿梭在互联网世界里,顺利地访问任意网页了,但是...可能会有恶意攻击的内容。所以,在通信的时候,可能需要进行一次加密。
HTTPS就是干这个事情,全称,HTTP over SSL/TLS,也就是运行在SSL/TLS协议上的HTTP。
SSL/TLS
SSL/TLS是一个负责加密通信的安全协议,建立在TCP/IP之上,所以也是个可靠的传输协议,属于HTTP的下层。
SSL的全称是“Secure Socket Layer”,由网景公司发明,当发展到3.0时,被标准化,改名为TLS,“Transport Layer Security”,但是还是被称作SSL/TLS
SSL使用了许多密码学里面最先进的研究成果,综合了对称加密、非对称加密、摘要算法、数字签名、数字证书等技术,能够在不安全的环境中,为通信的双方创建出一个秘密的、安全的传输通道。
代理
代理(proxy)是HTTP协议中请求方和应答方中间的一个环节,作为中转站,可以转发客户端的请求,也可以转发服务器的应答。
代理有很多种类:
- 匿名代理:完全隐匿了被代理的机器,外界只能看到代理服务器;
- 透明代理:在传输过程中是“透明开放”的,外界既知道代理,也知道客户端;
- 正向代理:靠近客户端,代表客户端向服务器发送请求;
- 反向代理:靠近服务器端,代表服务器响应客户端的请求;
第二节里面说到的CDN,其实就是一种代理,他代替源站服务器响应客户端的请求,通常扮演着,透明代理和反向代理的角色。
由于代理在传输过程中插入了一个中间层,所以在这个环节里就可以干很多事情了:
- 负载均衡:把访问请求均匀分散到多台机器,实现访问集群化;
- 内容缓存:暂存上下行的数据,减轻后端的压力;
- 安全防护:隐匿IP,使用WAF等工具抵御网络攻击,保护被代理的机器;
- 数据处理:提供压缩、加密等额外的功能。
**后期说:关于HTTP的代理,还有一种,代理协议(proxy protocol),它由知名的代理软件HAProxy制定,但并不是RFC标准。
小结
- TCP/IP是网络世界最常用的协议,HTTP通常运行在TCP/IP提供的可靠传输基础上;
- DNS域名是IP地址的等价替代,需要用域名解析实现到IP地址的映射;
- URI是用来标记互联网上资源的一个名字,由“协议名+主机名+路径”构成,俗称URL;
- HTTPS相当于“HTTP over SSL/TLS + TCP/IP”,为HTTP套了一个安全的外壳;
- 代理是HTTP传输过程中的“中转站”,可以实现缓存加速、负载均衡等功能