AF_INET域与AF_UNIX域socket通信原理对比
1. AF_INET域socket通信過(guò)程
典型的TCP/IP四層模型的通信過(guò)程。
發(fā)送方、接收方依賴IP:Port來(lái)標(biāo)識(shí),即將本地的socket綁定到對(duì)應(yīng)的IP端口上,發(fā)送數(shù)據(jù)時(shí),指定對(duì)方的IP端口,經(jīng)過(guò)Internet,可以根據(jù)此IP端口最終找到接收方;接收數(shù)據(jù)時(shí),可以從數(shù)據(jù)包中獲取到發(fā)送方的IP端口。
發(fā)送方通過(guò)系統(tǒng)調(diào)用send()將原始數(shù)據(jù)發(fā)送到操作系統(tǒng)內(nèi)核緩沖區(qū)中。內(nèi)核緩沖區(qū)從上到下依次經(jīng)過(guò)TCP層、IP層、鏈路層的編碼,分別添加對(duì)應(yīng)的頭部信息,經(jīng)過(guò)網(wǎng)卡將一個(gè)數(shù)據(jù)包發(fā)送到網(wǎng)絡(luò)中。經(jīng)過(guò)網(wǎng)絡(luò)路由到接收方的網(wǎng)卡。網(wǎng)卡通過(guò)系統(tǒng)中斷將數(shù)據(jù)包通知到接收方的操作系統(tǒng),再沿著發(fā)送方編碼的反方向進(jìn)行解碼,即依次經(jīng)過(guò)鏈路層、IP層、TCP層去除頭部、檢查校驗(yàn)等,最終將原始數(shù)據(jù)上報(bào)到接收方進(jìn)程。
AF_UNIX域socket通信過(guò)程
典型的本地IPC,類似于管道,依賴路徑名標(biāo)識(shí)發(fā)送方和接收方。即發(fā)送數(shù)據(jù)時(shí),指定接收方綁定的路徑名,操作系統(tǒng)根據(jù)該路徑名可以直接找到對(duì)應(yīng)的接收方,并將原始數(shù)據(jù)直接拷貝到接收方的內(nèi)核緩沖區(qū)中,并上報(bào)給接收方進(jìn)程進(jìn)行處理。同樣的接收方可以從收到的數(shù)據(jù)包中獲取到發(fā)送方的路徑名,并通過(guò)此路徑名向其發(fā)送數(shù)據(jù)。
3. 相同點(diǎn)
操作系統(tǒng)提供的接口socket(),bind(),connect(),accept(),send(),recv(),以及用來(lái)對(duì)其進(jìn)行多路復(fù)用事件檢測(cè)的select(),poll(),epoll()都是完全相同的。收發(fā)數(shù)據(jù)的過(guò)程中,上層應(yīng)用感知不到底層的差別。
4. 不同點(diǎn)
1 建立socket傳遞的地址域,及bind()的地址結(jié)構(gòu)稍有區(qū)別:
socket() 分別傳遞不同的域AF_INET和AF_UNIX
bind()的地址結(jié)構(gòu)分別為sockaddr_in(制定IP端口)和sockaddr_un(指定路徑名)
2 AF_INET需經(jīng)過(guò)多個(gè)協(xié)議層的編解碼,消耗系統(tǒng)cpu,并且數(shù)據(jù)傳輸需要經(jīng)過(guò)網(wǎng)卡,受到網(wǎng)卡帶寬的限制。AF_UNIX數(shù)據(jù)到達(dá)內(nèi)核緩沖區(qū)后,由內(nèi)核根據(jù)指定路徑名找到接收方socket對(duì)應(yīng)的內(nèi)核緩沖區(qū),直接將數(shù)據(jù)拷貝過(guò)去,不經(jīng)過(guò)協(xié)議層編解碼,節(jié)省系統(tǒng)cpu,并且不經(jīng)過(guò)網(wǎng)卡,因此不受網(wǎng)卡帶寬的限制。
3 AF_UNIX的傳輸速率遠(yuǎn)遠(yuǎn)大于AF_INET
3 AF_INET不僅可以用作本機(jī)的跨進(jìn)程通信,同樣的可以用于不同機(jī)器之間的通信,其就是為了在不同機(jī)器之間進(jìn)行網(wǎng)絡(luò)互聯(lián)傳遞數(shù)據(jù)而生。而AF_UNIX則只能用于本機(jī)內(nèi)進(jìn)程之間的通信。
5. 使用場(chǎng)景
AF_UNIX由于其對(duì)系統(tǒng)cpu的較少消耗,不受限于網(wǎng)卡帶寬,及高效的傳遞速率,本機(jī)通信則首選AF_UNIX域。
不用多說(shuō),AF_INET則用于跨機(jī)器之間的通信。
總結(jié)
以上是生活随笔為你收集整理的AF_INET域与AF_UNIX域socket通信原理对比的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mongodb java 多条件查询_M
- 下一篇: 百度百科去水印