自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

干貨!我的計算機網(wǎng)絡(luò)怎么考了100的?

新聞
在我們幾個的口口相傳下,我們班在上計算機網(wǎng)絡(luò)課時,門可羅雀,而隔壁班人卻越來越多,不知道我們的計算機網(wǎng)絡(luò)老師看到后心里有何感想。

[[396450]]

有讀者問我:軒轅,你是怎么學(xué)計算機網(wǎng)絡(luò)的?

鴿了好久,今天得空聊聊這個話題。

軒轅是通信工程專業(yè),計算機網(wǎng)絡(luò)通信自然是必學(xué)內(nèi)容。

我猜,絕大多數(shù)同學(xué)的計算機網(wǎng)絡(luò)知識,估計都是在學(xué)生時代,抱著謝希仁那本厚厚的《計算機網(wǎng)絡(luò)》課本,老師念著上個世紀就傳承至今的教案PPT得來的。

如果運氣好,老師講的不錯,還學(xué)的進去。

如果運氣不好,老師只是一個PPT播放機的話,那就···

很不幸,我就是運氣不好的那種。

老師講了一大堆協(xié)議啊,局域網(wǎng)、廣域網(wǎng)、網(wǎng)絡(luò)設(shè)備啥的,我卻聽著聽著經(jīng)常就神游太虛了。

一次偶然,發(fā)現(xiàn)隔壁班的計算機網(wǎng)絡(luò)是當初教計算機二級的老師在上課,這位老師的講課風(fēng)格一直是我非常喜歡的,于是我和兩個小伙伴就一起溜進去蹭課,這一蹭不要緊,一下就上了癮。

這位老師風(fēng)格獨立,根本不用學(xué)校發(fā)的教材,而是自己編寫了一套PPT,從最底層的原理講起,從通信的編碼校驗,到局域網(wǎng)的802.3、802.4、802.5等技術(shù)演進,用生動有趣到生活實例告訴我們什么是CSMA/CD,聽得我們?nèi)绨V如醉。我現(xiàn)在寫的很多故事性的文章,一定程度上都有這位老師的影響。

在我們幾個的口口相傳下,我們班在上計算機網(wǎng)絡(luò)課時,門可羅雀,而隔壁班人卻越來越多,不知道我們的計算機網(wǎng)絡(luò)老師看到后心里有何感想。

果然,老師的力量還是很大的,一下子就開了竅似的,學(xué)起來簡單多了,期末考試輕松拿下100分。

我的經(jīng)歷

期末考試結(jié)束后就是暑假,我進入學(xué)校的網(wǎng)絡(luò)安全實驗室了,進入之后的第一個任務(wù),也是事關(guān)我們能否留下來的考核題目來了:編寫一個HTTP流量還原的軟件。

程序要求:輸入一個從wireshark等抓包軟件導(dǎo)出的pcap文件,輸出這其中所有傳輸?shù)腍TTP內(nèi)容,包括HTML、CSS、JS、JPEG、PNG、GZIP等等內(nèi)容。

包括我在內(nèi),同批次進入實驗室的總共有5個人,大家各自負責(zé)不同的協(xié)議流量還原,有FTP、SMTP、HTTP、IMAP、POP3,我算運氣好的,因為HTTP相對來說是最熟悉的了。

那時剛剛大一暑假,才剛剛學(xué)完C語言,雖然已經(jīng)提前自學(xué)了C++,但面臨這個題目還是慌了。

最大的問題就是,網(wǎng)絡(luò)數(shù)據(jù)包只在課本里學(xué)過報文格式,我也沒見過真正的數(shù)據(jù)包長啥樣,也不知道在pcap文件里怎么存儲的,更不知道如何把HTTP傳輸?shù)臄?shù)據(jù)給還原出來了。

總之,就是當時對網(wǎng)絡(luò)流量的認識還停留在類似上面這樣的圖上,至于數(shù)據(jù)包長啥樣則完全沒概念。

有一天晚上,實驗室的老師安排了高一屆的師兄們給我們講解了如何抓包,怎么查看網(wǎng)絡(luò)通信數(shù)據(jù)。

那是我第一次在抓包軟件下看到了網(wǎng)絡(luò)中數(shù)據(jù)流量的真實樣子,觸動特別大,平時躺在書本上的報文格式,現(xiàn)在活生生的出現(xiàn)在了眼前,每一個字節(jié),甚至每一個比特的意義都在抓包軟件下看的清清楚楚,原來,網(wǎng)絡(luò)是可以看到的!

