基於tcp/ip協議的網絡編程的一點感悟 ---關於ip和port作爲通訊一端的唯一標識的認識

      對於基於tcp的應用程序來說,無論是客戶端,還是服務器端,唯一標識對端id的是socket pair {本地ip:本地port, 遠端ip:遠端port}

,底層的ip協議數據包肯定包含源ip和port,目的ip和port, 當此數據包到達目的地時,目標主機的tcp連接就會匹配此連接的soket pair是否和數據包的socket pair 相同,如果相同,則數據進入tcp流隊列,等待應用程序獲取,如果應用程序此時堵死在處理程序中,導致數據包沒有被取走,那麼網絡上過來的數據包就不會進入tcp流隊列,而是被丟棄,並返回給對端當前可用緩衝爲0,從而對端也堵死在那裏,就像一條水管,如果一端被堵死,那麼另一端的水就進不來,如果此端很順暢,那麼水在管道中流的也很順暢,所以此協議被成爲流協議。

      對於基於udp的應用程序也是一樣,無論是組播,還是廣播,如果ip數據包到達目的端,udp收包函數匹配socket pair {本地ip:本地port, 遠端ip:遠端port},不如不相同,則丟棄,並從ip隊列中刪除,如此客戶端一直往對端仍數據,而不管對端緩衝隊列是否已經滿,服務器端緩衝隊列如果已滿,則直接丟棄後來的數據。所以成爲數據報協議。

      同時也終於明白瞭如下內容的意義:

 第一列代表協議類型, 第二列代表socket pair 的本地ip和port,第三列代表socket pair 的遠端ip和port,第四列代表當前連接的狀態。

發佈了38 篇原創文章 · 獲贊 8 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章