Socket编程(C语言实现)—— AF_INET(典型的TCP/IP四层模型的通信过程),AF_UNIX(本地进程间通信)
1、AF_INET域與Socket通信
? ? ?其是典型的TCP/IP四層模型的通信過(guò)程。
(1)接收方與發(fā)送方依賴IP和port來(lái)標(biāo)識(shí),即,將本地socket綁定到對(duì)應(yīng)的IP端口上;
(2)發(fā)送數(shù)據(jù)時(shí)指定對(duì)方的IP與端口,經(jīng)過(guò)Internet可以根據(jù)此端口最終找到接收方;
(3)接受數(shù)據(jù)時(shí),可以從數(shù)據(jù)包內(nèi)獲取到發(fā)送方的IP和端口號(hào)。
(1) 發(fā)送方通過(guò)系統(tǒng)調(diào)用send()將原始數(shù)據(jù)發(fā)送到操作系統(tǒng)內(nèi)核緩沖區(qū)中。
(2) 內(nèi)核緩沖區(qū)從上到下依次經(jīng)過(guò)TCP層、IP層、鏈路層的編碼,分別添加對(duì)應(yīng)的頭部信息,經(jīng)過(guò)網(wǎng)卡將一個(gè)數(shù)據(jù)包發(fā)送到網(wǎng)絡(luò)中。
(3) 經(jīng)過(guò)網(wǎng)絡(luò)路由到接收方的網(wǎng)卡。
(4) 網(wǎng)卡通過(guò)系統(tǒng)中斷將數(shù)據(jù)包通知到接收方的操作系統(tǒng),再沿著發(fā)送方編碼的反方向進(jìn)行解碼,即依次經(jīng)過(guò)鏈路層、IP層、TCP層去除頭部、檢查校驗(yàn)等;
(5)?最終將原始數(shù)據(jù)上報(bào)到接收方進(jìn)程。
2、AF_UNIX域與Socket通信過(guò)程
? ?其是典型的IPC(本地進(jìn)程間通信),依賴于路徑名標(biāo)識(shí)接收方和發(fā)送方。
(1)發(fā)送數(shù)據(jù)時(shí),指定接收方綁定的路徑名;
(2)操作系統(tǒng)可以直接根據(jù)該路徑名找到對(duì)應(yīng)的接收方;
(3)并將數(shù)據(jù)直接拷貝到接受方的內(nèi)核緩沖區(qū)內(nèi),并上報(bào)給接收方進(jìn)程進(jìn)行通信;
(4)接收方可以從收到的數(shù)據(jù)包中獲取到發(fā)送方的路徑名;
(5)并通過(guò)此路徑名向其發(fā)送數(shù)據(jù)。
3、進(jìn)程間通信流式傳輸與報(bào)式傳輸
? | SOCK_STREAM(流式傳輸) | SOCK_DGRAM(報(bào)式傳輸) |
AF_INET(TCP/IP通信) (明確知道對(duì)端地址) | 流式傳輸使用函數(shù): send(),recv(); read(),write(); 流式傳輸類似于管道: | 報(bào)式傳輸使用函數(shù): sendto(),redvfrom(); 報(bào)式傳輸區(qū)分邊界: 分包收取數(shù)據(jù)。 |
AF_UNIX(本地進(jìn)程間通信) (不知道對(duì)端地址) |
(1)AF_INET(TCP/IP通信協(xié)議),SOCKET_STREAM與SOCKET_DGRAM函數(shù)的使用方式:
Socket編程(C語(yǔ)言實(shí)現(xiàn))——TCP協(xié)議(網(wǎng)絡(luò)間通信AF_INET)的流式(SOCK_STREAM)+報(bào)式(SOCK_DGRAM)傳輸【多線程+循環(huán)監(jiān)聽】
(2)AF_UNIX(IPC本地進(jìn)程間通信),SOCKET_STREAM與SOCKET_DGRAM函數(shù)的使用方式:
Socket編程(C語(yǔ)言實(shí)現(xiàn))——UDP協(xié)議(進(jìn)程間通信AF_UNIX)的流式(SOCK_STREAM)+報(bào)式(SOCK_DGRAM)傳輸【循環(huán)監(jiān)聽】
(3)為什么說(shuō)流式傳輸類似于管道,不區(qū)分邊界?
Socket編程(C語(yǔ)言實(shí)現(xiàn))—— 為什么流式傳輸類似于管道?不區(qū)分邊界?
參考文章:https://blog.csdn.net/sandware/article/details/40923491?
總結(jié)
以上是生活随笔為你收集整理的Socket编程(C语言实现)—— AF_INET(典型的TCP/IP四层模型的通信过程),AF_UNIX(本地进程间通信)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

- 上一篇: Socket编程(C语言实现)—— 为什
- 下一篇: C语言——四字节对齐(4对齐后是4, 5