導航:首頁 > 網路連接 > 計算機網路套接字編程詳解

計算機網路套接字編程詳解

發布時間:2023-12-22 00:50:48

Ⅰ 套接字是什麼

套接字(socket)是一個抽象層,應用程序可以通過它發送或接收數據,可對其進行像對文件一樣的打開、讀寫和關閉等操作。套接字允許應用程序將I/O插入到網路中,並與網路中的其他應用程序進行通信。網路套接字是IP地址與埠的組合。

總之,套接字Socket=(IP地址:埠號),套接字的表示方法是點分十進制的IP地址後面寫上埠號,中間用冒號或逗號隔開。每一個傳輸層連接唯一地被通信兩端的兩個端點(即兩個套接字)所確定。

(1)計算機網路套接字編程詳解擴展閱讀

Socket最初是加利福尼亞大學Berkeley分校為Unix系統開發的網路通信介面。後來隨著TCP/IP網路的發展,Socket成為最為通用的應用程序介面,也是在Internet上進行應用開發最為通用的API。

Windows系統流行起來之後,由Microsoft聯合了其他幾家公司在Berkeley Sockets的基礎之上進行了擴充,共同制定了一套Windows下的網路編程介面,即Windows Sockets規范。

Windows Sockets規范是一套開放的、支持多種協議的Windows下的網路編程介面,包括1.1版和2.0版兩個版本。

參考資料來源:網路-套接字

Ⅱ 在windows下用C語言如何實現socket網路編程,需要用到哪些頭文件或者庫

需要用到的頭文件包含:

#include <winsock2.h>

#include <windows.h>

與Linux環境下socket編程相比,windows環境多了一個步驟:啟動或者初始化winsock庫

Winsock,一種標准API,一種網路編程介面,用於兩個或多個應用程序(或進程)之間通過網路進行數據通信。具有兩個版本:

Winsock 1:

Windows CE平台支持。

頭文件:WinSock.h

庫:wsock32.lib

Winsock 2:

部分平台如Windows CE貌似不支持。通過前綴WSA可以區別於Winsock 1版本。個別函數如WSAStartup、WSACleanup、WSARecvEx、WSAGetLastError都屬於Winsock 1.1規范的函數;

頭文件:WinSock2.h

庫:ws2_32.lib

mswsock.h用於編程擴展,使用時必須鏈接mswsock.dll

(2)計算機網路套接字編程詳解擴展閱讀

winsock庫的載入與卸載:

載入:int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);

載入成功,返回值為0。

WORD wVersionRequested:載入的winsock版本,使用宏MAKEWORD(x, y),x表示高位元組,y表示低位元組。然而使用時MAKEWORD(2, 2)。高位元組與低位元組相同~~

LPWSADATA lpWSAData:WSADATA結構的指針,傳入參數後,系統幫助我們填充版本信息。有興趣的可以看看結構體內容,不過基本用不著。

卸載:int WSACleanup(void);比起載入,卸載的函數真是輕松愉快。

Ⅲ 進程間通信(IPC)——Unix域套接字 VS 網路套接字

進程間通信就是不同進程間進行數據交換的過程。因為進程間相互獨立,每個進程擁有獨立的地址空間、數據處理邏輯,操作系統保證了進程獨立運行的地址安全;但在復雜系統,單進程往往不能勝任業務需求,需要多進程的加入,多進程協作完成工作,這就離不開進程間通信這個話題了。

進程間通信有很多種方式,列舉如下:

而進程間通信按進程分布情況可以 單機內的進程間通信 多機間遠程調用的進程間通信 ,後者無需多講,在分布式等大型系統中是非常常見的,而進行通信的方式主要是上述方法中的網路IPC,有非常多的資料介紹相關內容,不在本文的討論范圍之內。

本文主要討論在 單機內進程間通信 中,Unix域套接字和TCP網路套接字的對比,後者屬於網路IPC。

套接字是一種應用程序介面,包括了一個用C語言寫成的應用程序開發庫,主要用於實現進程間通訊,在計算機網路通訊方面被廣泛使用。下面要討論的網路套接字和Unix套接字均屬於套接字。

在定義套接字類型的時候,網路套接字通常使用 AF_INET 進行定義;Unix域套接字則使用 AF_UNIX 進行定義。

套接字類型有三種,分別是流式套接字、數據報套接字和原始套接字。

流式套接字(SOCK_STREAM):流式套接字用於提供面向連接、可靠的數據傳輸服務。該服務將保證數據能夠實現無差錯、無重復發送,並按順序接收。流式套接字之所以能夠實現可靠的數據服務,原因在於其使用了傳輸控制協議,即TCP(The Transmission Control Protocol)協議。

