TCP協議通訊流程

2021-08-27 15:47:27 字數 827 閱讀 2606

伺服器呼叫socket()、bind()、listen()完成初始化後,呼叫accept()阻塞等待,處於監聽埠的狀態,客戶端呼叫socket()初始化後,呼叫connect()發出syn段並阻塞等待伺服器應答,伺服器應答乙個syn-ack段,客戶端收到後從connect()返回,同時應答乙個ack段,伺服器收到後從accept()返回。

資料傳輸的過程:

建立連線後,tcp協議提供全雙工的通訊服務,但是一般的客戶端/伺服器程式的流程是由客戶端主動發起請求,伺服器被動處理請求,一問一答的方式。因此,伺服器從accept()返回後立刻呼叫read(),讀socket就像讀管道一樣,如果沒有資料到達就阻塞等待,這時客戶端呼叫write()傳送請求給伺服器,伺服器收到後從read()返回,對客戶端的請求進行處理,在此期間客戶端呼叫read()阻塞等待伺服器的應答,伺服器呼叫write()將處理結果發回給客戶端,再次呼叫read()阻塞等待下一條請求,客戶端收到後從read()返回,傳送下一條請求,如此迴圈下去。

如果客戶端沒有更多的請求了,就呼叫close()關閉連線,就像寫端關閉的管道一樣,伺服器的read()返回0,這樣伺服器就知道客戶端關閉了連線,也呼叫close()關閉連線。注意,任何一方呼叫close()後,連線的兩個傳輸方向都關閉,不能再傳送資料了。如果一方呼叫shutdown()則連線處於半關閉狀態,仍可接收對方發來的資料。

在學習socket api時要注意應用程式和tcp協議層是如何互動的: *應用程式呼叫某個socket函式時tcp協議層完成什麼動作,比如呼叫connect()會發出syn段 *應用程式如何知道tcp協議層的狀態變化,比如從某個阻塞的socket函式返回就表明tcp協議收到了某些段,再比如read()返回0就表明收到了fin段

TCP通訊流程

通訊流程 面向連線,可靠傳輸,面向位元組流 面向連線必須在雙方都有資料收發能力的時候,才可以開始通訊。與udp不同的是,udp知道對端位址資訊即可以開始通訊 tcp通訊流程 服務端 1.建立套接字 在核心中建立socket結構體使程序與網絡卡建立聯絡。3.開始監聽 即設定乙個監聽狀態,只有處於監聽狀...

LWIP協議 TCP建立流程

如果客戶端發來tcp連線請求,那麼伺服器端就會呼叫tcp new函式來建立乙個tcp塊。tcp new函式的主體內容就是tcp alloc tcp prio normal 函式,傳遞預設的tcp塊優先順序為64 優先順序範圍1 127 tcp alloc pcb struct tcp pcb mem...

TCP協議及程式設計流程

面向連線 傳送端傳送次數與接收方接收次數無關 send將資料發入傳送緩衝區 recv同理接收至接收緩衝區 傳輸與接收的資料不會因send次數分開,資料是乙個整體,是乙個位元組流 tcp報頭結構 保證能到達 應答確認 超時重傳 保證不亂序 保證不失真 滑動視窗,擁塞控制 待完善,不要做參考 零視窗零視...