http協議相關面試題整理


1、 什么是http協議無狀態協議?怎么解決http協議無狀態協議?

(1)無狀態協議對於事務處理沒有記憶能力。缺少狀態意味着如果后續處理需要前面的信息

(2)無狀態協議解決方法:通過1、cookie 2、通過session會話保存

2、http報文由什么組成?

請求報文包括:

(1)請求行:包含請求方法,URL、http版本協議

(2)請求首部字段

(3)請求內容實體

響應報文包括:

(1)狀態行:包括http版本、狀態碼、狀態碼原因短語

(2)響應首部字段

(3)響應內容實體

3、http協議實現的原理機制

整個流程步驟

域名解析--》發起tcp的三次握手--》發起http請求--》服務器響應http請求--》瀏覽器解析html代碼,並請求html代碼中的資源--》瀏覽器對頁面進行渲染呈現給用戶

4、常用的http方法有哪些?

GET:用於請求訪問已經被URI識別的資源,可以通過URL傳參給服務器

POST:用於傳輸信息給服務器,主要功能與get方法類似,但一般推薦使用POST方式

PUT:傳輸文件,報文主體中包含文件內容,保存到對於URI位置。

HEAD:獲得報文首部,與get方法類似,只是不返回報文主體,一般用於驗證URI是否有效

DELETE:刪除文件,與PUT方法類似,刪除對應URI位置的文件

OPTIONS:查詢相應URI支持的HTTP方法

5、POST與GET的區別

(1)get在瀏覽器回退時是無害的,而post會再次請求

(2)get產生的url地址可以被收藏,而post不會

(3)get請求會被瀏覽器主動緩存,而post不會,除非手動設置

(4)get只能進行url編碼,而post支持多種編碼

(5)get請求參數會被完整保留在瀏覽器歷史記錄里,而post中的參數不會被保留

(6)get請求在url中傳送的長度有限制,而post沒有

(7)get的參數直接暴露在url上,所以不能用於傳遞敏感參數

(8)get產生一個TCP數據包,post產生兩個tcp包(對於get,瀏覽器會把http header和data一起發送出去,服務器響應200;而對於post,瀏覽器先發送header,服務器響應100continue,瀏覽器再發送data,服務器響應200ok)

6、http請求常見的狀態碼

(1)2開頭,表示成功處理了請求的狀態代碼

200 (成功)服務器已成功處理了請求

(2)3開頭(請求被重定向)表示要完成請求,需要進一步操作

302(臨時移動)服務器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以后的請求

304(未修改)自從上次請求后,請求的網頁未修改過,服務器返回此響應時,不會返回網頁內容

(3)4開頭(請求錯誤)

400(錯誤請求)服務器不理解請求的語法

401(未授權)請求要求身份驗證

403(禁止)服務器拒絕請求

404(未找到)服務器找不到請求的網頁

(4)5開頭(服務器錯誤)

500(服務器內部錯誤)

502(錯誤網關)服務器作為網關或代理,從上游服務器收到無效響應

505(http版本不支持)

7、http與https有什么區別?

(1)https協議需要ca申請認證書,一般免費的較少

(2)http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議

(3)http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,厚澤是443

(4)http的連接很簡單,是無狀態的,https協議是由ssl+http協議構建的可進行加密傳輸,身份認證的網絡協議,比http安全

 

 

 

Internet采用哪種網絡協議?該協議的主要層次結構?
TCP/IP協議(Transmission Control Protocol/Internet Protocol)叫做傳輸控制/網際協議,又叫網絡通訊協議,這個協議是Internet國際互聯網絡的基礎。


TCP/IP是用於計算機通信的一組協議,我們通常稱它為TCP/IP協議族。
TCP/IP是網絡中使用的基本的通信協議。雖然從名字上看TCP/IP包括兩個協議,傳輸控制協議(TCP)和網際協議(IP),但TCP/IP實際上是一組協議,它包括TCP、IP、UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP、TFTP等許多協議,這些協議一起稱為TCP/IP協議。
TCP/IP由四個層次組成:數據鏈路層、網絡層、傳輸層、應用層。

