在极客时间上买的HTTP课程,此系列就是学习课程后的知识点总结篇。想要详细了解的话推荐去买课程哟,讲的很通俗易懂
01 - HTTP的前世今生
- HTTP/0.9:(1989年)Tim Berners-Lee发表一篇论文奠定了基础,是个简单的文本协议,只能获取文本资源
- HTTP/1.0:(1996年)确立了大部分现在使用的技术,但它不是正式标准
- HTTP/1.1:(1999年)是目前互联网上使用最广泛的协议,功能也非常完善
- HTTP/2:(2015年)基于Google的SPDY协议,注重性能改善,但还未普及
- HTTP/3:(2018年进入标准化制定阶段)基于Google的QUIC协议,是将来的发展方向
02 - HTTP是什么?HTTP不是什么?
HTTP(超文本传输协议)是什么?
- 首先,HTTP是一个协议,是一个用在计算机世界里的协议。它使用计算机能够理解的语言确立了一种计算机之间交流通信的规范,以及相关的各种控制和错误处理方式。
- HTTP是一个传输协议,是一个双向协议,即HTTP是一个在计算机世界里专门用来在两点之间传输数据的约定和规范
- HTTP是“超文本”的传输协议,所谓“超文本”就是超越了普通文本的文本,它是文字、图片、音频和视频等的混合体,最关键的是含有“超链接”。
总的来说,HTTP是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。
HTTP不是什么?
- 因为HTTP是一个协议,所以它不存在“单独的实体”。它不是浏览器、手机APP那样的应用程序,也不是Windows、Linux那样的操作系统,更不是Apache、Nginx、Tomcat那样的web服务器。
- HTTP不是互联网。
- HTTP不是编程语言。
- HTTP不是HTML。
- HTTP不是一个孤立的协议。
03 - 与HTTP相关的各种概念
04 - 与HTTP相关的各种协议
05 - TCP/IP四层协议&OSI七层协议
TCP/IP协议总共四层,层次顺序由下往上:
1、第一层叫“链接层”(link layer),负责在以太网、WiFi 这样的底层网络上发送原始数据包,工作在网卡这个层次,使用 MAC 地址来标记网络上的设备,所以有时候也叫 MAC 层。
2、第二层叫“网际层”或者“网络互连层”(internet layer),IP 协议就处在这一层。因为 IP 协议定义了“IP 地址”的概念,所以就可以在“链接层”的基础上,用 IP 地址取代 MAC 地址,把许许多多的局域网、广域网连接成一个虚拟的巨大网络,在这个网络里找设备时只要把 IP 地址再“翻译”成 MAC 地址就可以了。
3、第三层叫“传输层”(transport layer),这个层次协议的职责是保证数据在 IP 地址标记的两点之间“可靠”地传输,是 TCP 协议工作的层次,另外还有它的一个“小伙伴”UDP。TCP 是一个有状态的协议,需要先与对方建立连接然后才能发送数据,而且保证数据不丢失不重复。而 UDP 则比较简单,它无状态,不用事先建立连接就可以任意发送数据,但不保证数据一定会发到对方。两个协议的另一个重要区别在于数据的形式。TCP 的数据是连续的“字节流”,有先后顺序,而 UDP 则是分散的小数据包,是顺序发,乱序收。
4、协议栈的第四层叫“应用层”(application layer),由于下面的三层把基础打得非常好,所以在这一层就“百花齐放”了,有各种面向具体应用的协议。例如 Telnet、SSH、FTP、SMTP 等等,当然还有我们的 HTTP。
HTTP 利用 TCP/IP 协议栈逐层打包再拆包,实现了数据传输,但下面的细节并不可见。
OSI,全称是“开放式系统互联通信参考模型”(Open System Interconnection Reference Model)。
TCP/IP 发明于 1970 年代,当时除了它还有很多其他的网络协议,整个网络世界比较混乱。这个时候国际标准组织(ISO)注意到了这种现象,感觉“野路子”太多,就想要来个“大一统”。于是设计出了一个新的网络分层模型,想用这个新框架来统一既存的各种网络协议。OSI 模型分成了七层,部分层次与 TCP/IP 很像, 从下到上分别是:
1、第一层:物理层,网络的物理形式,例如电缆、光纤、网卡、集线器等等;
2、第二层:数据链路层,它基本相当于 TCP/IP 的链接层;
3、第三层:网络层,相当于 TCP/IP 里的网际层;
4、第四层:传输层,相当于 TCP/IP 里的传输层;
5、第五层:会话层,维护网络中的连接状态,即保持会话和同步;
6、第六层:表示层,把数据转换为合适、可理解的语法和语义;
7、第七层:应用层,面向具体的应用传输数据。
有一个辨别四层和七层比较好的(但不是绝对的)小窍门,“两个凡是”:凡是由操作系统负责处理的就是四层或四层以下,否则,凡是需要由应用程序(也就是你自己写代码)负责处理的就是七层。
06 - 域名里有哪些门道?
域名的形式
域名是一个有层次的结构,是一串用“.”分隔的多个单词,最右边的被称为“顶级域名”,然后是“二级域名”,层级关系向左依次降低。最左边的是主机名,通常用来表明主机的用途
例如:极客时间的域名“time.geekbang.org”,这里的“org”就是顶级域名,“geekbang”是二级域名,“time”则是主机名。使用这个域名,DNS 就会把它转换成相应的 IP 地址,你就可以访问极客时间的网站了。
2.域名的解析
就像 IP 地址必须转换成 MAC 地址才能访问主机一样,域名也必须要转换成 IP 地址,这个过程就是“域名解析”
==DNS 的核心系统是一个三层的树状、分布式服务==,基本对应域名的结构:
1、根域名服务器(Root DNS Server):管理顶级域名服务器,返回“com”“net”“cn”等顶级域名服务器的 IP 地址;
2、顶级域名服务器(Top-level DNS Server):管理各自域名下的权威域名服务器,比如 com 顶级域名服务器可以返回 apple.com 域名服务器的 IP 地址;
3、权威域名服务器(Authoritative DNS Server):管理自己域名下主机的 IP 地址,比如 apple.com 权威域名服务器可以返回 www.apple.com 的 IP 地址。
有了这个系统以后,任何一个域名都可以在这个树形结构里从顶至下进行查询,就好像是把域名从右到左顺序走了一遍,最终就获得了域名对应的 IP 地址。例如,你要访问“www.apple.com”,就要进行下面的三次查询:访问根域名服务器,它会告诉你“com”顶级域名服务器的地址;访问“com”顶级域名服务器,它再告诉你“apple.com”域名服务器的地址;最后访问“apple.com”域名服务器,就得到了“www.apple.com”的地址。
在核心 DNS 系统之外,还有两种手段用来减轻域名解析的压力,并且能够更快地获取结果,基本思路就是“缓存”。
首先,许多大公司、网络运行商都会建立自己的 DNS 服务器,作为用户 DNS 查询的代理,代替用户访问核心 DNS 系统。这些“野生”服务器被称为“非权威域名服务器”,可以缓存之前的查询结果,如果已经有了记录,就无需再向根服务器发起查询,直接返回对应的 IP 地址。
其次,操作系统里也会对 DNS 解析结果做缓存,如果你之前访问过“www.apple.com”,那么下一次在浏览器里再输入这个网址的时候就不会再跑到 DNS 那里去问了,直接在操作系统里就可以拿到 IP 地址。
另外,操作系统里还有一个特殊的“主机映射”文件,通常是一个可编辑的文本,在 Linux 里是“/etc/hosts”,在 Windows 里是“C:\WINDOWS\system32\drivers\etc\hosts”,如果操作系统在缓存里找不到 DNS 记录,就会找这个文件。
有了上面的“野生”DNS 服务器、操作系统缓存和 hosts 文件后,很多域名解析的工作就都不用“跋山涉水”了,直接在本地或本机就能解决,不仅方便了用户,也减轻了各级 DNS 服务器的压力,效率就大大提升了。
Q&A
Q:如何理解HTTP(超文本传输协议)?
Q:你觉得CDN在对待浏览器和爬虫时会有差异吗?为什么?
A:不会有差异,因为爬虫本身也是对资源的访问,且CDN对爬虫也不是百分百能识别的。
Q:你怎么理解WebService与Web Server这两个非常相似的词?
A:WebService是网络服务实体,而Web Server是网络服务器。后者的存在是为了承载前者。
Q:DNS与URI有什么关系?
A:DNS是将域名解析出真实IP地址的系统;URI是统一资源标识符,标定了客户端需要访问的资源所处的位置,如果URI中的主机名使用域名,则需要使用DNS来讲域名解析为IP。
Q: 你能用自己的话解释下“二层转发”“三层路由”吗?
A:二层转发指的是设备工作在链路层,帧在经过交换机设备时,检查帧的头部信息,拿到目标mac地址,进行本地转发和广播。三层路由指的是设备工作在网络层,报文经过有路由功能的设备时,设备分析报文中的头部信息,拿到ip地址,根据网段范围,进行本地转发或选择下一个网关。
Q: 你认为DNS协议位于哪一层协议呢? A:应用层
Q:你认为CDN工作在哪一层呢?A:应用层
Q:在浏览器地址栏里随便输入一个不存在的域名,比如就叫“www.不存在.com”,试着解释一下它的DNS解析过程。
A:1、检查本地dns缓存是否存在解析"www.不存在.com"域名的ip ;2、如果没有找到继续查找本地hosts文件内是否有对应的固定记录;3、如果hosts中还是没有那就根据本地网卡被分配的 dns server ip 来进行解析,dns server ip 一般是“非官方”的ip,比如谷歌的“8.8.8.8”,本身它也会对查找的域名解析结果进行缓存,如果它没有缓存或者缓存失效,则先去顶级域名服务器“com”去查找“不存在.com”的域名服务器ip,结果发现不存在,于是直接返回告诉浏览器域名解析错误,当然这两次查找过程是基于udp协议
Q:如果因为某些原因,DNS失效或者出错了,会出现什么后果?A:无法访问,提示“无法访问此网站,找不到www.XXX.com的服务器IP地址”