最近校招季,特把本身面試中遇到的問題整理整理,以鞏固本身的知識。web
對於網絡這塊,面試官通常喜歡問的是ISO/OSI參考模型和TCP/IP協議族方面的知識,下面咱們就來看看吧。面試
首先,咱們先給出它們的結構圖服務器
注意:圖中有一個Hardware層,圖中顯示它和OSI模型中的物理層(Physical)相對應,其實嚴格意義上說,它是不屬於TCP/IP協議族中的一員的,這個層次包括網線的制式,網卡的定義,負責網絡的傳輸。網絡
Open System Interconnection,即開放式系統互聯。OSI先有模型,後有協議,先有標準,後進行實踐。且OSI只是一種理想的模型,並無真正使用。tcp
TCP/IP則是先有協議和應用再提出了模型,且是參照的OSI模型。TCP/IP現已被普遍使用,已成爲網絡互聯實際上的標準。svg
TCP:Transmission Control Protocol,傳輸控制協議
IP:Internet Protocol Address,網際協議地址
UDP:User Datagram Protocol,用戶數據報協議xml
TCP提供了一種可靠的數據傳輸服務,TCP是面向鏈接的。利用TCP通訊的兩臺主機首先要經歷一個「撥打電話」的過程,等到通訊準備結束後纔開始傳輸數據,最後結束通話。UDP是直接把數據發出去,而無論對方是否是在收信,就算是UDP沒法送達,也不會產生ICMP差錯報文。排序
鏈接的創建接口
在創建鏈接的時候,客戶端首先向服務器申請打開某一端口,而後服務端發回一個ACK報文通知客戶端請求報文收到,客戶端收到確認報文後再次發出確認報文確認剛纔服務端發出的確認報文本身收到。至此,鏈接的創建完成,這也叫作「三次握手」。ip
結束鏈接
TCP有一個特別的概念叫作half-close,這個意思是說TCP的鏈接是全雙工鏈接(能夠同時發送和接收)。所以在關閉鏈接的時候,必須關閉傳和送兩個方向上的鏈接。當要結束鏈接的時候,客戶端給服務器一個FIN爲1的TCP報文,而後服務器返回給客戶端一個確認ACK報文,而且發送一個FIN報文,當客戶端回覆ACK報文後,鏈接就結束了。這就是「四次握手」。
將數據截取爲合理的長度
應用數據被分割成TCP認爲最適合發送的數據塊,應用數據產生的數據報長度將保持不變。
超時重發
當TCP發出一個報文後,它會啓動一個定時器,等待目的端的確認報文發回。若是在定時器時間內沒有收到確認報文,那它就會從新發送這個報文。
目的端對於收到的報文,作出確認響應
當目的端收到報文後,它將發送一個確認報文。這個確認不是當即發送,通常會延遲幾分之一秒(要對包做完整校驗)。
目的端檢驗出包有錯,丟棄報文段,不給出確認響應,等待重傳。
目的端收到報文後,會對報文的完整性做校驗(主要是防止傳輸過程當中數據的丟失或更改),若是檢驗有差錯,TCP就會捨棄此報文段,而且不會作出確認響應,等待另外一端的重傳。
對失序數據進行重排交給應用層。
由於TCP報文是做爲IP數據報(IP提供的是不可靠傳輸)來傳送的,而IP報的的到達順序可能會失序。所以TCP將對收到的數據進行從新排序而後才交給應用層。
對於重複數據,丟棄重複數據
因爲IP數據報可能會重複,TCP必須丟棄重複的數據。
TCP能夠進行流量控制,防止較快主機導致較慢主機的緩衝區溢出
TCP鏈接的每一方都有固定大小的緩衝區,TCP接收端只容許另外一端發送接收端緩衝區能接納的數據。(流量控制協議:可變大小的滑動窗口協議)