日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > ChatGpt >内容正文

ChatGpt

【slighttpd】基于lighttpd架构的Server项目实战(5)—TCP的TIME_WAIT状态

發布時間:2024/1/23 ChatGpt 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【slighttpd】基于lighttpd架构的Server项目实战(5)—TCP的TIME_WAIT状态 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載地址:https://blog.csdn.net/jiange_zh/article/details/50637549

上一節我們已經開發了一個簡單的echo服務器,在這里我們先不急著繼續下去,先看看一些小細節!

在listener的代碼中,對于監聽套接字,我設置了SO_REUSEADDR這個選項,那么,這個選項有什么用呢?

int reuse = 1; setsocket(listen_sockfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse));

要明白這個問題,我們先看看tcp關閉連接的四次握手:

可以看到,主動關閉的一端將經歷TIME_WAIT狀態。

TIME_WAIT狀態有兩個存在的理由——

一、可靠地實現TCP全雙工連接的終止:?
假設主動關閉端最后發送的ACK丟失了,對端將重新發送FIN,主動關閉端只有在維護狀態信息的情況下才能重傳最后那個ACK。否則,主動關閉端將會響應一個RST,對端會將此響應標記為錯誤,所以不能進行正常的關閉。

二、允許老的重復分節在網絡中消逝:?
假設我們在兩個主機之間建立了一個TCP連接,之后關閉這個連接,過一會又在相同的IP地址和端口之間建立另一個連接。由于IP地址和端口號與之前相同,所以如果出現上一個連接的老的重復分組,將會影響到新的連接。為解決這個問題,TCP將不會給處于TIME_WAIT狀態的連接發起這個新的連接。

為解決以上問題,TIME_WAIT狀態需要持續一定的時間,所以TIME_WAIT也被稱為2MSL等待狀態,一般持續時間在1分鐘到4分鐘之間。

關于TCP的各個狀態,建立與終止等情況,可以參考下我的另一篇博文:
《TCP/IP詳解 卷1:協議》 讀書筆記 第十八章 TCP連接的建立與終止

因此,服務器端程序啟用SO_REUSEADDR選項的好處是:如果服務端程序由于某種錯誤操作關閉了,我們需要立馬重啟服務程序,但是TIME_WAIT還占用著這些地址端口資源讓你的服務無法開啟。當開啟SOREUSEADDR這個選項之后,就允許地址端口的重復綁定,使得服務快速重啟。

另外,既然提到TIME_WAIT,有另一個問題需要提一下——

高并發TCP服務器中主動關閉的一方最好是客戶端:?
因為對于高并發服務器來說文件描述符資源是十分重要的,如果對于每一個連接都要經歷TIME_WAIT這個2MSL的時長,勢必造成資源不能馬上復用的浪費。對于客戶端,一般很少有并發資源限制,所以客戶端執行主動關閉是比較合適的。
?

總結

以上是生活随笔為你收集整理的【slighttpd】基于lighttpd架构的Server项目实战(5)—TCP的TIME_WAIT状态的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。