Socket程序通訊機制

2021-06-28 09:16:51 字數 2597 閱讀 6500

1、socket通常稱為「套接字」,用於描述ip位址和埠,是乙個通訊鏈的控制代碼。

2、應用程式通過套接字向網路發出請求或者應答網路請求。

3、socket既不是乙個程式,也不是一種協議,其只是作業系統提供的通訊層的一組抽象api。

4、程序通訊的相關概念:

網間程序通訊要解決的是不同主機程序間相互通訊問題。為此,首先要解決的是網間程序標識問題。同一主機上,不同程序可用唯一程序號(process id)標識。

(1)埠:網路中可以被命名和定址的通訊埠,是作業系統可分配的一種資源,用於標識通訊的程序

傳輸層和網路層在功能上功能上的最大區別是傳輸層提供程序通訊能力。

埠是一種抽象的軟體結構。應用程式(即程序)通過系統呼叫與某埠建立連線(binding)後,傳輸層傳給該埠的資料都被相應的程序所接收,相應的程序發給傳輸層的資料都通過該埠輸出。

類似於檔案描述符,每乙個埠都擁有乙個埠號,都是整數型識別符號,用於區別不同埠。

tcp/udp段結構中埠的位址都是16位元,有0~65535個埠號。

常見的埠號有,ftp(22)、http(80)、smtp(25)等。

網路通訊中通訊的兩個程序分別處在不同的機器上,應遵循以下原則:

某台主機可以與多個網路相連,必須指定乙個特定的網路位址;

網路上每台主機應有唯一的位址;

每台主機的每個程序應有在該主機上的唯一識別符號

(3)連線:

兩個程序間的通訊鏈路稱為連線。連線表現為一些緩衝區和一組協議機制。

5、socket是一種服務,與其實現的語言無關。基於這個性質,我們能實現不同服務之間,不同語言之間的互聯互通。

6、注意乙個小知識點:本地程序間通過tcp通訊,使用fiddler等抓包工具是抓不到資料的。主要是因為回環介面的機制,這些包不會到達網絡卡,資料報直接被返回到傳輸層的輸入佇列中去了。

7、socket函式原型:

socket socket(int af, int type, int protocol);

af:指定應用程式使用的通訊協議的協議族,對於tcp/ip協議族該引數設定為an_inet,對於unix可建立本地socket

type:指定建立socket型別:

流套接字型別(sock_stream):最常見的型別,基於tcp協議

資料報套接字型別(sock_dgram):即udp資料報

原始套接字型別(sock_raw):在ip層對套接字進行程式設計

protocol:指定應用程式所使用的通訊協議。最常用的是tcp和udp

流套接字和資料報套接字不能完成的任務,可以在原始套接字中得以實現。

8、socket從傳輸模式上又分為端對端和點對點的連線,流套接字和資料報套接字都屬於端對端的連線,因此需要繫結埠號。而原始套接字是基於ip協議的,屬於點對點的傳輸模式,是沒有埠這個概念的。比如常用的監測網路連線ping命令,就是基於icmp協議的,它不存在埠的概念。

9、php中的socket函式:

(1)socket_create(int $domain, int $type, int $proticol):建立乙個socket

第乙個引數指定socket建立時所使用的通訊協議族  af_inet(基於ipv4)、af_inet6(基於ipv6)、af_unix(unix本地通訊協議)

第二個引數指定socket通訊的互動型別,sock_stream(可靠的全雙工鏈結,支援tcp)、sock_dgram(自動定址資訊功能,支援udp)等

第三個引數指定搜才可以使用何種型別處理協議,包括icmp、udp、tcp

(2)socket_bind(resource $socket, string $address[, int $port = 0]):將ip位址和埠繫結到socket_create()所建立的控制代碼

第乙個引數是必選引數,其值是socket_create()建立的控制代碼

第二個引數是必選引數,其值是要繫結的ip位址

第三個引數是可選引數,其值是要繫結的埠號

(3)socket_listen($socket[, $backlog = 0]):用於監聽客戶端資料

第乙個引數是socket控制代碼

第二個引數的允許的最大連線數

(4)socket_set_block($socket):設定為非阻塞模式

(5)socket_write($socket, $buffer[, $length=0]):使用此函式想socket寫入資料

(6)socket_read($socket, $length[, $type = php_binary_read]):讀取指定長度的資料

(7)fsockopen($hostname, [$port = -1 [, $errno [, $errstr [$timeout = ini_get["default_socket_timeout"] ]]]) :實現長連線

(8)socket_set_option($socket, $level, $optname, $optval):設定socket的控制選項

(9)socket_last_error([$socket]):返回操作中任何socket產生的最後錯誤,返回值是乙個int型的錯誤代號

Socket通訊機制

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

socket 通訊機制

如何唯一標識乙個程序 在本地可以通過程序pid來唯一標識乙個程序,但是在網路中這是行不通的。其實tcp ip協議族已經幫我們解決了這個問題,網路層的 ip位址 可以唯一標識網路中的主機,而傳輸層的 協議 埠 可以唯一標識主機中的應用程式 程序 這樣利用三元組 ip位址,協議,埠 就可以標識網路的程序...

Socket的通訊機制?

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