1. 程式人生 > >基於tcp/ip協議的網路程式設計的一點感悟 ---關於ip和port作為通訊一端的唯一標識的認識

基於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,第四列代表當前連線的狀態。