socket 通訊機制

2021-06-22 12:09:50 字數 1939 閱讀 9297

如何唯一標識乙個程序

在本地可以通過程序pid來唯一標識乙個程序,但是在網路中這是行不通的。其實tcp/ip協議族已經幫我們解決了這個問題,網路層的「ip位址」可以唯一標識網路中的主機,而傳輸層的「協議+埠」可以唯一標識主機中的應用程式(程序)。這樣利用三元組(ip位址,協議,埠)就可以標識網路的程序了,網路中的程序通訊就可以利用這個標誌與其它程序進行互動。

機位元組序就是我們平常說的大端和小端模式:不同的cpu有不同的位元組序型別,這些位元組序是指整數在記憶體中儲存的順序,這個叫做主機序。引用標準的big-endian和little-endian的定義如下:

a) little-endian就是低位位元組排放在記憶體的低位址端,高位位元組排放在記憶體的高位址端。

b) big-endian就是高位位元組排放在記憶體的低位址端,低位位元組排放在記憶體的高位址端。

網路位元組序:4個位元組的32 bit值以下面的次序傳輸:首先是0~7bit,其次8~15bit,然後16~23bit,最後是24~31bit。這種傳輸次序稱作大端位元組序。由於tcp/ip首部中所有的二進位制整數在網路中傳輸時都要求以這種次序,因此它又稱作網路位元組序。位元組序,顧名思義位元組的順序,就是大於乙個位元組型別的資料在記憶體中的存放順序,乙個位元組的資料沒有順序的問題了。

所以:在將乙個位址繫結到socket的時候,請先將主機位元組序轉換成為網路位元組序,而不要假定主機位元組序跟網路位元組序一樣使用的是big-endian。由於這個問題曾引發過血案!公司專案**中由於存在這個問題,導致了很多莫名其妙的問題,所以請謹記對主機位元組序不要做任何假定,務必將其轉化為網路位元組序再賦給socket。

我們知道tcp建立連線要進行「三次握手」,即交換三個分組。大致流程如下:

只有就完了三次握手,但是這個三次握手發生在socket的那幾個函式中呢?請看下圖:

圖1、socket中傳送的tcp三次握手

從圖中可以看出,當客戶端呼叫connect

時,觸發了連線請求,向伺服器傳送了syn j包,這時connect進入阻塞狀態;伺服器監聽到連線請求,即收到syn j包,呼叫accept

函式接收請求向客戶端傳送syn k ,ack j+1,這時accept進入阻塞狀態;客戶端收到伺服器的syn k ,ack j+1之後,這時connect返回,並對syn k進行確認;伺服器收到ack k+1時,accept返回,至此三次握手完畢,連線建立。

總結:客戶端的connect在三次握手的第二個次返回,而伺服器端的accept在三次握手的第三次返回。

socket中tcp的四次握手釋放連線詳解上面介紹了socket中tcp的三次握手建立過程,及其涉及的socket函式。現在我們介紹socket中的四次握手釋放連線的過程,請看下圖:

圖2、socket中傳送的tcp四次握手

圖示過程如下:

這樣每個方向上都有乙個fin和ack

Socket通訊機制

socket套接字起源於美國泊克利大學.方便了開發網路應用程式.tcp面向連線的可靠傳輸協議,具有資料確認和資料重傳機制.保證了傳送資料一定能到達通訊的對方.對資料完整性要求比較高的場合使用 upd協議無連線,不可靠的傳輸協議.不具有資料確認和資料重傳機制,對資料完整性要求比較低的場合使用 ip 網...

Socket程序通訊機制

1 socket通常稱為 套接字 用於描述ip位址和埠,是乙個通訊鏈的控制代碼。2 應用程式通過套接字向網路發出請求或者應答網路請求。3 socket既不是乙個程式,也不是一種協議,其只是作業系統提供的通訊層的一組抽象api。4 程序通訊的相關概念 網間程序通訊要解決的是不同主機程序間相互通訊問題。...

Socket的通訊機制?

套接字 socket 是通訊的基石,是支援tcp ip協議的網路通訊的基本操作單元。它是網路通訊過程中端點的抽象表示,包含進行網路通訊必須的五種資訊 連線使用的協議,本地主機的ip位址,本地程序的協議埠,遠地主機的ip位址,遠地程序的協議埠。應用層通過傳輸層進行資料通訊時,tcp會遇到同時為多個應用...