国产久操视频-国产久草视频-国产久热精品-国产久热香蕉在线观看-青青青青娱乐-青青青青在线成人视99

  • 正文
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

TCP狀態(tài)轉(zhuǎn)換

01/30 09:25 來源:mindtechnist
751
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

TCP狀態(tài)轉(zhuǎn)換示意圖如下

針對(duì)上面的示意圖,主要對(duì)以下幾點(diǎn)進(jìn)行解析:

有哪些進(jìn)程狀態(tài)是可以捕捉到的?

    • LISTEN、ESTABLISHED、等,其他狀態(tài)時(shí)間很短暫,捕捉不到
    • netstat命令可以捕捉狀態(tài)。

2MSL是什么?

    • 2MSL是等待時(shí)長,主動(dòng)關(guān)閉連接的一方將會(huì)處于TIME_WAIT狀態(tài)
    • 1MSL大概是30S,處于TIME_WAIT狀態(tài)的進(jìn)程(主動(dòng)斷開連接的進(jìn)程)不會(huì)立即終止,而是會(huì)等待2MSL的時(shí)間;而被動(dòng)斷開連接的一方,在LAST_ACK狀態(tài),一旦收到對(duì)方的ACK就會(huì)立即終止進(jìn)程。

為什么主動(dòng)斷開的一方要等2MSL而被動(dòng)斷開的一方不需要等呢?

因?yàn)橛锌赡軙?huì)出現(xiàn)這種情況,主動(dòng)斷開的一方(比如是client)屬于TIME_WAIT時(shí),向被斷開的一方(比如說server)發(fā)送ACK,有可能對(duì)方?jīng)]有收到,這時(shí)侯server會(huì)再發(fā)一次FIN,也就需要client再回復(fù)一次ACK(如果client沒有等待就終止了,那么server發(fā)送的FIN就發(fā)送不到了,四次揮手就失敗了),所以主動(dòng)斷開連接的一方要等待,來保證正常斷開連接,而被斷開的一方收到ACK就可以終止進(jìn)程了,此時(shí)連接正常斷開。

什么是半關(guān)閉?

如何理解半關(guān)閉

    • A給B發(fā)送FIN(A調(diào)用了close函數(shù)), 但是B沒有給A發(fā)送FIN(B沒有調(diào)用close)
    • A斷開了與B的連接, B沒有斷開與A的連接

特點(diǎn):

    • ?A不能給B發(fā)送數(shù)據(jù), A可以收B發(fā)送的數(shù)據(jù)
    • B可以給A發(fā)送數(shù)據(jù)

函數(shù): int shutdown(int sockfd, int how);

sockfd: 要半關(guān)閉的一方對(duì)應(yīng)的文件描述符

通信的文件描述符

how:(可以只關(guān)讀、只關(guān)寫,或讀寫都關(guān))

    • ?SHUT_RD ? ? - ? ? ? ? ? 0 - 讀
    • SHUT_WR ? ? ? ?- ? ? ? ? ? 1 - 寫
    • SHUT_RDWR ? - ? ? ? ? ? 2 - 讀寫

使用close()函數(shù)能否實(shí)現(xiàn)半關(guān)閉?

不能。使用dup2函數(shù)可以復(fù)制一個(gè)文件描述符fd指向和sfd一樣的內(nèi)容,如果使用close(fd)關(guān)閉了對(duì)內(nèi)核緩沖區(qū)的讀寫,但是還存在一個(gè)文件描述符sfd可以讀寫內(nèi)核緩沖區(qū),也就是說通信依然可以進(jìn)行,這樣并不能實(shí)現(xiàn)真正的半關(guān)閉。使用shutdown函數(shù)可以實(shí)現(xiàn)半關(guān)閉,是因?yàn)閟hutdown(fd, SHUT_RD)雖然在函數(shù)中只對(duì)fd關(guān)閉了讀,但是它實(shí)際上是將緩沖區(qū)的讀給關(guān)閉了,所有文件描述符(不管有多少個(gè)),都不能再讀緩沖區(qū)了。

在使用套接字通信時(shí),可以使用netstat命令捕捉進(jìn)程狀態(tài)或使用netstat查看網(wǎng)絡(luò)相關(guān)狀態(tài)信息,netstat的常用參數(shù)如下:

-a (all)顯示所有選項(xiàng),默認(rèn)不顯示LISTEN相關(guān)進(jìn)程,不加-a就不顯示LISTEN進(jìn)程。

-p 顯示建立相關(guān)鏈接的程序名。

-n 拒絕顯示別名,能顯示數(shù)字的全部轉(zhuǎn)化成數(shù)字。

-t (tcp)僅顯示tcp相關(guān)選項(xiàng)。

-u (udp)僅顯示udp相關(guān)選項(xiàng)。

-l 僅列出有在 Listen (監(jiān)聽) 的服務(wù)狀態(tài)。

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計(jì)資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

Linux、C、C++、Python、Matlab,機(jī)器人運(yùn)動(dòng)控制、多機(jī)器人協(xié)作,智能優(yōu)化算法,貝葉斯濾波與卡爾曼濾波估計(jì)、多傳感器信息融合,機(jī)器學(xué)習(xí),人工智能。

淄博市| 周至县| 信宜市| 建阳市| 龙江县| 屯留县| 长兴县| 衡水市| 镇平县| 隆化县| 大冶市| 大田县| 武穴市| 托克托县| 佛坪县| 澎湖县| 南汇区| 嘉鱼县| 淮南市| 彩票| 威海市| 衡山县| 黄冈市| 博兴县| 金川县| 安康市| 青田县| 大邑县| 老河口市| 新田县| 三亚市| 江阴市| 华安县| 剑川县| 渭南市| 阿克陶县| 临猗县| 哈尔滨市| 莱州市| 五寨县| 惠来县|