國際標(biāo)準(zhǔn)化組織( ISO) 在 1978 年提出了“開放系統(tǒng)互連參考模型”婿失, 即著名的 OSI/RM 模型( Open System Interconnection/Reference Model)
自下而上依次為: 物理層、 數(shù)據(jù)鏈路層哩照、 網(wǎng)絡(luò)層飘弧、 傳輸層、 會(huì)話層痴昧、 表示層冠王、 應(yīng)用層
? 應(yīng)用層 : 是開放系統(tǒng)互連環(huán)境的最高層。 應(yīng)用層為操作系統(tǒng)或網(wǎng)絡(luò)應(yīng)用程序提 供訪問網(wǎng)絡(luò)服務(wù)的接口豪娜。
? 表示層 : 為上層用戶提供共同的數(shù)據(jù)或信息的語法表示變換哟楷。 為了讓采用不同編碼方法的計(jì)算機(jī)在通信中能相互理解數(shù)據(jù)的內(nèi)容吓蘑, 可以采用抽象的標(biāo)準(zhǔn)方法來定義數(shù)據(jù)結(jié)構(gòu)坟冲, 并采用標(biāo)準(zhǔn)的編碼表示形式。
會(huì)話層 : 也稱會(huì)晤層琳猫,主要功能是組織和同步不同的主機(jī)上各種進(jìn)程間的通信( 稱為對話)私痹, 負(fù)責(zé)在兩個(gè)會(huì)話層實(shí)體之間進(jìn)行對話連接的建立和拆除。
?傳輸層 : 負(fù)責(zé)數(shù)據(jù)傳送的最高層次账千。 傳輸層完成同處于資源子網(wǎng)中的兩個(gè)主機(jī)( 即源主機(jī)和目的主機(jī)) 間的連接和數(shù)據(jù)傳輸匀奏, 也稱為端到端的數(shù)據(jù)傳輸学搜。
網(wǎng)絡(luò)層 : 主要任務(wù)就是要選擇合適的路由论衍, 使網(wǎng)絡(luò)層的數(shù)據(jù)傳輸單元——分組能夠正確無誤地按照地址找到目的站坯台。
? 數(shù)據(jù)鏈路層 : 負(fù)責(zé)在兩個(gè)相鄰的節(jié)點(diǎn)間的線路上無差錯(cuò)地傳送以幀為單位的數(shù)據(jù)瘫寝,每一幀包括一定的數(shù)據(jù)和必要的控制信息, 在接收點(diǎn)接收到數(shù)據(jù)出錯(cuò)時(shí)要通知發(fā)送方重發(fā)滥搭, 直到這一幀無誤地到達(dá)接收節(jié)點(diǎn)瑟匆。
? 物理層 : 定義了為建立栽惶、 維護(hù)和拆除物理鏈路所需的機(jī)械的、 電氣的冕象、 功能的和規(guī)程的特性汁蝶, 其作用是使原始的數(shù)據(jù)比特流能在物理介質(zhì)上傳輸掖棉。
IP、 TCP 和 UDP 協(xié)議
TCP/IP 是一個(gè)協(xié)議集
IP 協(xié)議
互聯(lián)網(wǎng)協(xié)議( Internet Protocol耻讽, IP) 是用于報(bào)文交換網(wǎng)絡(luò)的一種面向數(shù)據(jù)的協(xié)議针肥。 IP是在 TCP/IP 協(xié)議中網(wǎng)絡(luò)層的主要協(xié)議香伴, 任務(wù)是根據(jù)源主機(jī)和目的主機(jī)的地址傳送數(shù)據(jù)。
TCP 協(xié)議
傳輸控制協(xié)議( Transmission Control Protocol具帮, TCP) 是一種面向連接的匕坯、 可靠的、 基于字節(jié)流的傳輸層通信協(xié)議锹雏。
在保證可靠性上术奖, 采用超時(shí)重傳和捎帶確認(rèn)機(jī)制 ; 在流量控制上佣耐, 采用滑動(dòng)窗口協(xié)議唧龄, 協(xié)議中規(guī)定, 對于窗口內(nèi)未經(jīng)確認(rèn)的分組需要重傳讽挟; 在擁塞控制上耽梅, 采用慢啟動(dòng)算法胖烛。
UDP 協(xié)議
用戶數(shù)據(jù)報(bào)協(xié)議( UDP) 是 TCP/IP 模型中一種面向無連接的傳輸層協(xié)議佩番, 提供面向事務(wù)的簡單不可靠信息傳送服務(wù)。
Socket 基礎(chǔ)
Socket 是應(yīng)用層與 TCP/IP 協(xié)議族通信的中間軟件抽象層逝钥, 它是一組接口。 Socket把復(fù)雜的 TCP/IP 協(xié)議族隱藏在 Socket 接口后面拱镐, 對用戶來說, 一組簡單的接口就是全部持际,讓 Socket 去組織數(shù)據(jù)沃琅, 以符合指定的協(xié)議。
Socket 一般有兩種類型: TCP 套接字和 UDP 套接字
使用 TCP 通信
TCP 服務(wù)器端工作的主要步驟如下蜘欲。
步驟 1 調(diào)用 ServerSocket( int port) 創(chuàng)建一個(gè) ServerSocket益眉, 并綁定到指定端口上。
步驟 2 調(diào)用 accept(), 監(jiān)聽連接請求郭脂, 如果客戶端請求連接年碘, 則接受連接, 返回通信套接字展鸡。
步 驟 3 調(diào) 用 Socket 類 的 getOutputStream() 和 getInputStream() 獲 取 輸 出 和 輸 入 流,開始網(wǎng)絡(luò)數(shù)據(jù)的發(fā)送和接收莹弊。
步驟 4 關(guān)閉通信套接字涤久。
TCP 客戶端工作的主要步驟如下
步驟 1 調(diào)用 Socket() 創(chuàng)建一個(gè)流套接字, 并連接到服務(wù)器端忍弛。
步驟 2 調(diào)用 Socket 類的 getOutputStream() 和 getInputStream() 方法獲取輸出和輸入流响迂, 開始網(wǎng)絡(luò)數(shù)據(jù)的發(fā)送和接收。
步驟 3 關(guān)閉通信套接字细疚。
使用 UDP 通信
UDP 服務(wù)器端工作的主要步驟如下蔗彤。
步驟 1 調(diào)用 DatagramSocket(int port) 創(chuàng)建一個(gè)數(shù)據(jù)報(bào)套接字, 并綁定到指定端口上疯兼。
步驟 2 調(diào)用 DatagramPacket( byte[]buf,int length)幕与, 建立一個(gè)字節(jié)數(shù)組以接收 UDP 包。
步驟 3 調(diào)用 DatagramSocket 類的 receive()镇防, 接受 UDP 包啦鸣。
步驟 4 關(guān)閉數(shù)據(jù)報(bào)套接字。
UDP 客戶端工作的主要步驟如下来氧。
步驟 1 調(diào)用 DatagramSocket() 創(chuàng)建一個(gè)數(shù)據(jù)包套接字诫给。
步驟 2 調(diào)用 DatagramPacket( byte[]buf,int offset,int length,InetAddress address,int port),建立要發(fā)送的 UDP 包啦扬。
步驟 3 調(diào)用 DatagramSocket 類的 send() 發(fā)送 UDP 包中狂。
步驟 4 關(guān)閉數(shù)據(jù)報(bào)套接字。