前情回顧:一篇短短的博客明顯不能知足TCP和UDP這兩個飢渴的漢子,並且還被應用協議佔了一小半的篇幅。在昨天結束以後,相信你們都基本對TCP/IP協議棧的輪廓有一個大概的印象了,可以對總體有所把握。html
今天白天上班的時候徹底抽不出時間來複習,配了一天的環境才把一個公司的項目跑起來。將近四個月的時間,實習以來我以爲配環境是最麻煩最噁心人的事兒了,沒有之一。用的是Eclipse,其中還涉及maven什麼的,沒有了解過,只是按照文檔一步一步去作,出現問題報了異常也不知道是什麼緣由該怎麼解決。只好一點點去試,一次又一次重複已經作過的步驟,以防是本身沒有嚴格按照步驟作致使的錯誤。事情不難,但真的頗有挫敗感,以爲本身是兩眼一抹黑。就像微博上流傳一句調侃程序猿的話:程序跑不起來,我不知道爲何;程序跑起來了,我也不知道爲何。面試
我發現公司裏面某些人也是同樣,都是靠試,看到什麼能夠設的地方就去瞎搞。你問他爲何,他也說不出個因此然來。或許有人一開始想着去弄明白,但隨着項目跑起來了,也就沒那麼心思去學新東西了。下次仍是會遇到相同的問題,依然不懂。算法
童鞋們,前輩們能夠在評論裏談談本身這方面的經歷啊,分享一下。數據庫
—————————————————————————————閒聊結束——————————————————————————————編程
今天,主要就一些常見的面試題進行分析,會參考網上的一些資料,結合我本身的理解,用本身的語言去講述。服務器
第七章:快問快答網絡
在面試中,面試官會在詢問項目細節的過程當中忽然問一些TCP/IP協議中的簡單問題,若是思考時間過長,甚至答不出來,就很影響考覈的分數。(參考我上次連TCP/IP協議多少層都沒回答出來)eclipse
1.OSI參考模型有多少層?分別是哪幾層?(不建議死記硬背,能夠看看我在系列文章第一篇裏的描述,效果比較好,不會由於緊張而答不出來)socket
七層模型,自下而上分別是:物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層。maven
2.TCP/IP協議棧有多少層?分別是哪幾層?(有四層和五層的說法,其實都對,這裏就只講四層的)
四層,自上而下分別是:應用層、傳輸層、網絡層以及數據鏈路層。
3.應用層典型的協議中,基於TCP、UDP協議的分別有哪些?(面試中比較少問,筆試題中經常會以選擇題的形式考察)
TCP:SMTP,FTP,TELNET,POP3,IMAP, BGP,http,SSH
UDP:SNMP,TFTP簡單文件傳輸協議,用於傳小文件,功能簡單少,DNS
4.ipconfig的做用是什麼?(一些經常使用的指令記一記仍是有好處的,最好能實際操做一下,加深印象)
顯示當前TCP/IP配置的信息。
5.請說出三個你以爲比較常見的端口以及對應的應用?(這個沒什麼好說的,注意點就是了)
21-FTP、22-SSH、23-telnet、25-SMTP、80-HTTP、SNMP-16一、MySQL數據庫服務-3306
6.簡單講講ICMP協議(HTTP協議、DHCP協議等)的做用和基本原理(這道題就不說答案了,你們本身去看看以前的博客,最好能再總結其餘常見協議的做用和基本原理)
7.如何進行兩臺電腦ping不通,你以爲可能的緣由有哪些?
(這道題仍是挺有意思的,若是事先不知道答案要準確回答出來,要基礎知識很紮實而且思考比較全面才行,下面是網上的參考答案,歡迎童鞋們吐槽)
(1)首先考慮是不是網絡的問題
(2)局域網設置問題,電腦互聯是要設置的。看是否安裝了必要的網絡協議,最重要的是IP地址是否設置正確。
(3)網卡驅動未安裝正確
(4)防火牆設置有問題
(5)是否有什麼軟件阻止了ping包
相似的問題還有不少,我就不一一列舉出來了。光是列舉是沒有意義的,其實,只要把基礎的知識掌握好,再加上必要的練習,這樣問題就算不能脫口而出,想想也是能回答出來的。最重要的是不要太緊張,要對本身有信心,否則很容易悲劇。至於掌握基礎知識嘛,最好是聯繫起來記憶,結合模型。我能想象到某一個程度,閉上眼睛,會有一個計算機網絡世界展示在你的眼前。
第八章:有備而戰
通常寫過計算機行業簡歷的童鞋都對這麼幾個字眼不會陌生:精通、熟練掌握、熟悉、瞭解。在上一章,快問快答的問題基本都只是瞭解,而下面的幾道題,至少要達到熟悉的程度。甚至在一些要求高的面試當中,會在編程層面上做要求。
第一題:TCP與UDP的區別
TCP---傳輸控制協議,提供的是面向鏈接、可靠的字節流服務。當客戶和服務器彼此交換數據前,必須先在雙方之間創建一個TCP鏈接,以後才能傳輸數據。TCP提供超時重發,丟棄重複數據,檢驗數據,流量控制等功能,保證數據能從一端傳到另外一端。
UDP---用戶數據報協議,是一個簡單的面向數據報的運輸層協議。UDP不提供可靠性,它只是把應用程序傳給IP層的數據報發送出去,可是並不能保證它們能到達目的地。因爲UDP在傳輸數據報前不用在客戶和服務器之間創建一個鏈接,且沒有超時重發等機制,故而傳輸速度很快。
(最好還可以各自舉例說明一下,例如什麼協議或應用採用TCP,爲何;又有什麼協議或應用採用UDP,爲何。主要是給面試官說明具體問題具體分析,兩協議沒有優劣之分)
第二題:講講TCP的三次握手(四次揮手)的整個過程
TCP 鏈接是經過三次握手進行初始化的。三次握手的目的是同步鏈接雙方的序列號和確認號並交換 TCP 窗口大小信息。如下步驟概述了一般狀況下客戶端計算機聯繫服務器計算機的過程:
1)客戶端向服務器發送一個SYN置位的TCP報文,其中包含鏈接的初始序列號x和一個窗口大小(表示客戶端上用來存儲從服務器發送來的傳入段的緩衝區的大小)。
2)服務器收到客戶端發送過來的SYN報文後,向客戶端發送一個SYN和ACK都置位的TCP報文,其中包含它選擇的初始序列號(sequence number)y、對客戶端的序列號的確認x+1和一個窗口大小(表示服務器上用來存儲從客戶端發送來的傳入段的緩衝區的大小)。
3).客戶端接收到服務器端返回的SYN+ACK報文後,向服務器端返回一個確認號y+1和序號x+1的ACK報文,一個標準的TCP鏈接完成。
(四次揮手的過程相似,這裏就很少說了,圖片來自參考資料http://www.cnblogs.com/hnrainll/archive/2011/10/14/2212415.html,上面畫的圖不錯。建議你們在面試的時候要隨身帶一支筆和一張白紙,在被問到這種須要畫圖的問題時主動畫圖給面試官看,加分很多的!像我這樣畫圖很醜的人,能夠多練習幾回,不會到時候塗塗抹抹,影響講解的效果)
第三題:爲何創建鏈接協議是三次握手,而關閉鏈接倒是四次握手呢?
這是由於服務端的LISTEN狀態下的SOCKET當收到SYN報文的建連請求後,它能夠把ACK和SYN(ACK起應答做用,而SYN起同步做用)放在一個報文裏來發送。但關閉鏈接時,當收到對方的FIN報文通知時,它僅僅表示對方沒有數據發送給你了;但未必你全部的數據都所有發送給對方了,因此你不能夠立刻關閉SOCKET,也即你可能還須要發送一些數據給對方以後,再發送FIN報文給對方來表示你贊成如今能夠關閉鏈接了,因此它這裏的ACK報文和FIN報文多數狀況下都是分開發送的。
第四題:講講TCP協議中滑動窗口
TCP的首部中有一個很重要的字段就是16位長的窗口大小,它出如今每個TCP數據報中,配合32位的確認序號,用於向對端通告本地socket的接收窗口大小。也就是說,若是本地socket發送一個TCP數據,其32位確認序號是5,窗口大小是5840,則用於告訴對端,對端已經發出的4個字節的數據已經收到並確認,接下來,本地socket最多可以接收從第5個字節開始的5840個字節長度的數據。這是由接收方進行的一種流量控制,接收方經過告訴發送方本身所可以接收數據的大小,達到控制發送方發送速度的目的。(本段內容引子班裏的一位offer大神給個人總結資料。其實還會涉及慢啓動算法等相關內容,值得深刻研究)
(其實我沒有怎麼看懂這一部分,《圖解TCP/IP》裏面的相關內容反覆讀了兩三遍都有不是很理解滑動窗口的原理究竟是怎麼回事。看來是腦子短路了,貌似也不是很難的樣子。等我讓會的人給我講解講解,或者過一段時間冷卻再回頭去看,會好一些。到時弄懂了,再具體貼出來。網上隨便搜了一下,沒找到特別好的講解文章,童鞋們找到的話麻煩在評論中推薦一下。)
面試題就貼這麼多,尤爲是第八章我只選了最最最經典的三道題型:TCP與UDP的區別、TCP的三次握手四次揮手以及TCP的滑動窗口。其實,我以爲你們沒有必要去背答案,理解記憶的效果纔是最好的。有些面試官,會在你給出比較標準的答案以後詢問一些細節,這些細節是在那些總結面試題答案中沒有的。仍是要去看看教材或者一些詳解的博客,瞭解其中的機制和原理,知道究竟是什麼樣子的,而且爲何要設計成這個樣子,設計成這個樣子有什麼好處。例如:面試官問你,DNS用的是TCP仍是UDP?你記住了答案,回答說:UDP。那他接着問,爲何要用UDP呢?你總不能回答說:他就是用UDP吖,我有什麼辦法。囧。
TCP/IP相關的面試題遠遠不止這麼些,題海戰術不是說沒有用,但真的是事倍功半,付出了不少代價卻沒有對等的回報。記不住答案也不要緊,由於總有你沒碰過的題目,關鍵是把握原理,可以根據基礎知識推出來。講到推出來,我想起我一個高數很厲害的舍友。在期末考試數值計算(數學類科目)這門課以前,我問他爲何不記公式,他回答我說:記什麼記,到時候推出來就行喇!不虧是高數兩學期滿績點的人,最後考了六十幾分。
True story O(∩_∩)O~
—————————————————————————————————————————————————————————————————
又堅持了一天,確定是要說幾句的:
1.今天由於配環境的事兒,搞得有點煩躁,以爲本身很沒用。其實也是本身的問題,平時用eclipse稀裏糊塗,不少設置都不知道怎麼弄,項目啓動以後跑不起來一堆報錯也不知道是什麼問題,更別談找到相應的解決辦法。最後求助前輩,前輩有點不耐煩,搞定後跟我說了句:記住怎麼作了啊,之後別叫我幫你弄這個。這句話從下班一直讓我想到如今,一開始會以爲這個前輩怎麼這樣,你有解決問題的經驗,幫幫我怎麼了,你用十分鐘就頂的上我用一天的時間去瞎貓撞死老鼠。後來想一想他有本身的事情要忙,能幫我已是很夠意思了,真的不能要求太多。有些問題仍是得本身去解決,不能一味依賴別人,不動腦子永遠也進步不了。
2.之後碰見這種事情,第一步是要積極去找到問題所在,思考、找資料摸索出解決方法。實在比較棘手或者趕時間纔是第二步,虛心請教前輩或者同事。多要求本身,少要求別人。
3.TCP/IP協議這一塊基本結束了,明天該進行哪一部分呢?童鞋們什麼好建議,能夠在評論中提一提哦。