Linux C程式設計 六 之 網路程式設計 上

2021-09-21 18:47:22 字數 1178 閱讀 7404

網路協議棧

網路基礎

tcp連線的三次握手和四次揮手

三次握手

tcp協議通過三個報文段完成連線的建立,這個過程稱為三次握手(three-way handshake),過程如下圖所示。

當客戶端呼叫connect時,觸發了連線請求,向伺服器傳送了syn j包,這時connect進入阻塞狀態;伺服器監聽到連線請求,即收到syn j包,呼叫accept函式接收請求向客戶端傳送syn k ,ack j+1,這時accept進入阻塞狀態;客戶端收到伺服器的syn k ,ack j+1之後,這時connect返回,並對syn k進行確認;伺服器收到ack k+1時,accept返回,至此三次握手完畢,連線建立

四次揮手

由於tcp連線是全雙工的,因此每個方向都必須單獨進行關閉。這個原則是當一方完成它的資料傳送任務後就能傳送乙個fin來終止這個方向的連線。收到乙個 fin只意味著這一方向上沒有資料流動,乙個tcp連線在收到乙個fin後仍能傳送資料。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。

(1)客戶端a傳送乙個fin,用來關閉客戶a到伺服器b的資料傳送(報文段4)。

(2)伺服器b收到這個fin,它發回乙個ack,確認序號為收到的序號加1(報文段5)。和syn一樣,乙個fin將占用乙個序號。

(3)伺服器b關閉與客戶端a的連線,傳送乙個fin給客戶端a(報文段6)。

(4)客戶端a發回ack報文確認,並將確認序號設定為收到序號加1(報文段7)。

不做過多文字描述…有錯誤之處歡迎指出。

linux c程式設計 網路程式設計

在網路上,通訊服務都是採用 c s機制,也就是客戶端 伺服器端工作流程 使用socket 函式建立伺服器端通訊套介面 使用bind 函式將建立的套介面與伺服器位址繫結 使用listen 函式使伺服器套介面做好接收連線請求準備 使用accept 接收來自客戶端由connect 函式發出的連線請求 根據...

Linux C程式設計 八 之 網路程式設計(下)

這裡運用前兩篇的內容做出以下例項 server include include include include include include include 列印 執行方式 static void usage const char proc void thread run void arg mem...

Linux C 網路程式設計教程

1 tcp 套接字通訊工作流程 一.面向連線的套接字socket通訊工作流程 為了實現伺服器與客戶機的通訊,伺服器和客戶機都必須建立套接字。伺服器與客戶機的工作原理可以用下面的過程來描述。1.伺服器先用 socket 函式來建立乙個套接字,用這個套接字完成通訊的監聽。2.用 bind 函式來繫結乙個...