1.一般情況下,伺服器程序在呼叫accpet函式後處於睡眠狀態,它等待客戶的連線和核心對它的接受。tcp連線使用三路握手來建立(tcp三次握手發生在呼叫accept函式後),當握手完畢時,accept函式返回。
2.三次握手的全過程實現:
下面步驟建立乙個tcp連線:
(1)伺服器必須準備好接受外來的連線。這通過呼叫socket、bind、listen函式來完成,稱為被動開啟。
(2)客戶通過呼叫connect進行主動開啟,這引起客戶tcp傳送乙個syn分節(表示同步),它告訴伺服器客戶將在(待建立的)連線中傳送的資料的初始序列號。一般情況下syn 分節不攜帶資料,它只含有乙個ip頭部、乙個tcp頭部及可能有的tcp選項。
(3)伺服器必須確認客戶的syn,同時自己也得傳送乙個syn分節,它含有伺服器將在同乙個連線中傳送的資料的初始序列號。伺服器以單個分節向客戶傳送syn和對客戶 syn的ack。
(4)客戶必須確認伺服器的syn。
3.四次握手斷開連線——tcp用三個分節建立乙個連線,終止乙個連線則需四個分節
(1)某個應用程序首先呼叫close,我們稱這一端執行主動關閉。這一端的tcp於是傳送乙個fin分節,表示資料傳送完畢。
(2)接收到fin的另一端執行被動關閉,這個fin由tcp確認。它的接收也作為檔案結束符給接收方應用程序(放在已排隊等候該應用程序接收的任何其他資料之後),因為fin的接收意味著應用程序在相應連線上再也接收不到額外資料。
(3)一段時間後,接收到檔案結束符的應用程序將呼叫close關閉它的套介面。這導致它的tcp也傳送乙個fin。
(4)接收到這個fin的原傳送方tcp對它進行確認。
因為每個方向都需要乙個fin和乙個ack,所以一般為4個分節。
UNP 學習筆記 第七章
getsockopt把對套接字的操作放入到optval中 setsockopt對套接字設定操作 開啟 禁止廣播 饒過底層協議的正常路由機制.設定此選項後,2小時內無資料報交換的話,tcp會檢測對端是否存活.接受視窗和傳送視窗 讓select返回可讀 可寫時套接字接受緩衝區中所需的資料量設定超時值 重...
UNP 學習筆記 第十四章
基於多程序伺服器,稍微修改head.h,測試各種io函式 void client echo int sockfd void serv echo int sockfd include include include include include include include include int...
UNP卷一學習筆記 POSIX訊號處理
訊號是告知某個程序發生了某個事件的通知,也叫軟體中斷,通常是非同步發生的。訊號的傳遞 a程序 b程序或者核心 某個程序。當程序收到某一訊號,需要有個相應的處置 disposition 一般通過呼叫sigaction函式來設定對某個特定訊號的處置,並有三種選擇 1 為訊號提供乙個訊號處理函式,這種行為...