數據報套接字(SOCK_DGRAM):數據報套接字提供了一種無連接的服務。該服務並不能保證數據傳輸的可靠性,數據有可能在傳輸過程中丟失或出現數據重復,且無法保證順序地接收到數據。數據報套接字使用UDP(User Datagram Protocol)協議進行數據的傳輸。由於數據報套接字不能保證數據傳輸的可靠性,對於有可能出現的數據丟失情況,需要在程序中做相應的處理。

原始套接字(SOCK_RAW):原始套接字(SOCKET_RAW)允許對較低層次的協議直接訪問,比如IP、 ICMP協議,它常用於檢驗新的協議實現,或者訪問現有服務中配置的新設備,因為RAW SOCKET可以自如地控制Windows下的多種協議,能夠對網路底層的傳輸機制進行控制,所以可以應用原始套接字來操縱網路層和傳輸層應用。比如,我們可以通過RAW SOCKET來接收發向本機的ICMP、IGMP協議包,或者接收TCP/IP棧不能夠處理的IP包,也可以用來發送一些自定包頭或自定協議的IP包。網路監聽技術很大程度上依賴於SOCKET_RAW。

原始套接字與標准套接字(標准套接字指的是前面介紹的流式套接字和數據報套接字)的區別在於:原始套接字可以讀寫內核沒有處理的IP數據包,而流式套接字只能讀取TCP協議的數據,數據報套接字只能讀取UDP協議的數據。因此,如果要訪問其他協議發送數據必須使用原始套接字。

網路通信中通常都是使用網路套接字進行通信,可用於單機進程間通信和多機進程間通信,網路套接字由五元組來標識:(源地址、源埠、目標地址、目標埠、通信協議),因而網路套接字在網路協議棧中屬於傳輸層之上的內容。所以,在使用網路套接字通信的時候,傳遞內容需要經過完整的網路協議棧四層模型中的(傳輸層-網路層-網路訪問層(數據鏈路層-物理層))。

回想在協議棧當中,對於報文的處理有哪些操作。

Unix域套接字只能用於在同一個計算機的進程間進行通信。雖然網路套接字也可以用於單機進程間的通信,但是使用Unix域套接字效率會更高,因為Unix域套接字僅僅進行數據復制,不會執行在網路協議棧中需要處理的添加、刪除報文頭、計算校驗和、計算報文順序等復雜操作,因而在單機的進程間通信中,更加推薦使用Unix域套接字。

關於套接字的使用,資料很多,不再介紹。

這里拿網路套接字和Unix域套接字出來比較的原因是,很多人在進行單機多進程開發時沒有注意到Unix域套接字的存在,而是使用了成本較高的網路套接字進行開發。Unix套接字在通信開銷方面是很小的,因而在單機通信中更加推薦使用Unix域套接字。

原文鏈接

網路連接詳解

用戶: 需求發起者。

數據傳輸過程圖:

應用程序: 發起數據的傳輸交流過程。

過程:

過程:

過程:

過程:

過程:

過程:

過程:

註: OSI參考模型總結 - 小白的博客 - CSDN博客

訪問伺服器的過程可以通過 windows+R 快捷命令 --> 進入運行界面--->然後通過cmd 命令 --->進入控制台--->然後輸入命令 tracert + 訪問的域名網址-->查看訪問過程。

ping命令來測試網路連接:

物理層常見故障:

硬體連接問題:1.接觸不良2.硬體未連通

數據鏈路層故障:

1.MAC地址沖突不能上網;

2.交換機與計算機網卡的帶寬協商不一致,網速不一致導致網路不通;

3.ADSL欠費導致網路不通;

4.將計算機錯誤的連接到VLAN(Virtual Local Area Network)。

註:

網路層故障:

1.計算機IP地址設置錯誤。

2.計算機沒有設置網關。

3.計算機子網掩碼配置錯誤。

4.沿途路由器路由表錯誤。

傳輸層故障:

表示層故障:

亂碼問題(字元集對應錯誤)

應用層故障:

應用層程序配置問題(瀏覽器伺服器的配置問題導致上網故障等)

物理層安全:

防止非法計算機接入公司網路(包括無線AP)

數據鏈路層安全:

1.設置WiFi密碼,屬於網路鏈路層添加秘鑰的方法。

2.公司內部的交換機可以設置哪個Mac地址可以接入,設置接多少台計算機。

3.家裡的ASDL撥號上網的需要登入賬號密碼。

4.劃分不同的VLAN(Virtual Local Area Network)

網路層安全:

1.在路由器上設置ACL控制數據包轉發,控制網路。

2.在計算機上設置網路安全,設置訪問許可權。

應用層安全:

發現軟體漏洞,增補丁。

