前端系统学习-TCP与UDP

  • 为什么tcp需要三次握手
    客户端和服务端都需要知道各自可收发。

  • tcp三次握手
    前端系统学习-TCP与UDP
    客户端:closed ,服务端:listen

  • 第一次握手:建立连接时,客户端发送SYN(a)包到服务器,并等待服务器确认;
    客户端:SYN_Send ,服务端:listen

  • 第二次握手:服务器收到SYN(syn=a)包,发送已确认客户syn包的应答ACK(a+1)包与自己的一个SYN包(b);
    客户端:SYN_Send ,服务端: SYN_REVD

  • 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(b+1)。
    客户端:establised ,服务端:SYN_REVD

  • 服务器收到 ACK 报文,双方建立链接。
    客户端:establised ,服务端:establised

  • TCP四次挥手
    前端系统学习-TCP与UDP
    客户端:establised ,服务端:establised

  • 第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个***。
    客户端:CLOSED_WAIT1 ,服务端:establised

  • 第二次挥手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的***值 + 1 作为 ACK 报文的***值,表明已经收到客户端的报文了。
    客户端:CLOSED_WAIT1 ,服务端: CLOSE_WAIT2

  • 第三次挥手:服务端发给 FIN 报文,且指定一个***。
    *客户端:establised ,服务端:LAST_ACK *

  • 第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的***值 + 1 作为自己 ACK 报文的***值。
    *客户端:TIME_WAIT ,服务端:LAST_ACK *

  • 服务端收到 ACK 报文。
    客户端:CLOSED,服务端:CLOSED

  • 为什么需要设立TIME_WAIT状态而不是直接CLOSED
    查看是否继续收到服务端第三次挥手重传的FIN报文,如果收到,则表明服务端没有收到第四次挥手时客户端发送的ACK报文。客户端就可以进行重传ACK报文。

  • TCP和UDP的区别

  1. TCP是面向连接(三次握手)的,UDP不需要建立链接(直接开干)。
  2. TCP更可靠(适合大数据量的交换,防止丢失的数据太多),UDP不可靠。
  3. TCP面向字节流,UDP面向报文。
  4. TCP1对1,UDP无限制。
  5. TCP首部为20字节,UDP只有8个(简单结构,闷头开干)。