socket 網(wǎng)絡(luò)通訊理解

開頭:半夜睡不著,想起來socket 網(wǎng)絡(luò)通訊,這是鬧哪門子。

一:網(wǎng)絡(luò)通信
???? 網(wǎng)絡(luò)通訊本質(zhì)上是用socket進行的。通訊嘛。本質(zhì)上就是2個動作,讀,寫。
???? 繼續(xù)說下去之前,先來看如下一張圖:
????

解釋下圖中的幾個概念:
a. socket1,socket2,socket3
這是網(wǎng)絡(luò)通訊的一個載體, 可以形象的理解為管道的端口。機器A和機器B建立網(wǎng)絡(luò)鏈接之后,雙方都會產(chǎn)生這個東西,以后雙方通訊就靠它來傳輸數(shù)據(jù)。
b. 運輸船
網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)幕締卧?數(shù)據(jù)包)
c.碼頭A,碼頭B
操作系統(tǒng)(內(nèi)核)管理的一片內(nèi)存區(qū)域
d.貨柜
傳輸數(shù)據(jù)的基本單位(不絕對嚴謹)。
e.倉庫
socket 在內(nèi)核的緩沖區(qū),倉庫有大有小??梢酝ㄟ^socket的相關(guān)屬性來設(shè)置

程序員讀寫socket的時候,實際上就是從碼頭的倉庫里取貨或往碼頭的倉庫里裝貨。
那問題來了。碼頭倉庫里面的貨物什么時候開始通過運輸船運輸呢?
這是由操作系統(tǒng)(內(nèi)核)來管控的事情。簡單理解: 至少運輸船裝滿之后,才能通過運輸船運輸。
socket 通訊的基本流程是:
程序員A 通過--> socket1-> 不斷的往它的碼頭倉庫裝貨->操作系統(tǒng)(內(nèi)核)根據(jù)規(guī)則 往運輸船上裝貨柜 發(fā)送到 程序員B的碼頭倉庫->
程序員B 在從它的碼頭倉庫里面不斷取貨。

流程中的細節(jié)問題:
a. 程序員A的碼頭倉庫和程序員B的碼頭倉庫是必須一樣大小嗎?
??? 不是必須的。通過socket 高級參數(shù)可以設(shè)置倉庫大小
b. 程序員B什么時候開始從碼頭倉庫中取貨?
??? 通過socket 的一些高級參數(shù)可以設(shè)置
c. 當程序員B的碼頭倉庫堆滿了, 程序員A 這邊的狀態(tài)會怎么樣?
??? 1. 當A的倉庫未滿時,A可以繼續(xù)給B發(fā)送數(shù)據(jù)(其實是A繼續(xù)往自己的倉庫里面堆放貨物)
??? 2. 當A的倉庫也滿時,A就無法繼續(xù)給B發(fā)送數(shù)據(jù)了。有2種結(jié)果,A給B發(fā)送數(shù)據(jù)出現(xiàn)阻塞。A給B發(fā)送數(shù)據(jù)出現(xiàn)異常信息。
d. 這種現(xiàn)象出現(xiàn),就會產(chǎn)生A給B 發(fā)送數(shù)據(jù)的頻率問題,B提取貨物的能力問題,A,B倉庫大小如何設(shè)定合理問題 等。
??? 這也是socket 的一些高級問題。

總結(jié): 通過上述形象舉例,對socket編程有更加深刻的理解。同時也會產(chǎn)生各種疑問。帶著這些疑問可以去查看TCP/IP 協(xié)議系列叢書,就更容易理解書中的內(nèi)容。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容