TCP用主機的IP地址加上主機上的埠號作為TCP連接的端點,這種端點就叫做套接字(socket)或插口。套接字可以實現將多個客戶連接到一個伺服器。

它是網路通信中端點的抽象表示,包含進行網路通信必需的五種信息:1.連接使用的協議,2.本地主機的IP地址,3.本地進程的協議埠,4.遠地主機的IP地址,5.遠地進程的協議埠。

1.域: 套接字通信中使用的網路介質,常見的有AF_INET(因特網路)

2.類型:

a. 流式套接字(sock_stream): 用於提供面向連接、有序的、可靠的雙向jie節流的鏈接式數據傳輸服務,由類型sock_stream指定,他是在AF_INET域中通過TCP/IP鏈接實現的。

b. 數據報套接字(sock_dgram): 提供了一種無連接的服務,是AF_INET域中通過UDP/IP鏈接實現的。

c. 原始套接字(sock_raw): 允許對較低層次的協議直接訪問,比如IP、ICMP協議,他常用於檢驗新的協議的實現或者訪問現有服務中配置的新設備。網路監聽技術很大程度上依賴於socket_raw.

3.協議: 套接字協議一般採用默認值。即默認參數為0。

1.套接字是用於描述IP地址和埠,是一個通信鏈的句柄。應用程序通常通過"套接字"向網路發出請求或者應答網路請求。

2.當前應用進程需要使用網路進行通信時,就會發出系統調用,請求操作系統為其創建「套接字」,以便把網路通信所需要的系統資源分配給該應用進程。

3.操作系統為這些資源的總和,用一個叫做套接字描述符的號碼表示,並把此號碼返回給應用進程,應用進程所進行的網路操作都必須使用這個號碼。

4.通信完畢後,應用進程通過一個關閉套接字的系統調用通知操作系統回收與該「號碼」相關的所有資源。

1.連接創建階段

a.套接字被創建後,其埠號和IP地址都是空的,應用進程調用bind(綁定)來指明套接字的本地地址(在伺服器端調用bind時就是把熟知埠號和本地IP填寫到已創建的套接字中)

b.伺服器調用bind後 ,還必須調用listen(收聽)把套接字設置為被動方式,以便隨時接收客戶的服務請求。(UDP伺服器由於只提供了無限連接服務,不使用listen系統調用)

c.客戶進程發送連接請求後,伺服器緊接著調用accept(接受),以把客戶進程發來的連接請求提取出來。(系統調用accept的一個變數就是要指明哪一個套接字發起的連接。)

2.數據傳輸階段

客戶和伺服器都在TCP連接上使用send系統調用傳送數據,使用recv系統調用接收數據。

3.連接釋放階段

一旦客戶或者伺服器結束使用套接字,就把套接字撤銷,此時調用close釋放連接和撤銷套接字。應用層總結-系統調用和應用編程介面 - 十分殘念的博客 - CSDN博客

其過程示意圖如下:

網路編程的目的:

直接或間接地通過網路協議與其他計算機進行通訊。

網路編程的問題:

1.如何准確的定位網路上一台或多態主機。

2.找到主機後,如何快速高效的傳輸數據。

網路編程的對象:

傳輸層提供的面向應用的可靠或非可靠的數據傳輸機制。

網路編程流行模型:

1.CS模型(客戶端/伺服器模型)

2.BS模型(瀏覽器/伺服器模型)

參考網路編程--Socket(套接字) - A-祥子 - 博客園

註: 擴展鏈接內關於TCP/IP的相關知識講解也相當詳細,可以參考瀏覽一下。

閱讀全文

與計算機網路套接字編程詳解相關的資料

熱點內容
網路詞沒眼看是什麼意思 瀏覽:748
現在的情況哪個網路信號好 瀏覽:895
ios145網路信號 瀏覽:363
鴻蒙系統設置3g網路 瀏覽:914
網路電視如何看籃球賽 瀏覽:108
手機連接wifi沒網路電腦也沒網路 瀏覽:544
免費連接網路的軟體排行 瀏覽:680
怎麼樣才能導致網路異常電話中斷 瀏覽:525
網路音頻錄制軟體 瀏覽:366
杭州中國移動網路公司 瀏覽:678
網路信息安全指哪些問題 瀏覽:87
兩個網路插口互換路由器 瀏覽:35
電腦上的網路適配器怎麼安裝 瀏覽:361
網路工程軟考高級考哪個好 瀏覽:284
海島上網路信號怎麼解決 瀏覽:974
計算機網路實驗設置telnet 瀏覽:546
有線網路上不去什麼原因 瀏覽:436
計算機網路基礎教學心得 瀏覽:996
無線網路技術崗位 瀏覽:925
網路有多少人會送禮物 瀏覽:145

友情鏈接