计算机网络
HTTP/HTTPS
HTTP 是什么?
- http 是用于两点之间传输文本,图片,视频等超文本的约定和规范
HTTP 的名字「超文本协议传输」,它可以拆成三个部分:超文本、传输、协议
GET 和 POST 有什么区别?
- GET 是从指定服务器获取资源,POST 是(根据报文 body)对指定的资源进行管理
GET 请求的参数位置一般是写在 URL 中,URL 规定只能支持 ASCII,所以 GET 请求的参数只允许 ASCII 字符 ,而且浏览器会对 URL 的长度有限制(HTTP 协议本身对 URL 长度并没有做任何规定)。
POST 请求携带数据的位置一般是写在报文 body 中,body 中的数据可以是任意格式的数据,只要客户端与服务端协商好即可,而且浏览器不会对 body 大小做限制。
HTTP/1.1 的优缺点?
优点:HTTP/1.1 简单,直接使用 header+body,易于理解
性能:实现长连接,不用 TCP 频繁连接,使用【请求-应答】模式,可以发送多个请求
缺点:明文传递不安全
性能:队头堵塞,当一个请求被阻塞时,就会阻塞全部请求
HTTP 与 HTTPS 有哪些区别?*
- 端口号不同,HTTP 是 80,HTTPS 是 443
- HTTP 连接时只用 TCP 的三次握手,HTTPS 连接时不仅 TCP 要进行三次握手,SSL/TLS 还要进行握手才能加密报文传输
- HTTPS 在 HTTP 和 TCL 层中间加入了 SSL/TLS 安全协议
- HTTPS 还要向 CA 申请数字证书
HTTPS 解决了 HTTP 的哪些问题?
- HTTP 由于明文传输的原因,会造成篡改风险,窃听风险,冒充风险
- HTTPS 由于加入了 SSL/TLS,加入了校验机制,信息加密,身份验证(CA 的数字证书)
HTTPS 是如何解决上面的三个风险的?
- 混合加密 能对信息进行加密,实现信息机密性
- 摘要算法 能校验信息完整性,确保信息不会被篡改
- 向 CA 申请 数字证书
解释一下混合加密
- 客户端发起握手请求,并携带一个随机数 Client Random
- 服务器接受请求,返回证书(包含公钥)还有一个随机数 Server Random
- 客户端验证证书,在生成一个随机数 Pre-Master Secret 和前面两个用算法加密为 Session Secret,再用证书里的公钥加密 Pre-Master Secret,再传输给服务器
- 服务器拿到后用自己的私钥解密这部分得到 Pre-Master Secret,再根据前面的两个随机数用相同的算法得到 Session Secret
HTTP/1 和 HTTP/2 的优化,HTTP/2 和 HTTP/3 的优化?
HTTP/2 相对于 HTTP/1 实现了头部压缩,二进制,并发传输,服务器主动推送资源
如果你发出多个请求,他们的头相似,那么就会压缩头,消除重复的部分
HTTP/2 不像 HTTP/1 采用纯文本格式,全面采用二进制,统称为帧
针对不同的 HTTP 请求用独一无二的 Stream ID 来区分,接收端可以通过 Stream ID 有序组装成 HTTP 消息,不同 Stream 的帧是可以乱序发送的,因此可以并发不同的 Stream ,也就是 HTTP/2 可以并行交错地发送请求和响应。
服务器不再是被动接受消息了,能主动推送资源
HTTP/3 相对于 HTTP/2 放弃了 TCP,因为虽然 HTTP/2 因为并发传输解决了队头阻塞,但是在 TCL 层有队头阻塞,于是 HTTP/3 使用 UDP+QUIC
TCP
UDP 和 TCP 有什么区别呢?分别的应用场景是?
TCP 是 1 对 1 的连接,UDP 的连接可以 1 对 1,1 对多,多对多
TCP 传输是以数据流的形式,但是保证不乱序,不丢包,UDP 的传输是以包的形式,但是不保证数据完整
TCP 的头部比 UDP 的头部大很多
TCP 是面向连接的传输层协议,传输之前要先连接,UDP 传输不需要连接
TCP 的数据如果大于 MSS 就会在传输层进行分片,UDP 的数据如果大于 MTU 就会在 IP 层进行分片
TCP 因为面向连接的能保证数据可靠交付一般用于 HTTP/HTTPS,FTP 文件传输
UDP 因为面向无连接,故能随时发送,一般用于多媒体通信,广播通信
TCP 三次握手过程是怎样的?
- 首先是客户端和服务端都处于 CLOSE 状态,然后服务器主动监听一个端口处在 LISTEN 状态
- 然后客户端向服务端发出请求标志位 SYN = 1,然后变为 SYN_SENT 状态
- 服务端接受到客户端的消息后,回复一个标志位 ACK = 1 SYN = 1 的报文,然后变成 SYN_RCVD 状态
- 客户端收到后继续向服务端发送标志位 ACK = 1 的报文,这次报文可以携带客户端到服务端的数据,至此完成三次握手连接成功
TCP 四次挥手过程是怎样的?
- 首先是发起断开连接的一方,比如客户端发送一个标志位 FIN = 1 的报文
- 服务端收到后发送标示位 ACK = 1 的报文表示确认收到,然后开始释放资源
- 当服务端准备好了后就会向客户端发送标志位 FIN = 1 的报文
- 当客户端接受到后,再次向服务端发送标志位 ACK = 1 的报文,至此服务端完成连接关闭,在 2MSL 后客户端也完成连接关闭
- 需要注意的是,最后的 TIME_WAIT 状态是谁主动发起断开的一方才有
TCP 常见的重传机制?
- 超时重传:顾名思义,没收到 ACK 且超时后进行重传
- 快速重传:当收到三个相同的 ACK 后不等超时立即重传
滑动窗口协议的作用是什么?他如何提高传输效率
- 窗口是指发送后无需应答就能再次发送,并且如果应答丢失,只要最后一次应答确认,之前所有数据全都确认
- 而接受方控制了窗口的大小,就实现了 流量控制
拥塞控制的四个阶段是如何工作的?
- 慢启动:每当收到一个 ACK 后拥塞窗口 cwnd 大小+1
- 当 cwnd 大小到达一个阈值 ssthresh 时,就会启动拥塞避免算法:每当收到一个 ACK 后拥塞窗口 cwnd 大小+1/cwnd
- 当 cwnd 大小到达一定大小,网络发生拥塞,触发了重传机制中的超时重传,就会启动拥塞发生:将 ssthresh 设为 cwnd/2,将 cwnd 重置为 1;如果触发的是快速重传,同样是启动拥塞发生:将 cwnd 设为 cwnd/2,ssthresh 设为 cwnd
- 快速恢复一般和拥塞发生同时使用:将 cwnd 设为 ssthresh+3,再按拥塞避免增加,当收到新的 ACK 后,将 cwnd 设为 ssthresh
TCP 协议的缺陷
建立 TCP 连接的延迟
由于需要确保数据的完整有序,所有 TCP 会有队头堵塞,只要一个 TCP 段丢失,即使较高序列号的 TCP 段到达也无法读取,需要等待丢失的重传完成
网络迁移需要重新建立 TCP 连接
IP
IPV4 和 IPV6 的区别是什么?
- IPV4 只有 32 位,只有 42 亿地址,IPV6 有 128 位,有近乎无限的地址
- IPV4 是十进制点分,IPV6 是十六进制冒分
- IPV6 支持地址自动分配,解决了 IPV4 地址枯竭和功能不足的问题
什么是公网 IP 和私网 IP?
- 公网 IP:互联网中唯一可以路由的 IP,需要确保唯一性
- 私网 IP:局域网内使用的非路由 IP,仅在内部生效,需通过 NET 转化为公网 IP 才能访问外网
IP 协议是面向连接的还是无连接的?有什么特点?
- IP 是面向无连接的,可以不建立连接发送数据,但不保证数据送达,需依赖上层协议如 TCP
IP 地址由哪两部分组成?子网掩码的作用?
- IP 网络的组成:网络位(标识设备所在网段)+ 主机位(标识网段内的具体设备)
- 子网掩码用来划分 IP 地址中的网络位和主机位,子网掩码与 IP 地址按位与后,网络位就是前 24 位,主机位就是后 8 位
什么是 DNS?
- 我们上网一般使用的是域名,而不是 IP 地址,而 DNS 就是将域名转化位 IP 地址的一种方式,比如 www.baidu.com,以.为分隔,越往右域名等级越高
- DNS 解析流程一般是先在缓存中查找,如果没有的话就在操作系统的缓存中查找,如果还没有就在 DNS 服务器询问查找
- DNS 服务器的查找也是一样,现查看自身缓存,如果没有就提供方法询问最右的域名,依次询问找到 IP 地址
什么是 DHCP?它的作用是什么?(校园网)
- DHCP 是动态主机配置协议,用于局域网设备分配 IP 地址,子网掩码,网关,DNS 等网络参数
- 避免了手动配置 IP 的繁琐,简化网络管理
输入一条网络地址后,具体历程
- 地址解析:用 DNS 把域名翻译成 IP 地址
- 建立连接:与目标服务器建立连接(TCP 的三次握手)
- 发送请求:根据 HTTP/HTTPS 请求发送,比如 GET, POST
- 服务器处理:准备要返回的内容打包成响应报文
- 返回响应:将响应报文传回浏览器
- 断开连接:关闭 TCP 连接(TCP 四次挥手) (如果用的是 HTTP/1.1, 连接会暂时保留)
- 浏览器渲染:浏览器拿到服务器返回的 HTML, CSS, JS 后,开始翻译渲染