建立乙個tcp連線時會發生三路握手的情形。
(1)一般都是客戶主動發起連線,稱為 主動開啟 active open。客戶先呼叫socket函式建立乙個套接字,做了相應的初始化工作之後,然後呼叫connect函式向相應的伺服器發起連線,此時客戶tcp傳送了乙個syn同步分節,這個同步分節告訴伺服器,客戶將在(待建立的)連線中傳送的資料的初始序列號。在連線建立之前,connect函式會阻塞。
(2)一般而言,在客戶發起連線之前,伺服器已經準備好了接受外來的連線,這是通過呼叫socket、bind、listen函式來完成的,我們把伺服器的這種等待客戶發起連線的行為稱作 被動開啟 passive open。伺服器接下來會呼叫accept函式,伺服器程序在accept呼叫中被投入睡眠,它等待某個客戶連線的到達並被核心接受。等到伺服器接受到客戶發來的同步分節後,必須做相應的 確認 ack。若客戶傳送的syn初始序列號為j,則伺服器的ack確認號為j+1。與此同時,伺服器也帶傳送乙個syn 同步分節,這個syn含有伺服器將在同一連線中傳送的資料的初始序列號,設為k。注意,伺服器是在乙個分節中傳送syn和ack的。(要是分兩次傳送,就不是三路,而是四路握手了)
(3)客戶接收到伺服器的syn及ack之後,必須也要做相應的確認,即傳送ack至伺服器,此時的確認號為k+1。
以上即為tcp連線時的三路握手。
握手完畢之後,伺服器的accept函式返回,返回值是乙個稱為 已連線描述符 connected descriptor的新描述符(一般程式均作connfd)。該描述符用於與新近連線的那個客戶通訊。accept函式為每個連線到本伺服器的客戶返回乙個新描述符。然後伺服器的read函式處於阻塞狀態。
TCP連線的三路握手
本文內容參考 unix網路程式設計 大概描述了tcp連線的三次握手過程,這是我看到的最清楚的描述,記錄在這裡,希望能幫助到大家對於tcp連線過程的理解。傳輸控制協議 tcp 是tcp ip協議簇裡非常重要的乙個協議。它提供客戶與伺服器之間的連線,並且提供可靠的資料傳輸功能。關於這個協議的具體規定,請...
三路握手和四次揮手
這是我在書上拍的圖大家湊合看,圖雖不漂亮但是內容好啊 伺服器呼叫socket,bind,listen,後處於listen狀態 楨聽來自遠方tcp埠的連線請求 稱之為被動開啟。客戶端通過呼叫connect激發三路握手,呼叫connect後處於syn sent狀態 在傳送連線請求後等待匹配的連線請求 這...
科目三路考
7號從廣州坐高鐵回家。上次2月28號去河源長訓,3月1號回廣州,才過6天又回家鄉路考。日,坐車坐到吐 3月9號,10號早上兩天教練有帶我學下,乙個早上大概開25分鐘吧。9號真是被辱到沒臉,一車坐4個學員,我開得很差,具體不說了。開完後,教練說 路考合格率6成多,定死的 一車4人3個過那不就得。啊啊....