1、TCP/IP協議與OSI協議
相互通信的兩個計算機系統必須高度協調工作才行,而這種“協調”是相當復雜的。 “分層”可將龐大而復雜的問題,轉化為若干較小的局部問題,而這些較小的局部問題就比較易於研究和處理。
計算機網絡采用了分層的體系結構,有兩種國際標准,國際標准化組織ISO提出的開放系統互連參考模型就是OSI,是規定的國際標准,它是一個七層協議的體系結構。
雖然是由ISO提出的國際標准,但是OSI在市場方面失敗了,原因在於層次划分過多,有些層的功能重復,沒有及時的得到市場,所以使得TCP/IP成為了事實上的標准。
而TCP/IP實際上是一個四層協議,我們常說的五層協議是將網絡接口層分為了物理層和數據鏈路層,綜合了OSI和TCP/IP,主要在學習時便於理解。
2、OSI的會話層和表示層
OSI和TCP/IP相比,主要就是多了會話層和表示層。
會話層的主要功能就是在發送方和接收方之間創建、維持、終止連接,類似於電路通信,負責兩個網絡參與者之間進行的通信,它之下的傳輸層TCP協議也有連接的概念,他們的關系是一個會話連接可以對應0個、1個或者多個TCP連接。
表示層的主要功能是負責數據的表示,在不同的數據格式之間進行轉換,負責加密和解密,負責文件的壓縮等數據的表示任務。
3、TCP/IP協議每一層的主要功能
物理層:提供物理介質,主要負責在連接各種計算機的傳輸媒體上傳輸數據比特流,負責的相關的電氣接口的一些定義(機械特性、電氣特性、功能特性、過程特性),還負責信道的復用等等與物理介質相關的任務。
數據鏈路層:主要任務是封裝成幀、透明傳輸和差錯檢測,在一段鏈路上組成幀進行傳送。
網絡層:負責主機和主機之間的通信,主要任務是尋址、路由選擇、分組和重組,主要設備是路由器。
傳輸層:負責在兩個主機的應用進程之間進行數據傳輸,TCP和UDP。
應用層:通過應用進程之間的交互來完成各種應用任務,如http、ftp、telnet、smtp等等。
4、ARP地址解析協議
ARP是地址解析協議,用於實現從 IP 地址到 MAC 地址的映射,即詢問目標IP對應的MAC地址。具體原理這里不細說了,需要注意的是它是一個三層協議,是一個網絡層協議。
5、TCP和UDP的比較
UDP是用戶數據報協議,它的主要特點是:(1)無連接 (2)使用盡最大努力的交付 (3)面向報文 (4)沒有擁塞控制 (5)支持一對一、一對多、多對一和多對多的交互通信 (6)首部開銷小,只有8個字節 (7)適合搶帶寬的一些業務模型
TCP是傳輸控制協議,主要特點是:(1)它是面向連接的 (2)每一條TCP連接只有兩個端點 (3)提供可靠交付的保證 (4)提供全雙工通信 (5)面向字節流
6、TCP三次握手,為什么需要第三次,三次握手有什么隱患
三次握手的過程如下圖所示:
三次握手的過程很熟悉了,主要是為什么還需要第三次呢?
第三次握手是對確認的確認,它的目的主要是為了防止已失效的接請求報文段突然又傳到了B,從而會引發一些錯誤,浪費一些資源。具體的,如果A發出一個連接請求,並沒有丟失,而是在網絡中某個地方滯留了,A在一段時間后等不到B的ACK就會重新發起請求,如果過一段時間那個滯留的請求又到了B,B會對它進行ACK,如果沒有第三次確認,B發出ACK就認為已經建立了連接,會耗費資源來維護這條連接,而實際上這是一個已經失效的鏈接,所以使用第三次握手可以避免這個問題,A收到ACK以后會知道這是一個失效的鏈接,不再對其進行確認,B也就不會認為建立了連接。
三次握手有什么隱患呢?
三次握手由於需要發起方進行一次請求、一次確認,這存在一定的隱患,是DDos攻擊的一種常用手段,黑客可以通過偽裝身份發起連接請求,在發起請求之后就不管了,不進行第二次的確認,而服務端由於遲遲收不到請求方的ACK,就會認為是自己發出的ACK丟失了,不斷的進行重傳,導致這條連接處於一個半開連接的狀態,當有大量的這種情況發生時,大量的半開連接占滿了連接隊列,服務器的資源都耗費在維護這些半開連接上,使得正常的服務請求無法得到響應。
7、TCP四次揮手,為什么需要四次
四次揮手的過程如下圖所示:
四次揮手的過程也比較熟悉了,主要問題是為什么需要四次呢?
這里我們可以看到,當A沒有數據要發送時,就發起FIN請求,在連接時B可以將對請求的ACK和自己的SYN請求一起發過去,而釋放連接卻不一樣了,因為此時雖然A沒有數據要發送了,而B很有可能還有一些數據沒有發送完,只能先對A的FIN進行一個ACK,此時處於一個半關閉狀態,等到自己將該發送的數據都發送完之后,在發起從B到A這個方向的鏈接釋放請求,因此需要四次。
8、TCP釋放連接的各個狀態變化,Time Wait和close wait狀態出現在哪里?
注意一下TCP四次揮手時的狀態變化,釋放請求發起方在發出FIN請求后,進入FIN-WAIT-1狀態,收到ACK以后進入FIN-WAIT-2狀態,收到B的FIN並進行確認以后進入Time WAIT狀態。
而服務器方,在收到FIN發出ACK之后,進入Close WAIT狀態,這時是一個半關閉狀態,從A到B這個方向已經釋放了,隨后B將還需要傳輸的數據發送完畢,發出FIN請求,等待最后一個ACK,進入Last-ACK狀態,收到以后就釋放連接,進入closed狀態。
9、為什么需要Time Wait狀態,沒有Time Wait狀態會發生什么,Time Wait狀態過多的話如何解決
Time Wait這個狀態需要保持2MSL(最長報文段壽命)的時間,這個狀態存在以及持續這么長時間的主要目的有兩個:
(1)確保最后發出的這個ACK能夠正確的到達B,如果丟失,在Time Wait的這段時間內有足夠的時間進行重傳,因為這個ACK如果丟失,B遲遲收不到ACK,就會認為是自己發出的FIN請求丟失了,就會重傳FIN,如果A不維持一段時間直接關閉,那么B永遠收不到ACK,就無法正確的進入closed狀態。
(2)防止已失效的連接請求報文段在這里出現。Time Wait時間足夠長,就可以使得在本次連接中所產生的報文段都從網絡中消失,這樣就可以不正確的處理掉那些失效的連接請求報文段。
Time Wait過多的話,可以通過設置Socket地址重用來解決,允許復用同一個地址。
10、TCP是如何保證可靠傳輸的
TCP中大量的機制都設計用來確保可靠傳輸,主要包括:
(1)確認和超時重傳。接收方收到報文就會確認,發送方發送一段時間后沒有收到確認就重傳。
(2)數據校驗。
(3)滑動窗口機制
(4)流量控制:發送方的窗口大小由接收方控制
(5)擁塞控制:當網絡擁塞時,減少數據的發送。
11、TCP的流量控制和擁塞控制
流量控制所要做的就是抑制發送端發送數據的速率,以便使接收端來得及接收,所以發送窗口的大小必須小於等於接收窗口的大小,也就是由接收方來控制。
在某段時間,若對網絡中某資源的需求超過了該資源所能提供的可用部分,網絡的性能就要變壞,產生擁塞。擁塞控制是一個全局性的過程,涉及到所有的主機、所有的路由器,以及與降低網絡傳輸性能有關的所有因素。
TCP提出了一系列的擁塞控制方法。發送方維持一個叫做擁塞窗口 cwnd的狀態變量,發送方讓自己的發送窗口等於擁塞窗口,再考慮到接收方的接收能力,發送窗口的大小就取擁塞窗口和接收窗口中的較小值。
1、慢啟動和擁塞避免
慢啟動和擁塞避免如下圖所示:
2、快重傳和快恢復
快重傳算法首先要求接收方每收到一個失序的報文段后就立即發出重復確認。這樣做可以讓發送方及早知道有報文段沒有到達接收方。 發送方只要一連收到三個重復確認就應當立即重傳對方尚未收到的報文段,不需要等待超時計時器了,快重傳並非取消重傳計時器,而是在某些情況下可更早地重傳丟失的報文段。
12、NAT地址轉換
NAT最大的貢獻就是節省了大量的ip資源,緩解了IP地址枯竭的問題。分為靜態(使用一個公網地址)和動態(一個地址池)。