在抓包軟件下,網(wǎng)絡(luò)的分層不再是一個靜態(tài)的分層模型圖,而是看得到的一層又一層的報文頭,從鏈路層的以太網(wǎng)協(xié)議,到網(wǎng)絡(luò)層的IP協(xié)議,再到老大難的TCP頭部,再到上面的應(yīng)用層協(xié)議,那一串二進制比特流數(shù)據(jù),用一棵協(xié)議樹的形式對應(yīng)了起來。

那幾天,我們都在集中學(xué)習(xí)抓包,看著自己瀏覽的網(wǎng)頁數(shù)據(jù),最后都能在抓包軟件中找到它,我對計算機網(wǎng)絡(luò)的理解開始變得立體起來。

抓包學(xué)的差不多,就要開始編寫程序完成任務(wù)了。

在C/C++語言中,為了處理報文數(shù)據(jù),就會定義各種各有的協(xié)議結(jié)構(gòu)體,這一來,又進一步強化了對每個字段的理解,因為它不再是書本上一個簡單的字段名字,它變成了我代碼結(jié)構(gòu)體中一個實實在在存在的成員變量。

  1. typedef struct _ip_hdr   
  2. {   
  3.     #if LITTLE_ENDIAN    
  4.     unsigned char ihl:4;     //首部長度    
  5.     unsigned char version:4, //版本     
  6.     #else    
  7.     unsigned char version:4, //版本    
  8.     unsigned char ihl:4;     //首部長度    
  9.     #endif    
  10.     unsigned char tos;       //服務(wù)類型    
  11.     unsigned short tot_len;  //總長度    
  12.     unsigned short id;       //標志    
  13.     unsigned short frag_off; //分片偏移    
  14.     unsigned char ttl;       //生存時間    
  15.     unsigned char protocol;  //協(xié)議    
  16.     unsigned short chk_sum;  //檢驗和    
  17.     struct in_addr srcaddr;  //源IP地址    
  18.     struct in_addr dstaddr;  //目的IP地址    
  19. }ip_hdr;   

這里插一句,以前學(xué)C語言,學(xué)到聯(lián)合體union、位域這些東西時一直不知道怎么用以及有啥用,直到去處理解析這些協(xié)議頭數(shù)據(jù)的時候才發(fā)現(xiàn):哇靠!真香!

說回我的程序,我的程序分為了兩個階段,第一步,先把pcap中存儲的數(shù)據(jù)包都展示出來,這一步主要是文件格式處理和數(shù)據(jù)包的分層解析。

第二步,識別HTTP會話,提取傳輸?shù)膬?nèi)容。

這第一步倒還好,熟悉了文件格式和報文分層的格式后,循環(huán)遍歷pcap文件內(nèi)容,挨個分層解析協(xié)議即可。

但是這個第二步就有些困難了,最重要的就在于HTTP的傳輸層是TCP,TCP里面涉及到超時重傳、亂序等一些復(fù)雜的情況,要完整的合并一個會話,考慮到上面這些情況,就沒那么容易了。

不過,困難亦是機遇,一直對計算機網(wǎng)絡(luò)協(xié)議中的TCP這頭攔路虎有些懼怕,這一次是時候跟它好好把話說清楚,道明白。

序列號SEQ和確認號ACK是TCP傳輸?shù)幕?,抓住這倆家伙,就能抓住TCP會話的脈絡(luò)。

經(jīng)過一陣研究摸索,總算寫出了一套算法來進行會話流的重組,雖然現(xiàn)在回過頭去看還是有很多考慮不足之處,但在當時已經(jīng)能解決面臨的問題。

通過編程來進行流重組的過程,對TCP的超時重傳、擁塞控制、滑動窗口、數(shù)據(jù)亂序等細節(jié)有了完全不一樣的理解。

以前只是從概念上記住理解,而現(xiàn)在是自己要從代碼層面處理這一個個的場景,這個掌握的深度自然是不一樣的。

差不多一個月后,暑假過了一半兒,我總算把這個程序?qū)懥顺鰜?,看著自己上網(wǎng)的內(nèi)容被自己的軟件完整的還原出來,心里那種感覺,別提多有成就感了。