數據鏈路層
這是TCP/IP軟件的最低層,負責接收IP數據報並通過網絡發送,或者從網絡上接收物理幀,抽出IP數據報,交給IP層。
網絡層
負責相鄰計算機之間的通信。其功能包括三方面:
a、處理來自傳輸層的分組發送請求,收到請求后,將分組裝入IP數據報,填充報頭,選擇去往信宿機的路徑,然后將數據報發往適當的網絡接口。
b、處理輸入數據報:首先檢查其合法性,然后進行尋徑–假如該數據報已到達信宿機,則去掉報頭,將剩下部分交給適當的傳輸協議;假如該數據報尚未到達信宿,則轉發該數據報。
c、處理路徑、流控、擁塞等問題。
傳輸層
提供應用程序間的通信。其功能包括:
a、格式化信息流;
b、提供可靠傳輸。為實現后者,傳輸層協議規定接收端必須發回確認,並且假如分組丟失,必須重新發送。
應用層
向用戶提供一組常用的應用程序,比如電子郵件、文件傳輸訪問、遠程登錄等。遠程登錄TELNET使用TELNET協議提供在網絡其它主機上注冊的接口。TELNET會話提供了基於字符的虛擬終端。文件傳輸訪問FTP使用FTP協議來提供網絡內機器間的文件拷貝功能。
OSI七層模型與TCP/IP協議的對應關系。
OSI中的層 功能 TCP/IP協議族
應用層 文件傳輸,電子郵件,文件服務,虛擬終端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet
表示層 數據格式化,代碼轉換,數據加密 沒有協議
會話層 解除或建立與別的接點的聯系 沒有協議
傳輸層 提供端對端的接口 TCP,UDP
網絡層 為數據包選擇路由 IP,ICMP,RIP,OSPF,BGP,IGMP
數據鏈路層 傳輸有地址的幀以及錯誤檢測功能 SLIP,CSLIP,PPP,ARP,RARP,MTU
物理層 以二進制數據形式在物理媒體上傳輸數據

TCP/IP協議中一些常用協議英文名:
TCP(Transmission Control Protocol)傳輸控制協議
IP(Internet Protocol)網際協議
UDP(User Datagram Protocol)用戶數據報協議
ICMP(Internet Control Message Protocol)互聯網控制信息協議
SMTP(Simple Mail Transfer Protocol)簡單郵件傳輸協議
SNMP(Simple Network manage Protocol)簡單網絡管理協議
FTP(File Transfer Protocol)文件傳輸協議
ARP(Address Resolation Protocol)地址解析協議

Internet物理地址和IP地址轉換采用什么協議?
ARP (Address Resolution Protocol)(地址解析協議)。

IP地址的編碼分為哪倆部分?
IP地址由兩部分組成,網絡號和主機號。不過是要和“子網掩碼”按位與上之后才能區分哪些是網絡位哪些是主機位。

TCP/IP通信建立的過程怎樣,端口有什么作用?
TCP是主機對主機層的傳輸控制協議,提供可靠的連接服務,采用三次握手確認建立一個連接:

位碼即tcp標志位,有6種標示:
SYN(synchronous建立聯機)
ACK(acknowledgement 確認)
PSH(push傳送)
FIN(finish結束)
RST(reset重置)
URG(urgent緊急)
Sequence number(順序號碼)
Acknowledge number(確認號碼)

客戶端TCP狀態遷移:
CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED
服務器TCP狀態遷移:
CLOSED->LISTEN->SYN收到->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED


各個狀態的意義如下:
LISTEN - 偵聽來自遠方TCP端口的連接請求;
SYN-SENT -在發送連接請求后等待匹配的連接請求;
SYN-RECEIVED - 在收到和發送一個連接請求后等待對連接請求的確認;
ESTABLISHED- 代表一個打開的連接,數據可以傳送給用戶;
FIN-WAIT-1 - 等待遠程TCP的連接中斷請求,或先前的連接中斷請求的確認;
FIN-WAIT-2 - 從遠程TCP等待連接中斷請求;
CLOSE-WAIT - 等待從本地用戶發來的連接中斷請求;
CLOSING -等待遠程TCP對連接中斷的確認;
LAST-ACK - 等待原來發向遠程TCP的連接中斷請求的確認;
TIME-WAIT -等待足夠的時間以確保遠程TCP接收到連接中斷請求的確認;
CLOSED - 沒有任何連接狀態;

TCP/IP協議中,TCP協議提供可靠的連接服務,采用三次握手建立一個連接,如圖1所示。

(1)第一次握手:建立連接時,客戶端A發送SYN包(SYN=j)到服務器B,並進入SYN_SEND狀態,等待服務器B確認。

(2)第二次握手:服務器B收到SYN包,必須確認客戶A的SYN(ACK=j+1),同時自己也發送一個SYN包(SYN=k),即SYN+ACK包,此時服務器B進入SYN_RECV狀態。

(3)第三次握手:客戶端A收到服務器B的SYN+ACK包,向服務器B發送確認包ACK(ACK=k+1),此包發送完畢,客戶端A和服務器B進入ESTABLISHED狀態,完成三次握手。

完成三次握手,客戶端與服務器開始傳送數據。

