32 TCP異常之三次握手

2021-09-11 04:18:53 字數 1315 閱讀 6479

本節來重現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協議和應用層之間的互動 所有我們在抓包分析的時候主要...