數據鏈路層:編程
- 直接面向網卡編程,與硬件相關,比較難以掌握服務器
- 基於Packet Driver編程,獨立於/屏蔽網卡實現細節,針對網卡的網絡開發環境網絡
網絡層:數據結構
- 基於NDIS網絡編程,針對Windows操做系統提供的一種網絡驅動程序或協議驅動程序app
- 經典函數庫,基於LibPcap/WinPcap(抓包)、Libnet(網絡分組和數據的構造和發送)、Libnids(網絡入侵檢測)、Libicmp(icmp報文的構造和發送、處理)socket
傳輸層:函數
NetBIOS編程,針對Windows操做系統,是至關於OSI模型的會話層開發環境操作系統
傳輸層和應用層之間:設計
Socket編程3d
應用層:
Web、
RPC遠程過程調用Remote Procedure Call、
中間件編程
做爲應用程序,須要實現兩個主機上運行的application的通訊,應用程序的通訊——>應用層內部進程之間的通訊——>遵循應用層協議,定義瞭如何交互,由於網絡層次結構分爲五層結構,則兩個主機端系統從功能上均可以看做五個層次,很明顯,做爲應用進程之間的通訊,須要用到底層,好比傳輸層。
傳輸層通常是操做系統控制,應用程序通常是應用進程控制,因此分爲操做系統以內的網絡協議(傳輸層),操做系統之上的應用進程(應用層)。
應用進程要傳輸,須要遵循應用層協議,但真正傳輸的時候,須要把應用進程的數據,好比報文處理之後交給相鄰層次傳輸層,傳輸層進一步處理交給下一層。
Q:那麼,應用層和傳輸層如何交互呢
A:接口/網絡應用編程接口/API/Application Programming Interface
API,事實上就是網絡應用進程控制權和操做系統內部控制權的一個轉換的一個系統調用接口
典型的網絡應用編程接口:
1. 伯克利 UNIX操做系統定義的一種API,套接字接口,socket interface,簡稱套接字
2. 微軟Windows操做系統採用了套接接口API,造成一個稍微不一樣的API,Windows Socket Interface,WINSOCK
3. AT&T爲其UNIX系統V定義了一種API,簡寫爲TLI,Transport Layer Interface
套接字Socket API,是 Internet網絡應用最典型的API接口
套接字,通訊模型爲C/S
- 應用進程間通訊的抽象機制:對於單個客戶端應用進程和服務器應用進程之間,二者須要建立套接字,才能進行應用進程通訊
- 對於多個服務器,可是隻有一個客戶端,此時客戶端就須要建立多個套接字,每個套接字對應一個服務器套接字,並使用端口號綁定套接字
》》》因此當客戶端和服務器中的應用進程進行通訊時,有了IP地址,能夠知道套接字是對應哪個主機上運行的應用進程的套接字,進一步,有了端口號,能夠知道具體是哪個套接字
標識通訊端點(對外):
IP地址+端口號
一個操做系統/網絡進程如何管理套接字(對內):
套接字描述符(socket description),小整數
在使用套接字描述符管理套接字的時候,其實時一種抽象:Socket抽象
- 相似於文件抽象,像unix對套接字看做是一個特殊的文件管理
- 當應用進程建立套接字時,操做系統會分配一個數據結構存儲該套接字相關信息
- 會返回套接字描述符,可進行訪問和引用
Q:怎麼設置套接字的端點地址(IP+端口號)呢?
A:使用一個地址結構(地址結構裏面包含ip、端口、地址族)
什麼是地址族:雖然套接字API主要是面向TCP/IP協議棧,但其實套接字能夠面向不一樣的協議棧,因此不一樣的協議棧的端點地址是不一樣的。對於TCP/IP協議棧,使用的地址族是AF_INET
備註:
TCP/IP協議,或稱爲TCP/IP協議棧,或互聯網協議系列。
TCP/IP協議棧(按 TCP/IP參考模型劃分爲5層),,不一樣於OSI(7層),他將OSI中的會話層、表示層規劃到應用層。
TCP/IP協議棧,包含了一系列構成互聯網基礎的網絡協議。