1. TCP建立连接的过程
三次握手
- 第一次握手:客户端发送sync包到服务器端,进入sync_send状态,等待服务器端的确认。
- 第二次握手:服务器端收到客户端的sync包,发送sync+ack包给客户端,进入sync_recv状态。
- 第三次握手:客户端收到服务器端的sync+ack包,发送这个ack包给服务器端,至此,客户端和服务器端进入established状态。
2. TCP断开连接的过程
四次挥手
- 第一次挥手:主动关闭方发送fin包到被动关闭方。
- 第二次挥手:被动关闭方收到fin包后,发送ack包给对方,确认序号为收到序号+1
- 第三次挥手:被动关闭方也发送fin包给主动关闭方,告诉对方我也不会给你发送数据了
- 第四次挥手:主动关闭方收到fin包,发送ack给对方,至此完成四次挥手。
3. 浏览器发送302跳转背后的逻辑
浏览器发送302跳转主要涉及HTTP协议中的重定向机制。具体来说,当服务器收到一个请求后,如果发现请求的资源暂时不在当前位置。而是位于另一个URL,服务器就会向浏览器发送一个302状态码,并在响应头中指定新的资源位置(即Location字段)。浏览器收到这个状态码和Location字段后,会自动向新的URL发送请求,从而实现页面跳转。
具体跳转过程如下
:
- 请求发送:用户通过浏览器向服务器发送一个HTTP请求,请求访问某个资源。
- 服务器处理:服务器收到请求后,检查请求的资源是否在当前位置。
- 如果资源不在当前位置,但知道他暂时位于另一个URL,服务器将返回302状态码。
- 同时,在响应头中的Location字段指定新的资源位置。
- 浏览器响应:浏览器收到服务器的302状态码,会解析Location 字段中的URL。
- 浏览器自动向这个新的URL发送请求,获取资源。
- 用户看到的效果就是浏览器地址栏中的URL从原来的地址变成了新的地址,并且页面内容也更新为新地址对应的内容。
4. HTTP协议的交互流程
- 建立连接
- 域名解析:首先,客户端通过DNS将目标URL解析为对应的IP地址。
- TCP三次握手:在获得服务器IP之后,客户端和服务器之间通过TCP进行三次握手,以建立可靠的连接,三次握手过程包括。
a. 客户端发送一个syn J包
b. 服务器收到synJ包,回复syn K+ack J+1包。
c. 客户端回复ack K+1包,至此,TCP连接建立成功。
- 发送请求
- 构建并发送HTTP请求:客户端通过以建立的TCP连接将HTTP请求发送给服务器。
- 接收响应
- 服务器处理请求,构建HTTP响应,并将响应发送给客户端。
- 关闭连接:通过四次挥手,客户端和服务端之间断开连接。
5. HTTP和HTTPS的差异
- 协议安全性
- HTTP是一种无加密的协议,数据在传输过程中以明文形式存在。
- HTTPS是HTTP的安全版本,他在HTTP的基础上增加了SSL/TLS协议。对数据进行传输加密。
- 证书管理
- HTTP协议不需要证书
- HTTPS需要向CA机构申请证书进行加密和解密操作。
- 端口号
- HTTP通常使用80端口
- HTTPS通常使用443端口
- 资源消耗和兼容性方面,HTTP要更少以及兼容性更高。
6. SSL协议的交互流程
- 客户端请求SSL连接,并将自己支持的加密规则发给网站。
- 服务器端将自己的身份信息以证书形式发回给客户端。证书里面包含了网站地址,加密公钥、以及证书的颁发机构。
- 获得证书后,客户要做以下工作。
- 验证证书合法性。
- 如果证书受信任,客户端会生成一串随机数的密码,并用证书提供的公钥进行加密。
- 将加密好的随机数发给服务器。
- 服务器用自己的私钥进行解密,得到随机数,把这个随机数作为对称加密的密钥。(利用非对称加密传输对称加密的密钥)
- 之后服务器和客户端之间就可以用随机数对各自的信息进行加密、解密。
总结:客户端请求 -> 服务端发送证书(公钥)-> 客户端验证证书,并生成随机数 -> 通过公钥加密后发送给服务端-> 服务端用私钥解密出随机数->对称加密传输数据。
7. Rest和Http之间的关系
Rest是一种软件架构风格,HTTP是一种文本传输协议。
- 协议依赖
- Rest风格通常使用HTTP作为其通信协议。
- 资源导向:
- Rest以资源为中心,每个资源通过URI进行定位,HTTP协议则提供了访问这些资源的机制。
- 客户端通过向服务器发送HTTP请求来操作资源,服务器通过HTTP响应来返回操作结果。
8 . 为什么Rest很轻量
- 简单性
- Rest依赖于标准的HTTP协议,和其他复杂的架构相比,Rest不需要额外的中间件或者配置,降低了系统的复杂性。
- 可扩展性
- Rest依赖于标准的HTTP协议和URI,因此可以轻松通过添加新的资源和操作来扩展应用的功能。
- 松耦合
- Rest架构通过资源唯一标识符URI和HTTP协议的操作来实现资源管理,使得客户端和服务器之间松耦合。
- 无状态性
- Rest架构风格强调无状态性,即每次请求都应包含处理请求所需的所有信息,而不依赖于之前的请求。
9. RPC和HTTP协议的区别
RPC 远程过程调用,HTTP:超文本传输协议,他们之间的区别如下:
- 传输协议
- RPC可以基于多种协议进行通信,如TCP、UDP,也可以基于HTTP协议。
- HTTP:是一个属于应用层、用于从web服务器传输超文本到本地浏览器的传送协议。
- 传输效率
- RPC: 通过使用自定义的TCP协议或者HTTP2协议,RPC可以减少请求报文大小,提高传输效率。特别是当时用二进制序列化协议(Protocol Buffers、Thrift等),传输效率更高。
- HTTP:如果是基于HTTP1.1的协议,请求中会包含很多无用内容,影响传输效率。而基于HTTP2.0的,请求则可以在一定程度上减少这种开销。但是传输效率仍然较低。
- 性能消耗
- RPC:可以基于高效的二进制序列化协议进行数据传输,因此在序列化和反序列化过程中性能消耗较低。
- HTTP:通过JSON格式进行数据传输,相对二进制协议较大,从而增加了性能消耗。
- 负载均衡和服务治理
- RPC:大部分RPC框架都自带了负载均衡策略,能够自动处理服务的调用和分配。
- HTTP:HTTP本身不提供负载均衡,需要通过Nginx等来实现。
10. 交换机和路由器的区别
- 工作层次不同
- 最初的交换机工作在OSI模型中的数据链路层,工作原理简单。
- 路由器工作在OSI模型中的网络层。
- 数据转发所依据的对象不同
- 交换机依靠物理MAC地址,确定转发的目的地址。
- 路由器利用IP地址,确定转发的目的地址。
- 应用场景不同
- 交换机广泛应用于局域网中,实现局域网内的设备间数据的高速交换。
- 路由器用于连接不同网络之间的设备,如企业网络、互联网接入,能够实现跨网络的数据通信,构建大规模、复杂网络结构的关键设备。
11. Nginx常用性能调优
- 增加同时打开文件数open_files数量
- 处理大量静态文件的磁盘IO时,增加CPU核心数worker Processor数量,提高计算能力。
- 如果网站流量很高,可以提升worker进程连接数worker connections。
- 控制keep alive在10~20s之间,减少连接的时间开销。
- 提高网络带宽。
- 开启压缩传输数据gzip,设置压缩级别为1-2.
- 扩展机器数量。