网络1-13

1.http1.0、1.1、2.0有什么区别?

http1.0、1.1、2.0有什么区别?

1.0:短链接(100张图片,100次tcp握手挥手)
1.1:长链接(100张图片,1次tcp握手挥手,只有一个tcp管道,所以100张图片排队传输,体验不好)
2.0:长链接+IO多路复用(100张图片,6次tcp握手挥手,6个tcp通道,100张图片同时有6张图片在传输)

Chrome 最多允许对同一个 Host 建立六个 TCP 连接。不同的浏览器有一些区别。

2.rpc与http有什么区别?rpc比http快的原因?

rpc与http有什么区别?
rpc:
性能:主要差别在序列化和反序列化,rpc通过二进制传输,效率更高
传输协议:rpc可以基于tcp也可以基于http传输
负载均衡:rpc自带负载均衡
传输效率:rpc可以自定义tcp协议,报文相对较小,效率高
通知:rpc自动通知

http:
性能:http通过json序列化更消耗性能,效率相对低
传输协议:http只能基于http协议传输
负载均衡:http需要自己搞,比如nginx
传输效率:http有很多头部信息,相对效率低
通知:http事先通知,自行修改nginx配置,或者其他负载均衡的配置

rpc比http快的原因
1.http需要解析头部信息,rpc直接解析数据
2.http的tcp通道如果长时间没有数据传输,会断开tcp通道。rpc建立连接之后,只要不关闭服务端客户端,tcp通道将一直打开

3.浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开?

浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开?

http1.0:请求完成立即断开tcp链接,除非修改Connection: keep-alive,就不会断开tcp链接

http1.1、2.0:默认情况下建立 TCP 连接不会断开,只有在请求报头中声明Connection:close 才会在请求完成后关闭连接。

4.一个 TCP 连接可以对应几个 HTTP 请求?

  建立一个tcp链接成功后,就相当于创建了一个双工管道。(一个传数据,一个收数据),每一次http请求从这个双工管道传输数据。
  如果维持tcp管道连接,一个TCP管道连接是可以发送多个 HTTP 请求的,Pipelining排队顺序的发送。

5.一个 TCP 连接中 HTTP 请求发送可以一起发送么(比如一起发三个请求,再三个响应一起接收)?

http1.0:不可以一起发送一起响应,一次请求一个tcp连接
http1.1:不可以一起发送一起响应,可以Pipelining排队依次发送,但是由于浏览器默认关闭
http2.0:可以一起发送一起响应,支持IO多路复用。谷歌最大支持6个并行

6.HTTP 1.1 时代,浏览器是如何提高页面加载效率的呢?

1.维持和服务器已经建立的 TCP 连接,在同一连接上顺序处理多个请求。
2.和服务器建立多个 TCP 连接。

7.浏览器对同一 Host 建立 TCP 连接到数量有没有限制?

比如浏览器需要加载1000张图片,肯定不能只开一个 TCP 连接顺序下载,那样用户肯定等的很难受,但是如果每个图片都开一个 TCP 连接发 HTTP 请求,那电脑或者服务器都可能受不了。要是有 1000 张图片的话总不能开 1000 个TCP 连接吧,你的电脑同意 NAT 也不一定会同意。
所以答案是:Chrome 最多允许对同一个 Host 建立6个 TCP 连接。不同的浏览器有一些区别。

8.udp长度限制多少?为什么限制?

因为UDP是不可靠传输,如果报文(独立的报文,一定会有一个最大长度)长度过长,有可能分片丢失导致重组失败,将导致UDP数据包被丢弃。最大长度限制65535字节,大小64k

因为udp包头有2个byte用于记录包体长度. 2个byte可表示最大值为: 2^16-1=64K-1=65535
udp包头占8字节, ip包头占20字节, 数据:65535-28 = 65507

如果要发送的udp报文大于65507怎么办?
    需要在应用层由开发者自己分片发送. 

9.websocket是基于什么协议?

http和websocket是应用层协议。
tcp,udp是传输层协议
websocket基于tcp协议

10.http3.0

http3为什么弃用tcp协议?
因为http2始终无法解决tcp协议的几个问题:
1.tcp握手缓解慢,需要3次交互的握手
2.tcp在传输的过程中,会把数据拆分成一个个按照顺序排列的数据包,这些数据包在传输到接收端之后,再按照顺序将这些数据包组成一个原始的数据,这样就完成了数据传输。但是如果某一个数据包没有到达,接收方就会一直等待这个丢失的数据包重新传输完成,这时候就会阻塞后续的请求,就发生了tcp队头阻塞的问题,http2多路复用技术,影响面积会更大
3.使用https时还需要额外的建立TLS握手建立安全的连接

为什么要使用udp协议,而不是重新定义一个全新的协议?
1.避免重新部署和更新网络设备和系统,udp协议已经广泛的部署在现有的网络设备和系统中,可以在不影响现有网络设备和系统的情况下,逐步推广和普及
2.udp协议非常简单和轻量,协议速度快,低延迟,基于udp可以很好的实现网络性能

http3新的协议:
基于udp+diffie-hellman算法实现quic协议,quic协议能够实现tcp的可靠性,而且还能够快速握手,并且不会发生对头阻塞问题

