4.23 TCP狀態(tài)轉(zhuǎn)換
- 2MSL(Maximum Segment Lifetime)
主動(dòng)斷開連接的一方,最后進(jìn)入一個(gè)TIME_WAIT狀態(tài),這個(gè)狀態(tài)會(huì)持續(xù):2msl
msl:官方建議:2分鐘,實(shí)際是30s
當(dāng) TCP 連接主動(dòng)關(guān)閉方接收到被動(dòng)關(guān)閉方發(fā)送的 FIN 和最終的 ACK 后,連接的主動(dòng)關(guān)閉方必須處于TIME_WAIT 狀態(tài)并持續(xù) 2MSL 時(shí)間。
這樣就能夠讓 TCP 連接的主動(dòng)關(guān)閉方在它發(fā)送的 ACK 丟失的情況下重新發(fā)送最終的 ACK。
主動(dòng)關(guān)閉方重新發(fā)送的最終 ACK 并不是因?yàn)楸粍?dòng)關(guān)閉方重傳了 ACK(它們并不消耗序列號(hào),被動(dòng)關(guān)閉方也不會(huì)重傳),而是因?yàn)楸粍?dòng)關(guān)閉方重傳了它的 FIN。事實(shí)上,被動(dòng)關(guān)閉方總是重傳 FIN 直到它收到一個(gè)最終的 ACK。
4.24半關(guān)閉、端口復(fù)用
- 半關(guān)閉
當(dāng) TCP 鏈接中 A 向 B 發(fā)送 FIN 請(qǐng)求關(guān)閉,另一端 B 回應(yīng) ACK 之后(A 端進(jìn)入 FIN_WAIT_2狀態(tài)),并沒(méi)有立即發(fā)送 FIN 給 A,A 方處于半連接狀態(tài)(半開關(guān)),此時(shí) A 可以接收 B 發(fā)送的數(shù)據(jù),但是 A 已經(jīng)不能再向 B 發(fā)送數(shù)據(jù)。
使用 close 中止一個(gè)連接,但它只是減少描述符的引用計(jì)數(shù),并不直接關(guān)閉連接,只有當(dāng)描述符的引用計(jì)數(shù)為 0 時(shí)才關(guān)閉連接。shutdown 不考慮描述符的引用計(jì)數(shù),直接關(guān)閉描述符。也可選擇中止一個(gè)方向的連接,只中止讀或只中止寫。
注意:
- 如果有多個(gè)進(jìn)程共享一個(gè)套接字,close 每被調(diào)用一次,計(jì)數(shù)減 1 ,直到計(jì)數(shù)為 0 時(shí),也就是所用進(jìn)程都調(diào)用了 close,套接字將被釋放。
- 在多進(jìn)程中如果一個(gè)進(jìn)程調(diào)用了 shutdown(sfd, SHUT_RDWR) 后,其它的進(jìn)程將無(wú)法進(jìn)行通信。但如果一個(gè)進(jìn)程 close(sfd) 將不會(huì)影響到其它進(jìn)程。
端口復(fù)用
端口復(fù)用最常見(jiàn)的用途是:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-497627.html
- 防止服務(wù)器重啟時(shí)之前綁定的端口還未釋放
- 程序突然退出而系統(tǒng)沒(méi)有釋放端口
#include <sys/types.h>
#include <sys/socket.h>
//設(shè)置套接字屬性(不僅僅能設(shè)置端口復(fù)用)
int setsockopt(int sockfd,int level,int optname,const void* optval,socklen_t optlen);
-sockfd:打開的套接字的文件描述符
-level:級(jí)別 SOL_SOCKET(端口復(fù)用的級(jí)別)
-optname:
-SO_REUSEPORT 允許重用端口復(fù)用
-SO_REUSEADDR
-optval:端口復(fù)用的值(整形)
-1:可以復(fù)用
-0:不可以復(fù)用
-optlen:optval參數(shù)的大小
端口復(fù)用,設(shè)置的時(shí)機(jī)是在服務(wù)器端口綁定端口之前
常看網(wǎng)絡(luò)相關(guān)信息的命令
netstat
參數(shù)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-497627.html
- a 所有的socket
- p 顯示正在使用socket的程序名稱
- n 直接使用IP地址,而不通過(guò)域名服務(wù)器
netstat -anp|grep 9999
到了這里,關(guān)于4.23 TCP狀態(tài)轉(zhuǎn)換 4.24半關(guān)閉、端口復(fù)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!