本節來重現tcp可能出現異常的原因中部分為三次握手的出現的問題.
服務端沒有監聽
服務端沒有監聽, 客戶端傳送ack而服務端tcp協議返回乙個rst段, 客服端呼叫connect
返回錯誤, 錯誤型別是econnrefused.
這個實驗隨便之前的哪乙個**都可以, 只執行客戶端的程式, 抓包就可以看到 :
syn後沒收到ack確認報文
客戶端一直沒有收到對端的ack
確認報文, 當超時後繼續傳送fin, 多次失敗之後客戶端停止嘗試連線並且客戶端connect
函式返回錯誤, 錯誤型別是etimeout.
econnaborted
三次握手成功了, 但是客戶端立馬傳送乙個rst
段後斷開而服務端處於繁忙狀態, 等服務端返回時才發現對端已經關閉, 此時服務端也關閉. 客戶端connect
後立即斷開, 服務端在accept
函式返回前收到rst
段, 則accept
函式返回econnaborted(該錯誤errno依賴作業系統).
完整** accept_econnaborted.c.
這裡羅列的** :
服務端在listen之後, accept之前睡眠5秒.
// 服務端
intservice
(int port,
const
char
*ser_addr)
客戶端呼叫setsockopt
函式, 設定so_linger, 客戶端在 close 的時候不是傳送 fin, 而是rst.
// 客戶端
intclient
(int port,
const
char
*cli_addr)
執行時客戶端後馬上中斷連線, 可以抓包看到, 客戶端傳送的不是fin.
總結還有很多錯誤的可能性沒有整理, 但也不好實驗, 所以三次握手的問題就暫時這些吧.
TCP協議之三次握手
三次握手 三次握手 three way handshake 即建立tcp連線,就是指建立乙個tcp連線時,需要客戶端和服務端總共傳送3個包以確認連線的建立。在socket 程式設計中,這一過程由客戶端執行connect來觸發,整個流程如下圖所示 1 第一次握手 client將標誌位syn置為1,隨機...
TCP基礎之三次握手
tcp協議規定的傳輸格式如下圖所示 這就是三次握手,交流三次,剛看的時候反正一臉懵逼,什麼syn,什麼ack,不了解,也不理解。syn和ack都是標誌位 標誌位 syn 請求建立連線,及tcp傳輸格式中的32位序列 ack 應答,及tcp傳輸格式中的32位確認序列 三次握手 第一次握手 伺服器一般是...
TCP協議學習之三次握手
其實一直都想把知識點複習下,這次不能再拖延了 基本的操作就不介紹了,主要就是選擇當前網路,然後start.在瀏覽器開啟主頁zckongbai.farbox.com,然後在wireshark中過濾當前的ip 網路層次劃分如下,三次握手是傳輸層的tcp協議和應用層之間的互動 所有我們在抓包分析的時候主要...