一、网络基础
网络的组成
网络是由主机、路由器和交换机等部分组成的。
网络的基本结构
网络的基本结构可以看成是网络的网络。一个小区内的所有主机和位于小区内的转发服务器形成了一个本地网络;各个小区的转发服务器和当地城市里负责与源服务器沟通的转发服务器之间形成了城域网;各个城市的转发服务器与源服务器又构成了一个广域网。
网络分层
计算机网络从上到下可以分为5层:应用层、传输层、网络层、数据链路层、物理层。也就是常说的TCP/IP五层协议模型。 物理层主要是复杂传输信息的物理实体,比如光纤这类东西。 实际上在网络间进行传输的是报文,一个报文由下面的部分组成。
- 数据链路头
- IP头
- TCP头
- HTTP头
- 报文主体
作为用户关心的只是传输的信息,也就是报文主体这一部分。从信息传输开始,报文主体经过每一个层都会被包装一次,附加上一些额外的信息,包装之后的信息会作为下一层的载荷。 当信息被传输到另一台计算机的时候,又会反向经历刚才的过程,将载荷与标头分开来,从而将信息展示到另一台计算机上。
简单来说,网络协议的存在类似于人类社会中的语言,语言让我们能够交流信息,网络协议则让计算机能够交流信息。标头和载荷是协议存在的基础。
二、web中的网络
报文的结构
以请求报文为例。请求报文的第一行称为请求行。主要由请求方法(GET/POST之类)、HTTP协议版本和资源URL组成。 请求行之后,第一个空行之前都是请求头的信息。第一个空行之后的则是载荷。 响应报文也是类似的,只是响应行有所不同。响应行主要由HTTP协议版本、状态码、状态信息描述三部分组成。
HTTP协议版本
HTTP协议本身在不断的改进。
HTTP1.0
HTTP1.0时代,客户端与服务端交流时,请求必须一个一个地发送,并且后一个请求必须等待前一个请求发送完毕并且响应也接收完毕的时候才能发送。并且每次发送一个请求都会建立TCP连接,响应完成后则关闭连接。显然,在产生大量网络资源请求的时候这样的方式就比较慢了。 通过建立多个TCP连接似乎可以解决这个问题,但是建立多个TCP连接的资源消耗较大,并且浏览器通常还会限制在同一个域名下的TCP连接数量。
HTTP1.1
HTTP1.1引入长链接,在我们没有显式的要求关闭TCP连接的时候,连接会一直存在,避免了TCP连接的重复建立导致的资源消耗,但是仍然没有解决队头阻塞问题。管线技术的引入虽然可以解决请求发送时的阻塞问题,但是响应依旧是顺序返回的,意义不大。
HTTP2.0
引入帧的概念,将一个请求分割为不同的帧并且打上对应的标识。由此实现多路复用。 有了标识之后,即使请求是乱序发送的,服务器可以根据标识组合出完整的请求信息。对于响应来说也一样,可以乱序发送。解决了HTTP层面的队头阻塞问题。HTTP2.0的特性:
- 多路复用
- 头部压缩
- 服务器推送
- 二进制分帧
HTTP3.0
TCP协议层面仍然存在阻塞,可靠的TCP协议存在丢包重传机制。所以传输过程中一个数据包丢失,后续的数据包即使接收到了也不会交给HTTP协议。所以HTTP3.0提出了QUIC协议用于替换原有的TCP和TLS协议,彻底解决队头阻塞,实现首次连接1RTT,二次连接0RTT的效果。
三、CDN
全称内容分发网络,之前其实已经见过很多次,最好的理解就是将CDN类比为京东本地仓库。你在黑龙江买东西,一般都会就近从本地仓库或者东北地区的仓库给你发货。 CDN会提前拷贝源服务器的静态资源,通过DNS劫持的方式,用户访问网站的时候一般都会访问就近的CDN服务器。现在服务器厂商好像也提供CDN服务,之前在阿里云买过CDN服务用来加速静态资源访问,确实挺快的。
据说使用CDN还具有防范DDoS攻击,掩盖源服务器IP以便保证源服务器安全的作用。但是我自己没见过实际的应用(找不到实习啊!!!),所以先记着。
四、WebSocket
101状态码,用于切换协议。
默认发送的请求是HTTP协议的,首先要告知服务器要切换协议。服务器响应101表示同意进行协议切换。后续客户端和服务器沟通就使用WebSocket协议了。
五、网络安全
HTTP协议的缺点
- 明文传输,你的信息在裸奔。
- 信息完整性,不能保证你收到的信息就是对方想传给你的。
- 不能确定信息传输双方的身份,你没法知道跟你沟通的到底是个漂亮小姐姐还是个抠脚大汉。
基于此引入了TLS加密,也就是后面常用的HTTPS协议。
1.信息加密
为了保证信息安全,需要对信息进行加密传输。这里采用了混合加密的方式。信息传输双方首先通过非对称加密的方式商量出一个秘钥,后面使用这个秘钥进行对称加密传输信息。 这个混合加密的过程可以查看《图解HTTP》里面的解释。
2.数字签名
数字签名可以防止信息被篡改。基于摘要算法和传输内容生成一个哈希值,对这个哈希值进行私钥加密,另一方收到信息后也使用相同的摘要算法生成哈希值,对比解密得到的哈希值。两者一致则可以保证数据不被篡改。
3.数字证书
数字证书可以验证传输信息的双方的身份。服务器会向专业的CA机构申请数字证书,CA机构验证后会使用自己的私钥进行加密,颁发数字证书。
客户端和服务器沟通时,服务端会把服务器的公钥和数字证书发给客户端,客户端根据内置的数字证书的私钥进行解密,验证数字证书的有效性,确认了服务器的身份后可以开始进行信息交流。
小结
跟着课程又把之前看的网络相关的知识复习了一遍。后续再看看《图解HTPP》《网络是怎样连接的》的这两本书吧,《HTTP权威指南》真的太难了,看不懂啊!!!