HTTP和TCP協議,三次握手四次揮手

一、HTTP是什麼
http(HyperText Transfer Protocol),超文本傳輸協議,是互聯網上最廣泛的一種網絡傳輸協議,所有www文件都必須遵守的一個標準,是以ASCII碼傳輸,建立在TCP/IP協議上的應用層規範。用於從www服務器傳輸超文本到本地瀏覽器的傳輸協議。HTTP是採用明文形式進行數據傳輸。
http可以說成是一種客戶端和應答服務器端請求和應答的標準((TCP)。通過瀏覽器或其他工具(postman),客戶端發起一個到應答服務器上指定端口的http請求,或者反過來,服務器給客戶端發送一個迴應。在客戶端和應答服務器端可能存在多箇中間層,比如代理、網關或者隧道。

二、HTTP請求報文
http請求報文是指客戶端到服務器端的消息,客戶端通過發送http請求向服務器請求對資源的訪問。包括三個部分:請求行、請求頭、請求數據。請求方法有OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT這幾種。
1.請求行:包含請求方法、url和協議的版本,用空格分隔,例如:GET/sample.jsp HTTP/1.1
2.請求頭:包含有關客戶端環境及請求正文的信息,如請求正文長度、瀏覽器所用編碼格式等,
Host localhost
Content-Type application/x-www-form-urlencoded
Accept /
Connection keep-alive
Cookie
User-Agent Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)
Accept-Language en;q=1
Content-Length 432
Accept-Encoding gzip, deflate
3.請求體:即客戶端發送給服務器的內容,可謂空,GET請求就沒有請求數據
三、HTTP應答報文
http應答報文是指服務器迴應http請求,發送給客戶端的消息。也包括三個部分:狀態行、響應頭部、響應數據。
1.狀態行:協議版本、狀態碼、簡要描述,例如HTTP/1.1 200 OK
2.響應頭部: 必須指明content-Type,其他可選
3.響應數據:即服務器迴應客戶端的內容
常見狀態碼:
1xx:指示信息-表示請求已接收,繼續處理。
2xx:成功-表示請求已被成功接收。
3xx:重定向-要完成請求必須進行更進一步操作。
4xx:客戶端錯誤-請求有預發錯誤或請求無法實現。
5xx:服務器錯誤—服務器未能實現合法的請求。

四、HTTP請求與響應步驟
http請求和響應,就是計算機之間的通信。
一開始的HTTP協議中每進行一次HTTP通信就斷開TCP鏈接。
在這裏插入圖片描述
在同時請求很多資源時,每次連接就會造成無謂的TCP連接的建立和斷開,增加了通信量的開銷。
後面出現了持久鏈接HTTP keep alive或者HTTP connection reuse。只要任意一端沒有明確提出斷開鏈接,則保持TCP狀態。
在這裏插入圖片描述
既減少了TCP鏈接重複建立和斷開的時間開銷,又減輕了服務端的負載

具體步驟:
1.建立鏈接
先解析DNS把localhost變成ip(127.0.0.1),然後根據127.0.0.1和端口號8080簡歷socket.即三次握手建立TCP鏈接,確定通訊正常.
2.發送請求命令
socket建立好之後,客戶端開始向web服務器發送請求命令(GET/POST)
3.發送請求頭和請求
客戶端先發送與自身相關的信息,再發送空行表示請求頭髮送完畢,如果是post,則繼續發送請求正文。
4.回傳狀態行
應答第一步,發送協議版本和狀態碼
5.回傳應答頭
應答第二部,先發送自身相關信息、Content-Type以及被請求的文檔,在發送空行表示應答頭髮送完畢。
6.回傳應答正文
一次會話完成,如果設置了Connection:keep-alive則TCP連接不關閉,否則關閉

五、TCP/IP協議
TCP/IP協議簇是一組不同層次的多個協議的組合,通常被認爲是一個五層協議系統(鏈路層、網路層、傳輸層、應用層、物理層),與OSI的七層模型(應用層、表示層、會話層、傳輸層、網路層、鏈路層、物理層)相對應。
在這裏插入圖片描述
1.應用層
應用層決定了向用戶提供應用服務時通信的活動。TCP/IP協議簇內預存了各類通用的應用服務器.包括HTTP,FTP,DNS,SMTP
2.傳輸層
主要爲兩臺主機上的應用程序提供端到端的通信。在TCP/IP協議簇中,有兩個互不相同的傳輸協議:TCP(傳輸控制協議)和UDP(用戶數據報協議)。
TCP爲兩臺主機提供高可靠性能的數據通信。它所做的工作包括把所有應用程序交給他的數據分成合適的大小塊交給下面的網絡層,確認接收到的分組,設置發送最後確認分組的超時時鐘等。由於傳輸層提供了高可靠性的端到端通信,因此應用層可以忽略這些細節,TCP採用了超時重傳、發送和接受端到端的確認分組等機制。
UDP則爲應用層提供一種非常簡單的服務,只是把稱作數據報的分組從一臺主機發送到另外一臺主機,但並不保證數據報能到達另一端。一個數據報是指從發送方傳輸到接收方的一個信息單元.UDP協議所需要的可靠性必須由應用層來提供。
3.網絡層
也稱互聯網層,處理分組在網絡中的活動,例如分組的選路。在TCP/IP協議族中,網絡層包括IP協議(網際協議)、ICMP(interent互聯網控制報文協議)、IGMP(internet組管理協議)
(1)IP是一種網絡層協議,提供的是一種不可靠的服務,只是儘可能地把分組從源節點送到目的節點,但是並不提供任何可靠性保證。同時被TCP和UDP使用,TCP和UDP的每組數據都通過端系統和每個中間路由器中的IP層在互聯網中進行傳輸。
(2)ICMP是IP的附屬協議,IP層用它來與其他主機或路由器交換錯誤報文和其他重要信息。
(3)IGMP是Internet組管理協議。它用來把一個UDP數據報多播到多個主機。
4.鏈路層
也稱作數據鏈路層或網絡接口層,通常包括操作系統中的設備驅動程序和計算機中對應的網絡接口卡。它們一起處理與電纜(或者其他任何媒介傳輸)的物理接口細節。ARP(地址解析協議)和RARP(逆地址解析協議)是某些網絡接口(以太網和令牌環網),使用的特殊協議,用來轉換IP層和網絡接口層使用的地址。
5.物理層
實際最終信號的傳輸是通過物理層實現,通過物理介質傳輸比特流。規定了電平、速度和電纜針腳。常用設備有:集線器、中繼器、調制解調器、網線、雙絞線、同軸電纜等物理介質。
在這裏插入圖片描述
六、相關知識點

