linux套接字
源ip位址和目的ip位址以及源埠和目標埠號的組合稱為套接字。其作用於標識客戶端請求的伺服器和服務。
套接字,支援tcp/ip的網路通訊的基本操作單元,可以看做是不同主機之間的程序進行雙向通訊的端點 簡單的說就是通訊的兩方的一種約定,用套接字中的相關函式來完成通訊過程。
非常非常簡單的舉例說明下:socket=ip address+ tcp/udp + port。
套接字連線的過程如同客戶撥打乙個**到乙個大公司(系統),接線員(伺服器程序)接聽**並把它轉接到你要找的部門,然後再從那裡轉到你要找的人(伺服器套接字),然後接線員(伺服器程序)再繼續轉接其他(客戶)的**。
套接字有本地套接字和網路套接字兩種。本地套接字是linux檔案系統中的檔名,一般放在/tmp或/usr/tmp目錄中,網路套接字的名字是與客戶連線的特定網路有關的服務識別符號(埠號或訪問點),這個識別符號允許linux將進入的針對特定埠號的連線轉到正確的伺服器程序。
套接字通訊建立過程:
伺服器端:
1. 伺服器應用程式用系統呼叫socket建立乙個套接字。它是系統分配給伺服器程序的類似檔案描述符的資源。
2. 伺服器程序用系統呼叫bind命名套接字。然後伺服器程序就開始等待客戶端連線到這個命名套接字。
3. 系統呼叫listen建立乙個佇列用來存放來自客戶的進入連線。
4. 伺服器通過系統呼叫accept來接受客戶的連線。accept會建立乙個不同於命名套接字的新套接字來與這個特定客戶進行通訊,而命名套接字則被保留下來繼續處理其他客戶的連線請求。
客戶端:
1. 呼叫socket建立乙個未命名套接字。
2. 呼叫connect與伺服器建立連線,將伺服器的命名套接字作為乙個位址。
例子:nginx伺服器:
1. 啟動nginx後,nginx建立乙個socket套接字,監聽在80埠,此時狀態為listening
2. 當有客戶端連線80埠時,系統呼叫accept來接受客戶的連線,並建立乙個與listening不同的套接字來接受客戶的請求。此時,乙個客戶端的請求就會占用乙個 >1024的埠。
ps: linux系統最大埠數是65535。減去1024系統埠,再減去其他一些服務埠的開銷。基本保持在60000埠。也就是單台伺服器建立的套接字不可能超過60000連線的理論值,如果是**伺服器,這個值則要除以2,也就是30000
linux Linux學習總結 套接字
bsd套接字介面 l i n u x支援多種套接字型別。套接字型別,是指建立套接字的應用程式所希望的通訊服務 型別。同一協議族可能提供多種服務型別,比如t c p i p協議族提供的虛電路與資料報就是兩 種不同的通訊服務型別,linux bsd支援如下幾種套接字型別 stream 提供可靠的面向連線...
監聽套接字 連線套接字
摘要 對於伺服器程式設計中最重要的一步等待並接受客戶的連線,那麼這一步在程式設計中如何完成,accept函式就是完成這一步的。它從核心中取出已經建立的客戶連線,然後把這個已經建立的連線返回給使用者程式,此時使用者程式就可以與自己的客戶進行點到點的通訊了。accept函式等待並接受客戶請求 inclu...
python套接字 python套接字基本使用
socket socket通常也稱作 套接字 用於描述ip位址和埠,應用程式通常通過 套接字 向網路發出請求或者應答網路請求,可以認為是一種計算機網路的資料結構,介面。它是網路程式設計的基礎 套接字還分為面向連線的和無連線的 第一種是指tcp型別套接字,在通訊前需要建立連線,這種連線是較為可靠的,使...