寫在最前面:本文章所有內容是本人從網絡上以及《計算機網絡第七版整理》整理而得,內容非原創~
另一部分參見:計算機網絡面試常考總結(二)
- OSI七層協議體系: 概念清楚,理論也比較完整,但是它既復雜也不實用。
-
-
物理層:
-
計算機網絡體系中最底層,為所有網絡/數據數據通信提供物理的通信線路。另外通信線路可以通過信道復用方式在一條物理線路中划分多條信道。默認情況下,一條物理線路就是一條信道。
-
常用協議: ISO2110,IEEE802,IEEE802.2
-
常用硬件: 中繼器、集線器、還有我們通常說的雙絞線也工作在物理層
-
-
數據鏈路層:
-
為同一局域網內部的網絡/數據通信提供點到點的數據傳輸通道,通過MAC地址尋址把數據傳輸到目的節點。
-
數據鏈路層的通信只能在同一網段進行,要在不同網段間進行,必須依靠網絡層和傳輸層。
-
數據鏈路層提供的不是物理線路,而是在物理層的物理線路基礎之上,通過數據鏈路層協議構建的虛擬數據傳輸通道,並且只能在同一段內進行數據轉發。
-
常用協議:SLIP,CSLIP,PPP,ARP,RARP,MTU。(在OSI模型中ARP協議屬於鏈路層;而在TCP/IP模型中,ARP協議屬於網絡層。)
-
常用硬件:網橋、以太網交換機、網卡(其實網卡是一半工作在物理層、一半工作在數據鏈路層)
-
-
網絡層:
-
為不同網段之間的數據轉發提供路徑選擇,通過IP地址(也有可能是其他網絡地址)把數據包轉發到目的節點。網絡層這種尋址功能我們稱為“路由尋址”,就是選擇哪一條路徑到達下一個節點。
-
網絡層的功能僅起到不同網絡間轉發數據包的功能,最終數據還是要在目的網絡的數據鏈路層進行傳輸,在到達下一個節點設備(如路由器)再進行轉發。
-
常用協議:IP,ICMP,RIP,OSPF,BGP,IGMP
-
常用硬件:路由器
-
-
運輸層:
-
是在下面三層構建的網絡平台基礎上專門為通信雙方構建端到端(不是點到點)的數據傳輸通道,使通信雙方就像在直接進行數據傳輸一樣。這個端到端的傳輸通道是可以跨網絡的。
-
常用協議: TCP,UDP
-
常用硬件:網關
-
-
會話層:
-
為具體的用戶建立會話進程。
-
常用協議: 無
-
常用硬件:網關
-
-
表示層:
-
是對用戶網絡應用數據的具體解釋,包括在網絡通信中可采用的信息技術、可采用的加密方式等。
-
常用協議: 無
-
常用硬件:網關
-
-
應用層:
-
用戶進行具體網絡應用的層次,是具體網絡應用的體現者,負責接受用戶的各種網絡應用進程的調用。
-
常用協議: TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet
-
常用硬件:網關
-
-
- TCP/IP四層協議體系: 實際應用非常廣泛,從實質上講,TCP/IP體系只有最上面的三層,最底下的網絡接口層實際上沒有什么內容。
-
- 網絡接口層:合並了原來OSI中的物理層和數據鏈路層,提供局域網的功能。
- 網際層:同OSI網絡層
- 運輸層:同OSI運輸層
- 應用層:合並了OSI中最上面的三層。
- 五層協議體系: 《計算機網絡第七版》中,為了方便介紹網絡原理,而引人的體系。實際應用還是TCP/IP協議體系。
-
- 物理層:同OSI物理層
- 數據鏈路層:同OSI數據鏈路層
- 網絡層:同OSI網絡層
- 運輸層:同OSI運輸層
- 應用層:合並了OSI中最上面的三層。
OSI體系與TCP/IP體系的聯系與區別?
-
相同點:
-
層次結構划分思想相同;
-
總體層次結構相同;
-
核心組成一樣,都定義了“服務“、”接口“、”協議“上重要核心。
-
-
不同點:
-
適用范圍不同:OSI在標准協議發明前就產生了,不偏重於任何特定的網絡類型,具有最廣泛的理論參考性,是一個理想代的模型;而TCP/IP則相反,它是針對TCP/IP協議簇產生的,最具實踐性;
-
層次結構不同:TCP/IP體系中沒有會話層和表示層;
-
支持通信模式不同:OSI同時支持無連接和面向連接的網絡通信(不僅支持TCP/IP協議網絡中無連接的IP網絡協議,同時支持NetWare SPX/IPX網絡中的面向連接的SPX協議等)。TCP/IP模型的網絡層只提供無連接的服務。
-
所包括的通信協議不同。
-
路由器、中繼器、集線器、交換機、網關、網橋各自的概念以及作用?
-
路由器(Router):
-
工作范圍:網絡層,不同網絡之間
-
功能:是一種計算機網絡設備,提供了路由與轉送兩種重要機制,可以決定數據包從來源端到目的端所經過 的路由路徑(host到host之間的傳輸路徑),這個過程稱為路由;將路由器輸入端的數據包移送至適當的路由器輸出端(在路由器內部進行),這稱為轉 送。路由工作在OSI模型的第三層——即網絡層,例如網際協議。
-
-
中繼器:
-
工作范圍:物理層
-
功能:中繼器是將一條電纜傳輸過來的信號經過放大和調整以后再傳輸給另一個電纜。因此,它是物理層上的網絡延長設備。一般而言,中繼器連接的雙方是相同的物理介質,但是有些也可以完成不同媒介之間的連接。但是中繼器只是完成了信號的轉換,而不能完成轉發。也就是說,中繼器不能再傳輸速度不同的介質之間完成轉發。
-
-
集線器:
-
工作范圍:物理層
-
功能:如果每個設備只有一個對外接口,那么意味着只能建立一對一的點到點的通信。為了能夠讓通信“一對多”,需要將信號復制廣播,於是,產生了集線器。集線器的主要功能是對接收到的信號進行再生整形放大,以擴大網絡的傳輸距離,同時把所有節點集中在以它為中心的節點上。
-
-
交換機:
-
工作范圍:數據鏈路層
-
功能:交換機內部的CPU會在每個端口成功連接時,通過ARP協議學習它的MAC地址,保存成一張ARP表。在今后的通訊中,發往該MAC地址的數據包將僅送往其對應的端口,而不是所有的端口。也就是說,交換機也有一張表,記錄的是port-mac。按照傳輸數據包的層次,交換機可以分為一、二.....七層交換機。
-
-
網橋:
-
工作范圍:數據鏈路層
-
功能:網橋能夠連接兩個不同的數據鏈路,即使他們的傳輸速度不同。它能夠識別數據鏈路中的數據幀,並將這些數據幀臨時存儲在內存中,然后在重新生成一個新的數據幀轉發給另外一個網段。網橋還具有檢錯功能。因此,網橋有時候也會被稱為2層交換機。(數據鏈路層設備)有些網橋能夠記住曾今通過自己轉發的數據幀的MAC地址,並保存在內部的內存表中。這種網橋被稱為自學式網橋。
-
-
網卡:
-
工作范圍:物理層、數據鏈路層
-
功能:又稱網絡接口控制器,網絡適配器(network adapter),網卡(network interface card),或局域網接收器(LAN adapter),是一塊被設計用來允許計算機在計算機網絡上進行通訊的計算機硬件。網卡的作用是負責接收網絡上的數據包,通過和自己本身的物理地址相比較決定是否為本機應接信息,解包后將數據通過主板上的總線傳輸給本地計算機,另一方面將本地計算機上的數據打包后送出網絡。
-
實現與主機總線的網絡通訊連接,網卡相當於橋梁設備
-
實現主機與介質之間的電信號匹配
-
提供數據緩沖能力
-
-
-
網關:
-
工作范圍:運輸層、應用層
-
功能:網關(Gateway)負責第三層(網絡層)以上的數據中繼,實現不同體系結構的網絡協議轉換,它通常采用軟件的方法實現,並且與特定的應用服務一一對應。比如:OSI的文件傳輸服務FTAM和TCP/IP的文件傳輸服務FTP,盡管二者都是文件傳輸但是由於所執行的協議不同不能直接進行通信,而需要網關將兩個文件傳輸系統互連,達到相互進行文件傳輸的目的。
-
交換機與路由器的區別?
-
工作層次不同
交換機是工作在OSI/RM體系結構的第二層(數據鏈路層),而路由器一開始就設計工作在OSI模型的網絡層。由於交換機工作在OSI的第二層(數據鏈路層),所以它的工作原理比較簡單,而路由器工作在OSI的第三層(網絡層),可以得到更多的協議信息,路由器可以做出更加智能的轉發決策。
-
數據轉發所依據的對象不同
交換機是利用物理地址或者說MAC地址來確定轉發數據的目的地址。而路由器則是利用不同網絡的ID號(即IP地址)來確定數據轉發的地址。IP地址是在軟件中實現的,描述的是設備所在的網絡,有時這些第三層的地址也稱為協議地址或者網絡地址。MAC地址通常是硬件自帶的,由網卡生產商來分配的,而且已經固化到了網卡中去,一般來說是不可更改的。而IP地址則通常由網絡管理員或系統自動分配。
-
傳統的交換機只能分割沖突域,不能分割廣播域;而路由器可以分割廣播域
由交換機連接的網段仍屬於同一個廣播域,廣播數據包會在交換機連接的所有網段上傳播,在某些情況下會導致通信擁擠和安全漏洞。連接到路由器上的網段會被分配成不同的廣播域,廣播數據不會穿過路由器。雖然第三層以上交換機具有VLAN功能,也可以分割廣播域,但是各子廣播域之間是不能通信交流的,它們之間的交流仍然需要路由器。
-
路由器提供了防火牆的服務
路由器僅僅轉發特定地址的數據包,不傳送不支持路由協議的數據包傳送和未知目標網絡數據包的傳送,從而可以防止廣播風暴。 交換機一般用於LAN-WAN的連接,交換機歸於網橋,是數據鏈路層的設備,有些交換機也可實現第三層的交換。路由器用於WAN-WAN之間的連接,可以解決異性網絡之間轉發分組,作用於網絡層。他們只是從一條線路上接受輸入分組,然后向另一條線路轉發。這兩條線路可能分屬於不同的網絡,並采用不同協議。相比較而言,路由器的功能較交換機要強大,但速度相對也慢,價格昂貴,第三層交換機既有交換機線速轉發報文能力,又有路由器良好的控制功能,因此得以廣泛應用。
IP地址是如何分類的?
IP地址 = 網絡號 + 主機號
A、B、C類IP地址的網絡號字段分別是1、2、3個字節長,而在網絡號的1-3位是類別位,分別是:0、10、110。
A、B、C類IP地址的主機號字段分別為3、2、1個字節。
A、B、C類IP地址是單播地址,D類IP地址(前四位為1110)為多播地址,E類IP地址(前四位1111)保留為以后使用。
A、B、C三類常用的IP地址的指派范圍?有哪些特殊的IP地址以及它們的含義?
特殊的IP地址:
網絡號全0代表“this,這個”,也就是本網絡的意思,當網絡號和主機號全為0時則代表本網絡上的本主機。網絡號為0,主機號為host-id,則代表本網絡上的某個主機(主機號為host-id)。這類IP地址只能作為源地址,不能作為目的地址。
網絡號和主機號全為1,代表只在本網絡上進行廣播,路由器不轉發,不可以作為源地址,可以作為目的地址。
網絡號為net-id,主機號為全1,代表對net-id上所有的主機進行廣播。可以作為目的地址,不可以作為源地址。
網絡號為127(01111111),保留作為本地環回測試本主機的進程之間的通信只用。主機號可以為非全0或者全1的任何數,可以作為源地址,也可以作為目的地址。
可以指派的IP地址:
A類地址的網絡號中:全0和127是不指派的;主機號中:全0代表本主機所連接的單個網絡地址,全1代表網絡上的所有主機,也是不指派的。
B類IP地址網絡號中:128.0.0.0不指派;主機號中:全0和全1也不指派。
C類IP地址網絡號中:192.0.0.0不指派;主機號中:全0和全1也不指派。
總結:
網絡號全為0:本網絡
主機號全為0:代表單個網絡地址
主機號全為1:代表某個網絡上的所有主機
簡述ARP協議的工作原理。
ARP:Address Resolution Protocol,地址解析協議
功能:為了從網絡層的IP地址,解析出在數據鏈路層使用的硬件地址。注意:ARP解決的是同一局域網上的主機和路由器的IP地址和硬件地址的映射問題。
工作原理:
每一台主機都設有一個ARP告訴緩存,里面有本局域網上的各個主機和路由器的IP地址到硬件地址的映射。當A要向本局域網上的B發送IP數據報時,則A先查看ARP高速緩存中有無B的IP地址:
如果有:就在ARP高速緩存中查出該IP地址的硬件地址,把這個硬件地址寫入MAC幀,再通過局域網將MAC幀發往此硬件地址。
如果沒有:ARP向本局域網廣播(請求分組是廣播,響應分組是單播)發送一個ARP請求分組,表明自己的IP地址和硬件地址以及要尋找的IP地址。B接收到請求分組后,收下並且向A發送相應分組,其余主機不做相應。A收到B的相應分組后再進行常規的數據傳輸。
補充:
生存時間:ARP對每一個映射地址的項目都設有生存時間(例如10-20分鍾),這是為了防止該局域網中某些主機的硬件地址發生改變的情況。
簡述ICMP協議和IGMP協議。
ICMP:
Internet Control Message Protocol,網際控制報文協議。
功能: 為了更加有效的轉發IP數據報和提高交付成功的機會,ICMP允許主機或路由器報告差錯情況和提供有關異常情況的報告。
IGMP:
Internet Group Management Protocol,網際組管理協議。
功能: IGMP協議是讓連接在本局域網上的多播路由器知道本局域網上是否有主機(嚴格來講是主機上的某個進程)參加或者退出了某個多播組。
TCP和UDP的區別。
TCP:傳輸控制協議,Transmission Control Protocol
UDP:用戶數據報協議,User Datagram Protocol
-
TCP是面向連接的,UDP是無連接的。
TCP在傳輸數據之前必須建立有效的連接,數據傳輸后也要釋放連接。而UDP在傳輸前不需要建立連接,遠程主機接收到UDP用戶數據報之后也不需要給出確認。
-
TCP提供可靠的全雙工通信,UDP盡最大努力通信,不保證可靠。
-
TCP占用資源多,UDP占用資源少。
-
運輸協議數據單元不同,TCP是TCP報文段,UDP是用戶數據報。
-
TCP是面向字節流的,UDP是面向報文的。
-
面向字節流:雖然應用程序和TCP的交互是一次一個數據塊(大小不等),但是TCP把應用程序交下來的數據只看出一連串的無結構字節流。TCP不知道字節流的具體含義,也不保證接收方應用程序所收到的數據塊和發送方應用程序所發出的數據塊之間的大小關系。但是接收方應用程序收到的字節流必須與發送方發送的字節流完全一致。
-
面向報文:發送方的UDP對應用程序交下來的報文添加首部后直接交付給IP層。UDP對應用層交下來的報文,既不合並,也不拆分,而是保留這些報文的邊界。
-
-
TCP有擁塞控制,UDP沒有擁塞控制
-
TCP不提供廣播和多播服務,UDP支持一對一、多對一、一對多、多對多的交互通信。
TCP如何保證可靠傳輸?
-
校驗和: TCP在發送報文之前,發送方要計算校驗和,收到數據后,接收方也要計算校驗和,如果校驗和不相等則丟棄。
-
序列號與確認應答:
-
序列號:TCP傳輸時將每個字節的數據都進行了編號,這就是序列號。
-
確認應答:TCP傳輸的過程中,每次接收方收到數據后,都會對傳輸方進行確認應答。也就是發送ACK報文。這個ACK報文當中帶有對應的確認序列號,告訴發送方,接收到了哪些數據,下一次的數據從哪里發。
-
序列號的作用不僅僅是應答的作用,有了序列號能夠將接收到的數據根據序列號排序,並且去掉重復序列號的數據。這也是TCP傳輸可靠性的保證之一。
-
-
超時重傳: 在TCP傳輸過程中,我們在發送一部分數據后,都會等待對方的ACK確認報文,如果中間出現差錯,沒有收到ACK報文,這時候需要啟動超時重傳機制。這種超時重傳機制保證了TCP在網絡延遲或者報文丟失下的可靠傳輸。
超時的原因:
-
接收方沒有收到TCP報文段:網絡延遲或者丟包;
-
發送方沒有收到ACK報文段:網絡延遲或者ACK報文丟失。
-
-
連接管理:連接管理就是三次握手與四次揮手的過程(后面有詳細解釋)
-
流量控制: 流量控制的目的是讓接收方來得及接收數據。這樣避免了數據丟包以及網絡擁塞等情況。
-
擁塞控制: 擁塞控制就是防止過多的數據注入到網絡中,這樣使網絡中的路由器或者鏈路不至於過載。
TCP三次握手的過程?為什么采用三次握手?兩次可以嗎?
TCP三次握手的過程(A向B發送數據):
A主動打開連接,B被動打開連接。B先進入收聽狀態,A打算建立TCP連接時,先向B發送連接請求報文段,其中同步位SYN=1,初始序號seq=x,這個報文段不能攜帶數據,但是要消耗一個序號。接着,A進入同步已發送狀態;
B收到請求報文段,如果同意建立連接,則向A發送ACK確認報文段,其中同步位SYN=1,確認號ACK=1,初始序號seq=y,確認號ack=x+1(請求報文段消耗了一個序號),這個ACK報文段也不能攜帶數據,但是要消耗一個序號。與此同時,B進入到同步收到的狀態;
A收到B的確認報文后,還要給B發送確認報文。其中ACK=1,seq=x+1(上一個報文段的ack),ack = y+1(上一個報文段的seq+1,因為消耗了一個序號),這個ACK報文段可以攜帶數據,但是如果不攜帶數據則不會消耗序號,下一次A給B發送報文段的初始序號 seq=1。此時A進入已建立連接的狀態,B收到確認后也進入已建立連接的狀態。
為什么需要最后一次確認?
這是防止已失效的連接請求報文段突然又傳送到了B而引發錯誤。
失效的連接請求:A第一次先發送了一個請求,但是丟失了,於是A再發送一個連接請求,重新建立連接,發送數據並釋放連接。
但是有可能出現異常情況,即A發送的連接請求並沒有丟失,而是滯留了在網絡中。如果在傳輸數據完成之后,這個請求又發到B,B誤以為A還要發送數據,因此發送確認報文,但是A沒有運輸需求,因此不予理睬。如果沒有最后一次確認,B一直等待A的確認,這樣會造成的浪費。
采用三報文握手,如果B沒有收到A的確認,則可以知道A沒有建立連接的需求,就可以避免上述這種情況。
TCP四次揮手的過程?為什么最后有timewait?等待時長一般是多少?
TCP四次揮手的過程:
A和B目前都處於已建立連接的狀態,A的應用進程向其TCP發出連接釋放報文段,並停止發送數據,主動關閉TCP連接。此時,FIN=1,seq=u,u等於前面已發送的最后一個字節的序號加1。這時A進入到FIN-WAIT-1(終止等待1)狀態,等待B的確認。FIN報文段即使不攜帶數據,也要消耗一個序號;
B收到釋放連接后立即發出確認,此時,ACK=1,確認號是ack=u+1(前面的seq+1,因為消耗了一個序號),序號seq=v,v等於B前面所有已傳送數據的最后一個字節的序號加1。B進入到CLOSE-WAIT(關閉等待)狀態,TCP服務器進程向B的高層應用進程告知,此時A到B的連接已經釋放,TCP連接處於半關閉狀態。但是,B到A這個方向的連接尚未關閉;
A收到B的確認后,就進入到FIN-WAIT2(終止等待2)的狀態,等待B發送連接釋放報文段;
若B已經沒有數據需要發送,則應用進程通知TCP釋放連接,這時B發送的報文段:FIN=1,ACK=1,seq=w(可能后面又發送了一些數據),ack=u+1,並且這個報文消耗一個序號。B進入到LAST-ACK(最后確認)的狀態,等待A的確認;
A收到B的確認后,必須對此發送確認報文。該報文中:ACK=1,seq=u+1,ack=w+1。然后進入到TIME-WAIT(時間等待)狀態。
此時TCP連接並沒有完全釋放,必須經過時間等待計時器設置的時間2MSL之后,A才進入CLOSED狀態。時間MSL叫做最大報文段壽命。
那么,為什么要等待2MSL的時間呢?
保證A最后發送的ACK報文段能夠到達B。因為這個報文可能丟失,因此B會重傳最后一個確認報文段,A再重新發送確認報文,並且重啟計時器,直到A,B都能正常進入到CLOSED狀態;
防止上面提到的“已失效的連接請求報文”。這段時間內,這些連接請求報文就可能在網絡中消失。
此外,B要比A先進入CLOSED狀態
TCP怎么計算網絡延遲?
精確的時延計算十分復雜,不過可以通過ping命令進行粗略的計算,通過ping命令得出的平均往返時間除以2,就是我們的網絡時延。
TCP怎么進行擁塞控制?(慢啟動、擁塞避免、快重傳、快恢復)
TCP通過慢啟動、擁塞避免、快重傳以及快恢復這四個算法來進行擁塞控制(具體的可以參見上面那篇博文):
慢啟動:一開始先設置一個比較小的擁塞窗口值cwnd(報文段的倍數),然后進行數據傳輸,每收到一個報文段的確認,我們就將cwnd+1,這樣下來,cwnd總體上是乘以2^n的倍數增長。(慢啟動非增長速度慢,只是增長的初始基數比較小)
擁塞避免: 因為慢啟動算法的增長比較快,當cwnd = ssthresh(預先設置好的門限值)時,我們啟動擁塞避免算法,窗口值開始線性增長。
隨着擁塞避免算法的進行,網絡出現超時的情況(這時判斷為擁塞出現)。這時將cwnd降為一開始的值,重新進行慢開始-擁塞避免,並且此時的門限值設為出現擁塞時的cwnd的一半。
快重傳: 快重傳的目的是為了讓發送方盡早知道某個報文段的丟失。如何知道呢?當我們重復收到某一個報文段的3次確認時,我們就可以判斷,它的下一個報文段可能出現了丟失。這時我們啟動快重傳算法,立即重傳丟失的報文段。
快恢復: 上面快重傳算法的啟動只是因為個別報文段的丟失,我們這時並不判斷為網絡擁塞,而是啟動快恢復算法。我們將cwnd=ssthresh=當前cwnd的一半,並且開始擁塞避免算法。
當然,也有的快恢復算法是將當前擁塞窗口再增大3個報文段的值,因為既然收到了3個重復的ACK,則說明有三個分組已經離開了網絡,不在占用網絡資源而是停留在對方緩存當中,可以適當將窗口值增大。
TCP對應的協議有哪些?UDP對應的協議有哪些?
面向連接和無連接的區別?
應該與前面TCP和UDP的區別類似。
面向連接在傳輸之前需要先建立連接,而且傳輸完成后必須要釋放連接。無連接則不需要事先建立連接,直接傳輸數據。
面向連接一般要保證數據傳輸的可靠性,有序性。
端口以及對應的服務?
端口號分類:
服務器端使用的端口號。
熟知端口號:0~1023。IANA把一些端口號指派給了TCP/IP最重要的一些程序。當有一些新的應用程序出現后,IANA必須給它指定 一個熟知端口號,否則互聯網上的其他應用進程無法和它進行通信。
應用程序 FTP TELNET SMTP DNS TFTP HTTP SNMP SNMP(trap) HTTPS 熟知端口號 21 23 25 53 69 80 161 162 443 登記端口號:1024~49151。這類端口號是為沒有熟知端口號的應用程序使用。這類端口號必須在IANA中按照規定的手續進行登記,以防止重復。
客戶端使用的端口號:49152~65535。只有在客戶端進程運行時才動態選擇,因此又叫短暫端口號。這類端口號留給客戶進程選擇暫時使用,通信結束后就釋放,不再占用。