#### CLOSE_WAIT
> 四次揮手 前面2次
> 發起TCP連接關閉的一方稱為client,被動關閉的一方稱為server。
> 被動關閉的server收到FIN后,但未發出ACK的TCP狀態就是CLOSE_WAIT
> 一般是由于server端代碼的問題
#### TIME_WAIT
> 四次揮手 后面2次
> 當server端調用close()來關閉連接,給client發送PIN,client收到后給server回復ACK確認,同時client關閉讀通道,進入TIME_WAIT狀態
> server接收到client對自己的FIN的確認ACK,關閉寫通道,TCP連接轉化為CLOSE,也就是關閉連接
> client在TIME_WAIT狀態下要等待最大數據段生存期的兩倍,然后才進入CLOSE狀態,TCP協議連接過程結束
為何要讓TIME_WAIT保留2倍的時間
> 保證TCP協議的全雙工連接能夠可靠關閉
*如果client直接close,可能會因為網絡問題,server端沒有收到ack,然后server端又重發pin來關閉,但是client已經關閉了,會找不到連接,這就導致tcp協議不符合可靠連接的要求*
> 保證這次連接的重復數據段從網絡中消息
*如果client直接close,然后又發起一個新連接,不能保證這個新鏈接端口與剛關閉的連接端口是不同的,如果前一次連接的數據仍然在網絡中,這些數據在新連接之后才到達server,server就會認為這是新連接的數據,就出現混淆了。所以需要等待2倍的Maximum Segment Lifetime時間,確保本次連接的所有數據都從網絡中消失。*
> Maximum Segment Lifetime :最大分段壽命,也就是一個TCP分段可以存在于互聯網系統中的最大時間。
- 虛擬機
- JVM內存結構
- JVM調優手段
- java對象生命周期
- 垃圾回收判斷對象死亡
- 垃圾回收算法
- 垃圾收集器
- JAVA基礎知識
- java事件機制
- java反射機制
- jvm創建對象
- java異常
- finally語句一定會執行嗎?
- 集合類介紹
- ArrayList
- LinkedList
- HashMap
- ConcurrentHashMap
- 多線程
- 為什么要使用線程池
- 線程死鎖
- 死鎖檢測和解除
- jstack
- jconsole
- 死鎖預防
- 常見線程池
- 線程池參數
- 工作隊列介紹
- 拒絕策略
- ThreadLocal
- CAS
- ReentrantLock
- AQS
- CountDownLatch
- Spring
- spring中bean的作用域
- REDIS
- redis數據結構
- redis hash實現
- redis rehash與hashmap擴容的區別
- Redis使用場景
- Redis為何這么快
- redis連接數不足導致錯誤
- 分布式
- 分布式事務
- ACID
- CAP
- BASE
- 事務隔離性
- 一致性哈希算法
- 負載均衡算法
- Hystrix 信號量和線程池隔離的差異
- Spring Cloud
- eureka
- MYSQL
- mysql優化經驗
- undo redo binlog
- web
- http協議
- http和https區別
- Cookie和session
- TCP三次握手、4次揮手
- TCP的time_wait和close_wait
- 算法問題
- 編輯距離算法
- MQ
- RabbitMq
- Kafka
- 安裝教程
- Win ELK安裝