關於網絡的高頻面試題,整理了了一下大部分網絡層,傳輸層,應用層。因此這裏只找面試可能出現的。關於答案相關的不少都來自網上整理的,還有就是謝希仁的計算機網絡第七版,在最後面會給上參考資料。java
多了表示層和會話層:git
只有四層,至關於五層協議中數據鏈路層和物理層合併爲網絡接口層。github
網絡層的設計思路是:「網絡層只向上提供簡單靈活的、無鏈接的、盡最大努力交付的服務。」關於網絡層的知識點也不少,可是在面試中的高頻知識點很少。面試
網絡層裏網際IP協議是TCP/IP體系中兩個最重要的協議之一。與IP協議配套使用的還有三個協議:後端
私有/保留就是在互聯網上不使用,而被使用在局域網絡中的地址或者作其餘特殊用途。好比咱們的聯通運營商就是使用的10.開頭的保留地址, 局域網組網,而後用戶經過撥號的方式進入局域網,而後再經過訪問網關訪問Internet,這樣作最大的好處就是節約了公網IP地址,極大的下降了成本。瀏覽器
A類:10.0.0.0 ~ 10.255.255.255緩存
B類:172.16.0.0 ~ 172.31.255.255安全
C類:192.168.0.0 ~ 192.168.255.255服務器
網絡層的 ARP 協議完成了 IP 地址與物理地址的映射。網絡
首先,每臺主機都會在本身的 ARP 緩衝區中創建一個 ARP 列表,以表示 IP 地址和 MAC 地址的對應關係。當源主機須要將一個數據包要發送到目的主機時,會首先檢查本身 ARP 列表中是否存在該 IP 地址對應的 MAC 地址:若是有,就直接將數據包發送到這個 MAC 地址;若是沒有,就向本地網段發起一個 ARP 請求的廣播包,查詢此目的主機對應的 MAC 地址。此 ARP 請求數據包裏包括源主機的 IP 地址、硬件地址、以及目的主機的 IP 地址。網絡中全部的主機收到這個 ARP 請求後,會檢查數據包中的目的 IP 是否和本身的 IP 地址一致。若是不相同就忽略此數據包;若是相同,該主機首先將發送端的 MAC 地址和 IP 地址添加到本身的 ARP 列表中,若是 ARP 表中已經存在該 IP 的信息,則將其覆蓋,而後給源主機發送一個 ARP 響應數據包,告訴對方本身是它須要查找的 MAC 地址;源主機收到這個 ARP 響應數據包後,將獲得的目的主機的 IP 地址和 MAC 地址添加到本身的 ARP 列表中,並利用此信息開始數據的傳輸。若是源主機一直沒有收到 ARP 響應數據包,表示 ARP 查詢失敗。
ARP默認了其所在的網絡是一個善良的網絡,每臺主機在向網絡中發送應答信號時都是使用的真實身份。因此人們就發現ARP應答中的IP地址和MAC地址中的信息是能夠僞造的,並不必定是本身的真實IP地址和MAC地址,由此,ARP欺騙就產生了。
它是TCP/IP協議族的一個子協議,用於在IP主機、路由器之間傳遞控制消息。控制消息是指網絡通不通、主機是否可達、路由是否可用等網絡自己的消息。這些控制消息雖然並不傳輸用戶數據,可是對於用戶數據的傳遞起着重要的做用。
從通訊和信息處理兩個角度看,運輸層向它上面的應用層提供了通訊服務。其主要的兩個協議是UDP協議(用戶數據報協議)和TCP協議(傳輸控制協議),重點在於TCP協議和可靠傳輸的原理。
UDP的特色:
TCP的特色:
TCP與UDP的區別:
應用 | 應用層協議 | 運輸協議 |
---|---|---|
名字轉換 | DNS(域名系統) | UDP |
文件傳送 | TFTP(簡單文件傳送協議) | UDP |
路由選擇協議 | RIP(路由信息協議) | UDP |
IP地址配置 | DHCP(動態主機配置協議) | UDP |
網絡管理 | SNMP(簡單網絡管理協議) | UDP |
遠程文件服務器 | NFS(網絡文件系統) | UDP |
IP電話 | 專用協議 | UDP |
流式多媒體通訊 | 專用協議 | UDP |
多播 | IGMP(網際管理協議) | UDP |
電子郵件 | SMTP(簡單郵件傳送協議) | TCP |
遠程終端接入 | TELNET(遠程終端協議) | TCP |
萬維網 | HTTP(超文本傳送協議) | TCP |
文件傳送 | FTP(文件傳送協議) | TCP |
三次握手
第一次握手,客戶端給服務器發送一個SYN包,序號爲x,等待服務器的響應。
第二次握手,服務器給客戶端發送了有ACK/SYN標誌的包,序號爲y,確認號爲x+1,並等待客戶端響應。
第三次握手,客戶端收到服務器的確認包後,給服務器發送了一個ACK包,序號爲x+1,確認號爲y+1。
三次握手完畢後,就能夠正式傳遞數據了。
四次揮手
第一次揮手,客戶端給服務器發送一個FIN包,此時客戶端不會再向服務器發送數據,但客戶端能接收服務器的數據。
第二次揮手,當服務器收到FIN包後,會給客戶端發一個確認包,並傳遞剩下的數據。
第三次揮手,當服務器將剩餘數據發送完後,就向發送方發一個FIN包。此時服務器也不會繼續向客戶端發送數據了。
第四次揮手,客戶端收到服務器的FIN包後,就向服務器發送一個確認包。
服務端接收到後,完成四次揮手。服務器斷開鏈接,客戶端在等待一段時間後也斷開鏈接。
三次握手的目的是創建可靠的通訊信道,不管是客戶端,仍是服務器都須要確保本身和對方的發送/接收功能都是正常的,三次握手的過程就能保證這一點。
第一次握手,服務器收到客戶端發來的同步包後,能肯定客戶端的發送功能和本身的接收功能是正常的。
第二次握手,客戶端收到服務器發來的確認包後,能肯定本身的發送/接收功能,服務器的發送/接收功能是正常的。
第三次握手,服務器收到客戶端的確認包後,能肯定本身的發送/接收功能,服務器的發送/接收功能是正常的。
若是不進行揮手操做,好比客戶端直接斷開與服務器的鏈接,那麼服務器不知情,還會繼續向客戶端發送數據,這就形成資源浪費。
爲了保證客戶端發送的最後一個確認,可以達到服務器
這個ACK可能丟失,就會致使服務器在LAST-ACK狀態,沒辦法正常結束,那麼服務器收不到就會超時重傳能夠斷開的消息。
那麼A就可以在這個2MSL中收到這個重傳的消息,而且從新計時2MSL。
並且,客戶端持續2MSL時間後斷開,就能夠保證這個鏈接的全部報文都會死亡,能夠看下MSL的含義,也就是2MSL以後,斷開這個鏈接以後,確定不會還存在這個鏈接的舊的報文了。
補充:MSL(最大報文段的生成時間)在RFC793中規定hi2分鐘,實際應用是30秒,1分鐘,2分鐘等
二次握手不行,假設客戶端的一個SYN包在網絡中滯留了好久,這就是個失效的報文段了,若是服務器收到這個報文段,就認爲這是一個鏈接請求,並創建鏈接。這樣,就會浪費服務器資源,採用三次握手就能避免這種狀況。
三次揮手不行,若是沒有最後一次揮手,即服務器在第三次揮手,即發送完FIN包後就斷開鏈接,若是這個包丟失了,那麼客戶端就會一直等待,這顯然是不行的。
超時重傳,若是一個已經發送的報文段在超時時間內沒有收到確認,那麼就重傳這個報文段。
首部校驗和,提供了差錯檢測功能。
確認與序號機制,能保證接收到數據的有序性。
流量控制,能控制端到端之間的數據傳遞速率,有效避免丟包。
擁塞控制,根據整個網絡環境來條件傳輸速率,有效避免丟包。
URL咱們說是叫統一資源定位符,URI我更願意叫作統一資源標識符。
舉個例子:
一我的,身份證是他的惟一標識,能夠做爲統一資源標識符,而地址是爲了找到他,因此是統一資源定位符。
GET在瀏覽器回退是無害的,而POST會再次提交請求
GET請求會被瀏覽器主動cache,而POST不會,除非手動設置
GET請求只能進行URL編碼,而POST支持多種編碼
GET請求參數會被完整保留在瀏覽器歷史記錄中,而POST中的參數不會被保留
GET請求在URL中傳送參數是有大小限制的,不能大於2KB,而POST能夠說沒有
GET只接受ASCII字符,而POST沒有限制
GET參數直接暴露在URL上,而POST將數據放在request body中
查詢DNS, 獲取域名對應的IP地址
瀏覽器得到域名對應的IP地址後,發起TCP三次握手
TCP/IP創建鏈接後,瀏覽器能夠向服務器發送HTTP請求了
服務器接收到請求後,根據路徑參數,通過後端處理將頁面返回給瀏覽器
瀏覽器渲染頁面,和外部資源,最終將完整的頁面呈現給用戶
200:請求成功狀態碼。
301:永久重定向。該資源已經分配了新的 URI,服務器返回301響應時,會自動將請求者轉移到新URI。
302:臨時重定向。表示請求的資源臨時分配了新的 URI,但願用戶(本次)能使用新的 URI 訪問。
404:服務器找不到目標資源。
500:服務器內部出錯,沒法完成請求。
計算機網絡第七版-謝希仁