D34_TCP 底層知識的筆記


Posted by Christy on 2021-05-22

  1. 剛把指定教材的兩篇文章看完了,也看了老師說的參考文章:为什么 TCP 建立连接需要三次握手

  2. 我的心得:(非常淺層的理解,也許不完全正確)

    2.1 重點要放在為什麼需要「三次握手」,而不僅僅在於次數(三次)而已。

    • 為什麼要握手?因為要發送與接收訊息,文章裡面提到了,TCP 文件連接的定義:

      The reliability and flow control mechanisms described above require that TCPs initialize and maintain certain status information for each data stream. The combination of this information, including sockets, sequence numbers, and window sizes, is called a connection.

      「連接裡面包含 sockets, sequence numbers, and window sizes 這三個因素」

    • 握手確保訊息的可靠性,但是更底層的原理是文章中提到的「为什么需要通过三次握手才可以初始化 Sockets、窗口大小和初始序列号?」

    • 為什麼要三次?因為三次才可以達到上面說的「初始化 Sockets、窗口大小和初始序列号」,而要達成這些條件,最少的次數是三次,也可以做到更多次,但是沒有必要;兩次的話,以上的條件不會成立。

    2.2 sockets, sequence numbers, and window sizes 是什麼東西?

    • sockets 這個字我還找不到確切的中文,感覺他是一個接收器,傳送門之類的

    • sequence numbers 序列號

    • 把每一個發送的訊息都編號,目的是為了不要讓發送的訊息重複、丟失、保證傳輸順序等等,避免混亂

      • window sizes 窗口尺寸?感覺像個空間一樣,來暫時存放序列號資料之類的

    2.3 文章中作者提出的兩個思考點:

    • 除了使用序列号是否还有其他方式保证消息的不重不丢?

    • 我的回答:瞄了一下,序列號的編碼方式是亂數,而且每次發送都初始化。我想了一下,如果用類似 Git 那種編號方式,然後再給一個文件檔案放順序,也許就可以保證傳送訊息的順序、編號不重複性。但是不丟要怎麼解決?看起來應該是要研究最底層的運作才會知道。

    • UDP 协议有连接的概念么,它能保证数据传输的可靠么?

    • 我的回答:再一次,連接的定義是包含這三個要件:「初始化 Sockets、窗口大小和初始序列号」,我認為 UDP 沒有連接的概念,原因是數據丟了也無所謂,所以他沒有實現窗口大小(暫存資料)的功能;初始序列号的部分,就功能性來說,「重複、丟失、保證傳輸順序」,的確要解決重複或者順序的問題,但丟失不需要被解決;初始化 Sockets 不知道這是啥。因此他不能保證傳輸的可靠性。

      參考資料:
      什么是TCP Window
      TCP 协议中的 Window Size与吞吐量

      小結:還有看到四次分手、一些其他的專有名詞,我完全被底層知識給迷住了 😍。










Related Posts

[day-11] JS 陣列 forEach 資料處理方法

[day-11] JS 陣列 forEach 資料處理方法

Express 框架 - debug 補

Express 框架 - debug 補

 廣告排期系統 切版練習

廣告排期系統 切版練習


Comments