Git地址:https://github.com/todayqq/PH...每次面试或多或少都会问到HTTP、HTTPS、TCP、Socket、OAuth等协议,协议相关的问题也可以说是面试必备的,所以我把这方面的知识单独收集成一篇文章。什么是网络协议?应用层:HTTP、FTP、SSH、SMTP表示层会话层传输层:TCP、UDP网络层:IP数据链路层物理层HTTP协议地址解析的工作过程简述;在浏览器中输入URL,浏览器会从中分解出协议名、主机名、端口、对象路径等部分。封装HTTP请求包。浏览器获取主机IP地址,建立TCP连接(TCP的三次握手)。建立TCP连接后,发送HTTP请求的格式:统一资源标识符(URL),协议版本号,后跟MIME信息,包括请求修饰符、客户端信息和可选内容。服务器收到请求后,会以状态行的形式给出相应的响应信息,包括信息的协议版本号、成功或错误代码,后面是MIME信息,包括服务器信息、实体信息和可能的内容服务器断开TCP连接什么是HTTPS?实施过程是怎样的?HTTPS(HypertextTransferSecurityProtocol)是一种通过计算机网络进行安全通信的传输协议,为网站服务器提供身份认证,保护数据传输的完整性和安全性。实现过程:客户端发起HTTPS请求,服务端接收客户端请求,返回数字证书信息。客户端收到服务器响应,验证证书的有效性。如果证书可信,则生成随机数的密码使用约定的HASH算法。计算握手报文,并用生成的随机数对报文进行加密,然后发送到服务器网站接收浏览器发送的密文,用私钥解密握手报文,取出随机数密码,然后用随机数密码解密,握手报文和HASH值,和传过来的HASH值比较,确认是否一致用密码加密一个握手报文,发送给浏览器。浏览器解密并计算握手消息的HASH。如果与服务器发送过来的HASH一致,那么在握手过程结束后,所有的通信数据都会被浏览器生成的随机密码加密,然后再使用对称加密算法。数字证书包含哪些信息?证书的版本信息;证书序列号,每张证书都有唯一的证书序列号;证书使用的签名算法;证书颁发机构的名称;证书的有效期;证书所有者的姓名、公钥;证书颁发者签署证书。TCP三次握手过程。客户端发送一个SYN标志设置为1的数据包,表明客户端想要连接到服务器端接口。发送后,客户端进入SYN_SEND状态,服务器发回确认包(ACK)响应。即SYN标志和ACK标志都为1,服务器端选择自己的ISN序号,放在Seq字段中,并设置确认号(AcknowledgmentNumber)为客户端的ISN加1,即X+1。发送后,服务器进入SYN_RCVD状态。客户端再次发送一个确认包(ACK),SYN标志位为0,ACK标志位为1,服务器端发送的ACK的序号字段+1在确认字段中发送给对方,ISN写在数据段+1发送后,客户端进入ESTABLISHED状态,服务器端收到这个数据包后,也进入ESTABLISHED状态,TCP握手结束。什么是套接字?工作流程是什么样的?Socket,又称网络套接字,是操作系统提供的一种进程间通信机制。工作流程:服务端先使用socket函数创建socket,调用listen函数使服务端的端口和IP处于监听状态,等待客户端连接。客户端使用socket函数创建socket并设置远程IP和端口,并调用connect函数。服务端使用accept函数接受远程计算机的连接,与客户端建立通信,通信完成后最后使用close函数关闭socket连接。HTTP1.1和WebSocket的区别?HTTP是单连接,只能进行单向通信,而WebSocket是持久连接,可以进行双向通信。WebSocket是基于HTTP建立连接的,但是连接建立之后,真正的数据传输阶段是不需要HTTP协议参与的WebSocket请求的header和HTTP请求的header是不一样的。WebSocket传输的数据是二进制流,是分帧的。HTTP作为一个单元,是明文字符串传输什么是OAuth2.0协议?运行过程是怎样的?OAuth(OpenAuthorization)协议为用户资源的授权提供了一个安全、开放、简单的标准。第三方可以在不使用用户的用户名和密码的情况下申请用户资源的授权。操作过程:用户打开客户端后,客户端需要用户授权。用户同意授权客户端使用上一步获得的授权向认证服务器申请token。认证服务器对客户端进行认证后,确认无误后同意颁发令牌。客户端使用令牌向资源服务器申请资源。资源服务器确认token无误,同意向客户端开放资源。OAuth2.0定义了四种授权方式,授权码方式、简化方式、密码方式、客户端方式。具体的授权流程可以参考阮一峰老师的文章了解OAuth2.0。延伸阅读https原理HTTPS原理分析HTTPS工作原理socketHTTP与WebSocket区别理解OAuth2.0
