课程重点
- 网络结构
- TCP/UDP
- HTTP1、2、3的关系
- WebSocket
- CDN运行的基本原理
- 网络安全的最基本原则
课程内容
网络基础
在课程里,利用蟹堡王为例子来讲解网络结构。
其实简单来说就好比我们现实生活中可以看到很多店在全国各个地方都有自己的分店。
那么分店和总部要有通信,来了解分店的需求和销售情况等数据。我们可以把这个内容整理成表格进行转发
以蟹堡王为例:
那么分店要开在哪,哪几个分店以哪个分店为主也有讲究。
如图,若按左图那么总的通信成本要更高,所以为了减少成本,可以依照右图,杭州分店将信息发给上海再由上海转发给杭州。即以上海分店作为转发点。(这样可以减少很多的重复性)。
其实这样分布完分店后形成一个网络,和我们要学的计算机网络非常相似:
我们用路由器作为转发点来给服务器转发信息。
由下图,可以看到家庭路由器都转发给ISP路由再转发给服务器。
该图是简化过的,现实中要复杂得多
浅浅总结一下:
网络组成部分:
- 主机:客户端和服务端
- 路由器
- 网络协议
其中:
1.主机负责提供或者接受信息
2.路由器负责转发主机之间的信息
3.网络协议负责统一格式,方便解码和编码。
网络结构其实就是网络的网络
回到上面的例子就是:
城市范围的网络称之为城域网,城域网所处的网络便可称为广域网。
信息交换的方式有两种:电路交换&分组交换。
电路交换有三个阶段:建立连接、数据传输、释放连接。
- 优点:传输速度快、高效。实时。
- 缺点:资源利用率低。新建连接需要占据一定的时间,甚至比通话的时间还长。
分组交换和电路交换的区别在于不会建立连接,不会占用资源。
在计算机网络中常用的都是分组交换。
网络分层
但是快递员关心送哪,卡车司机关心路线,高速公路关心路况和违规情况...
每个角色都有自己关心和不关心的事情。这种情况在计算机网络中一样存在。
计算机网络分为物理层、数据链路层、网络层、传输层、应用层
具体点的话:
计算机网络体系大致分为三种:OSI七层模型、TCP/IP四层模型和五层模型。一般面试的时候考察比较多的是五层模型。
协议(这部分是一个面试考察重点)
协议的存在依赖于连接
协议定义了在两个或多个通信实体之间交换的报文格式和顺序,以及报文发送和/或接受一条报文或其他事件所采取的动作。
- [ ] 1. HTTP协议
1.1 HTTP协议的特点?
- HTTP允许传输任意类型的数据。传输的类型由Content-Type加以标记。
- 无状态。对于客户端每次发送的请求,服务器都认为是一个新的请求,上一次会话和下一次会话之间没有联系。
- 支持客户端/服务器模式。
1.2 HTTP协议中共定义了八种方法来表示对Request-URI指定的资源的不同操作方式(HTTP的八种请求方式)
- [ ] 2. TCP协议:
2.1 TCP的特点:
- TCP是面向连接的运输层协议。
- 点对点,每一条TCP连接只能有两个端点。
- TCP提供可靠交付的服务。
- TCP提供全双工通信。
- 面向字节流。
2.2
小结一下:
Web中的网络
如图,红色部分是请求,蓝色部分是响应。
红色部分第一行包括请求方法,请求路径和版本。跟在后面的是头部。
响应的第一行也称为状态行。
详情如下:
HTTP报文格式(面试内容)
HTTP请求由请求行、请求头部、空行和请求体四个部分组成。
- 请求行:包括请求方法,访问的资源URL,使用的HTTP版本。
GET和POST是最常见的HTTP方法,除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE。 - 请求头:格式为“属性名:属性值”,服务端根据请求头获取客户端的信息,主要有
cookie、host、connection、accept-language、accept-encoding、user-agent。 - 请求体:用户的请求数据如用户名,密码等。
请求报文示例:
POST /xxx HTTP/1.1 请求行
Accept:image/gif.image/jpeg, 请求头部
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
Accept-Encoding:gzip,deflate
username=dabin 请求体
HTTP响应也由四个部分组成,分别是:状态行、响应头、空行和响应体。
- 状态行:协议版本,状态码及状态描述。
- 响应头:响应头字段主要有
connection、content-type、content-encoding、content-length、set-cookie、Last-Modified,、Cache-Control、Expires。 - 响应体:服务器返回给客户端的内容。
响应报文示例:
HTTP/1.1 200 OK
Server:Apache Tomcat/5.0.12
Date:Mon,6Oct2003 13:23:42 GMT
Content-Length:112
<html>
<body>响应体</body>
</html>
HTTP1、2、3的关系
HTTP2将多个请求拆分到帧里面,每一个帧可以携带来自不同HTTP请求中的数据。
HTTP2帧的结构:
HTTP2中帧带来的额外好处:
HTTP3:QUIC(新的协议)
HTTP协议之外的影响WEB性能的因素的几个解决方案
前端性能优化-使用内容分发网络CDN
课程内并未详细讲解,不过我觉得有几篇可以做参考:
- [ ] 图解|什么是内容分发网络(cdn) - 掘金 (juejin.cn)
- [ ] 【前端词典】CDN 带来这些性能优化 - 掘金 (juejin.cn)
- [ ] 漫话:如何给女朋友解释什么是CDN? - 掘金 (juejin.cn)
WebSocket-应用层通信协议
WebSocket是一个持久化的协议,它是伴随H5而出的协议,用来解决http不支持持久化连接的问题。
WebSocket是由HTTP升级而来
WebSocket和HTTP:
- [ ] 刨根问底 HTTP 和 WebSocket 协议 - 掘金 (juejin.cn)
- [ ] 刨根问底HTTP和WebSocket协议(二) - 掘金 (juejin.cn)
- [ ] 刨根问底 HTTP 和 WebSocket 协议 (三) - 掘金 (juejin.cn)
网络安全
三要素:
- 机密性:攻击者无法获取通信内容
- 完整性:攻击者对内容进行篡改时能被发现
- 身份验证:攻击者无法伪装成通信双方的任意一方与另一方通信
一些技术和约定的介绍:
对称加密和非对称加密
他们的区别就在于使用的密钥是一个还是一对。
这个也是一个面试考察重点
密码散列函数(哈希函数)
机密性
怎么在不安全的信道交换秘密信息?
完整性和身份验证
如何实现上述的三个特性?
我们需要同时用到:对称加密和非对称加密以及密码散列函数。
如何实现机密性
机密性中最重要的一环是:如何在不安全的信道上协商出一个除了双方以外没人知道的一个秘密信息。
如何实现完整性
密码散列函数可以将不定长的输入,输出为定长的哈希值
所以想要实现完整性,通信双方需要先有秘密信息。
如何实现身份验证
数字签名的制作过程:
- CA使用证书签名算法对证书内容进行hash运算。
- 对hash后的值用CA的私钥加密,得到数字签名。
小结一下:
以上提到的面试考察内容汇总
TCP/IP五层模型
应用层、传输层、网络层、数据链路层、物理层。
- 应用层:为应用程序提供交互服务。在互联网中的应用层协议很多,如域名系统DNS、HTTP协议、SMTP协议等。
- 传输层:负责向两台主机进程之间的通信提供数据传输服务。传输层的协议主要有传输控制协议TCP和用户数据协议UDP。
- 网络层:选择合适的路由和交换结点,确保数据及时传送。主要包括IP协议。
- 数据链路层:在两个相邻节点之间传送数据时,数据链路层将网络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送帧。
- 物理层:实现相邻节点间比特流的透明传输,尽可能屏蔽传输介质和物理设备的差异。
ISO七层模型
是国际标准化组织(International Organization for Standardization)制定的一个用于计算机或通信系统间互联的标准体系。
- 应用层:网络服务与最终用户的一个接口,常见的协议有:HTTP FTP SMTP SNMP DNS.
- 表示层:数据的表示、安全、压缩。,确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。
- 会话层:建立、管理、终止会话,对应主机进程,指本地主机与远程主机正在进行的会话.
- 传输层:定义传输数据的协议端口号,以及流控和差错校验,协议有TCP UDP.
- 网络层:进行逻辑地址寻址,实现不同网络之间的路径选择,协议有ICMP IGMP IP等.
- 数据链路层:在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路。
- 物理层:建立、维护、断开物理连接。
TCP/IP 四层模型
- 应用层:对应于OSI参考模型的(应用层、表示层、会话层)。
- 传输层: 对应OSI的传输层,为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。
- 网际层:对应于OSI参考模型的网络层,主要解决主机到主机的通信问题。
- 网络接口层:与OSI参考模型的数据链路层、物理层对应。
HTTP协议的特点?
- HTTP允许传输任意类型的数据。传输的类型由Content-Type加以标记。
- 无状态。对于客户端每次发送的请求,服务器都认为是一个新的请求,上一次会话和下一次会话之间没有联系。
- 支持客户端/服务器模式。
HTTP 协议包括哪些请求?
- GET:向特定的资源发出请求。
- POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的创建和/或已有资源的修改。
- OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。
- HEAD:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
- PUT:向指定资源位置上传其最新内容。
- DELETE:请求服务器删除Request-URI所标识的资源。
- TRACE:回显服务器收到的请求,主要用于测试或诊断。
- CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
TCP的特点
- TCP是面向连接的运输层协议。
- 点对点,每一条TCP连接只能有两个端点。
- TCP提供可靠交付的服务。
- TCP提供全双工通信。
- 面向字节流。
说说TCP报文首部有哪些字段,其作用又分别是什么?
- 16位端口号:源端口号,主机该报文段是来自哪里;目标端口号,要传给哪个上层协议或应用程序
- 32位序号:一次TCP通信(从TCP连接建立到断开)过程中某一个传输方向上的字节流的每个字节的编号。
- 32位确认号:用作对另一方发送的tcp报文段的响应。其值是收到的TCP报文段的序号值加1。
- 4位头部长度:表示tcp头部有多少个32bit字(4字节)。因为4位最大能标识15,所以TCP头部最长是60字节。
- 6位标志位:URG(紧急指针是否有效),ACk(表示确认号是否有效),PSH(缓冲区尚未填满),RST(表示要求对方重新建立连接),SYN(建立连接消息标志接),FIN(表示告知对方本端要关闭连接了)
- 16位窗口大小:是TCP流量控制的一个手段。这里说的窗口,指的是接收通告窗口。它告诉对方本端的TCP接收缓冲区还能容纳多少字节的数据,这样对方就可以控制发送数据的速度。
- 16位校验和:由发送端填充,接收端对TCP报文段执行CRC算法以检验TCP报文段在传输过程中是否损坏。注意,这个校验不仅包括TCP头部,也包括数据部分。这也是TCP可靠传输的一个重要保障。
- 16位紧急指针:一个正的偏移量。它和序号字段的值相加表示最后一个紧急数据的下一字节的序号。因此,确切地说,这个字段是紧急指针相对当前序号的偏移,不妨称之为紧急偏移。TCP的紧急指针是发送端向接收端发送紧急数据的方法。
HTTP1.1和 HTTP2.0的区别?
HTTP2.0相比HTTP1.1支持的特性:
- 新的二进制格式:HTTP1.1 基于文本格式传输数据;HTTP2.0采用二进制格式传输数据,解析更高效。
- 多路复用:在一个连接里,允许同时发送多个请求或响应,并且这些请求或响应能够并行的传输而不被阻塞,避免 HTTP1.1 出现的”队头堵塞”问题。
- 头部压缩,HTTP1.1的header带有大量信息,而且每次都要重复发送;HTTP2.0 把header从数据中分离,并封装成头帧和数据帧,使用特定算法压缩头帧,有效减少头信息大小。并且HTTP2.0在客户端和服务器端记录了之前发送的键值对,对于相同的数据,不会重复发送。比如请求a发送了所有的头信息字段,请求b则只需要发送差异数据,这样可以减少冗余数据,降低开销。
- 服务端推送:HTTP2.0允许服务器向客户端推送资源,无需客户端发送请求到服务器获取。
什么是对称加密和非对称加密?
对称加密:
通信双方使用相同的密钥进行加密。特点是加密速度快,但是缺点是密钥泄露会导致密文数据被破解。常见的对称加密有AES和DES算法。
非对称加密:
它需要生成两个密钥,公钥和私钥。公钥是公开的,任何人都可以获得,而私钥是私人保管的。
公钥负责加密,私钥负责解密;或者私钥负责加密,公钥负责解密。这种加密算法安全性更高,但是计算量相比对称加密大很多,加密和解密都很慢。常见的非对称算法有RSA和DSA。
POST和GET的区别
- GET 和 POST 最本质的区别是规范上的区别,在规范中,定义 GET 请求是用来获取资源的,也就是进行查询操作的,而 POST 请求是用来传输实体对象的,因此会使用 POST 来进行添加、修改和删除等操作。
- GET请求参数通过URL传递,POST的参数放在请求体中。
- GET 请求可以直接进行回退和刷新,不会对用户和程序产生任何影响;而 POST 请求如果直接回滚和刷新将会把数据再次提交。
- GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把请求头和请求体一并发送出去;而对于POST,浏览器先发送请求头,服务器响应100 continue,浏览器再发送请求体
- GET 请求一般会被缓存,比如常见的 CSS、JS、HTML 请求等都会被缓存;而 POST 请求默认是不进行缓存的
- GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
什么是数字证书?
服务端可以向证书颁发机构CA申请证书,以避免中间人攻击(防止证书被篡改)。证书包含三部分内容:证书内容、证书签名算法和签名,签名是为了验证身份。
服务端把证书传输给浏览器,浏览器从证书里取公钥。证书可以证明该公钥对应本网站。
数字签名的制作过程:
- CA使用证书签名算法对证书内容进行hash运算。
- 对hash后的值用CA的私钥加密,得到数字签名。
浏览器验证过程:
- 获取证书,得到证书内容、证书签名算法和数字签名。
- 用CA机构的公钥对数字签名解密(由于是浏览器信任的机构,所以浏览器会保存它的公钥)。
- 用证书里的签名算法对证书内容进行hash运算。
- 比较解密后的数字签名和对证书内容做hash运算后得到的哈希值,相等则表明证书可信