http3使用quic协议替换了传输层协议tcp
quic协议特点:
1.安全性高:quic集成了TLS v1.3安全协议的大部分特性,并兼容自身的传递机制,在传输层实现高级安全性。http3中加密不是可选的,而是内置功能
2.建立连接更快:1次就可以完成安全建立
3.无队头阻塞:类似于http2,一次tcp连接,IO多路复用可以开启多个管道传输数据,不同的是每个管道数据独立,如果某个数据包丢失,只是影响该条管道数据的处理 并不会因为某个数据包丢失影响其他的管道,造成队头阻塞。这样在很大程度上缓解甚至消除了队头阻塞的影响
4.连接迁移: 一条tcp连接是由四元组标识的(源ip,源端口,目的ip,目的端口),在wifi和手机4G切换时,ip肯定发生变化,就需要重新建立tcp连接。一条quic连接,不再以四元组标识(源ip,源端口,目的ip,目的端口),而是以一个64位的随机数作为id来标识,这样就算ip端口发生变化时,只要随机id不变,这条连接依然维持着,上层业务逻辑感知不到变化,不会中断,也就不需要重新建立连接
5.避免协议僵化:quic协议基于用户空间的协议,它的实现独立于操作系统内核,可以在应用层进行部署和更新,使quic协议更容易引人新的功能和改进,避免了tcp协议的僵化问题

quic协议总结:quic协议继承了udp的高速和低延迟的优点,补充了udp协议缺失的可靠性和安全性功能,增加了新特性。成为了即快速又可靠的新型传输协议

http3缺点:
1.网关难度大:由于quic加密级别高,相比与在报文头中带有未加密元数据的tcp,提供防火墙和网络健康跟踪服务变得更加困难。因为这一点,许多防火墙不支持quic,带来了安全风险
2.udp被一些网络阻止:udp经常被用于不同类型的网络攻击,例如:ddos攻击,因为攻击者可以轻易的伪造ip地址,发送大量的udp数据包,导致目标服务器过载,导致无法正常处理合法的请求。所以一些网络会阻止udp协议,减轻网络攻击的影响
3.浏览器和服务器支持不完善:http3新的协议,浏览器可能存在兼容性,功能性等问题

11.https安全传输的原理?

HTTPS(Hypertext Transfer Protocol Secure)是一种通过计算机网络进行安全传输的协议。它在HTTP的基础上添加了安全性的加密层,以保护在网络上传输的数据的机密性和完整性。

HTTPS使用了公钥加密和对称加密两种加密技术来实现安全传输。

下面是HTTPS安全传输的基本原理:

证书验证:HTTPS使用数字证书来验证服务器的身份。服务器会通过一个受信任的证书颁发机构(Certificate Authority,CA)获得数字证书,证书中包含了服务器的公钥和相关信息。当客户端发起HTTPS连接时,服务器会将自己的证书发送给客户端。

公钥加密:客户端收到服务器的证书后,会验证证书的合法性。它会检查证书的签名是否有效,并确认证书颁发机构是否可信。一旦确认证书有效,客户端会使用证书中的公钥对一个随机生成的对称密钥进行加密,然后将加密后的对称密钥发送给服务器。

对称加密:服务器收到客户端发送的加密后的对称密钥后,使用自己的私钥进行解密,得到对称密钥。接下来的通信将使用对称密钥进行加密和解密。对称加密相比公钥加密更高效,因此在整个通信过程中使用对称加密可以提高性能。

安全通信:一旦建立了安全的通信通道,客户端和服务器之间的所有数据都将使用对称加密算法进行加密和解密。这样,即使传输过程中被非法监听,攻击者也无法直接获取到明文数据。

12.https中TLS协议

TLS:在握手阶段使用公钥私钥非对称加密,在数据传输阶段使用对称加密

TLS是一种加密协议,用于在网络通信中提供安全的数据传输。它是SSL(Secure Sockets Layer)协议的继任者,由于一些安全漏洞和弱点,SSL逐渐被TLS所取代。

TLS通过使用加密算法和证书验证来确保通信的机密性和完整性。它建立在传输层协议(如TCP)之上,为应用层协议(如HTTP)提供安全的通信通道。TLS的握手过程包括协商加密算法、生成随机数、验证服务器证书等步骤,最终建立安全的通信连接。

在HTTPS中,安全传输的协议是TLS(Transport Layer Security),以下是TLS的工作原理的简要概述:
1.握手过程:TLS握手是建立安全连接的关键步骤。客户端和服务器之间进行一系列的握手消息交换,以协商加密算法、生成随机数、验证证书等信息。
2.证书验证:服务器在握手过程中向客户端发送数字证书,证书中包含了服务器的公钥和相关信息。客户端会验证证书的合法性,包括检查证书的签名、有效期等,并确认证书颁发机构的可信性。
3.密钥交换:在握手过程中,客户端和服务器会协商选择一个加密算法和密钥交换方式。常见的密钥交换方式包括基于公钥加密的RSA算法和基于椭圆曲线加密的ECDHE算法。这些算法用于安全地交换对称密钥,用于后续的数据加密和解密。
4.数据加密:一旦握手过程完成,客户端和服务器之间的数据传输将使用对称加密算法进行加密和解密。常见的对称加密算法包括AES(Advanced Encryption Standard)、3DES(Triple Data Encryption Standard)等。对称加密使用握手过程中协商的对称密钥来加密和解密数据,确保传输的机密性。
5.完整性保护:TLS还使用消息认证码(MAC)来保护数据的完整性。MAC使用密钥和哈希函数对传输的数据进行计算,以便在传输过程中检测到任何数据篡改。
总结:通过握手过程的协商和密钥交换,TLS确保了通信的机密性、完整性和身份验证。该协议使用公钥加密和对称加密相结合的方式,以提供高效的安全传输。

13.tcp的timewait与closewait?

tcp的连接状态timewait理解为:timewait状态在发起关闭的一端,timewait等待2分钟的原因是资源复用,如果在2分钟内发起端再次建立连接,资源就会复用。
closewait是正在处理关闭的状态,存在于被发起端。

如果存在大量的closewait,证明程序没有正确的关闭,程序bug
posted @ 2022-10-26 14:14  Jeff的技术栈  阅读(29)  评论(0编辑  收藏  举报
回顶部