Socket簡介
Socket是程序通訊的一種方式,即呼叫這個網路庫的一些API函式實現分佈在不同主機的相關程序之間的資料交換。
幾個定義:
(1)IP地址:即依照TCP/IP協議分配給本地主機的網路地址,兩個程序要通訊,任一程序首先要知道通訊對方的位置,即對方的IP。
(2)埠號:用來辨別本地通訊程序,一個本地的程序在通訊時均會佔用一個埠號,不同的程序埠號不同,因此在通訊前必須要分配一個沒有被訪問的埠號。
(3)連線:指兩個程序間的通訊鏈路。
(4)半相關:網路中用一個三元組可以在全域性唯一標誌一個程序:
(協議,本地地址,本地埠號)
這樣一個三元組,叫做一個半相關,它指定連線的每半部分。
(4)全相關:一個完整的網間程序通訊需要由兩個程序組成,並且只能使用同一種高層協議。也就是說,不可能通訊的一端用TCP協議,而另一端用UDP協議。因此一個完整的網間通訊需要一個五元組來標識:
(協議,本地地址,本地埠號,遠地地址,遠地埠號)
這樣一個五元組,叫做一個相關(association),即兩個協議相同的半相關才能組合成一個合適的相關,或完全指定組成一連線。
二、客戶/伺服器模式
在TCP/IP網路應用中,通訊的兩個程序間相互作用的主要模式是客戶/伺服器(Client/Server, C/S)模式,即客戶向伺服器發出服務請求,伺服器接收到請求後,提供相應的服務。客戶/伺服器模式的建立基於以下兩點:
(1)首先,建立網路的起因是網路中軟硬體資源、運算能力和資訊不均等,需要共享,從而造就擁有眾多資源的主機提供服務,資源較少的客戶請求服務這一非對等作用。
(2)其次,網間程序通訊完全是非同步的,相互通訊的程序間既不存在父子關係,又不共享記憶體緩衝區,因此需要一種機制為希望通訊的程序間建立聯絡,為二者的資料交換提供同步,這就是基於客戶/伺服器模式的TCP/IP。
伺服器端:
其過程是首先伺服器方要先啟動,並根據請求提供相應服務:
(1)開啟一通訊通道並告知本地主機,它願意在某一公認地址上的某埠(如FTP的埠可能為21)接收客戶請求;
(2)等待客戶請求到達該埠;
(3)接收到客戶端的服務請求時,處理該請求併發送應答訊號。接收到併發服務請求,要啟用一新程序來處理這個客戶請求(如UNIX系統中用fork、exec)。新程序處理此客戶請求,並不需要對其它請求作出應答。服務完成後,關閉此新程序與客戶的通訊鏈路,並終止。
(4)返回第(2)步,等待另一客戶請求。
(5)關閉伺服器
客戶端:
(1)開啟一通訊通道,並連線到伺服器所在主機的特定埠;
(2)向伺服器發服務請求報文,等待並接收應答;繼續提出請求......
(3)請求結束後關閉通訊通道並終止。
從上面所描述過程可知:
(1)客戶與伺服器程序的作用是非對稱的,因此程式碼不同。
(2)伺服器程序一般是先啟動的。只要系統執行,該服務程序一直存在,直到正常或強迫終止。
Socket程式設計所牽涉的東西非常寬泛,呼叫各種程式語言對socket的TCP(TCP可靠通訊的實現方式)和UDP封裝進行網路通訊,可以是監聽外部連結,也可以是主動發起連結請求,傳送特定協議並進行通訊,如何制定協議規範,如何進行協議的編碼和解碼,如何將協議資料轉換為二進位制資料傳送到網路上和從網路接收辨別且處理成功(牽涉到TCP粘包等問題),如何針對建立的連結進行管理等。。。。
Socket簡介
Socket是程序通訊的一種方式,即呼叫這個網路庫的一些API函式實現分佈在不同主機的相關程序之間的資料交換。
幾個定義:
(1)IP地址:即依照TCP/IP協議分配給本地主機的網路地址,兩個程序要通訊,任一程序首先要知道通訊對方的位置,即對方的IP。
(2)埠號:用來辨別本地通訊程序,一個本地的程序在通訊時均會佔用一個埠號,不同的程序埠號不同,因此在通訊前必須要分配一個沒有被訪問的埠號。
(3)連線:指兩個程序間的通訊鏈路。
(4)半相關:網路中用一個三元組可以在全域性唯一標誌一個程序:
(協議,本地地址,本地埠號)
這樣一個三元組,叫做一個半相關,它指定連線的每半部分。
(4)全相關:一個完整的網間程序通訊需要由兩個程序組成,並且只能使用同一種高層協議。也就是說,不可能通訊的一端用TCP協議,而另一端用UDP協議。因此一個完整的網間通訊需要一個五元組來標識:
(協議,本地地址,本地埠號,遠地地址,遠地埠號)
這樣一個五元組,叫做一個相關(association),即兩個協議相同的半相關才能組合成一個合適的相關,或完全指定組成一連線。
二、客戶/伺服器模式
在TCP/IP網路應用中,通訊的兩個程序間相互作用的主要模式是客戶/伺服器(Client/Server, C/S)模式,即客戶向伺服器發出服務請求,伺服器接收到請求後,提供相應的服務。客戶/伺服器模式的建立基於以下兩點:
(1)首先,建立網路的起因是網路中軟硬體資源、運算能力和資訊不均等,需要共享,從而造就擁有眾多資源的主機提供服務,資源較少的客戶請求服務這一非對等作用。
(2)其次,網間程序通訊完全是非同步的,相互通訊的程序間既不存在父子關係,又不共享記憶體緩衝區,因此需要一種機制為希望通訊的程序間建立聯絡,為二者的資料交換提供同步,這就是基於客戶/伺服器模式的TCP/IP。
伺服器端:
其過程是首先伺服器方要先啟動,並根據請求提供相應服務:
(1)開啟一通訊通道並告知本地主機,它願意在某一公認地址上的某埠(如FTP的埠可能為21)接收客戶請求;
(2)等待客戶請求到達該埠;
(3)接收到客戶端的服務請求時,處理該請求併發送應答訊號。接收到併發服務請求,要啟用一新程序來處理這個客戶請求(如UNIX系統中用fork、exec)。新程序處理此客戶請求,並不需要對其它請求作出應答。服務完成後,關閉此新程序與客戶的通訊鏈路,並終止。
(4)返回第(2)步,等待另一客戶請求。
(5)關閉伺服器
客戶端:
(1)開啟一通訊通道,並連線到伺服器所在主機的特定埠;
(2)向伺服器發服務請求報文,等待並接收應答;繼續提出請求......
(3)請求結束後關閉通訊通道並終止。
從上面所描述過程可知:
(1)客戶與伺服器程序的作用是非對稱的,因此程式碼不同。
(2)伺服器程序一般是先啟動的。只要系統執行,該服務程序一直存在,直到正常或強迫終止。
Socket程式設計所牽涉的東西非常寬泛,呼叫各種程式語言對socket的TCP(TCP可靠通訊的實現方式)和UDP封裝進行網路通訊,可以是監聽外部連結,也可以是主動發起連結請求,傳送特定協議並進行通訊,如何制定協議規範,如何進行協議的編碼和解碼,如何將協議資料轉換為二進位制資料傳送到網路上和從網路接收辨別且處理成功(牽涉到TCP粘包等問題),如何針對建立的連結進行管理等。。。。