面向連線的協議 2

2021-09-30 05:32:20 字數 1418 閱讀 3530

面向連線的協議—伺服器端

由圖我們可以看出,伺服器與客戶的區別在於:

伺服器必須進行套介面繫結。因為如果伺服器沒有位址,客戶就無法進行連線。

s3 的作用在於告訴核心,在某個套介面上監聽並接收請求。

伺服器需要監聽連線。

下面,我們介紹一下有關的函式,

int listen(int sockfd, int backlog);

s: 用於監聽的套介面。backlog: 監聽佇列(the queue of pending connections) 的最大長度。

2.2 之後的版本中,backlog 的值只包括與監聽套介面建立了的連線數。

成功:返回0 ,否則,返回 -1 ,失敗原因 在 errno 中。

如上圖,對listen 函式呼叫成功後,在linux 核心中建立了乙個監聽佇列,它的長度由

backlog 決定。 圖中正在處理請求1 , 第2 到 第5 的連線請求被掛起,第6 個請求正在插入佇列,同時核心還收到了7,8,9 號 連線。更多的連線正在到達的路上。

accept 函式

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

sockfd: 由socket() 建立,已經用bind() 繫結了乙個本地位址,正在監聽連線的套介面的描述符。

addr: 用於存放通訊的另一端(客戶)的套介面位址的變數。

addrlen: 既是輸入引數又是輸出引數。作為輸入引數,它指定了addr 的最大長度。作為輸出引數,當函式返回後,它代表了位址的實際長度。

如果函式呼叫成功,它返回乙個新的套介面描述符。否則,返回 -1, 錯誤的原因記錄在errno

中。在新的套介面代表伺服器端與客戶端進行通訊。當客戶請求處理完畢時,這個由accept 返回的套介面將關閉。而為了能夠接收新的使用者請求,在此期間,sockfd 指定的,也就監聽套介面,一直處於開啟狀態。

小節:這裡提到了兩種套介面,一種是監聽套介面,數量只有乙個,作用是接收使用者請求並建立新的套機口(通訊套介面)。另一種,accept 返回的通訊套介面,它同使用者程序連線,並實現資料的讀寫操作。

下面是乙個簡單的tcp/ip 伺服器程式,用來代替 daytime 伺服器。

成功。擴充套件:tcp/ip 的1~1024 埠都被保留起來了,一般自己寫的伺服器程式使=1024 的埠

0: 表示通配埠,系統會自動的為它分配乙個沒有使用的埠。

inaddr_any: 通配ip 位址。

嚴格意義上講,伺服器的位址包括 ip 位址和埠號兩部分。

乙個伺服器位址不能完全通配。伺服器位址完全通配,當且僅當 ip 位址和埠號都通配。

這樣,在指定了特定埠號後,ip 位址部分可以通配(inaddr_any), 這使得伺服器可以接受客戶發往任何乙個本地介面的連線請求。當乙個主機有多個ip 介面時(如閘道器),這極為重要。

5 面向非連線的協議

非連線通訊的優點 1.簡單,不需要建立連線 2.靈活,每次訊息傳送都可以指定到不同的接收者。3.高效,因為不需要建立和消除連線,避免了大量在網路中的傳遞訊息分組的開銷。4.快速,不需要建立和拆除連線,只有訊息本身被傳送。5.具有廣播能力,可以將乙個訊息同時向多個接收者傳送。非連線通訊的缺點 1.通訊...

svc ftp協議資料連線的2種模式

玩明白了乙太網2的二層資料格式,ip格式 tcp udp個時候,需要玩一玩一些有用的基於這些已上的協議資料了.如 dhcp ftp等.比較有趣.分控制連線21埠 和資料連線 20埠 資料連線站在服務端角度來講分兩種模式 主動模式 服務端主動用自己的20埠去連客戶端,適合防火牆 被動模式 服務端被動等...

svc ftp協議資料連線的2種模式

玩明白了乙太網2的二層資料格式,ip格式 tcp udp個時候,需要玩一玩一些有用的基於這些已上的協議資料了.如 dhcp ftp等.比較有趣.分控制連線21埠 和資料連線 20埠 資料連線站在服務端角度來講分兩種模式 主動模式 服務端主動用自己的20埠去連客戶端,適合防火牆 被動模式 服務端被動等...