<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    幾道網絡面試題!看看你都會嗎?

    一顆小胡椒2021-12-30 22:05:25

    1. 應用層

    1.1 http協議格式是什么

    請求報文格式:請求行、請求頭、空一行、請求體

    請求行包括:請求方法、統一資源定位符(URL)、http協議及版本

    響應報文格式:狀態行、響應頭、空一行、響應體

    狀態行包括:協議及版本、狀態碼、狀態碼解釋

    1.2 http和https的區別

    http:由于http是明文傳輸,所以其安全性低,易受攻擊,無法確認對方的身份,也無法確保數據的完整性;http協議默認端口號是80端口;它的優點是簡單快速,使用很靈活;http服務器的程序規模小所以通信速度很快;與https相比,http沒有額外的費用。

    https:由于https使用ssh加密傳輸協議,信息是密文,所以它的安全性高,可以認證雙方的身份,防止信息被截取篡改;https協議默認端口號是443端口;它會加重服務器負擔,需要資源來支撐,降低用戶的訪問速度。

    1.3 http常見狀態碼

    1.4 cookie和session的區別

    • 數據存放位置不同:cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。
    • 安全程度不同:cookie不是很安全,別人可以分析存放在本地的cookie并進行cookie欺騙,考慮到安全應當使用session。
    • 性能使用程度不同:session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能,考慮到減輕服務器性能方面,應當使用cookie。
    • 數據存儲大小不同:單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie,而session則存儲與服務端,瀏覽器對其沒有限制。
    • 會話機制不同:session會話機制:session會話機制是一種服務器端機制,它使用類似于哈希表(可能還有哈希表)的結構來保存信息。cookies會話機制:cookie是服務器存儲在本地計算機上的小塊文本,并隨每個請求發送到同一服務器。

    1.5 get和post的區別

    他們本質都是TCP連接,并無區別,但是由于http的規定以及瀏覽器和服務器的限制,導致他們在應用過程中可能有所不同

    1、get方法的特點

    • 請求數據會附在URL之后(放在請求行中,以 ?分割URL和傳輸數據,多個參數用 & 連接)
    • get是會被瀏覽器主動緩存的,如果下一次傳輸的數據相同,那么就會返回緩存中的內容,可以更快的展示數據
    • get方法的UR一般都有長度限制,但是需要注意的是http協議中并未規定get請求的長度。這個長度限制主要是由瀏覽器和web服務器決定的,并且各個瀏覽器對長度限制各不相同
    • get方法只產生一個TCP數據包,瀏覽器會把請求頭和請求數據一并發送出去,服務器響應200 ok(返回數據)

    2、post方法的特點

    • 根據http規范,post可能改變服務器上的資源的請求(點贊就是post請求),因為有可能修改服務器上的資源,所以不符合安全性和冪等性
    • 因為post方法是放在請求數據的,所以它的請求信息是沒有長度限制的
    • post方法會產生兩個TCP數據包,瀏覽器會先將請求頭發送給服務器,待服務器返回100 continue,瀏覽器再發送請求數據,服務器響應 200 ok(返回數據),這個看起來get比post快一些,但是實際上,在網絡狀況良好的情況下,他們的傳輸速度基本相同。

    2. 傳輸層

    2.1 講講三次握手

    • 建立客戶端向服務端的連接:發送客戶端的請求連接數據包SYN到服務端
    • 響應客戶端的連接并建立服務端的連接:服務端發送響應客戶端連接的數據包ACK和服務端的請求連接數據包SYN到客戶端
    • 響應服務端的連接:客戶端發送響應服務端連接的數據包ACK到服務端

    服務端新建套接字,綁定地址信息后開始監聽,進入LISTEN狀態。客戶端新建套接字綁定地址信息后調用connect,發送連接請求SYN,并進入SYN_SENT狀態,等待服務器的確認。服務端一旦監聽到連接請求,就會將連接放入內核等待隊列中,并向客戶端發送SYN和確認報文段ACK,進入SYN_RECD狀態。客戶端收到SYN+ACK報文后向服務端發送確認報文段ACK,并進入ESTABLISHED狀態,開始讀寫數據。服務端一旦收到客戶端的確認報文,就進入ESTABLISHED狀態,就可以進行讀寫數據了

    2.1.1 為什么是三次握手,而不是兩次或四次

    兩次不安全,四次沒必要

    tcp通信需要確保雙方都具有數據收發的能力,得到ACK響應則認為對方具有數據收發的能力,因此雙方都要發送SYN確保對方具有通信的能力。第一次握手是客戶端發送SYN,服務端接收,服務端得出客戶端的發送能力和服務端的接收能力都正常;第二次握手是服務端發送SYN+ACK,客戶端接收,客戶端得出客戶端發送接收能力正常,服務端發送接收能力也都正常,但是此時服務器并不能確認客戶端的接收能力是否正常;第三次握手客戶端發送ACK,服務器接收,服務端才能得出客戶端發送接收能力正常,服務端自己發送接收能力也都正常。

    2.2 講講四次揮手

    • 客戶端向服務端發送斷開連接請求FIN
    • 服務端響應客戶端的斷開連接請求,發送ACK響應包給客戶端
    • 服務端向客戶端發送斷開連接請求FIN
    • 客戶端響應服務端的斷開連接請求,發送ACK響應給客戶端

    客戶端主動調用close時,向服務端發送結束報文段FIN報,同時進入FIN_WAIT1狀態;服務器會收到結束報文段FIN報,服務器返回確認報文段ACK并進入CLOSE_WAIT狀態,此時如果服務端有數據要發送的話,客戶端依然需要接收。客戶端收到服務器對結束報文段的確認,就會進入到FIN_WAIT2狀態,開始等待服務器的結束報文段;服務器端數據發送完畢后,當服務器真正調用close關閉連接時,會向客戶端發送結束報文段FIN包,此時服務器進入LAST_ACK狀態,等待最后一個ACK的帶來;客戶端收到服務器發來的結束報文段, 進入TIME_WAIT, 并發出送確認報文段ACK;服務器收到了對結束報文段確認的ACK,進入CLOSED狀態,斷開連接。而客戶端要等待2MSL的時間,才會進入到CLOSED狀態

    2.2.1 為什么握手是三次,而揮手需要四次呢

    第二步屬于系統自動響應數據包

    第三步是程序手動調用close()方法發送關閉連接的請求數據包

    其實在TCP握手的時候,接收端將SYN包和ACK確認包合并到一個包中發送的,所以減少了一次包的發送。對于四次揮手,由于TCP是全雙工通信,主動關閉方發送FIN請求不代表完全斷開連接,只能表示主動關閉方不再發送數據了。而接收方可能還要發送數據,就不能立即關閉服務器端到客戶端的數據通道,所以就不能將服務端的FIN包和對客戶端的ACK包合并發送,只能先確認ACK,等服務器無需發送數據時在發送FIN包,所以四次揮手時需要四次數據包的交互

    2.2.2 一臺主機上出現大量的TIME_WAIT是什么原因?應該如何處理?

    TIME_WAIT是主動關閉方出現的,一臺主機出現大量的TIME_WAIT證明這臺主機上發起大量的主動關閉連接。常見于一些爬蟲服務器。這時候我們應該調整TIME_WAIT的等待時間,或者開啟套接字地址重用選項

    2.2.3 一臺主機上出現大量的CLOSE_WAIT是什么原因?應該如何處理?

    CLOSE_WAIT是被動關閉方收到FIN請求進行回復之后的狀態,等待上層程序進一步處理,若出現大量CLOSE_WAIT,有可能是被動關閉方主機程序中忘了最后一步斷開連接后調用close釋放資源。這是一個 BUG,只需要加上對應的 close 即可解決問題

    2.3 TCP是如何保證可靠性的

    可靠性和提高性能可參考此鏈接!!!

    確認應答、超時重傳、連接管理、流量控制、擁塞控制

    2.4 TCP是如何提高性能的

    滑動窗口、延遲應答、捎帶應答

    2.5 TCP和UDP的區別

    TCP是可靠,穩定的,TCP的可靠體現在TCP在傳遞數據之前,會有三次握手來建立連接,而且在數據傳遞時,有確認應答、超時重傳、連接管理、流量管理、擁塞控制機制,在數據傳完后,還會四次揮手斷開連接用來節約系統資源。但是它相對UDP較慢,效率低,占用系統資源高,而且在數據傳遞時,確認機制、重傳機制、擁塞控制機制等都會消耗大量的時間,而且要在每臺設備上維護所有的傳輸連接,每個連接都會占用系統的CPU、內存等硬件資源。

    UDP沒有TCP的確認應答、超時重傳、連接管理、流量管理、擁塞控制等機制,是一個無狀態的傳輸協議,所以它在傳遞數據時非常快。但是UDP不可靠、不穩定,因為UDP沒有TCP那些可靠的機制,在數據傳遞時,如果網絡質量不好,就會很容易丟包。

    總的來說

    TCP是面向連接的,UDP無連接
    TCP是可靠的,UDP不可靠
    TCP只支持對點的通信;UDP支持一對一,一對多,多對一,多對多通信
    TCP是面向字節流的;UDP是面向數據報的
    TCP首部開銷大,20個字節;UDP只有8個字節
    TCP可以保證傳輸的順序,UDP不可以保證

    3. 其他問題

    3.1 瀏覽器輸入URL后發生了什么

    • 首先,在瀏覽器地址欄中輸入url,先解析url,檢測url地址是否合法
    • 瀏覽器先查看瀏覽器緩存——系統緩存——路由器緩存,如果緩存中有,直接在屏幕上顯示內容,如果沒有,到第三步
    瀏覽器緩存:瀏覽器會記錄DNS一段時間,因此只有第一個地方解析DNS請求
    操作系統緩存:如果在瀏覽器中不包含這個記錄,則會使用系統調用操作系統,獲取操作系統記錄(保存最近的DNS查詢緩存)
    路由器緩存:如果上述兩個步驟均不能獲取DNS記錄,繼續搜索路由器緩存
    • 在發送http請求前,需要域名解析(DNS解析),獲取相應的IP地址
    • 瀏覽器向服務器發起TCP連接,與瀏覽器建立三次握手
    • 握手成功后,瀏覽器向服務器發送http請求,請求數據包
    • 服務器處理收到的請求,將數據返回至瀏覽器
    • 四次揮手釋放TCP連接
    • 瀏覽器收到http響應
    • 瀏覽器解析響應,如果響應可以緩存,則存入緩存
    • 瀏覽器發送請求獲取嵌入在HTML的資源(對于未知類型,會彈出對話框)
    • 瀏覽器發送異步請求
    • 頁面渲染全部結束

    3.2 電腦網絡不通如何解決

    (1)排除接觸故障

    查看網線是否連接正常。如果網絡連接圖標上顯示“紅叉”,則說明網絡連接不正常。可檢查主機網卡口上的網線、交換器(路由器)上網線是否正常連接

    (2)使用ipconfig查看計算機的上網參數

    ①單擊“開始|所有程序|附件|命令提示符“,打開命令提示符窗口

    ②輸入ipconfig,按Enter確認,可以看到機器的配置信息,輸入ipconfig/all,可以看到IP地址和網卡物理地址等相關網絡詳細信息。

    (3)使用ping命令測試網絡的連通性

    在命令提示符窗口中輸入"ping 127.0.0.1",數據顯示本機分別發送和接受了4個數據包,丟包率為零,可以判斷本機網絡協議工作正常,如顯示”請求超時“,則表明本機網卡的安裝或TCP/IP協議有問題,接下來就應該檢查網卡和TCP/IP協議,可以通過重新安裝該協議來解決。安裝方法:右擊“本地連接”——屬性——安裝——協議,選擇TCP/IP協議確定安裝。

    (4)ping本機IP

    如果ping 127.0.0.1 正常,則可以“ping 本機IP”來判斷本機的網卡是否正常工作。如不能ping通,說明本機的網卡驅動程序不正確,或者網卡與網線之間連接有故障,也有可能是本地的路由表面收到了破壞,此時應檢查本機網卡的狀態是否為已連接,網絡參數是否設置正確,如果正確可是不能ping通,就應該重新安裝網卡驅動程序。丟失率為零,可以判斷網卡安裝配置沒有問題,工作正常。

    (5)ping網關IP

    網關地址能被ping通的話,表明本機網絡連接已經正常,如果命令不成功,可能是網關設備自身存在問題,也可能是本機上網參數設置有誤,檢查網絡參數。如果ping 網關IP正常,可網頁卻無法打開,同時QQ可以正確登錄。則一般是DNS填寫不正確,請聯系運行商詢問DNS地址,也可詢問鄰居他們是怎么設置的,一個地區的同一運行商所用的DNS都是一樣的。

    緩存服務器tcp四次揮手
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    而UDP是一個面向無連接的傳輸層協議。當意識到丟包了或者網絡環境不佳,TCP 會根據具體情況調整自己的行為,控制自己的發送速度或者重發。由此證明男方擁有愛的能力。SYN 需要對端的確認, 而 ACK 并不需要,因此 SYN 消耗一個序列號而 ACK 不需要。
    幾道網絡面試題!看看你都會嗎?
    函數的注釋已經非常清晰,但是需要讀者有 socket 緩沖區的概念。socket 緩沖區當應用層代碼通過 socket 進行讀與寫的操作時,實質上經過了一層 socket 緩沖區,它分為發送緩沖區和接受緩沖區。操作系統會將緩沖區里未處理完的數據都完成處理,再關閉掉連接。當 sec > 0 時,操作系統會以與默認關閉方式運行。服務端代碼根據邏輯分為四個部分第一部分:端口監聽。
    在發送 TCP 數據段時,由發送端計算校驗和,當到達目的地時又進行一次檢驗和計算。表示緊急數據的末尾在 TCP 數據部分中的位置。如果不能及時收到一個確認,將重發這個報文段。流量控制TCP 連接的每一方都有固定大小的緩沖空間,TCP 的接收端只允許發送端發送接收端緩存區能接納的數據。TCP 使用的流量控制協議是可變大小的滑動窗口協議。擁塞控制當網絡擁塞時,減少數據的發送。
    數據鏈路層在不可靠的物理介質上提供可靠的傳輸。與IP協議配套使用實現其功能的還有地址解析協議ARP、逆地址解析協議RARP、因特網報文協議ICMP、因特網組管理協議IGMP。ARP 是即插即用的,一個ARP表是自動建立的,不需要系統管理員來配置。
    數據鏈路層在不可靠的物理介質上提供可靠的傳輸。以太網協議詳解MAC地址:每一個設備都擁有唯一的MAC地址,共48位,使用十六進制表示。與IP協議配套使用實現其功能的還有地址解析協議ARP、逆地址解析協議RARP、因特網報文協議ICMP、因特網組管理協議IGMP。ARP 是即插即用的,一個ARP表是自動建立的,不需要系統管理員來配置。
    數據鏈路層在不可靠的物理介質上提供可靠的傳輸。以太網協議詳解MAC地址:每一個設備都擁有唯一的MAC地址,共48位,使用十六進制表示。與IP協議配套使用實現其功能的還有地址解析協議ARP、逆地址解析協議RARP、因特網報文協議ICMP、因特網組管理協議IGMP。ARP 是即插即用的,一個ARP表是自動建立的,不需要系統管理員來配置。
    數據鏈路層在不可靠的物理介質上提供可靠的傳輸。以太網協議詳解MAC地址:每一個設備都擁有唯一的MAC地址,共48位,使用十六進制表示。網絡層網絡層的目的是實現兩個端系統之間的數據透明傳送,具體功能包括尋址和路由選擇、連接的建立、保持和終止等。
    數據鏈路層在不可靠的物理介質上提供可靠的傳輸。與IP協議配套使用實現其功能的還有地址解析協議ARP、逆地址解析協議RARP、因特網報文協議ICMP、因特網組管理協議IGMP。ARP 是即插即用的,一個ARP表是自動建立的,不需要系統管理員來配置。
    基于TCP/IP的參考模型將協議分成四個層次,它們分別是鏈路層、網絡層、傳輸層和應用層。下圖表示TCP/IP模型與OSI模型各層的對照關系。TCP/IP協議族按照層次由上到下,層層包裝。出棧的過程,數據接收方每層不斷地拆除首部與尾部,得到最終傳輸的數據。上圖以HTTP協議為例,具體說明。原理是用類型碼為0的ICMP發請求,受到請求的主機則用類型碼為8的ICMP回應。因此,應用程序必須選擇合適大小的報文。
    一顆小胡椒
    暫無描述
      亚洲 欧美 自拍 唯美 另类