事件描述
最近為了做一些管理后臺相關的東西皮仁,想了解一下前端的一些東西(后端狗也有一顆全棧的心啊O(∩_∩)O),經(jīng)過調研最終決定使用vue2加上餓了么開源的element-ui。因為不想每天背公司的電腦回家,于是決定在自己家里也搭建一套開發(fā)環(huán)境。
按照官方文檔一陣鼓搗寂殉,終于要npm install了,結果進度條讀了半天雷滋,來了句:cannot connect to github.com,timeout....!N木ぁN钫丁!姆坚!尼瑪我爬過了千坑萬水澳泵,終于要看到勝利的曙光,踏上成為全棧工程師的金光大道了你告訴我無法連接到github兼呵?兔辅?腊敲?難道是我辦了假的電信寬帶么?维苔?碰辅?
如果我是一只前端汪,或許我會立馬打電話給電信客服罵他們個狗血淋頭介时,或者洗洗睡了期待第二天有奇跡發(fā)生没宾,然而我不服!7腥帷循衰!我要證明我每年給電信交幾千塊而不是辦個坑爹的長城寬帶是物有所值的,所以我掏出了神器wireshark褐澎,準備抓個包会钝,看看timeout的原因,期待會有奇跡發(fā)生工三。
抓包結果
作為一個后端狗迁酸,我和小姑娘們有一個共同的愛好,那就是看包:用Charles抓客戶端和服務器交互的http包和前端撕逼徒蟆,或者是在服務器上用tcpdump抓包試圖把鍋甩給別人胁出。
廢話了半天,先來看看抓包的結果:
這就奇了怪了段审,我向github連續(xù)發(fā)了7次syn全蝶,結果github完全沒有鳥我。約妹子幾次約不出來人家都知道找個借口繼續(xù)風箏我一下寺枉,你一個破網(wǎng)站這找你握手找了7次你為啥連個屁都不放呢抑淫?
再仔細看一下,發(fā)現(xiàn)了一個可疑的地方:
這個是什么呢姥闪?點開包的詳情看一下始苇,發(fā)現(xiàn)原來我的電腦開啟了tcp_timestamp:
關于tcp_timestamp,這里就不仔細分析了筐喳,感興趣的可以看看這里催式,總結一下就是如果服務器開啟了tcp_tw_recyclehe tcp_timestamps,那么要求60s內(nèi)同一源ip主機的socket connect請求中的timestamp必須是遞增的避归,而我家里有2臺電腦荣月,另外一臺也一直在訪問github,兩臺電腦是經(jīng)過NAT連接到網(wǎng)絡的梳毙,在github看來我就是同一個ip哺窄,所以丟棄了timestamp沒有遞增的包,所以我們才會看到連續(xù)7個syn包都沒有收到任何回復。關閉計算機的tcp_timestamp萌业,重新嘗試了一下npm install坷襟,終于成功的安裝了所依賴的包。
總結
在平時的工作中生年,包括后端同學在內(nèi)的很多人都覺得沒必要了解操作系統(tǒng)和計算機網(wǎng)絡的相關知識婴程,畢竟各種框架已經(jīng)幫我們做好了封裝,似乎我們需要做的就是學會框架晶框,然后了解業(yè)務排抬,做出符合需求的產(chǎn)品,但是上面這個例子告訴我們授段,多了解一點相對底層的東西蹲蒲,還是會對我們的工作和學習有所幫助的,如果我不知道tcp是什么侵贵,或者不會用wireshark届搁、tcpdump之類的工具抓包,很可能就會花整晚的時間解決一個開發(fā)環(huán)境搭建的問題窍育。