計算機網路常見面試知識
1、OSI,TCP/IP,五層協議的體系結構,以及各層協議:
OSI分層 (7層):物理層、資料鏈路層、網路層、傳輸層、會話層、表示層、應用層。
TCP/IP分層(4層):網路介面層、 網際層、運輸層、 應用層。
五層協議 (5層):物理層、資料鏈路層、網路層、運輸層、 應用層。
每一層的協議如下:
物理層:RJ45、CLOCK、IEEE802.3 (中繼器,集線器,閘道器)
資料鏈路:PPP、FR、HDLC、VLAN、MAC (網橋,交換機)
網路層:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、 (路由器)
傳輸層:TCP、UDP、SPX
會話層:NFS、SQL、NETBIOS、RPC
表示層:JPEG、MPEG、ASII
應用層:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS
每一層的作用如下:
物理層:通過媒介傳輸位元,確定機械及電氣規範(位元Bit)
資料鏈路層:將位元組裝成幀和點到點的傳遞(幀Frame)
網路層:負責資料包從源到宿的傳遞和網際互連(包PackeT)
傳輸層:提供端到端的可靠報文傳遞和錯誤恢復(段Segment)
會話層:建立、管理和終止會話(會話協議資料單元SPDU)
表示層:對資料進行翻譯、加密和壓縮(表示協議資料單元PPDU)
應用層:允許訪問OSI環境的手段(應用協議資料單元APDU)
2、 IP地址的分類:
A類地址:以0開頭, 第一個位元組範圍:0~127(1.0.0.0 - 126.255.255.255);
B類地址:以10開頭, 第一個位元組範圍:128~191(128.0.0.0 - 191.255.255.255);
C類地址:以110開頭, 第一個位元組範圍:192~223(192.0.0.0 - 223.255.255.255);
10.0.0.0—10.255.255.255, 172.16.0.0—172.31.255.255, 192.168.0.0—192.168.255.255。(Internet上保留地址用於內部)
IP地址與子網掩碼相與得到主機號
3、ARP是地址解析協議,簡單語言解釋一下工作原理。
(1)首先,每個主機都會在自己的ARP緩衝區中建立一個ARP列表,以表示IP地址和MAC地址之間的對應關係。
(2)當源主機要傳送資料時,首先檢查ARP列表中是否有對應IP地址的目的主機的MAC地址,如果有,則直接傳送資料,如果沒有,就向本網段的所有主機發送ARP資料包,該資料包包括的內容有:源主機IP地址,源主機MAC地址,目的主機的IP。
(3)當本網路的所有主機收到該ARP資料包時,首先檢查資料包中的IP地址是否是自己的IP地址,如果不是,則忽略該資料包,如果是,則首先從資料包中取出源主機的IP和MAC地址寫入到ARP列表中,如果已經存在,則覆蓋,然後將自己的MAC地址寫入ARP響應包中,告訴源主機自己是它想要找的MAC地址。
(4)源主機收到ARP響應包後。將目的主機的IP和MAC地址寫入ARP列表,並利用此資訊傳送資料。如果源主機一直沒有收到ARP響應資料包,表示ARP查詢失敗。
廣播發送ARP請求,單播發送ARP響應。
4、各種協議:
ICMP協議:因特網控制報文協議。它是TCP/IP協議族的一個子協議,用於在IP主機、路由器之間傳遞控制訊息。
TFTP協議:是TCP/IP協議族中的一個用來在客戶機與伺服器之間進行簡單檔案傳輸的協議,提供不復雜、開銷不大的檔案傳輸服務。
HTTP協議:超文字傳輸協議,是一個屬於應用層的面向物件的協議,由於其簡捷、快速的方式,適用於分散式超媒體資訊系統。
DHCP協議:動態主機配置協議,是一種讓系統得以連線到網路上,並獲取所需要的配置引數手段。
NAT協議:網路地址轉換屬接入廣域網(WAN)技術,是一種將私有(保留)地址轉化為合法IP地址的轉換技術,
DHCP協議:一個區域網的網路協議,使用UDP協議工作,用途:給內部網路或網路服務供應商自動分配IP地址,給使用者或者內部網路管理員作為對所有計算機作中央管理的手段。
5、描述:RARP
RARP是逆地址解析協議,作用是完成硬體地址到IP地址的對映,主要用於無盤工作站,因為給無盤工作站配置的IP地址不能儲存。工作流程:在網路中配置一臺RARP伺服器,裡面儲存著IP地址和MAC地址的對映關係,當無盤工作站啟動後,就封裝一個RARP資料包,裡面有其MAC地址,然後廣播到網路上去,當伺服器收到請求包後,就查詢對應的MAC地址的IP地址裝入響應報文中發回給請求者。因為需要廣播請求報文,因此RARP只能用於具有廣播能力的網路。
6、TCP三次握手和四次揮手的全過程:
三次握手:
第一次握手:客戶端傳送syn包(syn=x)到伺服器,並進入SYN_SEND狀態,等待伺服器確認;
第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=x+1),同時自己也傳送一個SYN包(syn=y),即SYN+ACK包,此時伺服器進入SYN_RECV狀態;
第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器傳送確認包ACK(ack=y+1),此包傳送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手。
握手過程中傳送的包裡不包含資料,三次握手完畢後,客戶端與伺服器才正式開始傳送資料。理想狀態下,TCP連線一旦建立,在通訊雙方中的任何一方主動關閉連線之前,TCP 連線都將被一直保持下去。
四次握手
與建立連線的“三次握手”類似,斷開一個TCP連線則需要“四次握手”。
第一次揮手:主動關閉方傳送一個FIN,用來關閉主動方到被動關閉方的資料傳送,也就是主動關閉方告訴被動關閉方:我已經不 會再給你發資料了(當然,在fin包之前傳送出去的資料,如果沒有收到對應的ack確認報文,主動關閉方依然會重發這些資料),但是,此時主動關閉方還可 以接受資料。
第二次揮手:被動關閉方收到FIN包後,傳送一個ACK給對方,確認序號為收到序號+1(與SYN相同,一個FIN佔用一個序號)。
第三次揮手:被動關閉方傳送一個FIN,用來關閉被動關閉方到主動關閉方的資料傳送,也就是告訴主動關閉方,我的資料也傳送完了,不會再給你發資料了。
第四次揮手:主動關閉方收到FIN後,傳送一個ACK給被動關閉方,確認序號為收到序號+1,至此,完成四次揮手。
7、在瀏覽器中輸入www.baidu.com後執行的全部過程:
(1)客戶端瀏覽器通過DNS解析到www.baidu.com的IP地址220.181.27.48,通過這個IP地址找到客戶端到伺服器的路徑。客戶端瀏覽器發起一個HTTP會話到220.161.27.48,然後通過TCP進行封裝資料包,輸入到網路層。
(2)在客戶端的傳輸層,把HTTP會話請求分成報文段,新增源和目的埠,如伺服器使用80埠監聽客戶端的請求,客戶端由系統隨機選擇一個埠如5000,與伺服器進行交換,伺服器把相應的請求返回給客戶端的5000埠。然後使用IP層的IP地址查詢目的端。
(3)客戶端的網路層不用關係應用層或者傳輸層的東西,主要做的是通過查詢路由表確定如何到達伺服器,期間可能經過多個路由器,這些都是由路由器來完成的工作,我不作過多的描述,無非就是通過查詢路由表決定通過那個路徑到達伺服器。
(4)客戶端的鏈路層,包通過鏈路層傳送到路由器,通過鄰居協議查詢給定IP地址的MAC地址,然後傳送ARP請求查詢目的地址,如果得到迴應後就可以使用ARP的請求應答交換的IP資料包現在就可以傳輸了,然後傳送IP資料包到達伺服器的地址。
8、TCP和UDP的區別?
TCP提供面向連線的、可靠的資料流傳輸,而UDP提供的是非面向連線的、不可靠的資料流傳輸。
TCP傳輸單位稱為TCP報文段,UDP傳輸單位稱為使用者資料報。
TCP注重資料安全性,UDP資料傳輸快,因為不需要連線等待,少了許多操作,但是其安全性卻一般。
9、TCP對應的協議和UDP對應的協議:
TCP對應的協議:
(1) FTP:定義了檔案傳輸協議,使用21埠。
(2) Telnet:一種用於遠端登陸的埠,使用23埠,使用者可以以自己的身份遠端連線到計算機上,可提供基於DOS模式下的通訊服務。
(3) SMTP:郵件傳送協議,用於傳送郵件。伺服器開放的是25號埠。
(4) POP3:它是和SMTP對應,POP3用於接收郵件。POP3協議所用的是110埠。
(5)HTTP:是從Web伺服器傳輸超文字到本地瀏覽器的傳送協議。
UDP對應的協議:
(1) DNS:用於域名解析服務,將域名地址轉換為IP地址。DNS用的是53號埠。
(2) SNMP:簡單網路管理協議,使用161號埠,是用來管理網路裝置的。由於網路裝置很多,無連線的服務就體現出其優勢。
(3) TFTP(Trival File Transfer Protocal),簡單檔案傳輸協議,該協議在熟知埠69上使用UDP服務。
10、DNS域名系統,簡單描述其工作原理。
當DNS客戶機需要在程式中使用名稱時,它會查詢DNS伺服器來解析該名稱。客戶機發送的每條查詢資訊包括三條資訊:包括:指定的DNS域名,指定的查詢型別,DNS域名的指定類別。基於UDP服務,埠53. 該應用一般不直接為使用者使用,而是為其他應用服務,如HTTP,SMTP等在其中需要完成主機名到IP地址的轉換。
11、面向連線和非面向連線的服務的特點是什麼?
面向連線的服務,通訊雙方在進行通訊之前,要先在雙方建立起一個完整的可以彼此溝通的通道,在通訊過程中,整個連線的情況一直可以被實時地監控和管理。
非面向連線的服務,不需要預先建立一個聯絡兩個通訊節點的連線,需要通訊的時候,傳送節點就可以往網路上傳送資訊,讓資訊自主地在網路上去傳,一般在傳輸的過程中不再加以監控。
12、TCP的三次握手過程?為什麼會採用三次握手,若採用二次握手可以嗎?
答:建立連線的過程是利用客戶伺服器模式,假設主機A為客戶端,主機B為伺服器端。
(1)TCP的三次握手過程:主機A向B傳送連線請求;主機B對收到的主機A的報文段進行確認;主機A再次對主機B的確認進行確認。
(2)採用三次握手是為了防止失效的連線請求報文段突然又傳送到主機B,因而產生錯誤。失效的連線請求報文段是指:主機A發出的連線請求沒有收到主機B的確認,於是經過一段時間後,主機A又重新向主機B傳送連線請求,且建立成功,順序完成資料傳輸。考慮這樣一種特殊情況,主機A第一次傳送的連線請求並沒有丟失,而是因為網路節點導致延遲達到主機B,主機B以為是主機A又發起的新連線,於是主機B同意連線,並向主機A發回確認,但是此時主機A根本不會理會,主機B就一直在等待主機A傳送資料,導致主機B的資源浪費。
(3)採用兩次握手不行,原因就是上面說的實效的連線請求的特殊情況。
13、
埠及對應的服務?
IP資料包的格式:
IP資料報由首部 和資料 兩部分組成。首部由固定部分和可選部分 組成。首部的固定部分有20位元組。可選部分的長度變化範圍為1——40位元組。固定部分的欄位:
TCP資料報的格式?
一個TCP報文段分為首部和資料兩部分。首部由固定部分和選項部分組成,固定部分是20位元組。TCP首部的最大長度為60。首部固定部分欄位:
TCP資料報的格式?
使用者資料報UDP由首部和資料部分組成。首部只有8個位元組,由4個欄位組成,每個欄位都是兩個位元組。
UDP的12位元組偽首部:
乙太網MAC幀格式?
14、瞭解交換機、路由器、閘道器的概念,並知道各自的用途:
1)交換機
在計算機網路系統中,交換機是針對共享工作模式的弱點而推出的。交換機擁有一條高頻寬的背部匯流排和內部交換矩陣。交換機的所有的埠都掛接在這條背 部總線上,當控制電路收到資料包以後,處理埠會查詢記憶體中的地址對照表以確定目的MAC(網絡卡的硬體地址)的NIC(網絡卡)掛接在哪個埠上,通過內部 交換矩陣迅速將資料包傳送到目的埠。目的MAC若不存在,交換機才廣播到所有的埠,接收埠迴應後交換機會“學習”新的地址,並把它新增入內部地址表 中。
交換機工作於OSI參考模型的第二層,即資料鏈路層。交換機內部的CPU會在每個埠成功連線時,通過ARP協議學習它的MAC地址,儲存成一張 ARP表。在今後的通訊中,發往該MAC地址的資料包將僅送往其對應的埠,而不是所有的埠。因此,交換機可用於劃分資料鏈路層廣播,即衝突域;但它不 能劃分網路層廣播,即廣播域。
交換機被廣泛應用於二層網路交換,俗稱“二層交換機”。
交換機的種類有:二層交換機、三層交換機、四層交換機、七層交換機分別工作在OSI七層模型中的第二層、第三層、第四層盒第七層,並因此而得名。
2)路由器
路由器(Router)是一種計算機網路裝置,提供了路由與轉送兩種重要機制,可以決定資料包從來源端到目的端所經過 的路由路徑(host到host之間的傳輸路徑),這個過程稱為路由;將路由器輸入端的資料包移送至適當的路由器輸出端(在路由器內部進行),這稱為轉 送。路由工作在OSI模型的第三層——即網路層,例如網際協議。
路由器的一個作用是連通不同的網路,另一個作用是選擇資訊傳送的線路。 路由器與交換器的差別,路由器是屬於OSI第三層的產品,交換器是OSI第二層的產品(這裡特指二層交換機)。
3)閘道器
閘道器(Gateway),閘道器顧名思義就是連線兩個網路的裝置,區別於路由器(由於歷史的原因,許多有關TCP/IP 的文獻曾經把網路層使用的路由器(Router)稱為閘道器,在今天很多區域網採用都是路由來接入網路,因此現在通常指的閘道器就是路由器的IP),經常在家 庭中或者小型企業網路中使用,用於連線區域網和Internet。 閘道器也經常指把一種協議轉成另一種協議的裝置,比如語音閘道器。
在傳統TCP/IP術語中,網路裝置只分成兩種,一種為閘道器(gateway),另一種為主機(host)。閘道器能在網路間轉遞資料包,但主機不能 轉送資料包。在主機(又稱終端系統,end system)中,資料包需經過TCP/IP四層協議處理,但是在閘道器(又稱中介系 統,intermediate system)只需要到達網際層(Internet layer),決定路徑之後就可以轉送。在當時,閘道器 (gateway)與路由器(router)還沒有區別。
在現代網路術語中,閘道器(gateway)與路由器(router)的定義不同。閘道器(gateway)能在不同協議間移動資料,而路由器(router)是在不同網路間移動資料,相當於傳統所說的IP閘道器(IP gateway)。
閘道器是連線兩個網路的裝置,對於語音閘道器來說,他可以連線PSTN網路和乙太網,這就相當於VOIP,把不同電話中的模擬訊號通過閘道器而轉換成數字訊號,而且加入協議再去傳輸。在到了接收端的時候再通過閘道器還原成模擬的電話訊號,最後才能在電話機上聽到。
對於乙太網中的閘道器只能轉發三層以上資料包,這一點和路由是一樣的。而不同的是閘道器中並沒有路由表,他只能按照預先設定的不同網段來進行轉發。閘道器最重要的一點就是埠對映,子網內使用者在外網看來只是外網的IP地址對應著不同的埠,這樣看來就會保護子網內的使用者。
1、TCP為什麼需要3次握手,4次斷開?
“三次握手”的目的是“為了防止已失效的連線請求報文段突然又傳送到了服務端,因而產生錯誤”。 client發出的第一個連線請求報文段並沒有丟失,而是在某個網路結點長時間的滯留了,以致延誤到連線釋放以後的某個時間才到達server。本來這是一個早已失效的報文段。但server收到此失效的連線請求報文段後,就誤認為是client再次發出的一個新的連線請求。於是就向client發出確認報文段,同意建立連線。假設不採用“三次握手”,那麼只要server發出確認,新的連線就建立了。由於現在client並沒有發出建立連線的請求,因此不會理睬server的確認,也不會向server傳送資料。但server卻以為新的運輸連線已經建立,並一直等待client發來資料。這樣,server的很多資源就白白浪費掉了。採用“三次握手”的辦法可以防止上述現象發生。例如剛才那種情況,client不會向server的確認發出確認。server由於收不到確認,就知道client並沒有要求建立連線。”。主要目的防止server端一直等待,浪費資源。
為什麼4次斷開?
因為TCP有個半關閉狀態,假設A.B要釋放連線,那麼A傳送一個釋放連線報文給B,B收到後傳送確認,這個時候A不發資料,但是B如果發資料A還是要接受,這叫半關閉。然後B還要發給A連線釋放報文,然後A發確認,所以是4次。
在tcp連線握手時為何ACK是和SYN一起傳送,這裡ACK卻沒有和FIN一起傳送呢。原因是因為tcp是全雙工模式,接收到FIN時意味將沒有資料再發來,但是還是可以繼續傳送資料。
2、TCP和UDP有什麼區別?
TCP是傳輸控制協議,提供的是面向連線、可靠的位元組流服務。通訊雙方彼此交換資料前,必須先通過三次握手協議建立連線,之後才能傳輸資料。TCP提供超時重傳,丟棄重複資料,檢驗資料,流量控制等功能,保證資料能從一端傳到另一端。UDP是使用者資料報協議,是一個簡單的面向無連線的協議。UDP不提供可靠的服務。在資料資料前不用建立連線故而傳輸速度很快。UDP主要使用者流媒體傳輸,IP電話等對資料可靠性要求不是很高的場合。
3、交換機與路由器有什麼區別?
①工作所處的OSI層次不一樣,交換機工作在OSI第二層資料鏈路層,路由器工作在OSI第三層網路層
②定址方式不同:交換機根據MAC地址定址,路由器根據IP地址定址
③轉發速不同:交換機的轉發速度快,路由器轉發速度相對較慢。
3、TCP/IP的流量控制?
利用滑動視窗實現流量控制,如果傳送方把資料傳送得過快,接收方可能會來不及接收,這就會造成資料的丟失。所謂流量控制就是讓傳送方的傳送速率不要太快,要讓接收方來得及接收。
TCP為每一個連線設有一個持續計時器(persistence timer)。只要TCP連線的一方收到對方的零視窗通知,就啟動持續計時器。若持續計時器設定的時間到期,就傳送一個零視窗控測報文段(攜1位元組的資料),那麼收到這個報文段的一方就重新設定持續計時器。
4、TCP擁塞控制?
防止過多的資料注入到網路中,這樣可以使網路中的路由器或鏈路不致過載。擁塞控制所要做的都有一個前提:網路能夠承受現有的網路負荷。擁塞控制是一個全域性性的過程,涉及到所有的主機、路由器,以及與降低網路傳輸效能有關的所有因素。
擁塞控制代價:需要獲得網路內部流量分佈的資訊。在實施擁塞控制之前,還需要在結點之間交換資訊和各種命令,以便選擇控制的策略和實施控制。這樣就產生了額外的開銷。擁塞控制還需要將一些資源分配給各個使用者單獨使用,使得網路資源不能更好地實現共享。
幾種擁塞控制方法:
慢開始(slow-start )、擁塞避免(congestion avoidance )、快重傳( fastretransmit )和快恢復( fastrecovery )。
慢開始和擁塞避免
傳送方維持一個擁塞視窗cwnd ( congestion window )的狀態變數。擁塞視窗的大小取決於網路的擁塞程度,並且動態地在變化。傳送方讓自己的傳送視窗等於擁塞視窗。
傳送方控制擁塞視窗的原則是:只要網路沒有出現擁塞,擁塞視窗就再增大一些,以便把更多的分組傳送出去。但只要網路出現擁塞,擁塞視窗就減小一些,以減少注入到網路中的分組數。
慢開始演算法:當主機開始傳送資料時,如果立即把大量資料位元組注入到網路,那麼就有可能引起網路擁塞,因為現在並不清楚網路的負荷情況。因此,較好的方法是先探測一下,即由小到大逐漸增大發送視窗,也就是說,由小到大逐漸增大擁塞視窗數值。通常在剛剛開始傳送報文段時,先把擁塞視窗 cwnd 設定為一個最大報文段MSS的數值。而在每收到一個對新的報文段的確認後,把擁塞視窗增加至多一個MSS的數值。用這樣的方法逐步增大發送方的擁塞視窗 cwnd ,可以使分組注入到網路的速率更加合理。
每經過一個傳輸輪次,擁塞視窗 cwnd 就加倍。一個傳輸輪次所經歷的時間其實就是往返時間RTT。不過“傳輸輪次”更加強調:把擁塞視窗cwnd所允許傳送的報文段都連續傳送出去,並收到了對已傳送的最後一個位元組的確認。
另,慢開始的“慢”並不是指cwnd的增長速率慢,而是指在TCP開始傳送報文段時先設定cwnd=1,使得傳送方在開始時只發送一個報文段(目的是試探一下網路的擁塞情況),然後再逐漸增大cwnd。
為了防止擁塞視窗cwnd增長過大引起網路擁塞,還需要設定一個慢開始門限ssthresh狀態變數(如何設定ssthresh)。慢開始門限ssthresh的用法如下:
當 cwnd < ssthresh 時,使用上述的慢開始演算法。
當 cwnd > ssthresh 時,停止使用慢開始演算法而改用擁塞避免演算法。
當 cwnd = ssthresh 時,既可使用慢開始演算法,也可使用擁塞控制避免演算法。
擁塞避免演算法:讓擁塞視窗cwnd緩慢地增大,即每經過一個往返時間RTT就把傳送方的擁塞視窗cwnd加1,而不是加倍。這樣擁塞視窗cwnd按線性規律緩慢增長,比慢開始演算法的擁塞視窗增長速率緩慢得多。
無論在慢開始階段還是在擁塞避免階段,只要傳送方判斷網路出現擁塞(其根據就是沒有收到確認),就要把慢開始門限ssthresh設定為出現擁塞時的傳送方視窗值的一半(但不能小於2)。然後把擁塞視窗cwnd重新設定為1,執行慢開始演算法。這樣做的目的就是要迅速減少主機發送到網路中的分組數,使得發生擁塞的路由器有足夠時間把佇列中積壓的分組處理完畢。過程圖如下:
快速重傳:
那就是收到3個相同的ACK。TCP在收到亂序到達包時就會立即傳送ACK,TCP利用3個相同的ACK來判定資料包的丟失,此時進行快速重傳,快速重傳做的事情有:
-
把ssthresh設定為cwnd的一半
-
把cwnd再設定為ssthresh的值(具體實現有些為ssthresh+3)
3.重新進入擁塞避免階段。
快速恢復:
-
當收到3個重複ACK時,把ssthresh設定為cwnd的一半,把cwnd設定為ssthresh的值加3,然後重傳丟失的報文段,加3的原因是因為收到3
-
再收到重複的ACK時,擁塞視窗增加1。
-
收到新的資料包的ACK時,把cwnd設定為第一步中的ssthresh的值。原因是因為該ACK確認了新的資料,說明從重複ACK時的資料都已收到,該恢復過程已經結束,可以回到恢復之前的狀態了,也即再次進入擁塞避免狀態。
5、ICMP協議?
ICMP是InternetControl Message Protocol,因特網控制報文協議。它是TCP/IP協議族的一個子協議,用於在IP主機、路由器之間傳遞控制訊息。控制訊息是指網路通不通、主機是否可達、路由器是否可用等網路本身的訊息。這些控制訊息雖然並不傳輸使用者資料,但是對於使用者資料的傳遞起著重要的作用。ICMP報文有兩種:差錯報告報文和詢問報文。
6、DHCP協議?
動態主機配置協議,是一種讓系統得以連線到網路上,並獲取所需要的配置引數手段。通常被應用在大型的區域網絡環境中,主要作用是集中的管理、分配IP地址,使網路環境中的主機動態的獲得IP地址、Gateway地址、DNS伺服器地址等資訊,並能夠提升地址的使用率。
7、網橋的作用?
網橋是一個區域網與另一個區域網之間建立連線的橋樑
8、資料鏈路層協議可能提供的服務?
成幀、鏈路訪問、透明傳輸、可靠交付、流量控制、差錯檢測、差錯糾正、半雙工和全雙工。最重要的是幀定界(成幀)、透明傳輸以及差錯檢測。
9、網路介面卡(網絡卡)的功能?
(1)進行序列/並行轉換。
(2)對資料進行快取。
(3)在計算機的作業系統安裝裝置驅動程式。
(4)實現乙太網協議。
11、私有(保留)地址?
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
12、TTL是什麼?作用是什麼?哪些工具會用到它(ping traceroute ifconfig netstat)?
TTL是指生存時間,簡單來說,它表示了資料包在網路中的時間,經過一個路由器後TTL就減一,這樣TTL最終會減為0,當TTL為0時,則將資料包丟棄,這樣也就是因為兩個路由器之間可能形成環,如果沒有TTL的限制,則資料包將會在這個環上一直死轉,由於有了TTL,最終TTL為0後,則將資料包丟棄。ping傳送資料包裡面有TTL,但是並非是必須的,即是沒有TTL也是能正常工作的,traceroute正是因為有了TTL才能正常工作,ifconfig是用來配置網絡卡資訊的,不需要TTL,netstat是用來顯示路由表的,也是不需要TTL的。
13、路由表是做什麼用的?在Linux環境中怎麼配置一條預設路由?
路由表是用來決定如何將一個數據包從一個子網傳送到另一個子網的,換句話說就是用來決定從一個網絡卡接收到的包應該送到哪一個網絡卡上去。路由表的每一行至少有目標網路號、子網掩碼、到這個子網應該使用的網絡卡這三條資訊。當路由器從一個網絡卡接收到一個包時,它掃描路由表的每一行,用裡面的子網掩碼與資料包中的目標IP地址做邏輯與運算(&)找出目標網路號。如果得出的結果網路號與這一行的網路號相同,就將這條路由表六下來作為備用路由。如果已經有備用路由了,就載這兩條路由裡將網路號最長的留下來,另一條丟掉(這是用無分類編址CIDR的情況才是匹配網路號最長的,其他的情況是找到第一條匹配的行時就可以進行轉發了)。如此接著掃描下一行直到結束。如果掃描結束仍沒有找到任何路由,就用預設路由。確定路由後,直接將資料包送到對應的網絡卡上去。在具體的實現中,路由表可能包含更多的資訊為選路由演算法的細節所用。
在Linux上可以用“route add default gw<預設路由器 IP>”命令配置一條預設路由。
14、RARP?
逆地址解析協議,作用是完成硬體地址到IP地址的對映,主要用於無盤工作站,因為給無盤工作站配置的IP地址不能儲存。
15、運輸層協議與網路層協議的區別?
網路層協議負責的是提供主機間的邏輯通訊
運輸層協議負責的是提供程序間的邏輯通訊
16、說說靜態路由和動態路由有什麼區別。
靜態路由是由管理員手工配置的,適合比較簡單的網路或需要做路由特殊控制。而動態路由則是由動態路由協議自動維護的,不需人工干預,適合比較複雜大型的網路。
路由器能夠自動地建立自己的路由表,並且能夠根據實際實際情況的變化適時地進行調整。動態路由機制的運作依賴路由器的兩個基本功能:對路由表的維護;路由器之間適時的路由資訊交換。
17、HTTP的長連線和短連線?
HTTP的長連線和短連線本質上是TCP長連線和短連線。HTTP屬於應用層協議。
短連線:瀏覽器和伺服器每進行一次HTTP操作,就建立一次連線,但任務結束就中斷連線。
長連線:當一個網頁開啟完成後,客戶端和伺服器之間用於傳輸HTTP資料的 TCP連線不會關閉,如果客戶端再次訪問這個伺服器上的網頁,會繼續使用這一條已經建立的連線。Keep-Alive不會永久保持連線,它有一個保持時間,可以在不同的伺服器軟體(如Apache)中設定這個時間。實現長連線要客戶端和服務端都支援長連線。
TCP短連線: client向server發起連線請求,server接到請求,然後雙方建立連線。client向server傳送訊息,server迴應client,然後一次讀寫就完成了,這時候雙方任何一個都可以發起close操作,不過一般都是client先發起 close操作.短連線一般只會在 client/server間傳遞一次讀寫操作
TCP長連線: client向server發起連線,server接受client連線,雙方建立連線。Client與server完成一次讀寫之後,它們之間的連線並不會主動關閉,後續的讀寫操作會繼續使用這個連線。
18、 IO中同步與非同步,阻塞與非阻塞區別
同步和非同步關注的是訊息通訊機制 (synchronous communication/asynchronous communication)
所謂同步,就是在發出一個呼叫時,在沒有得到結果之前,該呼叫就不返回。但是一旦呼叫返回,就得到返回值了。
換句話說,就是由呼叫者主動等待這個呼叫的結果。
而非同步則是相反,呼叫在發出之後,這個呼叫就直接返回了,所以沒有返回結果。換句話說,當一個非同步過程呼叫發出後,呼叫者不會立刻得到結果。而是在呼叫發出後,被呼叫者通過狀態、通知來通知呼叫者,或通過回撥函式處理這個呼叫。
阻塞和非阻塞關注的是程式在等待呼叫結果(訊息,返回值)時的狀態。
阻塞呼叫是指呼叫結果返回之前,當前執行緒會被掛起。函式只有在得到結果之後才會返回。
非阻塞:不能立刻得到結果之前,該函式不會阻塞當前執行緒,而會立刻返回。
19、ip地址分段
A類網路的IP地址範圍為1.0.0.1-127.255.255.254;
B類網路的IP地址範圍為:128.1.0.1-191.255.255.254;
C類網路的IP地址範圍為:192.0.1.1-223.255.255.254、
20、為什麼TIME_WAIT狀態還需要等2*MSL(Max SegmentLifetime,最大分段生存期)秒之後才能返回到CLOSED狀態呢?
因為雖然雙方都同意關閉連線了,而且握手的4個報文也都發送完畢,按理可以直接回到CLOSED狀態(就好比從SYN_SENT狀態到ESTABLISH狀態那樣),但是我們必須假想網路是不可靠的,你無法保證你最後傳送的ACK報文一定會被對方收到,就是說對方處於LAST_ACK狀態下的SOCKET可能會因為超時未收到ACK報文,而重發FIN報文,所以這個TIME_WAIT狀態的作用就是用來重發可能丟失的ACK報文。
1、GET 和 POST 的區別:
(GET)請注意,查詢字串(名稱/值對)是在 GET 請求的 URL 中傳送的:/test/demo_form.asp?name1=value1&name2=value2
GET 請求可被快取
GET 請求保留在瀏覽器歷史記錄中
GET 請求可被收藏為書籤
GET 請求不應在處理敏感資料時使用
GET 請求有長度限制
GET 請求只應當用於取回資料POST 方法
(POST)請注意,查詢字串(名稱/值對)是在 POST 請求的 HTTP 訊息主體中傳送的:POST /test/demo_form.asp HTTP/1.1Host: w3schools.comname1=value1&name2=value2
POST 請求不會被快取
POST 請求不會保留在瀏覽器歷史記錄中
POST 不能被收藏為書籤
POST 請求對資料長度沒有要求
2、dns使用的協議:
既使用TCP又使用UDP:
首先了解一下TCP與UDP傳送位元組的長度限制:
UDP報文的最大長度為512位元組,而TCP則允許報文長度超過512位元組。當DNS查詢超過512位元組時,協議的TC標誌出現刪除標誌,這時則使用TCP傳送。通常傳統的UDP報文一般不會大於512位元組。
區域傳送時使用TCP,主要有一下兩點考慮:
輔域名伺服器會定時(一般時3小時)向主域名伺服器進行查詢以便了解資料是否有變動。如有變動,則會執行一次區域傳送,進行資料同步。區域傳送將使用TCP而不是UDP,因為資料同步傳送的資料量比一個請求和應答的資料量要多得多。
TCP是一種可靠的連線,保證了資料的準確性。
域名解析時使用UDP協議:
客戶端向DNS伺服器查詢域名,一般返回的內容都不超過512位元組,用UDP傳輸即可。不用經過TCP三次握手,這樣DNS伺服器負載更低,響應更快。雖然從理論上說,客戶端也可以指定向DNS伺服器查詢的時候使用TCP,但事實上,很多DNS伺服器進行配置的時候,僅支援UDP查詢包。
3、冪等:
一個冪等操作的特點是其任意多次執行所產生的影響均與一次執行的影響相同。冪等函式,或冪等方法,是指可以使用相同引數重複執行,並能獲得相同結果的函式。這些函式不會影響系統狀態,也不用擔心重複執行會對系統造成改變。例如,“getUsername()和setTrue()”函式就是一個冪等函式.
4、Cookies和session區別:
Cookies是一種能夠讓網站伺服器把少量資料儲存到客戶端的硬碟或記憶體,或是從客戶端的硬碟讀取資料的一種技術。Cookies是當你瀏覽某網站時,由Web伺服器置於你硬碟上的一個非常小的文字檔案,它可以記錄你的使用者ID、密碼、瀏覽過的網頁、停留的時間等資訊。session: 當用戶請求來自應用程式的 Web 頁時,如果該使用者還沒有會話,則 Web 伺服器將自動建立一個 Session 物件。當會話過期或被放棄後,伺服器將終止該會話。cookie機制:採用的是在客戶端保持狀態的方案,而session機制採用的是在服務端保持狀態的方案。同時我們看到由於伺服器端保持狀態的方案在客戶端也需要儲存一個標識,所以session機制可能需要藉助cookie機制來達到儲存標識的目的。
Session是伺服器用來跟蹤使用者的一種手段,每個Session都有一個唯一標識:session ID。當伺服器建立了Session時,給客戶端傳送的響應報文包含了Set-cookie欄位,其中有一個名為sid的鍵值對,這個鍵值Session ID。客戶端收到後就把Cookie儲存瀏覽器,並且之後傳送的請求報表都包含SessionID。HTTP就是通過Session和Cookie這兩個傳送一起合作來實現跟蹤使用者狀態,Session用於服務端,Cookie用於客戶端
5、TCP粘包和拆包產生的原因:
應用程式寫入資料的位元組大小大於套接字傳送緩衝區的大小
進行MSS大小的TCP分段。MSS是最大報文段長度的縮寫。MSS是TCP報文段中的資料欄位的最大長度。資料欄位加上TCP首部才等於整個的TCP報文段。所以MSS並不是TCP報文段的最大長度,而是:MSS=TCP報文段長度-TCP首部長度
乙太網的payload大於MTU進行IP分片。MTU指:一種通訊協議的某一層上面所能通過的最大資料包大小。如果IP層有一個數據包要傳,而且資料的長度比鏈路層的MTU大,那麼IP層就會進行分片,把資料包分成託乾片,讓每一片都不超過MTU。注意,IP分片可以發生在原始傳送端主機上,也可以發生在中間路由器上。
6、TCP粘包和拆包的解決策略:
訊息定長。例如100位元組。
在包尾部增加回車或者空格符等特殊字元進行分割,典型的如FTP協議
將訊息分為訊息頭和訊息尾。
其它複雜的協議,如RTMP協議等。
7、四次揮手的相關狀態:
TIME_WAIT的狀態就是主動斷開的一方(這裡是客戶端),傳送完最後一次ACK之後進入的狀態。並且持續時間還挺長的。客戶端TIME_WAIT持續2倍MSL時長,在linux體系中大概是60s,轉換成CLOSE狀態
TIME_WAIT
TIME_WAIT 是主動關閉連結時形成的,等待2MSL時間,約4分鐘。主要是防止最後一個ACK丟失。 由於TIME_WAIT 的時間會非常長,因此server端應儘量減少主動關閉連線
CLOSE_WAIT
CLOSE_WAIT是被動關閉連線是形成的。根據TCP狀態機,伺服器端收到客戶端傳送的FIN,則按照TCP實現傳送ACK,因此進入CLOSE_WAIT狀態。但如果伺服器端不執行close(),就不能由CLOSE_WAIT遷移到LAST_ACK,則系統中會存在很多CLOSE_WAIT狀態的連線。此時,可能是系統忙於處理讀、寫操作,而未將已收到FIN的連線,進行close。此時,recv/read已收到FIN的連線socket,會返回0。
為什麼需要 TIME_WAIT 狀態?
假設最終的ACK丟失,server將重發FIN,client必須維護TCP狀態資訊以便可以重發最終的ACK,否則會發送RST,結果server認為發生錯誤。TCP實現必須可靠地終止連線的兩個方向(全雙工關閉),client必須進入 TIME_WAIT 狀態,因為client可能面 臨重發最終ACK的情形。
為什麼 TIME_WAIT 狀態需要保持 2MSL 這麼長的時間?
如果 TIME_WAIT 狀態保持時間不足夠長(比如小於2MSL),第一個連線就正常終止了。第二個擁有相同相關五元組的連接出現,而第一個連線的重複報文到達,干擾了第二個連線。TCP實現必須防止某個連線的重複報文在連線終止後出現,所以讓TIME_WAIT狀態保持時間足夠長(2MSL),連線相應方向上的TCP報文要麼完全響應完畢,要麼被 丟棄。建立第二個連線的時候,不會混淆。
TIME_WAIT 和CLOSE_WAIT狀態socket過多
如果伺服器出了異常,百分之八九十都是下面兩種情況:
1.伺服器保持了大量TIME_WAIT狀態
2.伺服器保持了大量CLOSE_WAIT狀態,簡單來說CLOSE_WAIT數目過大是由於被動關閉連線處理不當導致的。
8、一次完整的HTTP請求過程:
域名解析 --> 發起TCP的3次握手 --> 建立TCP連線後發起http請求 --> 伺服器響應http請求,瀏覽器得到html程式碼 --> 瀏覽器解析html程式碼,並請求html程式碼中的資源(如js、css、圖片等) --> 瀏覽器對頁面進行渲染呈現給使用者
9、講一下長連線
一、基於http協議的長連線
在HTTP1.0和HTTP1.1協議中都有對長連線的支援。其中HTTP1.0需要在request中增加”Connection: keep-alive“ header才能夠支援,而HTTP1.1預設支援。
http1.0請求與服務端的互動過程:
客戶端發出帶有包含一個header:”Connection: keep-alive“的請求
服務端接收到這個請求後,根據http1.0和”Connection: keep-alive“判斷出這是一個長連線,就會在response的header中也增加”Connection: keep-alive“,同是不會關閉已建立的tcp連線.
客戶端收到服務端的response後,發現其中包含”Connection: keep-alive“,就認為是一個長連線,不關閉這個連線。並用該連線再發送request.轉到a)
二、發心跳包。每隔幾秒就發一個數據包過去
10、TCP如何保證可靠傳輸?
三次握手。
將資料截斷為合理的長度。應用資料被分割成 TCP 認為最適合傳送的資料塊(按位元組編號,合理分片)
超時重發。當 TCP 發出一個段後,它啟動一個定時器,如果不能及時收到一個確認就重發
對於收到的請求,給出確認響應
校驗出包有錯,丟棄報文段,不給出響應
對失序資料進行重新排序,然後才交給應用層
對於重複資料 , 能夠丟棄重複資料
流量控制。TCP 連線的每一方都有固定大小的緩衝空間。TCP 的接收端只允許另一端傳送接收端緩衝區所能接納的資料。這將防止較快主機致使較慢主機的緩衝區溢位。
擁塞控制。當網路擁塞時,減少資料的傳送。
11、詳細介紹http
HTTP協議是Hyper Text Transfer Protocol(超文字傳輸協議)的縮寫,是用於從全球資訊網(WWW:World Wide Web )伺服器傳輸超文字到本地瀏覽器的傳送協議。
特點
簡單快速:客戶向伺服器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與伺服器聯絡的型別不同。由於HTTP協議簡單,使得HTTP伺服器的程式規模小,因而通訊速度很快。
靈活:HTTP允許傳輸任意型別的資料物件。正在傳輸的型別由Content-Type加以標記。
無連線:無連線的含義是限制每次連線只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線。採用這種方式可以節省傳輸時間。
無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的資訊,則它必須重傳,這樣可能導致每次連線傳送的資料量增大。另一方面,在伺服器不需要先前資訊時它的應答就較快。
支援B/S及C/S模式。
請求訊息Request:
請求行,用來說明請求型別,要訪問的資源以及所使用的HTTP版本.
請求頭部,緊接著請求行(即第一行)之後的部分,用來說明伺服器要使用的附加資訊從第二行起為請求頭部,HOST將指出請求的目的地.User-Agent,伺服器端和客戶端指令碼都能訪問它,它是瀏覽器型別檢測邏輯的重要基礎.該資訊由你的瀏覽器來定義,並且在每個請求中自動傳送等等
空行,請求頭部後面的空行是必須的
請求資料也叫主體,可以新增任意的其他資料。
響應訊息Response:
狀態行,由HTTP協議版本號, 狀態碼, 狀態訊息 三部分組成。
訊息報頭,用來說明客戶端要使用的一些附加資訊
空行,訊息報頭後面的空行是必須的
響應正文,伺服器返回給客戶端的文字資訊。
狀態碼:
200 OK //客戶端請求成功
301 Moved Permanently //永久重定向,使用域名跳轉
302 Found // 臨時重定向,未登陸的使用者訪問使用者中心重定向到登入頁面
400 Bad Request //客戶端請求有語法錯誤,不能被伺服器所理解
401 Unauthorized //請求未經授權,這個狀態程式碼必須和WWW-Authenticate報頭域一起使用
403 Forbidden //伺服器收到請求,但是拒絕提供服務
404 Not Found //請求資源不存在,eg:輸入了錯誤的URL
500 Internal Server Error //伺服器發生不可預期的錯誤
503 Server Unavailable //伺服器當前不能處理客戶端的請求,一段時間後可能恢復正常
http的方法:
get:客戶端向服務端發起請求,獲得資源。請求獲得URL處所在的資源。
post:向服務端提交新的請求欄位。請求URL的資源後新增新的資料。
head:請求獲取URL資源的響應報告,即獲得URL資源的頭部
patch:請求區域性修改URL所在資源的資料項
put:請求修改URL所在資源的資料元素。
delete:請求刪除url資源的資料
12、URI和URL的區別:
URI,是uniform resource identifier,統一資源識別符號,用來唯一的標識一個資源。Web上可用的每種資源如HTML文件、影象、視訊片段、程式等都是一個來URI來定位的
URI一般由三部組成:
訪問資源的命名機制
存放資源的主機名
資源自身的名稱,由路徑表示,著重強調於資源。
URL是uniform resource locator,統一資源定位器,它是一種具體的URI,即URL可以用來標識一個資源,而且還指明瞭如何locate這個資源。URL是Internet上用來描述資訊資源的字串,主要用在各種WWW客戶程式和伺服器程式上,特別是著名的Mosaic。採用URL可以用一種統一的格式來描述各種資訊資源,包括檔案、伺服器的地址和目錄等。
URL一般由三部組成:
協議(或稱為服務方式)
存有該資源的主機IP地址(有時也包括埠號)
主機資源的具體地址。如目錄和檔名等
13、HTTPS和HTTP的區別:
https協議需要到CA申請證書,一般免費證書很少,需要交費。
http是超文字傳輸協議,資訊是明文傳輸;https 則是具有安全性的ssl加密傳輸協 議。
http和https使用的是完全不同的連線方式,用的埠也不一樣,前者是80,後者是443。
http的連線很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,比http協議安全。
http預設使用80埠,https預設使用443埠
14、https是如何保證資料傳輸的安全?
https實際就是在TCP層與http層之間加入了SSL/TLS來為上層的安全保駕護航,主要用到對稱加密、非對稱加密、證書,等技術進行客戶端與伺服器的資料加密傳輸,最終達到保證整個通訊的安全性。
SSL/TLS協議作用:
認證使用者和伺服器,確保資料傳送到正確的客戶機和伺服器;
加密資料以防止資料中途被竊取;
維護資料的完整性,確保資料在傳輸過程中不被改變。