我們經常聽到"建立TCP連接","服務器的連接數量有限"等,但仔細一想,連接究竟是個什么東西,是和電話一樣兩端連起一根線?似乎有點抽象不是么?
1. 久違的分組交換網絡
似乎這個概念只有在學校里學計算機網絡才能接觸到,但不過今天的話題其實和它離不開關系。我們知道最早的電話網絡是以很容易理解的形式存在的,就是單純的一根線加兩端的設備,設備之間所溝通的所有信息都通過一根特定的電纜來回傳輸,如下圖:
這樣的連接是我們特別好理解的,搭起兩邊的線,就是一個連接嘛!但是,我們討論的是計算機網絡!(嚴肅臉),計算機網絡中兩個設備節點是如何通信?
計算機網絡采取分組交換技術,什么意思呢?就是我有【一塊數據】要發給對方小蒼,那我會把這【一塊數據】分成N份【單位數據】,分別發出去,而每份【單位數據】走哪條路是不一定的,但是這些【單位數據】總要全部達到小蒼手里,小蒼再根據【單位數據】里記錄的序號拼接起來,組成完整的【一塊數據】。這就是分組的意思所在。
2. 協議和協議實現
上面不小心把TCP的大體實現給說了,實際上在具體的應用中,光有大體思路是不行的,還有很多細節問題,需要兩個設備之間提前約定好協議,才能協同完成通信。舉個例子:A向B發了10份【單位數據】,而B其實只收到9份【單位數據】,怎么辦?
TCP協議大家都應該是知道的,但協議只是想法,真正起作用的是在路由節點和設備節點上的協議軟件,是運行在設備上的具體執行者,它根據協議指導,對具體數據進行控制和操作。這兒就不往下展開了。
認識到協議和協議軟件這一點非常重要,因為連接的限制恰恰就是受軟件在設備中資源分配的影響的。
3. 連接的真面目
上面說的第一種電話網絡,如果兩個設備搭設了一條線,那么兩個電話就一定確定對方在線,因為他倆獨享一條實時存在的線。但計算機網絡的連接呢?
向上面的圖一樣(圖里不深究TCP,僅僅用來說明連接大體過程),其實他們倆並不能確保對方就是在線,只是通過幾番確認,認為對方一直會在。而如果確認了對方存在,那么就會為以后的對話通訊分配內存、CPU處理時間等資源,每個設備都會在本地去維持這么一個狀態,來告訴自己是有一個連接的,這些設備所花的資源和維護的狀態,就是連接。而整個網絡是不會記錄有着一條連接的,所以說連接只是記錄在各個設備的一個狀態信息。
那么,到現在我們知道了,連接其實並不是所謂的有一根電線連起兩個設備,而是兩方確認了一下對方的存在后,自己在本地記錄的狀態。那么下面可以討論一下以前迷惑重重的概念了。
4. 為什么服務器都有連接數量的限制?
這里只做討論。我認為是有兩點:
- 物理帶寬的限制,決定了一個時間段內發起連接的數據包不會超過某個數,造成了設備的鏈接數量的限制。
- 維持連接需要分配內存等資源,設備的資源有限,決定了一定有個最大連接數的極限。
5. 待續
通過連接往外延伸的話題不少,先到此為止吧,有時間再補。