今天在得到 APP 上的「羅輯思維」欄目里讀到一篇文章,叫做「同構學習法」。那么究竟什么是「同構學習法」呢?文章里是這么說的:一個領域的方法,可以對應解開另一個領域的問題。從一個領域入手,可以幫我們理解另一個領域的規律,這就叫同構學習法。說得直白點就是舉一反三,觸類旁通。
為什么同構學習法有效呢?因為這個世界絕大部分知識領域,都可以分成兩類。一類是天然世界,一類是人造世界,也就是自然科學和人文學科。這兩個世界內部,往往都是同構的。我們再深看一層。其實「同構學習法」不僅是可以用一個領域解釋另一個領域,它還有一種更大的作用:就是用一個領域的知識,去揭開另一個領域被刻意隱藏的東西。
正好最近看到 TCP 建立連接需要經過三次握手的原理,為什么要進行三次握手呢?這是為了防止已失效的連接請求報文段,突然又傳送到了服務端而產生錯誤。
具體例子:「已失效的連接請求報文段」的產生在這樣一種情況下:client 發出的第一個連接請求報文段并沒有丟失,而是在某個網絡結點長時間的滯留了,以致延誤到連接釋放以后的某個時間才到達 server。本來這是一個早已失效的報文段。但
server 收到此失效的連接請求報文段后,就誤認為是 client 再次發出的一個新的連接請求。于是就向 client 發出確認報文段,同意建立連接。假設不采用「三次握手」,那么只要 server 發出確認,新的連接就建立了。由于現在 client 并沒有發出建立連接的請求,因此不會理睬 server 的確認,也不會向 server 發送數據。但 server 卻以為新的運輸連接已經建立,并一直等待 client 發來數據。這樣,server 的許多資源就白白浪費了。采用「三次握手」的辦法可以防止上述現象發生。例如剛才那種情況,client 不會向 server 的確認發出確認。server 由于收不到確認,就知道 client 并沒有要求建立連接。更多的 TCP/IP 的知識請看這里:關于 TCP/IP,必知必會的十個問題。
這段解釋不算難懂,但是好多人并不能清楚地解釋原因。我們可以用 RSS 郵件訂閱的例子來說明,這兩個事例雖然屬于不同的領域,但是原理是相通的,這就是同構學習法吧。
你看,當我想要訂閱某個網站上的精選文章時,它首先讓我輸入郵箱,然后向郵箱發送一封確認郵件,等我點擊確認訂閱后,網站服務器才會定期給我推送文章。在這個過程中,用戶和服務商之間就進行了三次的交互:請求訂閱→發送確認→確認訂閱,是不是和 TCP 三次握手建立連接大同小異。如果有的用戶輸錯了郵箱,他就收不到確認郵件。而且服務器也收不到用戶的確認,它就會認為這個用戶的操作有問題,不予以提供訂閱服務。試想一下,如果服務器沒有要求用戶確認訂閱會發生什么,它會直接向用戶首次輸入的錯誤郵箱推送訂閱,一方面會給錯誤的收件人帶來干擾,另一方面會浪費服務器的資源,帶來額外的運營成本。看來,三次握手在這里同樣是適用的。通過這么簡明易懂的例子,讓普通人也能理解 TCP 建立連接的原理,可見同構學習法的妙處。
孔子這位偉大的教育家就曾對他的學生說過:「舉一隅,不以三隅反,則不復也。」意思是說:「我舉出一個方面,你們應該要能靈活的推想到另外幾個方面,如果不能的話,我也不會再教你們了?!顾?,我們學一件東西,要可以靈活地思考,運用到其他類似的事物上。
得到 APP 提供了非常棒的知識服務,在這里可以升級你的大腦,提高認知水平,每天都有進步。特別推薦大家使用~