99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

一口Linux
認證:優質創作者
所在專題目錄 查看專題
教你如何抓取網絡中的數據包!黑客必備技能
1萬字30張圖說清TCP協議
TCP/IP協議漏洞如此之多?
TCP/IP協議棧在Linux內核中的運行時序分析
linux服務器編程之網絡連接斷掉之后,究竟會發生什么···
兩分鐘,幫你搞懂光纖接頭
作者動態 更多
某通信公司筆試題,你會做幾道?
2天前
10種初學者最常見的c語言段錯誤實例及原因分析
05-30 12:13
linux系統監控工具小神器:btop
05-17 17:37
有沒有權貴開后門讓子女做軟件開發人員?
05-10 23:36
一文包你學會網絡數據抓包
03-15 09:26

linux服務器編程之網絡連接斷掉之后,究竟會發生什么···

連接正常結束:四次揮手,好好告別

1)序號(sequence number):Seq序號,占32位,用來標識從TCP源端向目的端發送的字節流,發起方發送數據時對此進行標記。

2)確認號(acknowledgement number):Ack序號,占32位,只有ACK標志位為1時,確認序號字段才有效,Ack=Seq+1。

3)標志位(Flags):共6個,即URG、ACK、PSH、RST、SYN、FIN。具體含義如下:

ACK:確認序號有效。

RST:重置連接。

SYN:發起一個新連接。

FIN:釋放一個連接。

為何建立連接時一起傳輸,釋放連接時卻要分開傳輸?

建立連接時,被動方服務器端結束CLOSED階段進入“握手”階段并不需要任何準備,可以直接返回SYN和ACK報文,開始建立連接。釋放連接時,被動方服務器,突然收到主動方客戶端釋放連接的請求時并不能立即釋放連接,因為還有必要的數據需要處理,所以服務器先返回ACK確認收到報文,經過CLOSE-WAIT階段準備好釋放連接之后,才能返回FIN釋放連接報文。

為什么客戶端在TIME-WAIT階段要等2MSL?

為的是確認服務器端是否收到客戶端發出的ACK確認報文

當客戶端發出最后的ACK確認報文時,并不能確定服務器端能夠收到該段報文。所以客戶端在發送完ACK確認報文之后,會設置一個時長為2MSL的計時器。MSL指的是Maximum Segment Lifetime:一段TCP報文在傳輸過程中的最大生命周期。2MSL即是服務器端發出為FIN報文和客戶端發出的ACK確認報文所能保持有效的最大時長。

服務器端在1MSL內沒有收到客戶端發出的ACK確認報文,就會再次向客戶端發出FIN報文;

如果客戶端在2MSL內,再次收到了來自服務器端的FIN報文,說明服務器端由于各種原因沒有接收到客戶端發出的ACK確認報文。客戶端再次向服務器端發出ACK確認報文,計時器重置,重新開始2MSL的計時;否則客戶端在2MSL內沒有再次收到來自服務器端的FIN報文,說明服務器端正常接收了ACK確認報文,客戶端可以進入CLOSED階段,完成“四次揮手”。

所以,客戶端要經歷時長為2SML的TIME-WAIT階段;這也是為什么客戶端比服務器端晚進入CLOSED階段的原因。

這些東西畢竟都是停留在理論層面的,實際的場景可比這要錯綜復雜的多了。

故障模式

網絡中斷

如果網絡發生了中斷,那就不用提什么“主動關閉”,什么“FIN”包了。TCP程序也并不能感應到連接異常,除非路由器發出一條ICMP報文,說明目的網絡或主機不可達;或者說通過read或write調用才會返回UNreachable的錯誤。

可惜大多數時候并不是如此,在沒有 ICMP 報文的情況下,TCP 程序并不能理解感應到連接異常。如果程序是阻塞在 read 調用上,那么很不幸,程序無法從異常中恢復。

如果程序先調用了 write 操作發送了一段數據流,接下來阻塞在 read 調用上,結果會非常不同。Linux 系統的 TCP 協議棧會不斷嘗試將發送緩沖區的數據發送出去,大概在重傳 12 次、合計時間約為 9 分鐘之后,協議棧會標識該連接異常,這時,阻塞的 read 調用會返回一條 TIMEOUT 的錯誤信息。如果此時程序還執著地往這條連接寫數據,寫操作會立即失敗,返回一個 SIGPIPE 信號給應用程序。

而一旦返回了這種信號,進程就會被終止掉了。也就是我們常說的,程序崩了。

對端有 FIN 包發出

這種情況呢,是比較常見的了,至少在我這里是比較常見的,一般不會造成太惡劣的影響,除非在同一時間內有大批量的連接斷開,那會占用很多的資源的。

對端如果有 FIN 包發出,可能的場景是對端調用了 close 或 shutdown 顯式地關閉了連接,也可能是對端應用程序崩潰,操作系統內核代為清理所發出的。從應用程序角度上看,無法區分是哪種情形。

阻塞的 read 操作在完成正常接收的數據讀取之后,FIN 包會通過返回一個 EOF 來完成通知,此時,read 調用返回值為 0。這里強調一點,收到 FIN 包之后 read 操作不會立即返回。你可以這樣理解,收到 FIN 包相當于往接收緩沖區里放置了一個 EOF 符號,之前已經在接收緩沖區的有效數據不會受到影響。

服務器斷開

注意如果我們的速度不夠快,導致服務器端從睡眠中蘇醒,并成功將報文發送出來后,客戶端會正常顯示,此時我們停留,等待標準輸入。如果不繼續通過 read 或 write 操作對套接字進行讀寫,是無法感知服務器端已經關閉套接字這個事實的。

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 3
收藏 2
關注 181
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧
主站蜘蛛池模板: 亚洲综合憿情五月丁香五月网 | 欧美日韩免费观看视频 | 国产精品二区三区在线观看 | 国产欧美日韩综合 | 日韩精品美腿丝袜 | 亚洲影院久久精品 | 久久国产精品成人无码网站 | 美女久久视频 | 99re免费视频精品全部 | 飘雪影院免费版在线观看视频 | 欧美黄色一级片视频 | 国产大片中文字幕在线观看 | 色综合激情一区二区三区 | 日韩一本之道一区中文字幕 | 精品国自产拍天天拍 | 人妻无码中文专区久久综合 | 成年网站在线播放 | wwwxxx在线播放 | 午夜在线播放视频 | 欧美日韩一级在线 | 午夜精品区 | 国产午夜福利视频在线观看 | 国产在线视频不卡一区二区 | 人人摸人人操 | 国产高中美女福利剧情简介 | 大胆日本熟妇XXXX | 国产综合色视频 | 国产日韩精品中文字无码樱花 | 亚洲无吗视频在线 | www在线免费 | 色大18成网站www在线观看 | 久久精品欧洲 | 免费视频mv在线观看 | 麻豆最新国产剧情AV原创 | 国产一区二区三区四区五区加勒比 | 麻豆剧场 | 欧美日韩精品一区二区三区四区 | 亚洲精品久久久久中文字幕 | 日产精品卡一卡2卡三卡四 最新成人网址 | 午夜免费看 | 国产欧美久久一区二区三区 |