確認號:其數值等於發送方的發送序號 +1(即接收方期望接收的下一個序列號)。

TCP的包頭結構:


第一次握手:
客戶端發送一個TCP的SYN標志位置1的包指明客戶打算連接的服務器的端口,以及初始序號X,保存在包頭的序列號(Sequence Number)字段里。
第二次握手:
服務器發回確認包(ACK)應答。即SYN標志位和ACK標志位均為1同時,將確認序號(Acknowledgement Number)設置為客戶的I S N加1以.即X+1。
第三次握手.
客戶端再次發送確認包(ACK) SYN標志位為0,ACK標志位為1.並且把服務器發來ACK的序號字段+1,放在確定字段中發送給對方.並且在數據段放寫ISN的+1

關閉連接:
由於TCP連接是全雙工的,因此每個方向都必須單獨進行關閉。這個原則是當一方完成它的數據發送任務后就能發送一個FIN來終止這個方向的連接。收到一個 FIN只意味着這一方向上沒有數據流動,一個TCP連接在收到一個FIN后仍能發送數據。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。
CP的連接的拆除需要發送四個包,因此稱為四次揮手(four-way handshake)。客戶端或服務器均可主動發起揮手動作,在socket編程中,任何一方執行close()操作即可產生揮手操作。
(1)客戶端A發送一個FIN,用來關閉客戶A到服務器B的數據傳送。
(2)服務器B收到這個FIN,它發回一個ACK,確認序號為收到的序號加1。和SYN一樣,一個FIN將占用一個序號。
(3)服務器B關閉與客戶端A的連接,發送一個FIN給客戶端A。
(4)客戶端A發回ACK報文確認,並將確認序號設置為收到序號加1。

 

深入理解TCP連接的釋放:
由於TCP連接是全雙工的,因此每個方向都必須單獨進行關閉。這原則是當一方完成它的數據發送任務后就能發送一個FIN來終止這個方向的連接。收到一個 FIN只意味着這一方向上沒有數據流動,一個TCP連接在收到一個FIN后仍能發送數據。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。
TCP協議的連接是全雙工連接,一個TCP連接存在雙向的讀寫通道。
簡單說來是 “先關讀,后關寫”,一共需要四個階段。以客戶機發起關閉連接為例:
1.服務器讀通道關閉
2.客戶機寫通道關閉
3.客戶機讀通道關閉
4.服務器寫通道關閉
關閉行為是在發起方數據發送完畢之后,給對方發出一個FIN(finish)數據段。直到接收到對方發送的FIN,且對方收到了接收確認ACK之后,雙方的數據通信完全結束,過程中每次接收都需要返回確認數據段ACK。
詳細過程:
第一階段 客戶機發送完數據之后,向服務器發送一個FIN數據段,序列號為i;
1.服務器收到FIN(i)后,返回確認段ACK,序列號為i+1,關閉服務器讀通道;
2.客戶機收到ACK(i+1)后,關閉客戶機寫通道;
(此時,客戶機仍能通過讀通道讀取服務器的數據,服務器仍能通過寫通道寫數據)
第二階段 服務器發送完數據之后,向客戶機發送一個FIN數據段,序列號為j;
3.客戶機收到FIN(j)后,返回確認段ACK,序列號為j+1,關閉客戶機讀通道;
4.服務器收到ACK(j+1)后,關閉服務器寫通道。
這是標准的TCP關閉兩個階段,服務器和客戶機都可以發起關閉,完全對稱。
FIN標識是通過發送最后一塊數據時設置的,標准的例子中,服務器還在發送數據,所以要等到發送完的時候,設置FIN(此時可稱為TCP連接處於半關閉狀態,因為數據仍可從被動關閉一方向主動關閉方傳送)。如果在服務器收到FIN(i)時,已經沒有數據需要發送,可以在返回ACK(i+1)的時候就設置FIN(j)標識,這樣就相當於可以合並第二步和第三步。

TCP的TIME_WAIT和Close_Wait狀態

除了ESTABLISHED,可以看到連接數比較多的幾個狀態是:FIN_WAIT1, TIME_WAIT, CLOSE_WAIT, SYN_RECV和LAST_ACK;下面的文章就這幾個狀態的產生條件、對系統的影響以及處理方式進行簡單描述。


