📌
SRE学习知识点
  • Initial page
  • 系统及网络编程
    • OSI七层和TCP/IP四层
    • TCP拆链的4次握手
    • select、poll和epoll的区别
    • 进程、线程、协程的区别
  • 系统命令相关
    • Top命令
    • AWK文本操作
  • SRE业务
    • Redis
    • CPU高排查
    • SLA SLO SLI
  • 算法类
    • 用数组和链表实现HashMap
    • 2个单向链表在某个地方相交,问如何求出第一个相交点
  • Mysql相关
    • InnoDB 存储引擎性能参数
Powered by GitBook
On this page

Was this helpful?

  1. 系统及网络编程

TCP拆链的4次握手

PreviousOSI七层和TCP/IP四层Nextselect、poll和epoll的区别

Last updated 4 years ago

Was this helpful?

TCP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。

为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的连接请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可能未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。