應用層通過傳輸層進行資料通訊時,tcp和udp會遇到同時為多個應用程式程序提供併發服務的問題.多個tcp連線或多個應用程式程序可能需要通過同乙個tcp協議埠傳輸資料.為了區別不同的應用程式程序和連線,許多計算機作業系統為應用程式與tcp/ip協議互動提供了稱為套接字(socket)的介面,區分不同應用程式程序間的網路通訊和連線.生成套接字,主要有3個引數:通訊的目的ip位址、使用的傳輸層協議(tcp或udp)和使用的埠號.
socket原意是"插座".通過將這3個引數結合起來,與乙個"插座"socket繫結,應用層就可以和傳輸層通過套接字介面,區分來自不同應用程式程序或網路連線的通訊,實現資料傳輸的併發服務.
socket可以看成在兩個程式進行通訊連線中的乙個端點,乙個程式將一段資訊寫入socket中,該socket將這段資訊傳送給另外乙個socket中,使這段資訊能傳送到其他程式中.host a上的程式a將一段資訊寫入socket中,socket的內容被host a的網路管理軟體訪問,並將這段資訊通過host a的網路介面卡傳送到host b,host b的網路介面卡接收到這段資訊後,傳送給host b的網路管理軟體,網路管理軟體將這段資訊儲存在host b的socket中,然後程式b才能在socket中閱讀這段資訊.
要通過網際網路進行通訊,至少需要一對套接字,乙個執行於客戶機端,稱之為clientsocket,另乙個執行於伺服器端,稱之為serversocket.
根據連線啟動的方式以及本地套接字要連線的目標,套接字之間的連線過程可以分為三個步驟:[color=red]伺服器監聽,客戶端請求,連線確認[/color].
[color=red][size=medium]伺服器監聽:[/size][/color]是伺服器端套接字並不定位具體的客戶端套接字,而是處於等待連線的狀態,實時監控網路狀態.
[color=red][size=medium]客戶端請求:[/size][/color]是指由客戶端的套接字提出連線請求,要連線的目標是伺服器端的套接字.為此,客戶端的套接字必須首先描述它要連線的伺服器的套接字,指出伺服器端套接字的位址和埠號,然後就向伺服器端套接字提出連線請求.
[color=red][size=medium]連線確認:[/size][/color]是指當伺服器端套接字監聽到或者說接收到客戶端套接字的連線請求,它就響應客戶端套接字的請求,建立乙個新的執行緒,把伺服器端套接字的描述發給客戶端,一旦客戶端確認了此描述,連線就建立好了.而伺服器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連線請求.
socket學習 一 socket模組屬性
屬性名稱 描述資料屬性 af unix af inet af inet6 af netlink af tipc python 中支援的套接字位址家族 so stream so dgram 套接字型別 tcp 流,udp 資料報 has ipv6 指示是否支援 ipv6 的布林標記 異常error 套...
GUN C中的socket學習(一)
socket是用於通訊的工具。套接字其實是乙個廣義上的程序間通訊的通道。就像pipe一樣,在gun環境下socket也被用乙個檔案表示。不同的socket檔案可以用於不同的程序間通訊,甚至可以用來在網路通訊中不同主機之間的程序間通訊 比如,我們的瀏覽器程序與某台伺服器上監聽80埠的程序通訊完成web...
學習socket通訊總結(一)
最近一直在用linux,很早就想學習linux網路程式設計。今天剛好抽出一段時間,學習了簡單的socket通訊,寫了乙個簡單的客戶端 伺服器通訊 現在將今天學習的內容做乙個總結。一 相關概念說明 struct sockaddr struct sockaddr in int socket int do...