下面看下大家一般比較關心的三種TCP狀態:
SYN_RECV : 服務端收到建立連接的SYN沒有收到ACK包的時候處在SYN_RECV狀態。有兩個相關系統配置:
CLOSE_WAIT: 發起TCP連接關閉的一方稱為client,被動關閉的一方稱為server。被動關閉的server收到FIN后,但未發出ACK的TCP狀態是CLOSE_WAIT。出現這種狀況一般都是由於server端代碼的問題,如果你的服務器上出現大量CLOSE_WAIT,應該要考慮檢查代碼。
TIME_WAIT: 根據TCP協議定義的3次握手斷開連接規定,發起socket主動關閉的一方 socket將進入TIME_WAIT狀態。TIME_WAIT狀態將持續2個MSL(Max Segment Lifetime),在Windows下默認為4分鍾,即240秒。TIME_WAIT狀態下的socket不能被回收使用. 具體現象是對於一個處理大量短連接的服務器,如果是由服務器主動關閉客戶端的連接,將導致服務器端存在大量的處於TIME_WAIT狀態的socket, 甚至比處於Established狀態下的socket多的多,嚴重影響服務器的處理能力,甚至耗盡可用的socket,停止服務。
為什么需要TIME_WAIT?TIME_WAIT是TCP協議用以保證被重新分配的socket不會受到之前殘留的延遲重發報文影響的機制,是必要的邏輯保證。

為了方便描述,我給這個TCP連接的一端起名為Client,給另外一端起名為Server。上圖描述的是Client主動關閉的過程,FTP協議中就這樣的。如果要描述Server主動關閉的過程,只要交換描述過程中的Server和Client就可以了,HTTP協議就是這樣的。

描述過程:
Client調用close()函數,給Server發送FIN,請求關閉連接;Server收到FIN之后給Client返回確認ACK,同時關閉讀通道(不清楚就去看一下shutdown和close的差別),也就是說現在不能再從這個連接上讀取東西,現在read返回0。此時Server的TCP狀態轉化為CLOSE_WAIT狀態。
Client收到對自己的FIN確認后,關閉 寫通道,不再向連接中寫入任何數據。
接下來Server調用close()來關閉連接,給Client發送FIN,Client收到后給Server回復ACK確認,同時Client關閉讀通道,進入TIME_WAIT狀態。
Server接收到Client對自己的FIN的確認ACK,關閉寫通道,TCP連接轉化為CLOSED,也就是關閉連接。
Client在TIME_WAIT狀態下要等待最大數據段生存期的兩倍,然后才進入CLOSED狀態,TCP協議關閉連接過程徹底結束。

以上就是TCP協議關閉連接的過程,現在說一下TIME_WAIT狀態。
從上面可以看到,主動發起關閉連接的操作的一方將達到TIME_WAIT狀態,而且這個狀態要保持Maximum Segment Lifetime的兩倍時間。為什么要這樣做而不是直接進入CLOSED狀態?

原因有二:
一、保證TCP協議的全雙工連接能夠可靠關閉
二、保證這次連接的重復數據段從網絡中消失

先說第一點,如果Client直接CLOSED了,那么由於IP協議的不可靠性或者是其它網絡原因,導致Server沒有收到Client最后回復的ACK。那么Server就會在超時之后繼續發送FIN,此時由於Client已經CLOSED了,就找不到與重發的FIN對應的連接,最后Server就會收到RST而不是ACK,Server就會以為是連接錯誤把問題報告給高層。這樣的情況雖然不會造成數據丟失,但是卻導致TCP協議不符合可靠連接的要求。所以,Client不是直接進入CLOSED,而是要保持TIME_WAIT,當再次收到FIN的時候,能夠保證對方收到ACK,最后正確的關閉連接。

再說第二點,如果Client直接CLOSED,然后又再向Server發起一個新連接,我們不能保證這個新連接與剛關閉的連接的端口號是不同的。也就是說有可能新連接和老連接的端口號是相同的。一般來說不會發生什么問題,但是還是有特殊情況出現:假設新連接和已經關閉的老連接端口號是一樣的,如果前一次連接的某些數據仍然滯留在網絡中,這些延遲數據在建立新連接之后才到達Server,由於新連接和老連接的端口號是一樣的,又因為TCP協議判斷不同連接的依據是socket pair,於是,TCP協議就認為那個延遲的數據是屬於新連接的,這樣就和真正的新連接的數據包發生混淆了。所以TCP連接還要在TIME_WAIT狀態等待2倍MSL,這樣可以保證本次連接的所有數據都從網絡中消失。

IP組播有那些好處?
Internet上產生的許多新的應用,特別是高帶寬的多媒體應用,帶來了帶寬的急劇消耗和網絡擁擠問題。組播是一種允許一個或多個發送者(組播源)發送單一的數據包到多個接收者(一次的,同時的)的網絡技術。組播可以大大的節省網絡帶寬,因為無論有多少個目標地址,在整個網絡的任何一條鏈路上只傳送單一的數據包。所以說組播技術的核心就是針對如何節約網絡資源的前提下保證服務質量。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM