TCP/IP這門技術有什麼用?
大二 計算機專業 說實話沒覺得tcpip這門技術有什麼意義 學校這個專業又必須要學 老師半講半不講每天都在說要交錢去學CCIE多麼厲害 全世界都沒幾個 想知道linux是否比tcpip更有未來 如果計算機行業不走編程還可以走什麼
請看清楚我的問題再回答 各位大神們 別扯著tcpip協議和Linux的各種交錯不放 我要是知道我用的著問問題么 再說我問題的重點 是 後兩句 你讓一個初入計算機行業連毛都沒碰的人去體會什麼深度性問題 你們知道是因為你們了解 我拿出你們不了解的問題你們不一樣不了解 知乎本來是一個解答問題的地方 不是讓有些人來秀自己的資歷和智商的地方 我對那些誠懇回答我問題的人表示非常感謝 你們的建議我都一一回復了而對於那些過來酸的人 我只有一個/呵呵
為了更好地闡述這個抽象的話題,將會用不同的視野來分析同樣的問題,記得有一個盲人摸象的故事,有的人說大象是大樹,有的人說大象是蒲扇,這當然都很片面,但如果把這些觀點都集中起來就大概可以勾勒出大象的框架。
1. 用戶眼中的TCP/IP協議
選擇網卡,點擊滑鼠右鍵,選擇屬性,在菜單里就會看到TCP/IP協議,表示已經安裝在系統里,還可以看看IP地址、子網掩碼、預設網關、DNS伺服器,這時用戶可以打開瀏覽器上網,非常簡單不是嗎?
1.1 卸載軟體TCP/IP協議
如果想對TCP/IP有感性認識,可以點擊右鍵卸載它們,然後你會看到它們從網卡的軟體屬性里消失了,這時你再打開瀏覽器,已經無法上網了。知道TCP/IP的重要性了吧?那好,我們再把TCP/IP安裝回來,於是我們又可以上網了,怎麼那麼神奇?
1.2 卸載硬體網卡
現在我們再來看看網卡的硬體屬性,會看到網卡驅動程序一欄,選擇卸載,然後你會發現網卡消失了,其它的所有屬性也都消失了。應了一句成語:皮之不存 ,毛將焉附。打開瀏覽器上網,會直接提示你,網路不可用。然後我們再把驅動程序安裝回來,網卡又出現了,所有的軟、硬體屬性都在,又可以上網衝浪了。
1.3 卸載軟體瀏覽器
然後我們再去控制面板,選擇添加/去除程序圖標,可以卸載掉你的瀏覽器(假設是唯一的瀏覽器),這時我們連輸入網址的地方都沒有,如何上網瀏覽網頁呢?那好,我們再將瀏覽器安裝回來,又可以上網了,又可以刷知乎看車小胖編故事哄大家哈哈笑了…
用戶小美萌噠噠看著我們操作,於是提出了新的問題,系統自帶的IE瀏覽器不好用,能否卸載掉,再安裝其它的瀏覽器?當然可以!用戶可以自由選擇瀏覽器來上網。
小美又有一個問題,那可以換一塊網卡嗎?當然也可以啦,拔掉舊的網卡,換上新的網卡,再安裝網卡驅動程序就OK了,用戶可以自由選擇硬體網卡。
小美突發奇想,胖哥哥,那能否卸載掉TCP/IP,換一個其它類似的東東?胖哥哥開始循循善誘了起來:因為Internet上的伺服器、用戶客戶端99.99%在使用TCP/IP,如果換其他協議,可能會無法通信,因為不同協議無法理解對方在說什麼,就好比說不同語言的人無法溝通一樣。如果溝通則需要翻譯,這白白增添了複雜度。所以我們不能換TCP/IP,換句話說,我們可以換網卡、換瀏覽器,卻無法更換TCP/IP,TCP/IP是我們唯一的選擇。
TCP/IP起到一個承上啟下的中樞作用,向下可以工作在任何數據鏈路層協議,如 Ethernet / HDLC/ PPP/ ATM / Frame Relay;向上可以支持很多種應用層協議,如 HTTP / SMTP / FTP / POP3,以及用戶自定義的協議;TCP/IP作為一個協議簇工作在操作系統內核,完成面向連接的可靠傳輸(Connection-Oriented TCP)或無連接的不保證可靠傳輸(Connectionless UDP),所以TCP/IP協議是計算機網路的核心引擎。
2. 操作系統眼中的TCP/IP
TCP/IP以獨立的進程運行在操作系統的內核,比如TCP進程、IP進程,為了保證IP進程能夠正常工作,需要完成IP地址、網路掩碼、預設網關、DNS伺服器的初始化工作,這個由DHCP進程來完成,當然也可以用戶手工配置以上參數。
DHCP進程會發廣播報文,然後從網卡發送出去,如果二層廣播域里有DHCP伺服器,會分配以上IP參數給用戶的DHCP進程,完成IP進程的初始化工作,至此,TCP/IP就可以正常使用。
當小美打開瀏覽器,就是打開一個用戶進程(取名為http進程),然後輸入網址 http://www.zhihu.com,會觸發一系列動作:
2.1 首先要將網址翻譯為IP地址,需要調用DNS進程,DNS進程會發一個請求到DNS伺服器,然後得到IP地址A
2.2 http進程將自己的網頁請求組織好,加上http 協議頭,類似 http + data ,調用TCP進程,告訴TCP進程要把數據http + data發給A。
2.3 TCP進程會觸發與A的三次握手連接,這三次握手是純TCP報文,不帶任何http 數據,三次握手都需要調用IP進程,入口參數為A
2.4 IP進程以A為輸入參數,查詢路由表,發現需要發給預設網關處理,需要知道預設網關的MAC地址,調用ARP進程請求網關的MAC,入口參數是網關IP
2.5 ARP進程發廣播ARP請求,得到網關MAC,返回給IP進程
2.6 IP進程調用網卡驅動程序進程,入口參數為網關的MAC,數據為 IP頭+ TCP頭
2.7 網卡發送出去,並最終到達伺服器,並最終完成了三次握手
2.8 TCP進程將 TCP頭+ http頭 + data 調用IP進程,步驟類似2.4 -2.7,不再敘述
2.9 假定http 進程最後從伺服器得到網頁返回,將網頁顯示在瀏覽器上
3. OSI眼中的TCP/IP
OSI分七層:
七層:應用層
六層:表示層
五層:會話層
四層:傳輸層
三層:網路層
二層:鏈路層
一層:物理層
瀏覽器對應第七、第六、第五層
TCP/IP對應第四、第三層
TCP層對應第四層,即傳輸層
IP層對應第三層,即網路層
網卡(驅動程序)對應第二層(鏈路層)、第一層(物理層)
所以 瀏覽器 + TCP/IP + 網卡(驅動程序)完美對應OSI參考模型七層。
為何要OSI分層?
那是為了讓不同的操作系統、不同的廠商的終端設備能夠通信,大家遵循一樣的協議標準,好比說同一種語言的人可以自由自在地溝通。
分層還可以讓不同的底層網卡可以獨立實現自己的功能,對下(物理層)實現相同的編碼方式,對上(網路層)提供標準的介面,至於內部如何實現,別人並不care。
對於IP層也是,內部獨立完成自己的功能,對上提供標準的介面,對下調用標準的介面,這樣開發起來非常便利。
1、學Linux也一定要學到TCP/IP因為Linux也用它。
2、我面試工程師的時候一定會涉及TCP/IP。
3、你連這兩個一縱一橫沒法相比的東西都能放在一起比較,說明你沒資格評論值得不值得學,你連它們最基礎的概念都不懂。
必須要學肯定是基礎啊 計算機行業可大了。。邀請胖哥回答一下吧 @車小胖
題主怎麼感覺有點語無倫次啊
首先我認為,我們學計算機的,在不花錢找培訓的情況下也是可以通過自學和網上交流達到一個很牛的境界的
其次學好linux和tcp不一定有好前途,但學不好一定沒有前途,或者說不會走遠。這兩項都屬於計算機基礎知識,只要你還是在編程,或者想深入理解一些項目、庫、協議,你都繞不過去的我彷彿看到一個未來的產品經理在冉冉升起。
跟你知道地球是圓的一樣,沒什麼實用,就是建立一個正確的世界觀。聊起來不會被人笑話。
這是一個放在邀請我的回答列表中我很久沒有回答的問題,因為不知道怎麼來講這個問題,因為我也還是個孩子啊。
-------------------------------------------------------------分割線--------------------------------------------------------------------
題主如果大二的話可能和我年紀相仿,不知道你學的是什麼專業。網路工程?還是什麼,答主本人學的是計算機科學與技術。對口方向大概是web應用,單片機,嵌入式開發什麼的。答主和題主其實有著同樣的困惑吧,我也不知道我學彙編語言有什麼作用,我也不知道我學操作系統有什麼作用,我甚至不知道我學計算機有什麼作用。這不,我及時認清了自己的方向,轉投網路工程的大家庭了。既然你覺得一條路走不通,你就走另一條嘛。
然後我在這裡要說的是,前面回答的,感覺都應該是前輩了。雖然知乎是個討論的問答型社區,求同存異本是沒錯的,但是也還是希望題主來給予給你答題的人尊重或者說理解,他們是站在過來人的角度來幫你分析這個問題,最起碼的禮貌還是要有的。不要張口閉口就呵呵人家。當然你覺得我說的是屁話你可以呵呵我。因為我也大不了你多少。虛懷若谷,謙卑一點總沒錯的~
--------------------------------------------------------再次分割線-------------------------------------------------------------------
關於TCP/IP到底有什麼用,車總也說的挺詳細的了。我就不班門弄斧了,(PS:那些特別高深的問題就不要再邀請我了啊!!因為我真的不會啊!!TCP/IP我都沒看完啊!!可能在知乎上答了幾個關於網路的高票答案,現在搞得經常和車總一起被邀請,羞愧難當,無地自容...)
其實我從小就挺喜歡計算機的,小時候一般家裡電腦或者說電子產品出了什麼問題都是找我來解決的,作為跨世紀的接班人,這份修電腦的工作我還是很樂意做的= =,所以怎麼說呢。興趣,真的是很重要的一個東西,就像高中的時候,我喜歡做英語我做一下午閱讀理解都不會煩,而我的同桌小明喜歡數學,他畫一天的立體幾何還會感到快樂。所以我在這奉勸題主,追隨本心~找到最適合自己的,才是最正確的。(PPS:或者你可以嘗試著好好學習一下,人的心理是,在努力做一件事情,獲得滿足或者收穫時,是非常容易激發起興趣和想法的~)
------------------------------------------------------最後一條分割線--------------------------------------------------------------
每次答主答題好像都會帶偏節奏,這次還沒等我帶,節奏好像已經偏了= = 好像我回答了個屎,和題主的問題一點關係都沒有。那我就來說說題主最後那個,計算機專業,不做編程可以幹什麼。
答:1.計算機相關專業,如果你是在一本二本的話,不好好敲代碼... 可能連畢業證都拿不到- =,
2.現在挺缺計算機人才的,因為我是做校園網維護這方面的,提供到桌面的網路維護,所以見的也很多,尤其是女生宿舍的妹子= =,真的是,啥也不會...所以,題主也可以考慮,以後回家,再不濟,也能修電腦裝系統不是?233
3.還沒想到,想到再說~
我的老師也說過,管它有用沒用,先學著再說。
稍微社工了一下...原來題主是個妹子啊...
CCIE 都老了。可以考慮考下 IIQE,不要求 tcpip 或 linux。
我認為題主說的對
CCIE就是坑錢的。就思科家特別奇葩,其他交換機廠商有的你不買他的交換機,他家的模擬器都讓你下載的。大部分內容自己在模擬器上試試就可以掌握的。特別是在Linux下,現在利用network namespace,直接把模擬器的unix socket和namespace里的tap設備自己做個對接就好了,想往裡發啥包都可以直接利用各種現成的工具。
TCP/IP這門課假如不要求自己實現一遍協議棧,那當然是沒有意義的。
Linux是沒有未來的。這沒啥好爭論的。"你的問題在於書讀得不多,想得太多。".......
有的回答說話是稍微有點沖,不過起碼胡說八道的很少,沒有把題主往歪路上拐的。誰都有學走路的時候,題主別往心裡去,忠言逆耳利於行,取精去糟就好。
題主既然是初學者,我建議不要排斥任何本專業的課,誠然你學的不是時髦技術,不是黑魔法,甚至都沒辦法拿出手給爸媽同學炫耀,但是它們教給你的是計算機世界的基本法則,它們能幫你形成對計算機的基本認識。
題主是計科的學生,應該意識到計算機凝聚著人類智慧的最高水平。請題主保持虛心,不要小看計算機的抽象性,不要輕易推測一張技術有沒有用。一方面是你的知識暫時無法支撐你這樣的判斷,另一方面,這些知識能編進你的教材,必定是經過深思熟慮的。
不要覺得學習理論知識和學習"實用"技術是衝突的,相反,它們是互補的。之前聽過一句話,大概意思是:對新手來說,新技術就是新技術,對高手來說,新技術不過是對老技術的抽象,拓展,或者換了個用法.
就拿TCP/IP來說,你會從中知道握手機制, 上到HTTPS,下有CPU和內存通信,都用到握手機制.它是不同系統間通信的一種漂亮的解決方案.
你會學到OSI的7層模型,這是分層架構的經典使用案例.你可以看到一件複雜的事是如何經過一步步抽象,把複雜度分攤到各個層身上,從而形成整體穩定的架構.
你會學到各種網路設備如何互相協作,讓遠隔千山萬水的機器傳輸數據,而且防止衝突,少走彎路,保持可靠,局部衝突不影響整體,一條路壞了不影響所有線路.
當然,你還會學到反面教材,當年IP地址只定了32位給後來帶來了多大的麻煩.
這些都是前人留下的寶貴經驗教訓,我想如果題主以後從事計算機方向,肯定會從中受益.
題主還問到,計算機專業不走編程還能走什麼,這個問題真的不好回答,因為計算機方面的職業多多少少都要會寫代碼吧. 不過聽說很多人都期望能有一個懂技術的產品經理,可能說明了產品經理中不會寫代碼的比較多,題主可以試試.TCP/IP是簡單地說就是講數據層面(感覺這麼說有點不準確,一時想不起來應該用什麼詞了)如何通信的,只有明白了它,才能說明你算是入門了。
思科,華為,華三。。。這些認證初級或者中級你可以很快考下來,也能解決一些實際問題,在直接點,會了認證裡面的那些東西你能找到一份四五千的工作。
可是你能解決的問題都是一些比較簡單的,基本上你能搞定的,別人也能搞定。你覺得這樣你的價值在哪兒呢?
所以,要學,就要懂原理,明白了原理才能知道如何解決最底層的問題。碰到問題才能有一個正確的思路去解決。
通常所講的TCP/IP應該是卷一的內容。然而卷二,卷三還包括很多的內容。
想要讓自己變得有價值,就要能解決別人解決不了的問題,好好學TCP/IP,當你真正的把它學懂了,你就會發現,只要你在用網路,就能離不開它。
你的這種困惑就和我一開始學的時候搞不明白參考模型有啥用一樣。後來學的多了,就明白,分層是一個多麼重要的思想。
還有一點,很重要的一點忘說了,就是學了TCP/IP之後在學習其他的網路通信知識,你會覺得很輕鬆。
計算機網路要解決的是不同計算機上的進程相互通信的問題。
通信的本質是數據交換。
這裡會有兩個問題:
1、必要的時候,怎麼保證接收方接受到的數據就是發送方發送的數據呢?
2、怎麼保證接收到數據的接受方是發送方數據傳輸的目的地呢?
我不清楚你這說的是tcp協議和ip協議還是tcp/ip協議棧。
就協議來說,tcp解決的是數據的可靠交換。 那麼ip協議又解決什麼呢?
在區域網的基礎上,抽象出一層虛擬互聯網路,用一種協議將各種不同的區域網組織起來,形成網路的網路,儘管這個網路是虛擬的,但是用ip地址來定位網路中網路(這裡指的是路由轉發分組的過程是根據ip地址中的網路號進行轉發的),使得目的地準確定位成為可能。
只要操作系統上的進程想要和不同計算機上的進程通信,計算機網路都是繞不開的。我覺得樓主應該換個角度考慮問題:我覺得不應該說linux是否比tcpip更有未來,而是未來少了tcpip和linux都是不行的,或者說從現在來看是不行的。
嘗試用tcpip的核心概念--協議,來解釋:什麼是協議,就像我們平常用的語言,我跟不懂中文的你說中文,你跟不懂英文的我說英文,我們兩個還能好好的交流嗎?而TCPIP就是互聯網上的兩個人或者說機器之間交流的方式,由於互聯網上的所有人(99%)都說TCPIP這門語言,所以說不學還真不行啊。
而他們口中linux和tcpip之間交叉很緊密就是因為linux說的也是TCPIP啊。作為計算機一個重要的模塊 -- 網路是計算機專業乃包括通信專業的必修課是十分必要的,毫不誇張的說和計算機相關專業大部分就業職位都需要你對網路有個基礎的了解,而小部分需要你對tcpip十分或者有一定的了解,比如你老師口中牛逼哄哄的的網路工程師、linux運維工程師、網路設備研發工程師、雲計算工程師等等
如果計算機行業不走編程還可以走什麼?說道這個問題我第一想到的就是網路工程師,不用學編程,但是現在的就業來說估計你只能呵呵了。其實CCIE我認識有年薪20W的(今年畢業的應屆生),也有3K的,感覺不是CCIE不值錢,而是不同的人學有不同的價值,但是還是不可否認單純的CCIE大企業已經不認可了。但是話說回來不會編程的話,以後想從事計算機行業發展會很受限制啊,所以還是建議學一學編程啊。(如果覺得難的話就從python開始學把,入門簡單強大)
實不相瞞我就是從培訓班走出來的,但是我去年沒有去考CCIE,我用考試的錢又學了一門RHCE,不得不說培訓可以讓你快速的掌握一門新的技術啊。而且當你掌握一門技術去學另外一門技術會感覺很快,而且會較快的找到成就感,你就有興趣學了。比如我,擼完一門接一門,最近在看WEB前後端開發~
之所以很多人噴你,酸你是因為這裡的人覺得它很有用甚至是靠它吃飯的,你一下說TCPIP有個卵,搞的就像這些人一下子就不值錢了把~~~還是建議你去網上找個免費初級網路的培訓視頻看看,看你這麼噁心cisco,就當突破下自己咯。剛剛調試了幾天TCP/IP的來一發。
自己正在負責業務網關,主要功能是鑒權,協議轉換和流量轉發。
流量轉發這一塊就涉及對TCP/IP的理解。我們後端業務分兩種,一種是HTTP協議,一種是私有應用協議。私有協議是基於長連接的,發生了問題都需要tcpdump進行人肉調試,人肉解包就不提了,這個必須懂得分析TCP/IP包。
而HTTP協議在進行壓測的時候經常發現請求負載曲線是分段的,每隔一陣子就會暫停一下,樣子很像是Java的GC(網關和業務後台都是Java寫的)。但是分析GC日誌發現時間點並不匹配。再考慮開發的時候HTTP請求考慮到每次請求都跟業務後端來一次三次握手四次揮手效率不高,因此請求都是開啟了keepalive的。於是Tcpdump抓包,發現網關總是在同樣的請求數量後收到業務後台主動發來的FIN,ACK。也就是說,每次都是業務後台發起了揮手,導致我這邊重新連接,在這個過程中勢必會導致請求負載能力的下降。
後端業務為什麼會主動揮手呢?繼續分析,發現dump里的每一個連接的FIN,ACK確認的都是同一個Seq,說明業務後端有一個設置是收到多少請求就自動斷開,這個參數是導致其主動斷連接的罪魁禍首。最後經過排查,發現tomcat的keepalive參數maxKeepAliveRequests設置為大於0的某個數字就會在收到該數字個請求後主動斷連接。調整為-1後http請求就穩定了,不會再被業務後端主動斷開了。其實Seq相同在這個場景下是個巧合,只不過因為壓測數據是固定的,所以恰好請求數量和TCP包數量每次都一樣。其實這裡最重要的是發現業務後端主動揮手,因此問題不是發生在我負責的網關上的。
這次的bug很簡單,但是如果你不理解TCP/IP協議,你可能並不能很快找到是這個原因。
個人覺得樓上很多朋友說話略微刻薄,同時不能考慮題主的自身的情況,只是抓住題主的一兩句話就開噴。
事實上,題主的老師確實有問題,上課總是講ccie有多厲害全球有多少個一定要去考,大部分學生可能都不會去質疑和多想什麼,可能背背題等期末能考60分,也可能直接被洗腦跑去報個ccie,而題主起碼還能為未來多考慮許多,其實是很不錯的啊。
國內的二三流大學,學生剛上大二不懂tcpip是什麼很奇怪嗎。也許你是因為對IT感興趣選了計算機,選了網路,通信,大一一年已經對網路了解了很多,看了很多書,做了很多實驗,甚至已經做過項目,有很多志同道合的同學和你一起研究和進步。
可是大多數人,中國的絕大多數學生,他們選計算機這些所謂的熱門行業是他們自身熱愛的嗎。
「不學編程還能學什麼」
「linux是否比tcpip更有未來」
這些話從題主口中說出來就能看出來,他是哪一種學生。他們只是聽家長,聽老師說,這個專業好,然後選了。所以題主現在大二開始對自身專業產生了疑問,以及不知道自己要學什麼,這都是很正常的現象,因為他原本就不知道自己要學什麼啊,我幾乎敢斷定他肯定不是頂尖學校的,他的同學又有多少知道自己要學什麼,要成為什麼樣的人?學校有高數學高數有線代學線代,背題背書,考試不掛科,畢業,這就是他們的大學啊,他們是來拿畢業證的又不是來學計算機的之後呢?之後去幹什麼可能自己也不知道,工作也肯定找的到啊,專業這麼熱門,再之後呢?
而題主或許就是在這樣的一個環境下,想問一下自己一個計科學生到底該學什麼,他問的或許很幼稚,可你們就要冷嘲熱諷嗎?
不該說這麼多偏題的話。再回過頭來看題主的問題吧。
CCIE要不要考?
背題庫敲版本然後累的要死,自己感動了自己,告訴全世界自己有多努力考到了ccie嗎?有什麼用呢?含金量高不高?高。但人家是ccie你是paper ie,差距何止天差地別,無論是薪水還是技術。
你真的對網路感興趣的話,網上有大把的視頻,圖書館裡有大把的書可以看,就從最基礎的你不屑的tcpip卷一開始看,扎紮實實的看,一字不落不要眼高手低,模擬器也有,英文不好去用華三華為的,真機也不是摸不到,我的學校是有的,有機會實習和做項目的也去鍛煉鍛煉。四年以後,學歷夠硬ccna都不用考(不夠可以考一下na np),你可以找到比paper ie更好的工作,很有可能他兩千你八千。但他是所謂的ccie。
至於linux,也要學啊,公司也需要複合式人才,linux學好了絕對沒壞處,運維其實也就是二者相結合。
今天就想到這麼多,先寫這麼多了
這位題主,您適合做互聯網產品經理。是那種把刪快捷方式當作卸載軟體的產品經理。
0.不要這麼凶嘛,我也很慫呀。。
1.學TCP/IP是為了往網路方面發展,因為網路就是用的這玩意兒。
2.網路又可以往運維、安全、Web開發、物聯網等方面發展。
3.Linux不比TCP/IP更有未來,TCP/IP也不比Linux更有未來。Linux是網路操作系統,TCP/IP賦予了其價值;同時Linux在網路中也有其不可替代的優勢(比如作為伺服器等)。他們倆相輔相成吧。
4.如果說就業,做Linux和做網路哪個有前途的話。。話說難道哪個人只會其中之一?
5.學計算機的咋發展呢?除並不十分大眾的網路之外,編程啦資料庫啦~然而計算機涉及太多,想混好一定要做到精一而通多呀,加油呀~
6.竊以為題主很反感老師的所作所為。我也遇到過這種老師,同樣很反感。有很多學校里的很多計算機系老師都對TCP/IP一知半解,不要難為他們嘛,因為他們真的講不出來呀。。
7.(個人觀點)現在的大學吧,啥都教,啥都不好好地深入地教。我覺得吧,這是讓我們把所有和本專業相關的各種東西都嘗一遍,找到自己地方向。至於深入學習嘛,學校就不管了。
8.TCP/IP嘛個人建議了解一下,就算很討厭網路,咱們稍微了解一下,說不定就會有什麼意想不到的收穫呢是吧~
9.祝學業有成呀~引用一個我大一時恩師跟我說的話:以你的知識水平,目前還不能判斷學的東西有沒有用。
當你提出這個問題的時候,TCP/IP 對你已經沒用了。
推薦閱讀: