企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# TCP/UDP > TCP面向有连接,能正确处理丢包,传输顺序错乱的问题,但是为了建立与断开连接,需要至少七次的发包收包。资源浪费。 > UDP面向无连接不管对方有没有收到。 ## 三次握手,四次挥手。 > SYN:发起一个新连接。 FIN:释放一个连接。 ACK:确认序号有效。 #### 握手 hear? yes,can u hear me?yes we can talk. 1. 客户端-发送带有SYN标志的数据包,-第一次握手-服务端。 2. 服务端-发送带有SYN/ACK标志的数据包-二次握手-客户端。 3. 客户端-发送带有ACK标志的数据包-三次握手-服务端。 #### 挥手 1. 客户端-发送FIN,用来关闭客户端到服务器的数据传输。 2. 服务器-收到FIN-发回一个ACK,确认序号为收到的序号加1.与SYN一样,一个FIN将占用一个序号。 3. 服务器-关闭与客户端得连接,发送一个FIN给客户端。 4. 客户端-发回ACK报文确认。并将确认序号设置为收到序号加1. #### 为何建立连接三次,断开连接四次 这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。 ![](https://camo.githubusercontent.com/36cf7d4e1598683fe72a5e1c3e837b16840f4085/687474703a2f2f6f6f327239726e7a702e626b742e636c6f7564646e2e636f6d2f6a656c6c797468696e6b544350342e6a7067) ## 参考 [TCP UDP](https://juejin.im/post/5a0444d45188255ea95b66bc)