計(jì)算機(jī)網(wǎng)絡(luò)七層協(xié)議結(jié)構(gòu)(OSI),由底層向上:
物理層->數(shù)據(jù)鏈路層->傳輸層->網(wǎng)絡(luò)層->會(huì)話層->表示層->應(yīng)用層 //欲詳細(xì)了解每個(gè)層次請(qǐng)轉(zhuǎn)到(http://blog.csdn.net/yaopeng_2005/article/details/7064869)
我們所關(guān)注的 tcp/udp 協(xié)議就在傳輸層. (ps. 網(wǎng)絡(luò)層- ip 協(xié)議, 應(yīng)用層- http 協(xié)議)
socket通信:
通常為 TCP 連接, socket 通信可以抽象的理解為是連接應(yīng)用層與傳輸層的管道,兩層間復(fù)雜的操作都被抽象成為 socket 通信接口.是對(duì) TCP/IP 的封裝
通信的三個(gè)步驟: 服務(wù)端利用 socket 監(jiān)聽(tīng)端口 -> 客戶端發(fā)起連接請(qǐng)求 -> 服務(wù)端返回確認(rèn)信息,建立通信
下圖就是 socket 通信的流程(圖片來(lái)源于網(wǎng)絡(luò))
S 服務(wù)端: 創(chuàng)建 socket. 根據(jù)ip 地址類型(ipv4,ipv6), socket 類型,協(xié)議
S 服務(wù)端: 綁定 socket ip 地址與端口號(hào)
S 服務(wù)端: 監(jiān)聽(tīng)端口號(hào)請(qǐng)求
C 客戶端: 創(chuàng)建 socket
C 客戶端: 打開(kāi) socket, 根據(jù)ip 地址跟端口號(hào)嘗試連接服務(wù)端socket
S 服務(wù)端: 服務(wù)端 socket 接收到服務(wù)端 socket 請(qǐng)求,開(kāi)始接收客戶端請(qǐng)求, 等待客戶端返回連接. 此時(shí), 服務(wù)端socket 進(jìn)入阻塞狀態(tài), 即accept() 方法一直在等待客戶端返回連接信息
C 客戶端: 連接成功,發(fā)送連接狀態(tài)信息
S 服務(wù)端: accept() 方法返回信息,連接成功
C 客戶端: 往 socket寫(xiě)入信息發(fā)送給服務(wù)端
S 服務(wù)端: 讀取 socket 信息
C 客戶端: 關(guān)閉 socket
S 服務(wù)端: 關(guān)閉 socket
接下來(lái)簡(jiǎn)單認(rèn)識(shí)下 TCP/UDP
定義
tcp:傳輸控制協(xié)議
udp:用戶數(shù)據(jù)包協(xié)議
特點(diǎn)
tcp:
- 面向連接
- 可靠傳輸 (有序,無(wú)錯(cuò)誤,不丟失,不重復(fù),數(shù)據(jù)完整)
- 一條 TCP 連接, 只能是點(diǎn)對(duì)點(diǎn)
- 面向字節(jié)流
- 首部開(kāi)銷 20 字節(jié)
- 全雙工通信 ( 建立連接,隨時(shí)隨地通信)
udp:
- 無(wú)連接,廣播的形式發(fā)送數(shù)據(jù) (因此少開(kāi)銷,無(wú)需等待確認(rèn)則傳輸快. 主機(jī)發(fā)送效率穩(wěn)定,不受接受方影響)
- 不可靠傳輸 (丟包, 重復(fù),大小不穩(wěn)定,可能不按順序到達(dá))
- 支持一對(duì)一,一對(duì)多,多對(duì)多,多對(duì)一的交互通信
- 面向報(bào)文
- 首部開(kāi)銷 8 字節(jié)