TCP通訊流程

2021-10-07 07:31:22 字數 1382 閱讀 7127

通訊流程:面向連線,可靠傳輸,面向位元組流

面向連線必須在雙方都有資料收發能力的時候,才可以開始通訊。(與udp不同的是,udp知道對端位址資訊即可以開始通訊)

tcp通訊流程:

服務端:

1.建立套接字:在核心中建立socket結構體使程序與網絡卡建立聯絡。

3.開始監聽:即設定乙個監聽狀態,只有處於監聽狀態的套接字才可以連線服務端;服務段會給每乙個連線請求建立乙個新套接字,通過新套接字和客戶端連線通訊,作業系統會設定倆個佇列,乙個佇列用於接收套接字請求,乙個佇列用於放正在通訊的套接字。

4.獲取新套接字:獲取到客戶端傳來的套接字操作控制代碼,通過這個指定的套接字進行通訊。

5.收發資料:為每乙個套接字進行資料傳輸。

6.關閉套接字:關閉套接字,釋放資源。

客戶端

1.建立套接字

2.繫結位址資訊

3.向服務端發起連線請求

4.收發資料

5.關閉套接字

1.建立套接字

int socket(int domain,int type , int protocol)

2.繫結位址資訊

int bind(int sockfd, struct sockaddr *addr,socket_t len)

3.開始監聽

listen(int sockfd,int backlog)

sockfd:將某個套接字設定為監聽狀態,並且監聽狀態可以接收客戶端的連線請求。

backlog:同一時間的併發連線數,決定同一時間最大的連線數

4.獲取新連線

int accend(int sockfd,struct sockaddr *cli_addr,socklen_t *len)

sockfd :監聽套接字,表示要獲取哪個tcp服務端套接字連線

cil_addr:這個新建套接字的位址資訊

len : 位址首席資訊官度;

返回值:新建套接字sockfd,即socket操作控制代碼

5.接收傳送資訊

size_t recv(int sockfd,char *buf,int len ,int flag)

size_t send(int sockfd,char *data ,int len ,int flag)

6.關閉套接字

int close(fd);

7.向服務端發起連線請求

int connect(int sockfd,struct struct sockaddr *srv_addr ,int len)

srv_addr:服務端位址資訊

connect:描述對端位址資訊;

TCP協議通訊流程

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

Linux網路程式設計 搭建TCP通訊流程

1.建立tcp通訊socket函式介面 int socket int domain int type int protocol 引數一 網路層協議 af inet ipv4 internet protocols 引數二 傳輸層協議 sock stream 資料流 tcp sock dgram 資料報...

TCP程式設計流程

tcp是傳輸控制協議的簡稱,是tcp ip體系中的面向連線的傳輸層協議,在網路中提供全雙工的 可靠的服務。在上一章節中可知,tcp通訊是通過套接字通訊機制實現的,具體為流式套接字,用來實現乙個面向連線,可靠的資料傳輸服務。目前較為流行的網路程式設計模型是客戶端 伺服器的通訊模式。伺服器和客戶端使用t...