Socket進程通信機制

Socket進程通信機制

 

  Socket通常稱爲“套接字”,用於描述IP地址和端口,是一個通信鏈的句柄。應用程序通過套接字向網絡發出請求或者應答網絡請求。Socket既不是一個程序,也不是一種協議,其只是操作系統提供的通信層的抽象API。

 

進程通信相關概念

  進程通信的概念最初來源單機系統。由於每個進程都在自己的地址範圍內運行,爲保證兩個相互通信的進程之間既互不干擾又協調一致工作,操作系統爲進程提供了相應設施 ,如UNIX BSD的管道(Pipe)、命名管道(named pipe)和軟中斷信號 (signal),以及Unix System V的消息(message)、共享存儲區(shared memory)和信號量(semaphore)等 ,但這些都僅限於用在本機進程之間的通信。網間進程通信要解決的是不同主機進程間的相互 通信問題(可把網機進程通信看作是其中的特例)。爲此,首先要解決的是網間進程標識問題。同一主機上,不同進程可用唯一進程號(Process ID)標識。

  網絡環境下,各主機獨立分配的進程號不能唯一標識該進程。例如,主機A賦予某進程號5,在B機也可以存在5號進程,因此,“5號進程”就沒有意義了。

  操作系統支持的網絡協議衆多,不同協議的工作方式不同,地址格式也不同。因此,網間進程通信還要解決多重協議的識別問題。

  爲了解決上述問題,TCP/IP協議引入了下列概念。

  1. 端口

  網絡中可以被命名和尋址的通信端口,是操作系統可分配的一種資源。

  按照OSI七層協議的描述,傳輸層與網絡層在功能上的最大區別是傳輸層提供進程通信能力。從這個意義上講,網絡通信的最終地址就不僅僅是主機地址了,還包括可以描述進程某種標識符。爲此,TCP/IP協議 提供出協議端口(Protocol Port,簡稱端口)的概念,用於標識通信的進程。

  端口是一種抽象的軟件結構(包括一些數據結構和I/O緩衝區)。應用程序(即進程)通過系統調用與某端口建立連接(binding)後。傳輸層傳給該端口的數據都被相應進程所接收。相應進程發給傳輸層的數據都通過該端口輸出。在TCP/IP協議的實現中,操作端口類似於一般的I/O操作,進程獲取一個端口,相當於獲取本地唯一I/O文件。可以用一般的讀寫原則訪問。

  類似於文件描述符,每個端口都擁有一個端口,都是整數型標識符,用於區別不同端口。由於TCP/IP傳輸層的TCP協議和UDP協議時完全獨立的兩個軟件模塊,因此各自的端口號也相互獨立,如TCP有一個255號端口,UDP也有一個255端口,二者並不衝突。TCP與UDP端結構中端口的地址都是16比特,有0~65535端口號。

  2. 地址 

  網絡通信中通信的兩個進程分別處在不同的機器上。遵循以下原則:

  1. 某臺主機可與多個網絡相連,必須指定一個特定網絡地址。

  2. 網絡上每臺主機應有其唯一的地址。

  3. 每臺 主機上的每個進程應有該主機上的唯一標識符。

  3. 鏈接

  兩個進程間的通信鏈路成爲連接。連接表現爲一些緩衝區和一組協議機制。

 

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

> Socket從傳統模式上又分爲端對端和點對點的連接,流套接字和數據報套接字都屬於端對端的連接,因此需要綁定端口號。而原始套接字是基於IP協議的,屬於點對點的傳輸模式,是沒有端口這個概念的。比如常用的監測網絡連接ping命令,就是基於ICMP協議的,它不存在端口的概念。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章