http, tcp三次握手和四次揮手

http請求的一次過程:
舉個例子:比如我想訪問www.baidu.com這個網址,
1 首先會對這個www.baidu.com進行dns解析,找到對應的ip地址
2 然後 客戶端對這個ip地址所對應的服務器進行tcp三次握手
3 tcp連接建立以後,客戶端發起http連接請求
4 服務器接收請求,並且響應
5 客戶端接收來自服務端的響應
6 斷開連接時, tcp進行四次揮手,斷開連接

dns怎麼解析的呢?
首先向本地的dns服務器發起查詢請求,如果找不到,就會到根dns服務器去找,然後根服務器再以子域.com地址應答,然後本地dns服務器向com dns服務器請求ip地址,.com dns服務器在以子域baidu.com地址來應答,本地dns服務器在向baidu.com 這個dns服務器進行ip請求,然後baidu.com 這個dns服務器就把www.baidu.com網址對應的ip地址告訴本地dns服務器,然後本地dns服務器在返回ip地址給客戶機。

tcp三次握手:
tcp是一個傳輸層協議
功能:
可靠傳輸 同序傳輸 建立會話 流量控制
說到tcp,不得不說一下udp
udp也是一個傳輸層協議
udp它是一個盡力傳輸協議,不可靠,事先不會建立會話,不會同序傳輸,不會可靠傳輸,不會進行流量控制

udp的報文字段數比較小,允許丟包現象,這種特性很適合實時視頻,因爲實時視頻需要流量高速傳輸,而且傳輸過程中可能會丟包,但是這並不會對通信造成很大影響,因爲你視頻的時候丟包,可能就是表現爲圖像失真或者聲音不是很清楚,這都是短暫的過程。tcp報文字段多,爲了保證各種功能,有許多複雜的機制,這樣開銷會比較大,它適合於web應用,數據庫和電子郵件客戶端等等。這些應用不允許數據的丟失,因爲任何的數據丟失都有可能導致通信的失敗。

tcp三次握手:
在這裏插入圖片描述
第一次握手:
客戶端發送一個syn,然後客戶端進入syn-send狀態,syn爲同步序列編號

第二次握手:
服務端接受了客戶端的syn,並且確認了,然後自己也發一個syn(SYN+ACK),服務端進入syn-recv

第三次握手:
客戶端收到了服務端的SYN+ACK,然後客戶端發送一個ACK給服務端,此包發送完畢,客戶端和服務器進入ESTABLISHED(TCP連接成功)狀態,完成三次握手。

四次揮手:
圖片:
在這裏插入圖片描述
第一次揮手:
客戶端發送一個FIN,用來關閉客戶端到服務器的數據發送,客戶端進入FIN-WAIT1狀態
第二次揮手:
服務端接收到FIN,發送一個ACK,此時服務器進入close_wait狀態,客戶端進入WAIT2
第三次揮手:
服務端發送一個FIN給客戶端,服務端進入LAST-ACK狀態,客戶端接收並且進入time-wait狀態
第四次揮手:
客戶端發送一個ACK,服務端接收後, 兩者就進入closed狀態

四次揮手釋放連接時,等待2MSL的意義?即time_wait = 2MSL的意義
第 一,爲了保證A發送的最有一個ACK報文段能夠到達B。這個ACK報文段有可能丟失,因而使處在LAST-ACK狀態的B收不到對已發送的FIN和ACK 報文段的確認。B會超時重傳這個FIN和ACK報文段,而A就能在2MSL時間內收到這個重傳的ACK+FIN報文段。接着A重傳一次確認。
第二,就是防止上面提到的已失效的連接請求報文段出現在本連接中,A在發送完最有一個ACK報文段後,再經過2MSL,就可以使本連接持續的時間內所產生的所有報文段都從網絡中消失

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