Skip to main content

tcp

TCP

https://lucifer.ren/fe-interview/#/topics/network/tcp

TCP 三次握手和四次挥手

三次握手

  • 客户端发消息给服务端(SYN)
  • 服务器针对客户端的 SYN 返回一个 ACK,并且发送一个 SYN 给客户端
  • 客户端针对服务端的 SYN 返回一个 ACK,服务端收到后确认连接

四次挥手

  • 客户端要求断开连接,发送一个断开的请求,这个叫作(FIN)
  • 服务端收到请求,发送给客户端一个 ACK,作为 FIN 的响应
  • 同时通知自己相应的应用程序:对方要求关闭连接,可能还有发送出去的消息没响应,或者还有资源需要释放。确认可以关闭连接后,服务器向客户端发送一个 FIN
  • 客户端收到这个 FIN 后,确认可以关闭连接,向服务端发送一个 ACK 表示连接彻底释放

TCP 如何保证可靠传输

  • 握手,应答机制
  • 滑动窗口控制
    • 滑动窗口是 TCP 协议控制可靠性的核心。发送方将数据拆包,变成多个分组,然后将这些分组放入一个拥有滑动窗口的数组,按先入先出(FIFO)的顺序依次发出。
    • 窗口中的分组会一次性发送
    • 窗口中最小的分组如果收到 ACK,窗口就会发生滑动,如果最小序号的分组长时间没有收到 ACK,就会触发整个窗口的数组重新发送
    • 发送方窗口和接收方窗口的区别在于已发送部分就等于已接收,中间为窗口,未发送部分就是未接收部分。窗口大小通常是接收方决定,当接收方给发送方回复 ack 的时候会携带接收方窗口大小,发送方就会根据这个回复来动态调整自己的窗口大小
  • 快速重传【WIP】
  • 拥塞控制
    • 慢启动--指数启动--线性--回归慢启动

对比 DCP

  • 可靠性差异。TCP 会保证数据正确性和顺序,在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。UDP 只管发送数据封包。
  • 基于连接与无连接
  • 传输速度
  • 场景差异
  • 流控技术。TCP 在发送缓冲区中存储数据,并在接收缓冲区中接收数据

TCP 是怎么判断丢包的?

参考 https://zhuanlan.zhihu.com/p/101702312