Linux網路總結之五 TCP連線中的系列函式

2021-08-16 14:52:41 字數 1392 閱讀 3779

這部分我們研究tcp連線建立與關閉過程中各個api函式的作用與特性。

首先我們看tcp過程的圖示如下:

tcp通訊時socket之間的通訊,所以首先要在核心空間建立socket描述符,其函式如下 :int socket(int domain, int type, int protocol),其中domain指協議族,type指流服務,protocol指具體的協議。返回值為int型整數,代表socket描述符。接著,將socket描述符與你本機上的乙個埠相關聯int bind(int sockfd,struct sockaddr *my_addr, int addrlen);其中sockfd是乙個socket描述符my_addr是乙個指向包含有本機ip位址及埠號等資訊的sockaddr型別的指標;addrlen=sizeof(struct sockaddr)。返回:成功=0;失敗=-1,errno=錯誤號。

listen: 監聽是否有服務請求 ,用於bind()後int listen(int sockfd, int backlog); 

sockfd是socket系統呼叫返回的socket 描述符;backlog指定在請求佇列中允許的最大請求數,預設值為20。返回:成功=0;失敗=-1,errno=錯誤號。

listen用來監聽描述符為sockfd的socket的埠,只有處於核心監聽狀態的埠客戶端才可以傳送connect連線。backlog表示核心監聽佇列的最大長度。該數值在

/proc/sys/net/ipv4/tcp_max_syn_backlog目錄下可以看見。

connect:與遠端伺服器建立乙個tcp連線 (用於客戶端)int connect(int sockfd, struct sockaddr *serv_addr, int addrlen); sockfd是目的客戶端的sockt描述符serv_addr是包含目的機ip位址和埠號的指標。返回:成功=0;失敗=-1,errno=錯誤號。

accept函式返回已連線套接字,int accept(int sockfd, void *addr, int *addrlen); 

sockfd是被監聽的socket描述符,addr 是指向sockaddr_in變數的指標,存放客戶主機的資訊 ;addrten 指向值為sizeof(struct sockaddr_in)的整型指標變數。返回:成功返回乙個新的socket描述符,來供這個新連線來使用。返回tcp連線的描述符。

在訊息的互動過程中,客戶端往自己的socket中寫資料,伺服器往tcp連線描述符裡面寫。send(int sockfd, const void *buf, size_t len, int flags)與recv(int sockfd, void *buf, size_t len, int flags)是寫與讀函式。

網路協議之TCP

為了實現計算機的通訊,我們為計算機定義了一系列的通訊規則,這些規則就是協議.資料格式封裝 傳輸 將複雜的流程分解為幾個功能相對單一的子程序。osi是乙個理想的模型,因此一般網路系統只涉及其中的幾層,很少有系統能夠具有所有的7層,並完全遵循它的規定。在7層模型中,每一層都提供乙個特殊的網路功能。從網路...

網路協議之TCP

為了實現計算機的通訊,我們為計算機定義了一系列的通訊規則,這些規則就是協議.資料格式封裝 傳輸 將複雜的流程分解為幾個功能相對單一的子程序。osi是乙個理想的模型,因此一般網路系統只涉及其中的幾層,很少有系統能夠具有所有的7層,並完全遵循它的規定。在7層模型中,每一層都提供乙個特殊的網路功能。從網路...

網路複習之TCP

1 停止等待協議 每傳送完乙個分組,就停止傳送,等待對方確認。出現差錯,超時重傳。1.1 暫時保留已傳送的分組的副本 1.2 分組和確認分組必須進行編號 1.3 重傳時間比資料在分組傳輸的平均往返時間更長一些 2 連續arq協議 自動重傳請求arq 接收方採用累積確認方式,對按順序到達的最後乙個分組...