那時候開始,我對網(wǎng)絡(luò)中數(shù)據(jù)的傳輸從里到外到底如何在工作有了全新的認識。它不再是停留在課本上那一張張靜態(tài)的報文格式圖。

一點通而多點通,有時候一個關(guān)鍵的點弄通透了以后,學(xué)習(xí)其他相關(guān)問題就會有豁然開朗的感覺了。

知道了網(wǎng)絡(luò)中的數(shù)據(jù)如何在傳輸,再回過頭去看那些各種各樣的網(wǎng)絡(luò)協(xié)議就輕松多了。

這時候再把視角拔高一些,為什么網(wǎng)絡(luò)協(xié)議要分層,每層的職責(zé)是什么,集線器跟交換機組網(wǎng)區(qū)別是什么,這些問題不用看書,自己就能回答上來了,它確實就該是那樣子的!

方法總結(jié)

計算機網(wǎng)絡(luò)這門課,屬于計算機四大基礎(chǔ)課程之一,無論是什么技術(shù)棧,只要從事計算機行業(yè)都得學(xué)。

而學(xué)習(xí)的方法和途徑呢,我推薦的方法是看書學(xué)理論+實戰(zhàn)相結(jié)合的方式。

第一個層次,看書+看視頻。

雖然看書很是頭疼,但基礎(chǔ)知識最好還是得通過看書來獲得。

看的時候呢可能會遇到各種各樣的疑問和困難,這時候我建議先從整體把關(guān),不必拘泥在某個字段上。先對計算機網(wǎng)絡(luò)先有一個初步的認識,知道這大概是個什么東西,解決了什么問題。

有了初步的概念和大體的認識,再逐層細化。

推薦書目:

  • 《TCP/IP協(xié)議詳解》(卷一)
  • 《網(wǎng)絡(luò)是怎樣連接的》
  • 《圖解TCP/IP》

如果實在是覺得看書學(xué)不進去,那我推薦你可以去看視頻,這年頭,視頻學(xué)習(xí)資料到處都是,只要你肯花功夫,通過視頻也能學(xué)好。

視頻呢也分兩種類型,一種是高校的公開課,你可以在網(wǎng)上找到一些計算機專業(yè)比較知名的學(xué)校,看看他們的公開課,比如清華大學(xué)、電子科技大學(xué)、上海交大等等。

這一類視頻的特點是比較中規(guī)中矩,就像在大學(xué)里面上課一樣,氛圍感會更強一點,缺點是可能顯得有些枯燥,不過畢竟是名校的資源,比較系統(tǒng)全面,更靠譜一些。四舍五入就相當于在這里上學(xué)了。

另外一種就是一些自媒體博主,或者一些機構(gòu)推出的專欄課程。這一類相對更新一些,照顧到年輕人的口味,會用一些動畫之類的方式來呈現(xiàn),講述的也更有趣一些。

按照套路,我是不是應(yīng)該推薦幾個放在這里?

但我沒有。

我覺得吧,視頻課程每個人的口味都不太一樣,畫面、PPT質(zhì)量、老師的聲音、語速、講述風(fēng)格等都有要求。

授人以魚不如授人以漁,大家可以去B站、網(wǎng)易云課堂上面搜一下,這兩類的視頻都有許多,其中不乏高質(zhì)量的視頻,建議多去看幾個比較比較,看看自己更喜歡哪一款。

第二個層次,抓包。

看書和視頻,這些知識還只是靜態(tài)的,紙上得來終覺淺,想要掌握扎實,就得學(xué)會抓包,自己親自動手抓一抓網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)包,看一下它們到底長什么樣子,并通過抓包工具分析各個協(xié)議的各個字段的作用,把前面學(xué)來的理論知識實際用起來。

這里我列舉一些可以關(guān)注的抓包場景:

  • ping一個IP地址,抓包分析IP+ICMP
  • ping一個域名,抓包分析UDP+DNS
  • ping一個局域網(wǎng)IP,抓包分析ARP
  • 禁用網(wǎng)卡重新啟用,抓包分析DHCP
  • 訪問一個網(wǎng)站域名(非HTTPS),抓包分析TCP和HTTP
  • 訪問一個網(wǎng)站域名(HTTPS),抓包分析HTTPS

至于抓包工具選擇,可以看看我的這篇文章:我抓了一個包,你不想看看?

