【筆試】計算機網路知識點整理
1. OSI與TCP/IP各層的結構與功能,都有哪些協議。
OSI模型
OSI(Open System Interconnection,開放系統互連)七層網路模型稱為開放式系統互聯參考模型 ,是一個邏輯上的定義,一個規範,它把網路從邏輯上分為了7層。每一層都有相關、相對應的物理裝置,比如路由器,交換機。
OSI七層模型是一種框架性的設計方法,建立七層模型的主要目的是為解決異種網路互連時所遇到的相容性問題,其最主要的功能就是幫助不同型別的主機實現資料傳輸。它的最大優點是將服務、介面和協議這三個概念明確地區分開來,通過七個層次化的結構模型使不同的系統不同的網路之間實現可靠的通訊。
OSI是Open System Interconnect的縮寫,意為開放式系統互聯。
OSI七層參考模型的各個層次的劃分遵循下列原則:
1、同一層中的各網路節點都有相同的層次結構,具有同樣的功能。
2、同一節點內相鄰層之間通過介面(可以是邏輯介面)進行通訊。
3、七層結構中的每一層使用下一層提供的服務,並且向其上層提供服務。
4、不同節點的同等層按照協議實現對等層之間的通訊。
各層簡介:
【1】物理層:主要定義物理裝置標準,如網線的介面型別、光纖的介面型別、各種傳輸介質的傳輸速率等。它的主要作用是傳輸位元流(就是由1、0轉化為電流強弱來進行傳輸,到達目的地後在轉化為1、0,也就是我們常說的數模轉換與模數轉換),這一層的資料叫做位元。
【2】資料鏈路層:負責物理傳輸的準備。在物理層提供位元流服務的基礎上,建立相鄰結點之間的資料鏈路,通過差錯控制提供資料幀(Frame)在通道上無差錯的傳輸,並進行各電路上的動作系列。資料鏈路層在不可靠的物理介質上提供可靠的傳輸。該層的作用包括:實體地址定址、資料的成幀、流量控制、資料的檢錯、重發等。在這一層,資料的單位稱為幀(frame)。資料鏈路層協議的代表包括:SDLC、HDLC、PPP、STP、幀中繼等。MAC地址和交換機在這一層。
【3】網路層:在 計算機網路中進行通訊的兩個計算機之間可能會經過很多個資料鏈路,也可能還要經過很多通訊子網。網路層的任務就是選擇合適的網間路由和交換結點, 確保資料及時傳送。網路層將資料鏈路層提供的幀組成資料包,包中封裝有網路層包頭,其中含有邏輯地址資訊- -源站點和目的站點地址的網路地址。如 果你在談論一個IP地址,那麼你是在處理第3層的問題,這是“資料包”問題,而不是第2層的“幀”。IP是第3層問題的一部分,此外還有一些路由協議和地 址解析協議(ARP)。有關路由的一切事情都在這第3層處理。地址解析和路由是3層的重要目的。網路層還可以實現擁塞控制、網際互連等功能。在這一層,資料的單位稱為資料包(packet)。網路層協議的代表包括:IP、IPX、RIP、OSPF等。負責管理網路地址、定位裝置、決定路由,路由器工作在這層。包括使用者資料包,路由更新包。
【4】傳輸層:OSI中最重要的一層,負責分割組合資料,實現端到端的邏輯連線。第4層的資料單元也稱作資料包(packets)。但是,當你談論TCP等具體的協議時又有特殊的叫法,TCP的資料單元稱為段 (segments)而UDP協議的資料單元稱為“資料包(datagrams)”。這個層負責獲取全部資訊,因此,它必須跟蹤資料單元碎片、亂序到達的 資料包和其它在傳輸過程中可能發生的危險。第4層為上層提供端到端(終端使用者到終端使用者)的透明的、可靠的資料傳輸服務。所為透明的傳輸是指在通訊過程中 傳輸層對上層遮蔽了通訊傳輸系統的具體細節。傳輸層協議的代表包括:TCP、UDP、SPX等。
【5】會話層:負責在網路中兩個節點間建立、維護、控制會話,區分不同的會話,以及提供單工、半雙工、全雙工三種通訊模式服務。通過傳輸層(埠號:傳輸埠與接收埠)建立資料傳輸的通路,主要在你的系統之間發起會話或者接受會話請求(裝置之間需要互相認識可以是IP也可以是MAC或者是主機名)。NFS、X Windows、RPC都在這一層。
【6】表示層:可確保一個系統的應用層所傳送的資訊可以被另一個系統的應用層讀取。例如,PC程式與另一臺計算機進行通訊,其中一臺計算機使用擴充套件二一十進位制交換碼(EBCDIC),而另一臺則使用美國資訊交換標準碼(ASCII)來表示相同的字元。如有必要,表示層會通過使用一種通格式來實現多種資料格式之間的轉換。這一層主要解決資訊的語法表示問題。它將欲交換的資料從適合於某一使用者的抽象語法,轉換為適合於OSI系統內部使用的傳送語法。即提供格式化的表示和轉換資料服務。資料的壓縮和解壓縮, 加密和解密等工作都由表示層負責。
【7】應用層: 是最靠近使用者的OSI層,這一層為使用者的作業系統或應用程式(例如電子郵件、檔案傳輸和終端模擬)提供網路服務。。應用層協議的代表包括:Telnet、FTP、HTTP、SNMP等。
TCP/IP模型:
是最基本的Internet協議,有網路層的IP和傳輸層的TCP構成。指TCP/IP協議簇。
分為四層,每一層都呼叫他的下一層所提供的網路來實現自己的需求。
1、網路介面層負責底層的傳輸,常見協議有Ethernet 802.3 、Token Ring 802.5、X.25等。
2、網路層負責不同計算機之間的通訊
3、傳輸層負責應用程式間的通訊,主要包括格式化資訊流,提供可靠地傳輸等。
4、應用層傾向於向使用者提供服務,如電子郵件,遠端登入等。
屬於TCP/IP協議簇的所有協議都位於該模型的上面三層。
TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)協議屬於傳輸層協議。其中TCP提供IP環境下的資料可靠傳輸,它提供的服務包括資料流傳送、可靠性、有效流控、全雙工操作和多路復 用。通過面向連線、端到端和可靠的資料包傳送。通俗說,它是事先為所傳送的資料開闢出連線好的通道,然後再進行資料傳送;而UDP則不為IP提供可靠性、 流控或差錯恢復功能。一般來說,TCP對應的是可靠性要求高的應用,而UDP對應的則是可靠性要求低、傳輸經濟的應用。TCP支援的應用協議主要 有:Telnet、FTP、SMTP等;UDP支援的應用層協議主要有:NFS(網路檔案系統)、SNMP(簡單網路管理協議)、DNS(主域名稱系 統)、TFTP(通用檔案傳輸協議)等.
TCP/IP協議與低層的網路介面層無關,這也是TCP/IP的重要特點。
除了層的數量之外,開放式系統互聯(OSI)模型與TCP/IP協議有什麼區別?
開放式系統互聯模型是一個參考標準,解釋協議相互之間應該如何相互作用。TCP/IP協議是美國國防部發明的,是讓網際網路成為了目前這個樣子的標準之一。開放式系統互聯模型中沒有清楚地描繪TCP/IP協議,但是在解釋TCP/IP協議時很容易想到開放式系統互聯模型。兩者的主要區別如下:
TCP/IP協議中的應用層處理開放式系統互聯模型中的第五層、第六層和第七層的功能。
TCP/IP協議中的傳輸層並不能總是保證在傳輸層可靠地傳輸資料包,而開放式系統互聯模型可以做到。TCP/IP協議還提供一項名為UDP(使用者資料包協議)的選擇。UDP不能保證可靠的資料包傳輸。
2. TCP與UDP的區別。
TCP的優點: 可靠,穩定 TCP的可靠體現在TCP在傳遞資料之前,會有三次握手來建立連線,而且在資料傳遞時,有確認、視窗、重傳、擁塞控制機制,在資料傳完後,還會斷開連線用來節約系統資源。 TCP的缺點: 慢,效率低,佔用系統資源高,易被攻擊。TCP在傳遞資料之前,要先建連線,這會消耗時間,而且在資料傳遞時,確認機制、重傳機制、擁塞控制機制等都會消耗大量的時間,而且要在每臺裝置上維護所有的傳輸連線,事實上,每個連線都會佔用系統的CPU、記憶體等硬體資源。 而且,因為TCP有確認機制、三次握手機制,這些也導致TCP容易被人利用,實現DOS、DDOS、CC等攻擊。
UDP的優點: 快,比TCP稍安全。UDP沒有TCP的握手、確認、視窗、重傳、擁塞控制等機制,UDP是一個無狀態的傳輸協議,所以它在傳遞資料時非常快。沒有TCP的這些機制,UDP較TCP被攻擊者利用的漏洞就要少一些。但UDP也是無法避免攻擊的,比如:UDP Flood攻擊…… UDP的缺點: 不可靠,不穩定 因為UDP沒有TCP那些可靠的機制,在資料傳遞時,如果網路質量不好,就會很容易丟包。 基於上面的優缺點,那麼: 什麼時候應該使用TCP: 當對網路通訊質量有要求的時候,比如:整個資料要準確無誤的傳遞給對方,這往往用於一些要求可靠的應用,比如HTTP、HTTPS、FTP等傳輸檔案的協議,POP、SMTP等郵件傳輸的協議。 在日常生活中,常見使用TCP協議的應用如下: 瀏覽器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ檔案傳輸 ………… 什麼時候應該使用UDP: 當對網路通訊質量要求不高的時候,要求網路通訊速度能儘量的快,這時就可以使用UDP。 比如,日常生活中,常見使用UDP協議的應用如下: QQ語音 QQ視訊 TFTP ……
總結
- TCP面向連線(如打電話要先撥號建立連線);UDP是無連線的,即傳送資料之前不需要建立連線
- TCP提供可靠的服務。也就是說,通過TCP連線傳送的資料,無差錯,不丟失,不重複,且按序到達;UDP盡最大努力交付,即不保證可靠交付
- TCP面向位元組流,實際上是TCP把資料看成一連串無結構的位元組流;UDP是面向報文的
UDP沒有擁塞控制,因此網路出現擁塞不會使源主機的傳送速率降低(對實時應用很有用,如IP電話,實時視訊會議等) - 每一條TCP連線只能是點到點的;UDP支援一對一,一對多,多對一和多對多的互動通訊
- TCP首部開銷20位元組;UDP的首部開銷小,只有8個位元組
- TCP的邏輯通訊通道是全雙工的可靠通道,UDP則是不可靠通道
3. TCP報文結構。
1、埠號:用來標識同一臺計算機的不同的應用程式。
1)源埠:源埠和IP地址的作用是標識報文的返回地址。
2)目的埠:埠指明接收方計算機上的應用程式介面。
TCP報頭中的源埠號和目的埠號同IP資料包中的源IP與目的IP唯一確定一條TCP連線。
2、序號和確認號:是TCP可靠傳輸的關鍵部分。序號是本報文段傳送的資料組的第一個位元組的序號。在TCP傳送的流中,每一個位元組一個序號。
這裡可參考理解TCP序列號(Sequence Number)和確認號(Acknowledgment Number)
3、資料偏移/首部長度:4bits。由於首部可能含有可選項內容,因此TCP報頭的長度是不確定的,報頭不包含任何任選欄位則長度為20位元組,4位首部長度欄位所能表示的最大值為1111,轉化為10進製為15,15*32/8 = 60,故報頭最大長度為60位元組。首部長度也叫資料偏移,是因為首部長度實際上指示了資料區在報文段中的起始偏移值。
4、保留:為將來定義新的用途保留,現在一般置0。
5、控制位:URG ACK PSH RST SYN FIN,共6個,每一個標誌位表示一個控制功能。
1)URG:緊急指標標誌,為1時表示緊急指標有效,為0則忽略緊急指標。
2)ACK:確認序號標誌,為1時表示確認號有效,為0表示報文中不含確認資訊,忽略確認號欄位。
3)PSH:push標誌,為1表示是帶有push標誌的資料,指示接收方在接收到該報文段以後,應儘快將這個報文段交給應用程式,而不是在緩衝區排隊。
4)RST:重置連線標誌,用於重置由於主機崩潰或其他原因而出現錯誤的連線。或者用於拒絕非法的報文段和拒絕連線請求。
5)SYN:同步序號,用於建立連線過程,在連線請求中,SYN=1和ACK=0表示該資料段沒有使用捎帶的確認域,而連線應答捎帶一個確認,即SYN=1和ACK=1。
6)FIN:finish標誌,用於釋放連線,為1時表示傳送方已經沒有資料傳送了,即關閉本方資料流。
6、視窗:滑動視窗大小,用來告知傳送端接受端的快取大小,以此控制傳送端傳送資料的速率,從而達到流量控制。視窗大小時一個16bit欄位,因而視窗大小最大為65535。
7、校驗和:奇偶校驗,此校驗和是對整個的 TCP 報文段,包括 TCP 頭部和 TCP 資料,以 16 位字進行計算所得。由傳送端計算和儲存,並由接收端進行驗證。
8、緊急指標:只有當 URG 標誌置 1 時緊急指標才有效。緊急指標是一個正的偏移量,和順序號欄位中的值相加表示緊急資料最後一個位元組的序號。 TCP 的緊急方式是傳送端向另一端傳送緊急資料的一種方式。
9、選項和填充:最常見的可選欄位是最長報文大小,又稱為MSS(Maximum Segment Size),每個連線方通常都在通訊的第一個報文段(為建立連線而設定SYN標誌為1的那個段)中指明這個選項,它表示本端所能接受的最大報文段的長度。選項長度不一定是32位的整數倍,所以要加填充位,即在這個欄位中加入額外的零,以保證TCP頭是32的整數倍。
10、資料部分: TCP 報文段中的資料部分是可選的。在一個連線建立和一個連線終止時,雙方交換的報文段僅有 TCP 首部。如果一方沒有資料要傳送,也使用沒有任何資料的首部來確認收到的資料。在處理超時的許多情況中,也會傳送不帶任何資料的報文段。
4. TCP的三次握手與四次揮手過程,各個狀態名稱與含義,TIMEWAIT的作用。
詳細過程
如果理解了上面的序號和確認號,這裡的理解也不難。
1、客戶端傳送報文SYN=1請求建立連線,並進入SYN-SENT狀態。這裡客戶端的初始序號為隨機數X(可理解為傳送端傳送的資料應排在接收端X位置上)。
2、服務端接收到請求,傳送報文SYN=1和ACK=1,前者表示同意連線,後者表示客戶端上次傳送過來的資料已經正常接收,並進入SYN-RCYD狀態。這裡服務端的初始序號為隨機數Y,確認號為X+1(可理解為下次傳送過來的資料應該在X+1位置上才正確)。
3、客戶端接收到資訊後再傳送報文ACK=1表示確認,開啟連線,進入ESTABLISHED狀態。
4、服務端接收到確認資訊開啟連線,進入ESTABLISHED狀態。
關閉連線同理。
【注意】 在TIME_WAIT狀態中,如果TCP client端最後一次傳送的ACK丟失了,server端等不到者個ACT將重新傳送FIN給client端,client端接收到知道ACT報文丟失了將重新傳送ACT報文。TIME_WAIT狀態中所需要的時間是依賴於實現方法的。典型的值為30秒、1分鐘和2分鐘。等待之後連線正式關閉,並且所有的資源(包括埠號)都被釋放。
【問題1】為什麼連線的時候是三次握手,關閉的時候卻是四次握手?
答:因為當Server端收到Client端的SYN連線請求報文後,可以直接傳送SYN+ACK報文。其中ACK報文是用來應答的,SYN報文是用來同步的。但是關閉連線時,當Server端收到FIN報文時,很可能並不會立即關閉SOCKET,所以只能先回復一個ACK報文,告訴Client端,”你發的FIN報文我收到了”。只有等到我Server端所有的報文都傳送完了,我才能傳送FIN報文,因此不能一起傳送。故需要四步握手。
【問題2】為什麼TIME_WAIT狀態需要經過2MSL(最大報文段生存時間)才能返回到CLOSE狀態?
答:雖然按道理,四個報文都傳送完畢,我們可以直接進入CLOSE狀態了,但是我們必須假象網路是不可靠的,有可以最後一個ACK丟失。所以TIME_WAIT狀態就是用來重發可能丟失的ACK報文。
5. TCP擁塞控制。
一般原理:發生擁塞控制的原因:資源(頻寬、交換節點的快取、處理機)的需求>可用資源。
作用:擁塞控制就是為了防止過多的資料注入到網路中,這樣可以使網路中的路由器或者鏈路不至於過載。擁塞控制要做的都有一個前提:就是網路能夠承受現有的網路負荷。
對比流量控制:擁塞控制是一個全域性的過程,涉及到所有的主機、路由器、以及降低網路相關的所有因素。流量控制往往指點對點通訊量的控制。是端對端的問題。
擁塞視窗:傳送方為一個動態變化的視窗叫做擁塞視窗,擁塞視窗的大小取決於網路的擁塞程度。傳送方讓自己的傳送視窗=擁塞視窗,但是傳送視窗不是一直等於擁塞視窗的,在網路情況好的時候,擁塞視窗不斷的增加,傳送方的視窗自然也隨著增加,但是接受方的接受能力有限,在傳送方的視窗達到某個大小時就不在發生變化了。
傳送方如何知道網路擁塞了呢?傳送方傳送一些報文段時,如果傳送方沒有在時間間隔內收到接收方的確認報文段,則就可以人為網路出現了擁塞。
慢啟動演算法的思路:主機開發傳送資料包時,如果立即將大量的資料注入到網路中,可能會出現網路的擁塞。慢啟動演算法就是在主機剛開始傳送資料包的時候先探測一下網路的狀況,如果網路狀況良好,傳送方每傳送一次文段都能正確的接受確認報文段。那麼就從小到大的增加擁塞視窗的大小,即增加傳送視窗的大小。
例子:開始傳送方先設定cwnd(擁塞視窗)=1,傳送第一個報文段M1,接收方接收到M1後,傳送方接收到接收方的確認後,把cwnd增加到2,接著傳送方傳送M2、M3,傳送方接收到接收方傳送的確認後cwnd增加到4,慢啟動演算法每經過一個傳輸輪次(認為傳送方都成功接收接收方的確認),擁塞視窗cwnd就加倍。
擁塞避免:為了防止cwnd增加過快而導致網路擁塞,所以需要設定一個慢開始門限ssthresh狀態變數(我也不知道這個到底是什麼,就認為他是一個擁塞控制的標識),它的用法:
1、當cwnd < ssthresh,使用慢啟動演算法,
2、 當cwnd > ssthresh,使用擁塞控制演算法,停用慢啟動演算法。
3、 當cwnd = ssthresh,這兩個演算法都可以。
擁塞避免的思路:是讓cwnd緩慢的增加而不是加倍的增長,每經歷過一次往返時間就使cwnd增加1,而不是加倍,這樣使cwnd緩慢的增長,比慢啟動要慢的多。
無論是慢啟動演算法還是擁塞避免演算法,只要判斷網路出現擁塞,就要把慢啟動開始門限(ssthresh)設定為設定為傳送視窗的一半(>=2),cwnd(擁塞視窗)設定為1,然後在使用慢啟動演算法,這樣做的目的能迅速的減少主機向網路中傳輸資料,使發生擁塞的路由器能夠把佇列中堆積的分組處理完畢。
例項:1、TCP連線進行初始化的時候,cwnd=1,ssthresh=16。
2、在慢啟動演算法開始時,cwnd的初始值是1,每次傳送方收到一個ACK擁塞視窗就增加1,當ssthresh =cwnd時,就啟動擁塞控制演算法,擁塞視窗按照規律增長,
3、當cwnd=24時,網路出現超時,傳送方收不到確認ACK,此時設定ssthresh=12,(二分之一cwnd),設定cwnd=1,然後開始慢啟動演算法,當cwnd=ssthresh=12,慢啟動演算法變為擁塞控制演算法,cwnd按照線性的速度進行增長。
快重傳:
快重傳演算法要求首先接收方收到一個失序的報文段後就立刻發出重複確認,而不要等待自己傳送資料時才進行捎帶確認。接收方成功的接受了傳送方傳送來的M1、M2並且分別給傳送了ACK,現在接收方沒有收到M3,而接收到了M4,顯然接收方不能確認M4,因為M4是失序的報文段。如果根據可靠性傳輸原理接收方什麼都不做,但是按照快速重傳演算法,在收到M4、M5等報文段的時候,不斷重複的向傳送方傳送M2的ACK,如果接收方一連收到三個重複的ACK,那麼傳送方不必等待重傳計時器到期,由於傳送方儘早重傳未被確認的報文段。
快恢復:
當傳送方連續接收到三個確認時,就執行乘法減小演算法,把慢啟動開始門限(ssthresh)設定為cwnd的一半,但是接下來並不執行慢開始演算法。
此時不執行慢啟動演算法,而是把cwnd設定為新的ssthresh值, 然後執行擁塞避免演算法,使擁塞視窗緩慢增大。
6. TCP滑動視窗與回退N針協議。
滑動視窗協議
1、傳送端和接收端分別設定傳送視窗和接收視窗。
2、三次握手的時候,客戶端把自己的緩衝區大小也就是視窗大小傳送給伺服器,伺服器迴應是也將視窗大小傳送給客戶端,伺服器客戶端都知道了彼此的視窗大小。
3、比如主機A的傳送視窗大小為5,主機A可以向主機B傳送5個單元,如果B緩衝區滿了,A就要等待B確認才能繼續傳送資料。
4、如果緩衝區中有1個報文被程式讀取,主機B就會回覆ACK給主機A,接收視窗向前滑動,報文中視窗大小為1,就說明A還可以傳送1個單元的資料,傳送視窗向前滑動,之後等待主機B的確認報文。
只有接收視窗向前滑動併傳送了確認時,傳送視窗才能向前滑動。
停止等待ARQ協議(stop and wait)
當傳送視窗和接收視窗都等於1時,就是停止等待協議。傳送端給接收端傳送資料,等待接收端確認回覆ACk,並停止傳送新的資料包,開啟計時器。資料包在計時器超時之前得到確認,那麼計時器就會關閉,併傳送下一個資料包。如果計時器超時,傳送端就認為資料包丟失或被破壞,需要重新傳送之前的資料包,說明資料包在得到確認之前,傳送端需要儲存資料包的副本。
停止等待協議是發出一個幀後得到確認才發下一個,降低了通道的利用率。
退後N幀協議
在傳送完一個幀後,不用停下來等待確認,而是可以連續傳送多個資料幀,這樣就減少了等待時間,整個通訊的通吞吐量提高。
如果前一個幀在超時時間內未得到確認,就認為丟失或被破壞,需要重發出錯幀及其後面的所有資料幀。這樣有可能有把正確的資料幀重傳一遍,降低了傳送效率。
線路很差時,使用退後N幀的協議會浪費大量的頻寬重傳幀。
選擇重傳協議
NAK:非確認幀,當在一定時間內沒有收到某個資料幀的ACK時,回覆一個NACK。
在傳送過程中,如果一個資料幀計時器超時,就認為該幀丟失或者被破壞,接收端只把出錯的的幀丟棄,其後面的資料幀儲存在快取中,並向傳送端回覆NAK。傳送端接收到NAK時,只傳送出錯的幀。
如果落在視窗的幀從未接受過,那麼儲存起來,等比它序列號小的所有幀都按次序交給網路層,那麼此幀才提交給網路層。
接收端收到的資料包的順序可能和傳送的資料包順序不一樣。因此在資料包裡必須含有順序字元來幫助接受端來排序。
選擇重傳協議可以避免重複傳送那些正確到達接收端的資料幀。但是接收端要設定具有相當容量的快取空間,這在許多情況下是不夠經濟的。
7. Http的報文結構。
http報文是面向文字的,報文中每一個欄位都是一些ASCII碼串,各個欄位的長度是不確定的。http有兩類報文:請求報文 響應報文
請求報文
1、請求行
請求行由請求方法欄位、URL欄位和HTTP協議版本欄位,組成,它們用空格分隔,例如:GET /index.html HTTP/1.1
HTTP協議的請求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。這裡介紹最常用的GET和POST方法;
GET:當client要從server中讀取文件時,使用GET方法。GET方法要求伺服器將URL定位的資源放在響應報文的資料部分,回送給client。
使用GET方法時,請求引數和對應的值附加在URL後面,利用一個問號(”?”)代表URL的結尾與請求引數的開始,傳遞引數長度受限制,例如: /index.jsp?id=100&op=bind
POST:當client給伺服器提供資訊較多時, 使用POST方法。POST方法將請求引數封裝在HTTP請求資料中,以key/value的形式出現,可以傳遞大量資料,可用來傳遞檔案
2、訊息頭部
請求頭部由key/value鍵值對組成,每行一對,key和value用冒號”:”分隔,請求頭部通知伺服器有關於client端的請求資訊,典型的請求頭:
User-Agent:產生請求的瀏覽器型別
Accept:client端可識別的內容型別列表
Host:請求的主機名,允許多個域名同處一個ip地址,即虛擬主機
3、空行
最後一個請求頭之後是一個空行,傳送回車符和換行符,通知伺服器請求頭結束。
對於一個完整的http請求來說空行是必須的,否則伺服器會任務本次請求的資料尚未完全傳送到server,處於等待狀態
4、請求正文
請求資料不在GET方法中使用,而是在POST中使用。POST方法適用於需要client填寫表單的場合,與請求資料相關的最常用的請求頭是Content-Type 和Content-Length
響應報文
1、狀態行:狀態行由 HTTP 協議版本欄位、狀態碼和狀態碼的描述文字 3 個部分組成,他們之間使用空格隔開;
● 狀態碼由三位數字組成,第一位數字表示響應的型別,常用的狀態碼有五大類如下所示:
1xx:表示伺服器已接收了客戶端請求,客戶端可繼續傳送請求;
2xx:表示伺服器已成功接收到請求並進行處理;
3xx:表示伺服器要求客戶端重定向;
4xx:表示客戶端的請求有非法內容;
5xx:表示伺服器未能正常處理客戶端的請求而出現意外錯誤;
● 狀態碼描述文字有如下取值:
200 OK:表示客戶端請求成功;
400 Bad Request:表示客戶端請求有語法錯誤,不能被伺服器所理解;
401 Unauthonzed:表示請求未經授權,該狀態程式碼必須與 WWW-Authenticate 報頭域一起使用;
403 Forbidden:表示伺服器收到請求,但是拒絕提供服務,通常會在響應正文中給出不提供服務的原因;
404 Not Found:請求的資源不存在,例如,輸入了錯誤的URL;
500 Internal Server Error:表示伺服器發生不可預期的錯誤,導致無法完成客戶端的請求;
503 Service Unavailable:表示伺服器當前不能夠處理客戶端的請求,在一段時間之後,伺服器可能會恢復正常;
2、響應頭部:響應頭可能包括:
Location:Location響應報頭域用於重定向接受者到一個新的位置。例如:客戶端所請求的頁面已不存在原先的位置,為了讓客戶端重定向到這個頁面新的位置,伺服器端可以發回Location響應報頭後使用重定向語句,讓客戶端去訪問新的域名所對應的伺服器上的資源;
Server:Server 響應報頭域包含了伺服器用來處理請求的軟體資訊及其版本。它和 User-Agent 請求報頭域是相對應的,前者傳送伺服器端軟體的資訊,後者傳送客戶端軟體(瀏覽器)和作業系統的資訊。
Vary:指示不可快取的請求頭列表;
Connection:連線方式;
對於請求來說:close(告訴 WEB 伺服器或者代理伺服器,在完成本次請求的響應後,斷開連線,不等待本次連線的後續請求了)。keepalive(告訴WEB伺服器或者代理伺服器,在完成本次請求的響應後,保持連線,等待本次連線的後續請求);
對於響應來說:close(連線已經關閉); keepalive(連線保持著,在等待本次連線的後續請求); Keep-Alive:如果瀏覽器請求保持連線,則該頭部表明希望WEB 伺服器保持連線多長時間(秒);例如:Keep-Alive:300;
WWW-Authenticate:WWW-Authenticate響應報頭域必須被包含在401 (未授權的)響應訊息中,這個報頭域和前面講到的Authorization 請求報頭域是相關的,當客戶端收到 401 響應訊息,就要決定是否請求伺服器對其進行驗證。如果要求伺服器對其進行驗證,就可以傳送一個包含了Authorization 報頭域的請求;
3、空行:最後一個響應頭部之後是一個空行,傳送回車符和換行符,通知伺服器以下不再有響應頭部。
4、實體主體:伺服器返回給客戶端的文字資訊;
8. Http的狀態碼含義。
一、200狀態碼:
成功2××: 成功處理了請求的狀態碼。
1、200 :伺服器已成功處理了請求並提供了請求的網頁。
2、204: 伺服器成功處理了請求,但沒有返回任何內容。
二、300狀態碼:
重定向3×× :每次請求中使用重定向不要超過 5 次。
1、301: 請求的網頁已永久移動到新位置。當URLs發生變化時,使用301程式碼。搜尋引擎索引中儲存新的URL。
2、302: 請求的網頁臨時移動到新位置。搜尋引擎索引中儲存原來的URL。
3、304: 如果網頁自請求者上次請求後沒有更新,則用304程式碼告訴搜尋引擎機器人,可節省頻寬和開銷。
三、400狀態碼:
客戶端錯誤4×× :表示請求可能出錯,妨礙了伺服器的處理。
1、400: 伺服器不理解請求的語法。
2、403: 伺服器拒絕請求。
3、404: 伺服器找不到請求的網頁。伺服器上不存在的網頁經常會返回此程式碼。
4、410 :請求的資源永久刪除後,伺服器返回此響應。該程式碼與 404(未找到)程式碼相似,但在資源以前存在而現在不存在的情況下,有時用來替代404 程式碼。如果資源已永久刪除,應當使用 301 指定資源的新位置。
四、500狀態碼:
伺服器錯誤5×× :表示伺服器在處理請求時發生內部錯誤。這些錯誤可能是伺服器本身的錯誤,而不是請求出錯。
1、500 :伺服器遇到錯誤,無法完成請求。
2、503: 伺服器目前無法使用(由於超載或停機維護)。
通常,這只是暫時狀態。 希望大家在分析日誌的時候可以參照一下,根據具體的狀態碼解決問題。
9. Http request的幾種型別。
1、 OPTIONS:返回伺服器針對特定資源所支援的HTTP請求方法。也可以利用向Web伺服器傳送’*’的請求來測試伺服器的功能性。
2、HEAD:向伺服器索要與GET請求相一致的響應,只不過響應體將不會被返回。這一方法可以在不必傳輸整個響應內容的情況下,就可以獲取包含在響應訊息頭中的元資訊。
3、GET:向特定的資源發出請求。
4、POST:向指定資源提交資料進行處理請求(例如提交表單或者上傳檔案)。資料被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。
5、PUT:向指定資源位置上傳其最新內容。
6、DELETE:請求伺服器刪除Request-URI所標識的資源。
7、TRACE:回顯伺服器收到的請求,主要用於測試或診斷。
8、CONNECT:HTTP/1.1協議中預留給能夠將連線改為管道方式的代理伺服器。
10. Http1.1和Http1.0的區別
1、長連線
HTTP 1.0需要使用keep-alive引數來告知伺服器端要建立一個長連線,而HTTP1.1預設支援長連線。
HTTP是基於TCP/IP協議的,建立一個TCP連線是需要經過三次握手的,有一定的開銷,如果每次通訊都要重新建立連線的話,對效能有影響。因此最好能維持一個長連線,可以用個長連線來發多個請求。
2、節約頻寬
HTTP 1.1支援只傳送header資訊(不帶任何body資訊),如果伺服器認為客戶端有許可權請求伺服器,則返回100,否則返回401。客戶端如果接受到100,才開始把請求body傳送到伺服器。
這樣當伺服器返回401的時候,客戶端就可以不用傳送請求body了,節約了頻寬。
另外HTTP還支援傳送內容的一部分。這樣當客戶端已經有一部分的資源後,只需要跟伺服器請求另外的部分資源即可。這是支援檔案斷點續傳的基礎。
3、HOST域
現在可以web server例如tomat,設定虛擬站點是非常常見的,也即是說,web server上的多個虛擬站點可以共享同一個ip和埠。
HTTP1.0是沒有host域的,HTTP1.1才支援這個引數。
11. Http怎麼處理長連線。
在HTTP1.0和HTTP1.1協議中都有對長連線的支援。其中HTTP1.0需要在request中增加Connection: keep-alive header才能夠支援,而HTTP1.1預設支援。
1、http1.0請求與服務端的互動過程:
(1)客戶端發出帶有包含一個header:”Connection: keep-alive“的請求
(2)服務端接收到這個請求後,根據http1.0和”Connection: keep-alive“判斷出這是一個長連線,就會在response的header中也增加”Connection: keep-alive“,同時不會關閉已建立的tcp連線.
(3)客戶端收到服務端的response後,發現其中包含”Connection: keep-alive“,就認為是一個長連線,不關閉這個連線。並用該連線再傳送request.轉到(1)
2、http1.1請求與服務端的互動過程:
(1)客戶端發出http1.1的請求
(2)服務端收到http1.1後就認為這是一個長連線,會在返回的response設定Connection: keep-alive,同時不會關閉已建立的連線.
(3)客戶端收到服務端的response後,發現其中包含”Connection: keep-alive“,就認為是一個長連線,不關閉這個連線。並用該連線再傳送request.轉到(1)
基於http協議的長連線減少了請求,減少了建立連線的時間,但是每次互動都是由客戶端發起的,客戶端傳送訊息,服務端才能返回客戶端訊息。
12. Cookie與Session的作用原理。
Cookie
1、工作原理
(1)建立Cookie
當使用者第一次瀏覽某個使用Cookie的網站時,該網站的伺服器就進行如下工作:
①該使用者生成一個唯一的識別碼(Cookie id),建立一個Cookie物件;
②預設情況下它是一個會話級別的cookie,儲存在瀏覽器的記憶體中,使用者退出瀏覽器之後被刪除。如果網站希望瀏覽器將該Cookie儲存在磁碟上,則需要設定最大時效(maxAge),並給出一個以秒為單位的時間(將最大時效設為0則是命令瀏覽器刪除該Cookie);
③將Cookie放入到HTTP響應報頭,將Cookie插入到一個 Set-Cookie HTTP請求報頭中。
④傳送該HTTP響應報文。
(2)設定儲存Cookie
瀏覽器收到該響應報文之後,根據報文頭裡的Set-Cookied特殊的指示,生成相應的Cookie,儲存在客戶端。該Cookie裡面記錄著使用者當前的資訊。
(3)傳送Cookie
當使用者再次訪問該網站時,瀏覽器首先檢查所有儲存的Cookies,如果某個存在該網站的Cookie(即該Cookie所宣告的作用範圍大於等於將要請求的資源),則把該cookie附在請求資源的HTTP請求頭上傳送給伺服器。
(4)讀取Cookie
伺服器接收到使用者的HTTP請求報文之後,從報文頭獲取到該使用者的Cookie,從裡面找到所需要的東西。
2、作用
Cookie的根本作用就是在客戶端儲存使用者訪問網站的一些資訊。典型的應用有:
(1)記住密碼,下次自動登入。
(2)購物車功能。
(3)記錄使用者瀏覽資料,進行商品(廣告)推薦。
3、缺陷
①Cookie會被附加在每個HTTP請求中,所以無形中增加了流量。
②由於在HTTP請求中的Cookie是明文傳遞的,所以安全性成問題。(除非用HTTPS)
③Cookie的大小限制在4KB左右。對於複雜的儲存需求來說是不夠用的。
Session
1、工作原理
(1)建立Session
當使用者訪問到一個伺服器,如果伺服器啟用Session,伺服器就要為該使用者建立一個SESSION,在建立這個SESSION的時候,伺服器首先檢查這個使用者發來的請求裡是否包含了一個SESSION ID,如果包含了一個SESSION ID則說明之前該使用者已經登陸過併為此使用者建立過SESSION,那伺服器就按照這個SESSION ID把這個SESSION在伺服器的記憶體中查詢出來(如果查詢不到,就有可能為他新建立一個),如果客戶端請求裡不包含有SESSION ID,則為該客戶端建立一個SESSION並生成一個與此SESSION相關的SESSION ID。這個SESSION ID是唯一的、不重複的、不容易找到規律的字串,這個SESSION ID將被在本次響應中返回到客戶端儲存,而儲存這個SESSION ID的正是COOKIE,這樣在互動過程中瀏覽器可以自動的按照規則把這個標識傳送給伺服器。
(2)使用Session
我們知道在IE中,我們可以在工具的Internet選項中把Cookie禁止,那麼會不會出現把客戶端的Cookie禁止了,那麼SESSIONID就無法再用了呢?找了一些資料說明,可以有其他機制在COOKIE被禁止時仍然能夠把Session id傳遞迴伺服器。
經常被使用的一種技術叫做URL重寫,就是把Session id直接附加在URL路徑的後面一種是作為URL路徑的附加資訊,表現形式為:
http://…./xxx;jSession=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764;
另一種是作為查詢字串附加在URL後面,表現形式為:
http://…../xxx?jSession=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
還有一種就是表單隱藏欄位。就是伺服器會自動修改表單,新增一個隱藏欄位,以便在表單提交時能夠把Session id傳遞迴伺服器。
2、作用
Session的根本作用就是在服務端儲存使用者和伺服器會話的一些資訊。典型的應用有:
(1)判斷使用者是否登入。
(2)購物車功能。
Cookie和Session的比較:
1、存放位置不同
Cookie儲存在客戶端,Session儲存在服務端。
2 、存取方式的不同
Cookie中只能保管ASCII字串,假如需求存取Unicode字元或者二進位制資料,需求先進行編碼。Cookie中也不能直接存取Java物件。若要儲存略微複雜的資訊,運用Cookie是比擬艱難的。
而Session中能夠存取任何型別的資料,包括而不限於String、Integer、List、Map等。Session中也能夠直接保管Java Bean乃至任何Java類,物件等,運用起來十分便當。能夠把Session看做是一個Java容器類。
3、安全性(隱私策略)的不同
Cookie儲存在瀏覽器中,對客戶端是可見的,客戶端的一些程式可能會窺探、複製以至修正Cookie中的內容。而Session儲存在伺服器上,對客戶端是透明的,不存在敏感資訊洩露的風險。 假如選用Cookie,比較好的方法是,敏感的資訊如賬號密碼等儘量不要寫到Cookie中。最好是像Google、Baidu那樣將Cookie資訊加密,提交到伺服器後再進行解密,保證Cookie中的資訊只要本人能讀得懂。而假如選擇Session就省事多了,反正是放在伺服器上,Session裡任何隱私都能夠有效的保護。
4、有效期上的不同
只需要設定Cookie的過期時間屬性為一個很大很大的數字,Cookie就可以在瀏覽器儲存很長時間。 由於Session依賴於名為JSESSIONID的Cookie,而Cookie JSESSIONID的過期時間默許為–1,只需關閉了瀏覽器(一次會話結束),該Session就會失效。
5、對伺服器造成的壓力不同
Session是保管在伺服器端的,每個使用者都會產生一個Session。假如併發訪問的使用者十分多,會產生十分多的Session,耗費大量的記憶體。而Cookie保管在客戶端,不佔用伺服器資源。假如併發閱讀的使用者十分多,Cookie是很好的選擇。
6、 跨域支援上的不同
Cookie支援跨域名訪問,例如將domain屬性設定為“.baidu.com”,則以“.baidu.com”為字尾的一切域名均能夠訪問該Cookie。跨域名Cookie如今被普遍用在網路中。而Session則不會支援跨域名訪問。Session僅在他所在的域名內有效。
13. 電腦上訪問一個網頁,整個過程是怎麼樣的:DNS、HTTP、TCP、OSPF、IP、ARP。
首先了解一下各個協議是什麼:
應用層:
1、DNS(53):
我們輸入的是一個URL需要轉化成IP地址。首先我們知道我們本地的機器上在配置網路時都會填寫DNS,這樣本機就會把這個url發給這個配置的DNS伺服器,如果能夠找到相應的url則返回其ip,否則該DNS將繼續將該解析請求傳送給上級DNS,整個DNS可以看做是一個樹狀結構,該請求將一直髮送到根直到得到結果。
2、HTTP(80)
HTTP協議的主要職責是生成針對目標web伺服器的http請求報文(請求行、請求頭部)
傳輸層
3、TCP
將http請求報文分割成報文段,按序號分為多個報文段。(三次握手)
網路層
4、IP
搜尋目標的地址,一邊中轉一邊傳送。(路由)
5、ARP
因為最終都要在資料鏈路層上進行傳輸,而資料鏈路層並不認識IP地址,所以ARP的職責就是把IP地址轉換成資料鏈路層認識的MAC地址。
通過資料鏈路層到達目標機器之後。
網路層
6、RARP
這其實是ARP的逆過程,將MAC地址轉換成Ip地址
傳輸層
7、TCP
將接收到的報文段按序號進行重組。
應用層
8、 HTTP
HTTP協議對http請求進行解析處理。
例子:
重點內容
假設你用一個全新的瀏覽器(第一次啟動的那種),訪問百度(http://www.baidu.com/**),在你敲入網址並按下回車之後,將會發生以下神奇的事情:
http://www.baidu.com/瀏覽器先嚐試從Host檔案中獲取http://www.baidu.com/對應的IP地址,如果能取到當然萬事大吉大家都能嗨,如果不能,就使用DNS協議來獲取IP咯。
在DNS協議中,PC會向你的本地DNS伺服器求助(一般是路由器),希望從本地DNS伺服器那裡得到百度的IP,得到就好,得不到還得向更高層次的DNS伺服器求助,最終總能得到百度的IP。
得到百度的IP,下一步是使用TCP協議,建立TCP連線。
在TCP協議中,建立TCP需要與百度伺服器握手三次,你先告訴伺服器你要給伺服器發東西(SYN),伺服器應答你並告訴你它也要給你發東西(SYN、ACK),然後你應答伺服器(ACK),總共來回了3次,稱為3次握手。
不過,建立TCP連線有個前提(或者說給伺服器發訊息有個前提):你必須能成功地把訊息發到伺服器上。雖然已經知道IP,但並無啥用(比如說,你在廣東,你知道北京的地理座標經緯度就能到北京了?你得知道有哪些路通往北京吧你得準備盤纏吧你得花時間吧)。
我們都知道,你的PC和百度伺服器之間一般會有許多路由器之類的東西,IP協議指定了出發地(你的PC)和目的地(伺服器);你的資料會經過一個又一個路由器,OSPF決定了會經過那些路由器(用一種叫路由演算法的玩意,找出最佳路徑);從一個路由器怎麼傳給下一個路由器?這是ARP協議的工作,ARP負責求下一個節點的地址(我們不止是要目的地,還要中間節點的地址)。
IP協議使用的是IP地址,整個傳送過程中只涉及出發地和目的地2個IP地址,而ARP協議使用的是MAC地址,整個傳送過程中涉及到每一個節點的MAC地址
現在,我們能和伺服器通訊,還建立了TCP連線,下一步幹嘛,當然是用HTTP協議請求網頁內容咯。
你發個HTTP請求報文給伺服器,如果伺服器禁止你訪問它就給你回個”Forbidden”,如果它暫時掛掉了就給你回個“內部服務錯誤”,如果它正常才給你回個“OK“並將你要的資料傳給你;如果你還需要其它的東西再去跟它要(它一般還會給你的-_-)。
你收到了伺服器的回覆,是一坨HTML形式的文字。瀏覽器必須要能夠理解文字的內容,並快速地渲染到螢幕上(瀏覽器一般用有限自動機來理解文字內容,渲染的話就各看本事了,之所以微軟IE卡成狗而谷歌瀏覽器很6,就是它們的渲染速度不同…)
14. Ping的整個過程。ICMP報文是什麼。
這裡講ping的兩情況,一種是同一網段內,一種是跨網段的ping ….
1、同一網段ping
首先,如果主機A,要去ping主機B,那麼主機A,就要封裝二層報文,他會先查自己的MAC地址表,如果沒有B的MAC地址,就會向外傳送一個ARP廣播包,如圖:
其中ARP報文格式如下:
其中OP
1:表示ARP請求
2:表示ARP應答
3:表示RARP請求
4:表示RARP應答
首先,交換機會收到這個報文後,交換機有學習MAC地址的功能,所以他會檢索自己有沒有儲存主機B有MAC,如果有,就返回給主機A,如果沒有,就會向所有埠傳送ARP廣播,其它主機收到後,發現不是在找自己,就紛紛丟棄了該報文,不去理會。。直到主機B收到了報文後,就立即相應,我的MAC地址是多少,同時學到主機A的MAC地址,並按同樣的ARP報文格式返回給主機A,如圖:
ARP報文格式:
這時候主機A學到了主機B的MAC,就把這個MAC封裝到ICMP協議的二層報文中向主機B傳送,報文格式如下:
當主機B收到了這個報文後,發現是主機A 的ICPM回顯請求,就按同樣的格式,返回一個值給主機A,這樣就完成了同一網段內的ping過程…
2、跨網段ping
如果主機A要ping主機C,那麼主機A發現主機C的IP和自己不是同一網段,他就去找閘道器轉發,但是他也不知道閘道器的MAC情況下呢?他就會向之前那個步驟一樣先傳送一個ARP廣播,學到閘道器的MAC,再發封裝ICMP報文給閘道器路由器.
報文格式如下:
當路由器收到主機A發過來的ICMP報文,發現報文的目的地址是其本身MAC地址,根據目的的IP2.1.1.1,查路由表,發現2.1.1.1/24的路由表項,得到一個出口指標,去掉原來的MAC頭部.加上自己的MAC地址向主機C轉發…(如果閘道器也沒有主機C的MAC地址,還是要向前面一個步驟一樣,ARP廣播一下即可相互學到….路由器2埠能學到主機D的MAC,主機D也能學到路由器2埠的MAC..),報文格式如下:
最後,在主機C已學到路由器2埠MAC,路由器2埠轉發給路由器1埠,路由1埠學到主機A的MAC的情況下,他們就不需要再做ARP解析,就將ICMP的回顯請求回覆過來..報文格式大致如下:
ICMP報文
1、 ICMP允許主機或路由報告差錯情況和提供有關異常情況。ICMP是因特網的標準協議,但ICMP不是高層協議,而是IP層的協議。通常ICMP報文被IP層或更高層協議(TCP或UDP)使用。一些ICMP報文把差錯報文返回給使用者程式。
2、 ICMP報文作為IP層資料包的資料,加上資料包的首部,組成資料包傳送出去。
3、 ICMP報文的種類有兩種,即ICMP差錯報告報文和ICMP詢問報文。
具體參考:ICMP報文分析
15. C/S模式下使用socket通訊,幾個關鍵函式。
16. IP地址分類。
A類網路地址:
(1)前1位元組標識網路地址部分,後3位元組表示主機地址部分
(2)每個網路最多容納(2^24 - 2)臺主機
(3)最高位固定為0,所以第1個位元組表示範圍為0~127
(4)具有A類地址特徵的網路總數為2^7個
B類網路地址:
(1)前2位元組標識網路地址部分,後2位元組標識主機地址部分
(2)每個網路最多容納(2^16 - 2)臺主機
(3)前2位固定為10,所以第一個位元組表示範圍為128~191、
(4)具有B類地址特徵的網路總數為2^14個
C類地址
(1)前3位元組標識網路地址部分,後1位元組標識主機地址部分
(2)每個網路可容納(2^8 - 2)臺主機
(3)前3位固定為110,所以第一位元組表示範圍為192~223
(4)具有C類地址的網路總數為2^21個
保留的地址
D類(224.0.0.0~239.0.0.0)組播地址
E類(240.0.0.0~254.0.0.0)用於科研試驗
網路地址:主機部分全為0的IP地址
廣播地址:主機部分全為1的IP地址
例子:當傳送資訊到廣播地址100.255.255.255時,意思為放鬆到網路地址為100.0.0.0的所有主機上。
0.0.0.0指這個主機、這個網路,出現在路由表中的預設路由。
255.255.255.255 廣播地址:送達全網所有主機,會被路由器截至
子網的規劃
例子:某單位分到一個C類網路號193.71.56.0,需要分成五個子網,每個子網需要連線20臺主機,如何規劃子網?
為了分成五個子網,我們需要借主機位3位,可建立8個子網>5個子網;同時剩下5個主機位,提供主機位2^5-2=30個>20個,所以我們可以子網掩碼設定位255.255.255.224。
我們這裡建立子網都是等大的,還能建立不等大的子網,就是子網中繼續建立子網,這樣可以充分利用資源,就不贅述了。
17. 路由器與交換機區別。
(1)外形上:
從外形上我們區分兩者,交換機通常埠比較多看起來比較笨重,而路由器的埠就少得多體積也小得多,實際上右圖並不是真正的路由器只是整合了路由器的功能,除此之外還有交換機的功能(LAN口就是作為交換機的埠來使用,WAN是用於連線外網的埠),而兩個天線則是無線AP接入點(即是通常所說的無線區域網wifi)。
(2)工作層次不同:
最初的交換機工作在OSI開放式系統互聯模型的資料鏈路層,也就是第二層,而路由器則工作在OSI模型的網路層,就是第三層。也就是由於這一點所以交換機的原理比較簡單,一般都是採用硬體電路實現資料幀的轉發,而路由器工作在網路層,肩負著網路互聯的重任,要實現更加複雜的協議,具有更加智慧的轉發決策功能,一般都會在在路由器中跑作業系統,實現複雜的路由演算法,更偏向於軟體實現其功能。
(3)資料的轉發物件不同:
交換機是根據MAC地址轉發資料幀,而路由器則是根據IP地址來轉發IP資料包/分組。資料幀是在IP資料包/分組的基礎上封裝了幀頭(源MAC和目的MAC等)和幀尾(CRC校驗碼)。而對於MAC地址和IP地址大家也許就搞不明白了,為何需要兩個地址,實際上IP地址決定最終資料包要到達某一臺主機,而MAC地址則是決定下一跳將要互動給哪一臺裝置(一般是路由器或主機)。而且,IP地址是軟體實現的,可以描述主機所在的網路,MAC地址是硬體實現的,每一個網路卡在出廠的時候都會將全世界唯一的MAC地址固化在網路卡的ROM中,所以MAC地址是不能被修改的,但是IP地址是可以被網路管理人員配置修改的。
(4)”分工“不同
交換機主要是用於組建區域網,而路由器則是負責讓主機連線外網。多臺主機可以通過網線連線到交換機,這時就組建好了區域網,就可以將資料傳送給區域網中的其他主機,如我們使用的飛秋、極域電子教室等區域網軟體就是通過交換機把資料轉發給其他主機的,當然像極域電子教室這樣的廣播軟體是利用廣播技術讓所有的主機都收到資料的。然而,通過交換機組建的區域網是不能訪問外網的(即是Internet),這時需要路由器來為我們”開啟外面精彩世界的大門“,區域網的所有主機使用的都是私網的IP,所以必須通過路由器轉化為公網的IP之後才能訪問外網。
(5)衝突域和廣播域
交換機分割衝突域,但是不分割廣播域,而路由器分割廣播域。由交換機連線的網段仍屬於同一個廣播域,廣播資料包會在交換機連線的所有網段上傳播,在這種情況下會導致廣播風暴和安全漏洞問題。而連線在路由器上的網段會被分配不同的廣播域,路由器不會轉發廣播資料。需要說明的是單播的資料包在區域網中會被交換機唯一地送往目標主機,其他主機不會接收到資料,這是區別於原始的集線器的,資料的到達時間由交換機的轉發速率決定,交換機會轉發廣播資料給區域網中的所有主機。
最後需要說明的是:路由器一般有防火牆的功能,能夠對一些網路資料包選擇性過濾。現在的一些路由器都具備交換機的功能(如上圖右),一些交換機具備路由器的功能,被稱為3層交換機,廣泛使用。相比較而言,路由器的功能較交換機要強大,但是速度也較慢,價格昂貴,三層交換機既有交換機的線性轉發報文的能力,又有路由器的良好的路由功能因此得到廣泛的使用。
相關文章
- 計算機網路知識點計算機網路
- 計算機網路知識點總結計算機網路
- 計算機網路整理筆記01計算機網路筆記
- 計算機網路知識點總結(一)-物理層計算機網路
- 計算機網路——基礎知識(一)計算機網路
- 計算機網路考點整理計算機網路
- 乾貨:計算機網路知識總結計算機網路
- 計算機面試重難點之計算機網路面試計算機網路
- 前端需要了解的計算機網路知識前端計算機網路
- jQuery面試知識點整理jQuery面試
- 計算機網路基礎知識(面試準備)計算機網路面試
- 計算機網路再次整理————socket[一]計算機網路
- 計算機網路再次整理————tcp[二]計算機網路TCP
- 前端必須懂的計算機網路知識—(TCP)前端計算機網路TCP
- 前端必須懂的計算機網路知識—(HTTP)前端計算機網路HTTP
- 這些必會的計算機網路知識點你都掌握了嗎計算機網路
- React學習筆記知識點整理React筆記
- 計算機知識學習路線及書籍筆記索引計算機筆記索引
- 計算機網路基礎知識點快速複習手冊計算機網路
- 【知識分享】 計算機網路>速率、頻寬、吞吐量計算機網路
- 計算機網路再次整理————tcp例子[五]計算機網路TCP
- 計算機網路再次整理————UDP例子[六]計算機網路UDP
- 前端必須懂的計算機網路知識—(IP,MAC和網路模型)前端計算機網路Mac模型
- 自己整理的php面試知識點PHP面試
- 前端面試知識點目錄整理前端面試
- Vue 面試中常問知識點整理Vue面試
- PHP 面試知識點整理歸納PHP面試
- 計算機網路要點(二)計算機網路
- 計算機網路基礎知識總結計算機網路
- java面試--計算機網路Java面試計算機網路
- 機器學習知識點整理(三)機器學習
- 計算機網路再次整理————tcp例子前奏[三]計算機網路TCP
- 計算機網路再次整理————tcp周邊[八]計算機網路TCP
- MQTT知識點整理MQQT
- CANFD知識點整理
- String知識點整理
- JavaScript知識點整理JavaScript
- Runtime知識點整理