1. HTTP和HTTPS

在這裏插入圖片描述
HTTPS是HTTP上建立SSL加密層,並對傳輸數據進行加密,是HTTP協議的安全版。HTTPS的主要作用是:

	(1)對數據進行加密,並建立一個信息安全通道,來保證傳輸過程中的數據安全。
	(2)對網站服務器進行真實身份認證。

二者區別:
	(1)HTTPS是加密傳輸,HTTP是明文傳輸
	(2)HTTPS需要用到SSL證書,HTTP不用
	(3)HTTPS比HTTP更安全,對搜索引擎更友好
	(4)HTTPS標準端口爲443,HTTP爲80
	(5)HTTPS基於傳輸層,HTTP基於應用層
	(6)HTTPS在瀏覽器顯示綠色安全鎖,HTTP沒有

在這裏插入圖片描述
2、TCP三次握手,爲什麼?
TCP是面向連接的,無論哪一方向另一方發送數據之前,都必須先在雙方之間建立一條連接。在TCP/IP協議中,TCP協議提供可靠的鏈接服務,鏈接是通過三次握手進行初始化的。三次握手的目的是同步連接雙方的序列號和確認號並交換TCP窗口大小信息。
第一次握手:建立連接,客戶端發送連接請求報文段,將SYN位置爲1,Sequence Number爲x;然後,客戶端進入SYN_SEND狀態,等待服務器確認;
第二次握手:服務器收到SYN報文段,服務器收到客戶端的SYN報文段,需要對這個SYN報文段進行確認,設置Acknowledgment Number爲x+1(Sequence Number +1);同時,自己還要發送SYN請求信息,將SYN+1,Sequence Number爲y;服務器端將上述所有信息放到一個報文段(即SYN+ACK報文段)中,一併發送給客戶端,此時服務器進入SYN_RECV狀態
第三次握手:客戶端收到服務器的SYN+ACK報文段,然後將Acknowledgment Number設置爲y+1,想服務器發送ACK報文段,這個報文段發送完畢後,客戶端和服務器端都進入了ESTABLISHED狀態完成三次握手。
原因:爲了防止已失效的連接請求報文段突然又傳送到了服務器端,因而產生錯誤。例如:client發出的第一個連接請求報文段沒有丟失,而是在某個網絡節點長時間滯留,以致延誤到連接釋放以後某個時間點到達sever,本來這是一個早已失效的報文段,但server收到此失效的連接請求報文段後,就誤認爲是client再次發出的一個新的連接請求,於是就向client發出確認報文段,同意建立連接。假設不採用”三次握手”,那麼只要server發出確認,新的連接就建立了。由於現在client並沒有發出建立連接的請求,因此不會理睬server的確認,也不會發送數據。但是server已經建立連接,並一直等待client發送數據。這樣就會造成server資源浪費.
在這裏插入圖片描述
3.TCP四次揮手,爲什麼?
當客戶端和服務端通過三次握手建立了TCP連接後,當數據傳輸完畢,肯定是要斷開TCP連接的,就需要四次揮手。

第一次揮手:主機1(可以是客戶端也可以是服務端),設置Sequence Number,向主機2發送一個FIN報文段;此時,主機1進入FIN_WAIT_1狀態,這表示主機1沒有數據要發送給主機2了,主機2收到了主機1發送的FIN報文段,主機2會關閉讀通道;	

第二次揮手:主機2收到了主機1發送的FIN報文段,向主機1回一個ACK報文段,Acknowledgment Number爲Sequence Number +1;主機1進入FIN_WAIT_2狀態;主機2告訴主機1,同意關閉請求,主機1收到報文段後關閉主機1的寫通道;

第三次揮手:主機2向主機1發送FIN報文段,請求關閉連接,主機2進入LAST_ACK狀態,主機1收到FIN報文段後會關閉自己的讀通道;

第四次揮手:主機1收到主機2的FIN報文段後,向主機2發送ACK報文段,主機1進入了TIME_WAIT狀態;主機2收到主機1的ACK報文段後,會直接關閉寫通道,關閉連接,主機1則在等待2msl後關閉;

原因: TCP協議是一種面向連接的、可靠的、基於字節流的運輸層通信協議。TCP是全雙工模式,這就意味着,當主機1發出FIN報文段時,只是表示主機1沒有數據要發送了,主機1告訴主機2,它的數據已全部發送完畢了;但是這個時候主機1可以接受來自主機2的數據,當主機2返回ACK報文段時,表示它已經知道主機1沒有數據發送了,但是主機2還是可以向主機1發送數據的,當主機2也發送FIN報文段時,就表示主機2也沒有數據要發送了,這時候主機1就知道主機2也沒有數據發送了,兩個主機之間就可以徹底斷開鏈接了

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章