而且,學(xué)會了抓包,也會在工作中排查問題大有幫助,實在是程序員必備技能!

這里再推薦兩本抓包分析書籍:

就像書的標題一樣,網(wǎng)絡(luò)分析就這么簡單!作者文筆出眾,不是那種一板一眼的教科書,從實際工作中遇到的問題出發(fā),引領(lǐng)你學(xué)習(xí),很容易看進去。

第三個層次,編程。

達到第二個層次,對于大多數(shù)人已經(jīng)足夠了。但如果你想對計算機網(wǎng)絡(luò)了解對更深一些,或者你的工作與網(wǎng)絡(luò)緊密相關(guān),那么寫點代碼絕對是不二之選。

那寫點什么類型的代碼好呢?

第一類是編寫我上面說的那種網(wǎng)絡(luò)流量數(shù)據(jù)分析軟件,通過分析處理真實的數(shù)據(jù)包,實際處理每一層每一類協(xié)議的每個字段,哪怕你只是把數(shù)據(jù)包內(nèi)容分層展示出來,那也是有非常大的幫助。

第二類就是編程來收包和發(fā)包。我們平常使用套接字編程,一般都是封裝的應(yīng)用層協(xié)議,如果你是學(xué)習(xí)應(yīng)用層協(xié)議,用套接字就可以,比如你可以寫一個簡單的靜態(tài)webserver,對HTTP協(xié)議進行封包解包。

而如果你想學(xué)習(xí)更底層協(xié)議的封包,比如TCP、UDP、ICMP、ARP、IP這些協(xié)議,那就得另謀他法,比如原始套接字,比如一些開源SDK等。

第三類,更進一步,可以嘗試編寫一些內(nèi)核驅(qū)動程序,通過操作系統(tǒng)提供的接口,進行數(shù)據(jù)包的監(jiān)控、攔截過濾與修改、通信阻斷,實現(xiàn)一些有趣的功能,比如自己實現(xiàn)一個簡單防火墻,開發(fā)一個進程通信監(jiān)控軟件等等。

再說幾句

上面只是對于開發(fā)人員的一些建議,對于專業(yè)的網(wǎng)絡(luò)工程師、運維會有所不同,可能還需要學(xué)習(xí)組網(wǎng)技術(shù)、交換機/路由配置、防火墻和網(wǎng)絡(luò)安全等相關(guān)的知識。

本文轉(zhuǎn)載自微信公眾號「編程技術(shù)宇宙」,作者軒轅之風(fēng)O。轉(zhuǎn)載本文請聯(lián)系編程技術(shù)宇宙公眾號。

 

責(zé)任編輯:武曉燕 來源: 編程技術(shù)宇宙
相關(guān)推薦

2010-06-14 18:54:57

計算機網(wǎng)絡(luò)協(xié)議

2024-09-10 08:24:24

2024-09-27 10:11:59

2015-05-28 11:09:00

2010-06-13 15:08:07

計算機網(wǎng)絡(luò)協(xié)議

2010-06-12 16:56:37

2010-09-08 20:42:09

計算機網(wǎng)絡(luò)協(xié)議

2010-09-08 20:45:31

計算機網(wǎng)絡(luò)協(xié)議

2009-01-10 23:54:10

軟考英語

2010-09-02 16:56:10

計算機網(wǎng)絡(luò)協(xié)議

2011-07-27 21:28:53

計算機網(wǎng)絡(luò)服務(wù)

2021-08-10 11:24:03

結(jié)構(gòu)網(wǎng)絡(luò)分層

2023-08-14 15:46:55

2010-06-14 18:51:05

計算機網(wǎng)絡(luò)協(xié)議

2013-05-14 13:02:17

計算機網(wǎng)絡(luò)基礎(chǔ)協(xié)議

2010-09-02 16:02:45

計算機網(wǎng)絡(luò)協(xié)議

2013-03-08 12:51:03

計算機網(wǎng)絡(luò)基礎(chǔ)協(xié)議DHCP

2024-03-28 11:32:38

計算機網(wǎng)絡(luò)集線器連接設(shè)備

2010-09-08 21:01:44

計算機網(wǎng)絡(luò)協(xié)議

2017-11-22 15:46:00

Web網(wǎng)絡(luò)知識
點贊
收藏

51CTO技術(shù)棧公眾號