計算機網路之十一:套接字Socket
一:簡介
Socket可以作插口或者插槽,可以想象為一根網線,一頭插在客戶端,一頭插在服務端,然後進行通訊。所以在通訊之前,雙方都要建立一個Socket.
二:基於TCP協議的Socket程式函式呼叫過程
1.TCP的服務端要先監聽一個埠,一般是先呼叫bind函式,給這個Socket賦予一個IP地址和埠。
2.當服務端有了IP和埠號,就可以呼叫listen函式進行監聽。在TCP的狀態圖裡面,有一個listen狀態,當呼叫這個函式之後,服務端就進入這個狀態,
這個時候客戶端客戶端就可以發起連線了。
3.在核心中,為每個Socket維護兩個佇列。一個是已經建立了連線的佇列,這時連線三次握手已經完畢,處於established狀態;一個是還沒有完全建立連線
的佇列,這個時候三次握手還沒完成,處於syn_rcvd的狀態。
4.服務端呼叫accept函式,拿出一個已經完成的連線進行處理。如果還沒有完成,就要等待。
5.在服務端等待的時候,客戶端可以透過connect函式發起連線。先在引數中指明要連線的IP地址和埠號,然後開始發起三次握手。核心會給客戶端分配一個
臨時的埠。一旦握手成功,服務端的accept就會返回另一個Socket.
6.連線建立成功之後,雙方開始透過read和write函式來讀寫資料,就像往一個檔案流裡面寫東西一樣。
Socket在Linux中是以檔案的形式存在的,除此之外,還存在檔案描述符,寫入和讀出,也是透過檔案描述符。每一個程式都有一個資料結構task_struct,裡面指向
一個檔案描述符陣列,來列出這個程式開啟的所有檔案的檔案描述符。檔案描述符是一個整數,就是這個陣列的下標。
三:基於UDP協議的Socket程式函式呼叫過程
1.UDP是沒有連線的,所以不需要三次握手,也就不需要呼叫listen和connect,但是,UDP的互動仍然需要IP和埠號,因而也需要bind
2.UDP是沒有維護連線狀態的,因而不需要每對連線建立一組Socket,而是隻要有一個Socket,就能夠和多個客戶端通訊。因為沒有連線狀態,每次通訊的時候,都調
用sendto和recffrom,都可以傳入IP地址和埠。
四:Socket多程式程式設計
TCP連線數是受限的,首先Socket都是檔案,所以首先要透過ulimit配置檔案描述符的數目;另一個限制是記憶體。
多程式模式相當於設定一個代理,監聽請求,一旦建立了一個連線,就會有一個已連線Socket,這時可以建立一個子程式,然後將基於已連線Socket的互動交給子程式做。
五:Socket多執行緒程式設計
相對於程式來講,執行緒要輕量級的多,新的執行緒也可以透過已連線Socket處理請求,從而達到併發處理的目的。
六:IO多路複用,一個執行緒維護多個Socket
基於程式或者執行緒模型的,其實還是有問題的。新到來一個TCP連線,就需要分配一個程式或者執行緒。C10K,它的意思是一臺機器要維護1萬個連線,就要建立1萬個程式或者
執行緒,那麼作業系統是無法承受的。
由於Socket是檔案描述符,因而某個執行緒盯的所有的Socket,都放在一個檔案描述符fd_set中,然後呼叫select函式來監聽檔案描述符集合是否有變化,一旦有變化,就依次檢視
每個檔案描述。那些發生變化的檔案描述符在fd_set對應的位都設為1,表示Socket可讀或者可寫,從而可以進行讀寫操作,然後再呼叫select,接著看下一輪的變化。
七:IO多路複用,epoll模式
epoll它在核心中的實現不是透過輪詢方式,而是透過註冊callback函式的方式,當某個檔案描述發生變化時,就會主動通知。這種通知方式使得監聽的Socket資料增加的時候,效率
不會大幅度降低,能夠同時監聽的Socket的數目也非常多。epoll被稱為解決C10K問題的利器
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2649629/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 網路套接字
- 計算機網路再次整理————socket[一]計算機網路
- 14.1 Socket 套接字程式設計入門程式設計
- 計算機網路之網路層計算機網路
- 【Socket程式設計】【第一節】【Socket基本原理和套接字】程式設計
- HUST-計算機網路實驗-socket程式設計計算機網路程式設計
- 計算機網路基礎-Socket計算機網路
- 編寫socket套接字的步驟
- 計算機網路之網路介面層計算機網路
- 計算機網路之物理層計算機網路
- 計算機網路之九:VLAN計算機網路
- IPC之套接字
- 《UNIX網路程式設計》筆記 - 套接字選項/UDP套接字程式設計筆記UDP
- 計算機網路之HTTP之概況計算機網路HTTP
- 計算機面試重難點之計算機網路面試計算機網路
- 計算機網路之隧道技術計算機網路
- 前端面試之計算機網路前端面試計算機網路
- 計算機網路之傳輸層計算機網路
- 計算機網路之運輸層計算機網路
- 計算機網路之資料鏈路層計算機網路
- 計算機網路 -- 計算機網路的效能指標計算機網路指標
- 計算機網路計算機網路
- 初探計算機網路之HTTPS請求計算機網路HTTP
- 計算機網路之十三:HTTPS協議計算機網路HTTP協議
- 計算機網路之TCP可靠傳輸計算機網路TCP
- 計算機網路之十二:HTTP協議計算機網路HTTP協議
- 計算機網路之十:路由協議計算機網路路由協議
- 計算機網路之六:UDP協議計算機網路UDP協議
- 計算機網路之四:ICMP協議計算機網路協議
- 計算機基礎-Socket計算機
- 第1章 計算機網路的概述——計算機網路計算機網路
- python網路-Socket之TCP程式設計(26)PythonTCP程式設計
- 計算機網路(們)和 Internet (計算機網路的子類)計算機網路
- [計算機網路]網路攻擊計算機網路
- 計算機網路(一) --網路模型計算機網路模型
- 計算機網路之防火牆和Wlan配置計算機網路防火牆
- 菜鳥筆記之計算機網路(4)筆記計算機網路
- 計算機網路之七:TCP協議(1)計算機網路TCP協議