第五章 基於TCP的伺服器端 客戶端(2)

2021-08-04 19:13:34 字數 1576 閱讀 5083

《tcp/ip網路程式設計》 尹聖雨

p82~p90 關於《回聲客戶端的完美實現》不是特別理解、需要再回過頭來再看看。主要學習了第二節部分內容的tcp原理。

p91~p96

tcp原理

tcp套接字中的i/o緩衝

write函式呼叫後並非立即傳輸資料,read函式呼叫並非馬上接收資料。write函式呼叫瞬間,資料將轉移至輸出緩衝池;read函式呼叫瞬間,從輸入緩衝池讀取資料。

呼叫write函式時,資料將移動到輸出緩衝池,在適當時候(分別傳送或一次性傳送)傳向對方的輸入緩衝。這時對方將呼叫read函式從輸入緩衝讀取資料。

i/o緩衝特性:

1)i/o緩衝在每個tcp套接字中單獨存在;

2)i/o緩衝在建立套接字時自動生成;

3)即使關閉套接字也會繼續傳遞輸出緩衝中遺留的資料;

4)關閉套接字將丟失輸入緩衝中的資料。

不會發生超過輸入緩衝大小的資料傳輸。(因為tcp會控制資料流,tcp有滑動視窗協議)資料收發也是如此,因為tcp中不會因為緩衝溢位而丟失資料。

注意:write函式和windows的send函式並不會在完成向對方主機的資料傳輸時返回,而是在資料移到輸出緩衝時。但tcp會保證對輸出緩衝資料的傳輸,所以說write函式在資料傳輸完成時返回。

tcp內部工作原理1:與對方套接字的連線

tcp套接字從建立到消失所經過程分為如下3步。

1)與對方套接字建立連線。

2)與對方套接字進行資料交換。

3)斷開與對方套接字的連線。

tcp在實際通訊過程中也會經過3次對話過程,稱為三次握手three-way handshaking。

套接字以全雙工full-dplex方式工作的,即可以雙向傳遞資料、

首次請求連線時使用的資訊,稱syn,synchronization,表示收發資料前傳輸的同步資訊。

對主機a首次傳輸的資料報的確認訊息ack和為主機b傳輸資料做準備的同步訊息(seq 2000)**傳送,此種訊息稱為syn+ack。

收發資料前向資料報分配序號,並向對方通報此序號,這都是為防止資料丟失做準備。通過向資料報分配序號並確認,可以在資料丟失時馬上檢視並重傳丟失的資料報。因為tcp可以保證可靠的資料傳輸。

tcp內部工作原理2:與對方主機的資料交換

ack號的增量為傳輸的資料位元組數。若每次ack號不加傳輸的位元組數,雖然可以確認資料報的傳輸,但無法明確所有位元組全都正確傳遞還是丟失了一部分。

ack號→seq號+傳遞的位元組數+1

為完成資料報重轉, tcp套接字啟動計時器以等待ack應答。若相應計時器發生超時則重轉。

tcp的內部工作原理3:斷開與套接字的連線

先由套接字a向套接字傳遞斷開連線的資訊,套接字b發出確認收到的訊息,然後向套接字a傳遞可以斷開連線的訊息,套接字a同樣發出確認訊息。

資料報內的fin表示斷開連線,也就是說雙方各傳送一次fin訊息後斷開連線,此過程經歷4個階段,稱為四次握手。

tcp/ip協議三次握手與四次握手

基於UDP的伺服器端和客戶端

前面的文章中我們給出了幾個tcp的例子,對於udp而言,只要能理解前面的內容,實現並非難事。udp不像tcp,無需在連線狀態下交換資料,因此基於udp的伺服器端和客戶端也無需經過連線過程。也就是說,不必呼叫 listen 和 accept 函式。udp中只有建立套接字的過程和資料交換的過程。tcp中...

6 1 基於UDP的伺服器端 客戶端

1.udp套接字原理 可靠性方面來說,tcp的確比udp好,但是udp的結構比tcp簡潔,不會傳送類似ack應答訊息,也不會有seq序號,效能有時比tcp高出很多。同時區分tcp和udp的重要標誌是流控制 tcp的生命在於流控制。圖中,ip的作用是讓離開主機b的udp資料報準確傳送到主機 但是最終交...

基於UDP的伺服器端和客戶端

前面的文章中我們給出了幾個 tcp 的例子,對於 udp 而言,只要能理解前面的內容,實現並非難事。udp 不像 tcp,無需在連線狀態下交換資料,因此基於 udp 的伺服器端和客戶端也無需經過連線過程。也就是說,不必呼叫 listen 和 accept 函式。udp 中只有建立套接字的過程和資料交...