一、osi七層模型
osi定義了網路互連的七層框架(物理層、資料鏈路層、網路層、傳輸層、會話層、表示層、應用層),即iso開放互連系統參考模型。如下圖所示。
每一層實現各自的功能和協議,並完成與相鄰層的介面通訊。osi的服務定義詳細說明了各層所提供的服務。某一層的服務就是該層及其下各層的一種能力,它通過介面提供給
更高一層。各層所提供的服務與這些服務是怎麼實現的無關。
每層常見的物理裝置如下:
雖然osi模型是一種接近完美的理論(注意這種模型只出現在教課書裡)這種模型是在tcp/ip協議已經成熟之後提出的,可以理解為公升級版。但是並沒有流行出來。所以,網
絡資料傳輸是tcp/ip的天下。
二、tcp/ip五層協議
每一層都呼叫它的下一層提供的網路來完成自己的需求。(如果是四層模型資料鏈路層和物理層在一層)
1、物理層:負責光電訊號傳遞方式。集線器工作在物理層。乙太網協議。
2、資料鏈路層:負責裝置之間的資料幀的傳輸和識別。交換機工作在資料鏈路層。例如網絡卡裝置的驅動,幀同步,衝突檢測,資料差錯校驗等工作。
4、傳輸層:負責兩台主機之間的資料傳輸。
5、應用層:負責應用程式之間的溝通。網路程式設計主要針對的就是應用層。
關係如下:
arp協議可實現通過ip位址獲得對應主機的實體地址(mac位址)。
rarp協議是將mac實體地址轉換成ip位址
icmp協議確認ip包是否成功到達目標位址以及通知在傳送過程中ip包被丟棄的原因。
igmp協議用來在ip 主機和與其直接相鄰的組播路由器之間建立、維護組播組成員關係。
三、什麼是socket
socket是應用層與tcp/ip協議族通訊的中間軟體抽象層,它是一組介面。在設計模式中,socket其實就是乙個門面模式,它把複雜的tcp/ip協議族隱藏在socket介面後面,
對使用者來說,一組簡單的介面就是全部,讓socket去組織資料,以符合指定的協議。
所以,我們無需深入理解tcp/udp協議,socket已經為我們封裝好了,我們只需要遵循socket的規定去程式設計,寫出的程式自然就是遵循tcp/udp標準的。
另一方面,我們可以抽象地將socket說成ip+port,ip是用來標識網際網路中的一台主機的位置,而port是用來標識這台機器上的乙個應用程式,ip位址是配置到網絡卡上的,而port
是應用程式開啟的,ip與port的繫結就標識了網際網路中獨一無二的乙個應用程式。
四、socket工作流程
生活中的場景,你要打**給乙個朋友,先撥號,朋友聽到**鈴聲後提起**,這時你和你的朋友就建立起了連線,就可以講話了。
等交流結束,結束通話**結束此次交談。
五、socket伺服器端(server)
//af_inet是乙個位址系列,用於指定套接字可以與之通訊的位址型別(在本例中為ipv4位址)。建立套接字時,必須指定其位址族,然後只能使用該型別的位址與套ssocket.h
#ifndef ssocket_h
#define ssocket_h#include
#include
#include
#include
in.h>#include
#include
#define port 7788
#define backlog 5
namespace
ssocket
;
class
clientsocket
;} //
namespace ssocket
#endif
接字。套接字的特徵在於它們的域,型別和傳輸協議。常見網域名稱是:
af_unix:位址格式為unix路徑名
af_inet:位址格式為主機和埠號
ssocket::newsocket::newsocket()struct sockaddrif (this->fd < 0
)
std::cout
<< "
成功建立socket:
"<< this->fd <<:endl>
}
}其中,backlog引數決定了未完成佇列和已完成佇列中連線數目之和的最大值
void其中,client.maddr和client.mlen是輸出引數。ssocket::newsocket::listen()
}
void ssocket::newsocket::accept(clientsocket &client)close為釋放套接字。}
ssocket::newsocket::~newsocket()ssocket::clientsocket::~clientsocket()
套接字 Socket 定義
套接字介面可分為三類 公認埠 註冊埠 動態和 或私有埠 套接字,簡單的說就是通訊的兩方的一種約定,用套接字中的相關函式來完成通訊過程 應用層通過傳輸層進行資料通訊時,tcp和udp會遇到同時為多個應用程式程序提供併發服務的問題。多個tcp連線或多個應用程式程序可能需要通過同乙個 tcp協議埠傳輸資料...
socket 套接字通訊
要通過internet進行通訊,至少需要一對套接字,其中乙個執行在客戶端,稱之為clientsocket,另乙個執行於伺服器端面,稱為serversocket。根據連線啟動的方式以及本地要連線的目標,套接字之間的連線過程可以分為三個步驟 伺服器監聽 客戶端請求 連線確認。伺服器監聽是指服務端套接字並...
套接字(socket) 埠
套接字 socket socket可以看成在兩個程式進行通訊連線中的乙個端點,乙個程式將一段資訊寫入socket中,該socket將這段資訊傳送給另外乙個socket中,使這段資訊能傳送到其他程式中。套接字,是支援tcp ip的網路通訊的基本操作單元,可以看做是不同主機之間的程序進行雙向通訊的端點,...