http、tpc、websocket 和 三次握手 四次挥手

HTTP(超文本传输协议)和TCP(传输控制协议)是网络通信中的两个不同层次的协议。

  1. HTTP (HyperText Transfer Protocol) - 超文本传输协议

    • HTTP是一种应用层协议,用于在客户端和服务器之间传输超文本数据,通常用于在Web浏览器和Web服务器之间传输网页和相关数据。
    • 它建立在TCP之上,利用TCP的可靠性和连接性。
    • HTTP负责定义数据的格式和传输方式,包括请求和响应的格式、头部信息等。它是Web通信的基础。
  2. TCP (Transmission Control Protocol) - 传输控制协议

    • TCP是一种传输层协议,负责在网络上可靠地传输数据。
    • 它提供了端到端的数据传输服务,确保数据按照正确的顺序到达目的地,并在必要时进行重传以保证数据的可靠性。
    • TCP是一个面向连接的协议,意味着在通信双方之间建立了一个持久的连接,直到通信完成。这个连接在通信结束后释放。
    • HTTP通常使用TCP作为它的传输层协议,利用TCP的可靠性和连接性来传输数据。

简而言之,HTTP是一种定义了在Web上如何传输和格式化数据的协议,而TCP是一种在网络上可靠地传输数据的底层协议。HTTP建立在TCP之上,利用TCP的特性来传输数据。

WebSocket(Web套接字)是一种在网络应用中提供全双工通信的协议,它与HTTP和TCP之间有一些重要的区别:

  1. 通信方式

    • HTTP是一种请求-响应协议,客户端发送请求,服务器回送响应,然后连接就关闭了。
    • WebSocket允许在客户端和服务器之间建立持久连接,并且可以在双方之间进行全双工通信,即客户端和服务器可以同时发送和接收数据,而无需等待对方的响应。
  2. 协议层次

    • HTTP位于应用层,而WebSocket也是一种应用层协议,但它建立在TCP之上。
    • WebSocket实际上是通过HTTP的初始握手来建立连接,然后转换为WebSocket协议,使得在连接建立后可以直接进行双向通信,而无需每次都发送HTTP请求。
  3. 数据格式

    • HTTP传输的数据通常是文本或二进制文件,每个请求或响应都有一个特定的格式。
    • WebSocket传输的数据可以是文本或二进制格式,并且没有特定的格式要求,允许应用程序定义自己的通信协议。
  4. 效率

    • WebSocket相对于HTTP具有更低的延迟和更少的网络开销,因为它避免了HTTP的每次请求和响应之间建立和关闭连接的开销。
    • WebSocket建立一次连接后可以持续地发送和接收数据,而HTTP需要在每个请求和响应之间建立新的连接,这增加了额外的开销。

综上所述,WebSocket是一种在网络应用中提供实时、全双工通信的协议,与传统的HTTP相比,它具有更低的延迟、更高的效率和更简洁的通信模式。

WebSocket 协议实际上是通过 HTTP 协议的升级实现的,这个过程通常被称为 WebSocket 的握手过程。下面是从 HTTP 到 WebSocket 的转换过程

  1. 客户端发送 WebSocket 握手请求

    • 客户端首先通过普通的 HTTP GET 请求发送一个特殊的 Upgrade 头部,请求升级到 WebSocket 协议。
    • 请求头部中包括了一些额外的字段,如 Connection: UpgradeUpgrade: websocket,以及 Sec-WebSocket-Key 等用于安全性的字段。
  2. 服务器接受 WebSocket 握手请求

    • 服务器收到客户端的握手请求后,进行验证。
    • 验证通过后,服务器发送一个 HTTP 101 状态码作为响应,表示升级成功,切换到 WebSocket 协议。
    • 响应头部中同样包含 Connection: UpgradeUpgrade: websocket 字段。
  3. 建立 WebSocket 连接

    • 客户端收到服务器的响应后,确认握手成功。
    • 这时,客户端和服务器之间的连接从 HTTP 协议切换到了 WebSocket 协议,可以直接进行双向通信。

总结来说,WebSocket 在 HTTP 协议的基础上通过一次特殊的握手过程进行升级,将通信从单向的请求-响应模式转换为双向的全双工通信模式,从而实现了实时性更好的数据传输。

TCP(传输控制协议)的三次握手是建立 TCP 连接时使用的一种协议,确保通信双方都能够正确地收发数据。下面是 TCP 三次握手的过程:

  1. 客户端发送连接请求

    • 客户端首先向服务器发送一个特殊的 TCP 报文段,这个报文段称为 SYN(同步)包。
    • 在这个 SYN 包中,客户端会选择一个初始的序列号(Sequence Number),并设置 SYN 标志位为 1,表示这是一个连接请求。
  2. 服务器确认连接请求

    • 服务器收到客户端发送的 SYN 包后,会回复一个确认报文段,称为 SYN-ACK 包。
    • 在这个 SYN-ACK 包中,服务器会确认收到了客户端的连接请求,同时也会选择一个自己的初始序列号,并将 SYN 和 ACK 标志位都置为 1,表示这是一个确认连接请求的响应。
  3. 客户端确认连接

    • 客户端收到服务器发送的 SYN-ACK 包后,会向服务器发送一个确认报文段,称为 ACK 包。
    • 在这个 ACK 包中,客户端会确认收到了服务器的确认,将 ACK 标志位置为 1。
    • 至此,TCP 连接建立完成,客户端和服务器之间可以开始进行数据传输了。

需要注意的是,在 TCP 三次握手中,每个报文段都包含了双方的初始序列号,用于后续的数据传输中进行顺序控制。通过这个三次握手过程,确保了客户端和服务器之间的连接状态的同步和可靠性,从而建立了可靠的数据传输通道。

TCP 的四次挥手是在连接关闭时使用的协议,确保双方都能正确地关闭连接并释放资源。下面是 TCP 四次挥手的过程:

  1. 客户端发送连接释放请求

    • 客户端在完成数据传输后,向服务器发送连接释放请求,称为 FIN(Finish)包。
    • 在这个 FIN 包中,客户端通知服务器已经完成了数据发送,并希望关闭连接。
  2. 服务器确认连接释放请求

    • 服务器收到客户端发送的 FIN 包后,会回复一个确认报文段,称为 ACK 包。
    • 在这个 ACK 包中,服务器确认收到了客户端的连接释放请求,但表示自己还有数据要发送,所以连接还不会立即关闭。
  3. 服务器发送数据并准备关闭连接

    • 服务器在发送完所有数据后,也会向客户端发送一个连接释放请求,称为 FIN 包。
    • 在这个 FIN 包中,服务器通知客户端自己已经完成了数据发送,并希望关闭连接。
  4. 客户端确认连接关闭

    • 客户端收到服务器发送的 FIN 包后,会向服务器发送一个确认报文段,称为 ACK 包。
    • 在这个 ACK 包中,客户端确认收到了服务器的连接释放请求,并且也表示自己已经没有数据要发送了。
    • 至此,连接关闭完成,双方都确认了对方的连接释放请求,可以释放连接并关闭套接字。

通过这个四次挥手的过程,确保了双方在关闭连接时的同步和可靠性,避免了数据丢失或连接资源浪费的情况。

  • 22
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值