学习笔记 - 网络

101 阅读3分钟

HTTP

  1. 是一个客户端和服务器端请求和应答的标准(TCP),用于从 WWW 服务器传输超文本到本地浏览器的超文本传输协议。信息是明文传输。
  2. 无连接、无状态
    • 每一个访问都是无连接,服务器挨个处理访问队列里的访问,处理完一个就关闭连接,这事儿就完了,然后处理下一个新的,不保持连接
    • 服务器中没有保存客户端的状态,客户端必须每次带上自己的状态去请求服务器【状态】

HTTPS

  1. 以安全为目标的 HTTP 通道,即 HTTP 下 加入 SSL 层进行加密。防止数据在传输过程中被窃取、改变,确保数据的完整性

TCP三次握手

image.png 1、第一次握手:客户端给服务器发送一个 SYN 报文。(客户端:呼叫9527,上分上分,snake)

2、第二次握手:服务器收到 SYN 报文之后,会应答一个 SYN+ACK 报文。(服务器:收到收到,艾欧里亚冲)

3、第三次握手:客户端收到 SYN+ACK 报文之后,会回应一个 ACK 报文。(客户端:收到收到,上号)

服务器收到 ACK 报文之后,三次握手建立完成。(下路王炸杀穿)
三次握手简单理解就是三次连接,为什么需要三次,第一次连接证明了客户端的发送能力,第二次连接证明服务器的接收和发送能力,第三次证明了客户端的接收能力

TCP四次挥手

image.png

  1. 第一次挥手:客户端打算关闭连接,会发 FIN 报文给服务端(其实就是把标志位 FIN 点亮),客户端发送完之后,就进入FIN_WAIT_1状态。 - (客户端:菜逼,不玩了)
  2. 第二次挥手:服务端收到 FIN 报文之后,回复 ACK 报文给客户端(表示已经收到了),服务端发送完之后,就进入 CLOSE_WAIT 状态。客户端接收到服务端的 ACK 报文,就进入了 FIN_WAIT_2 状态,这时候,服务器可能还有数据要发送给客户端。 - (服务端:你妹儿,行吧,不过等下,我经验领完了再说)
  3. 等服务端确认自己已经没有数据返回给客户端之后,就发送FIN报文给客户端了,自己进入 LAST_ACK 状态 (服务端:完事了,给老子滚!)
  4. 客户端收到服务端的FIN报文之后,回应ACK报文,自己进入 TIME_WAIT 状态,服务端收到客户端的ACK报文之后,服务端就进入 CLOSE 状态,客户端在TIME_WAIT等到2MSL,也进入了 CLOSE 状态 (客户端:下了,傻逼)

从四次挥手的流程上来看,有个 TIME_WAIT 状态,你知道这个状态干什么用的吗?(等待 2MSL)
主要有两个原因吧。

  1. 保证最后的 ACK 报文 「接收方」一定能收到(如果收不到,对方会 重发 FIN 报文)
  2. 确保在创建新连接时,先前网络中残余的数据都丢失了 其实也比较好理解的。就正如我们重启服务器一样,会先优雅关闭各种资源,再留有一段时间,希望在这段时间内,资源是正常关闭的,这样重启服务器(或者发布)就基本认为不会影响到线上运行了。

四次挥手其实简单理解也就是四次连接,为什么需要四次, 第一次连接客户端通知服务器事情做完了准备关闭连接了进入等待1状态,第二次连接服务器告诉客户端知道了但是你得等我也传完,客户端进入等待2状态,第三次服务器通知客户端彻底传完了,可以断掉了,第四次客户端最后通知服务器OK,断了吧