Skip to content

Latest commit

 

History

History
136 lines (73 loc) · 4.55 KB

网络协议常见问题.md

File metadata and controls

136 lines (73 loc) · 4.55 KB

为什么需要三次握手,两次不行吗?

这是由 TCP 的自身特点可靠传输决定的。客户端和服务端要进行可靠传输,那么就需要确认双方的接收和发送能力。

第一次握手可以确认客服端的发送能力,

第二次握手,确认了服务端的发送能力和接收能力,

第三次握手才可以确认客户端的接收能力。不然容易出现丢包的现象。

为什么需要四次挥手,三次不行吗?

断开连接时,需要发送四次报文

四次挥手是保证客户端没有数据传输了

第一次是客户端->服务端

第二次是服务端->客户端

第三次是服务端->客户端

第四次是客户端->服务端

如果将第二次和第三次合并,会导致客户端重发请求

HTTP 协议和 UDP 协议有什么区别

HTTP 在应用层,TCP/UDP 在传输层

TCP 协议和 UDP 协议有什么区别

TCP有连接有断开,稳定传输,适合数据通信

UDP无连接五断开无状态,不稳定传输但效率高,适合视频会议、语音通话

HTTP 1.0,1.1,2.0 有什么区别

HTTP 1.0:最基础的 HTTP 协议,只实现了 GET 和 POST, 每一次 TCP都要连接和断开

HTTP 1.1:

  1. 增加了缓存策略cache-control E-tag

  2. 支持长连接Connection:keep-alive,一次 TCP连接多次请求,提高效率;

  3. 支持断点续传,状态码 206,传输完毕状态码 200;

  4. 支持新的方法,PUT,DELETE等,可用于 Restful API

HTTP 2.0:

  1. 压缩 Header较少体积

  2. 多路复用,一个 TCP 连接中可以多个HTTP并发请求。这样的话之前将文件合并减少请求就不再必要,因为多个文件可以并发请求

  3. 支持服务端推送

什么是 HTTPS中间人攻击,如何预防

HTTPS 加密传输,生产环境应该使用 HTTPS 协议

HTTPS加密传输 HTTP+TLS/SSL

同时使用对称加密和非对称加密

  1. 一开始使用非对称加密,服务端将私钥 B和公钥A都存在服务器。
  2. 服务器响应客户端请求时,将公钥 A 传递给客户端
  3. 客户端取出公钥 A,然后用公钥 A 加密一个随机 key
  4. 然后将加密后的 key传递给服务端
  5. 服务端用私钥 A 进行解密,取出随机 key
  6. 然后服务端使用加密随机码key对数据进行加密传输给客户端
  7. 客户端使用随机 key解密数据。这样就是对称加密。这样中间就算随机码 key被劫持,因为密钥只存在服务器,黑客也不能解密。

中间人攻击:使用公钥加密的过程中,公钥是在服务器和客户端之间传输的,是可以被劫持的。尽管黑客没有私钥不能够进行解密,但是它可以更换公钥。黑客可以将假的公钥传送给客户端,客户端用假的公钥生成随机码像服务端发送时,黑客可以再次劫持数据,并用自己的私钥对随机码进行解密。

预防中间人攻击:服务端申请 CA 证书,由第三方认证机构签发,浏览器会验证证书的合法性。

加密手段

对称加密:用同一个密钥进行加密和解密。如果使用对称加密,密钥也需要进行网络传输,这样中间密钥就容易被劫持。

非对称加密:两个密钥,公钥和私钥,公钥加密,私钥解密。如果使用非对称加密,客户端和服务端就要互相交互公钥,但是私有只在服务端,被劫持也不能解密。

websocket 与HTTP有什么区别

websocket

  1. 支持端对端通信
  2. 可以由客户端发起,也可以由服务端发起
  3. 用于消息通知,直播间讨论,聊天室,协同编辑

websocket连接过程:

websocket自身没有请求连接,需要借助 HTTP 请求

  1. 先发起一个 HTTP 请求
  2. 成功之后升级到websocket协议,再通讯

区别:

  1. 协议名不同,websocket协议名是ws://
  2. websocket可双端发起请求,HTTP 是单端请求
  3. websocket无跨域限制
  4. 通过sendonmessage通讯,HTTP 是通过requestreponse通讯

ws协议也可以升级为wss进行加密传输

实际项目中可以使用socket.io

websocket和HTTP 长轮询的区别

HTTP 长轮询:

  1. 客户端发起请求,服务端阻塞等待,不会立即返回
  2. 需要处理timeout超时机制,即timeout超时后连接断开,客户端需要重新发起请求

websocket:客户端可以发起请求,服务端也可以发起请求,客户端不用等待

http常见的状态码及含义

  1. 200 请求成功
  2. 301 永久重定向
  3. 302 临时重定向
  4. 403 无权限
  5. 404 服务器上没找到该资源
  6. 500 服务器错误