網路基礎 Socket程式設計

2022-06-30 17:30:14 字數 1571 閱讀 4808

tpc的服務端要先監聽乙個埠,一般是先呼叫bind函式,給這個soket賦予乙個ip位址和埠。

當服務端有了ip和埠號,就可以呼叫listen函式進行監聽。這時候客戶端就可以發起連線了。

在作業系統中,為每個socket維護兩個佇列。乙個是已經建立了連線的佇列,三次握手已完畢,處於established狀態。乙個是還沒有完全建立連線的,沒有完成三次握手,處於syn_rcv的狀態。

在服務端等待的時候,客戶端可以通過connect函式發起連線。先在引數中指明要連線的ip位址和埠號,然後開始三次握手,作業系統會給客戶端分配乙個臨時的埠。一旦握手成功,服務端的accept就會返回另乙個用於傳輸資料的socket。

連線建立成功之後,雙發開始通過readwrite函式來讀寫資料,就像往乙個檔案流裡面寫東西一樣。

因為udp通訊無需建立連線看,所以也不需要三次握手,也就不需要呼叫listenconnect函式函式,但是,upd的互動仍然需要ip位址和埠號,因而需要bind。udp是沒有維護連線狀態的,因而不需要對沒對連線建立一組socket,而是只要有乙個socket,就能夠和多個客戶端通訊。也正是因為沒有連線狀態,每次通訊的時候,呼叫sendtorecvfrom,都可以傳入ip位址和埠。

web請求一般都是http請求,而http協議又是基於tcp的,所以,我們主要探索如何讓伺服器同時處理更多tcp連線請求。

多程序當有新的請求進來,fork出乙個子程序,讓子程序處理該請求,提高併發量

多執行緒程序開銷太大,執行緒則輕量級的多,所以我們還可以通過在程序中建立新的執行緒來處理請求。

多路io復用

所謂多路io復用可以簡單理解為乙個執行緒維護多個socket(前面多程序多執行緒說的都是乙個程序或執行緒維護乙個socket),這也有兩種實現方式:輪詢和事件通知。

因為 socket 在 linux 系統中以檔案描述符形式存在,所以我們把乙個執行緒維護的所有 socket 叫做檔案描述符集合,所謂輪詢就是呼叫核心的select函式監聽檔案描述符集合是否有變化,一旦有變化,就會依次檢視每個檔案描述符,對那些發生變化的檔案描述符進行讀寫操作,然後再呼叫select函式監聽下一輪的變化。

顯然,輪詢的效率有點低,因為每次檔案描述符集合有變化,都要將全部 socket 輪詢一遍,這大大影響了系統能夠支撐的最大連線數。如果改成事件通知的方式,情況要好很多。所謂事件通知,就是某個檔案描述符發生變化,呼叫epoll函式主動通知。這種方式使得監聽的 socket 資料增加的時候,效率不會大幅度降低,能夠同時監聽的 socket 的數目也非常多。上限就為系統定義的、程序開啟的最大檔案描述符個數。

因此,epoll被稱為解決 c10k 問題的利器。

socket網路程式設計基礎

伺服器與客戶端 p94 p98先學習基礎 再學習socket程式設計 參考socket,也叫套接字,描述了計算機是ip位址和埠,電腦程式之間採用socket進行通訊。socket把複雜的tcp ip協議族隱藏在介面後面,方便使用。tcp提供流和資料報兩種通訊方式,所以套接字也分為流套接字和資料報套接...

網路基礎之 網路基礎,socket程式設計

1 什麼是socket 網路基礎 socket 2 為何要學習socket程式設計 基於socket開發乙個c s或者b s結構的軟體 client 網路 server browser 網路 server 3 如何基於socket程式設計 網路 網路是什麼 底層的物理連線介質 網際網路通訊協議 os...

網路基礎與socket程式設計

1.osi七層模型 下 上 物理層 資料鏈路層 網路層 傳輸層 會話層 表示層 應用層 2.tcp ip 五層模型 下 上 1 物理層 乙太網協議 負責光 電訊號的傳遞方式。比如 網線 雙絞線 同軸電纜 光纖 wifi等。物理層的能力決 定了最大傳輸速率 傳輸距離 抗干擾等。工作在物理層的集線器 實...