1.先來看看一張概要圖
2.分析過程
(1)用戶輸入url,瀏覽器內部代碼將url進行拆分解析,如下圖所示:
(2) 瀏覽器首先去找本地的hosts文件,檢查在該文件中是否有相應的域名、IP對應關系,如果有,則向其IP地址發送請求,如果沒有就會將domain(域)發送給 dns(域名服務器)進行解析(解析如下圖),將域名解析成對應的服務器IP地址,發回給瀏覽器



第一次握手:host1發送一個TCP標志位 SYN=1、ACK=0的數據包給host2,並隨機會產生一個Sequence number=1110,當host2接受到這個數據后,host2由SYN=1可知客戶端是想要建立連接
第二次握手:host2要對客戶端的聯機請求進行確認,向host1發送應答號ACK=1、SYN=1、確認號Acknowledge number =1111,此值是host1的序列號+1,還會產生一個隨機的序列號Sequence number = 22222,這樣就告訴host1可以進行連接;
第三次握手:host1收到數據后檢查Acknowledge number 是否是1110 + 1的值,以及ACK的值是否為1,若為1,host1會發送ACK = 1、確認號碼Acknowledge number = 22222,告訴host2,你的請求連接被確認,連接可以建立
TCP(Transmission Control Protocol 傳輸控制協議)是一種面向連接的、可靠的、基於字節流的傳輸層通信協議。
在運用此協議進行數據傳輸前都會進行連接的建立工作(三次握手)
當數據傳輸完畢,連接的雙方都會通知對方要釋放此連接(四次揮手)
tcp標志位有6種標志位
1.SYN(synchronous )建立聯機
2.ACK(acknowledgement)確認
3.PSH(push)傳送
4.FIN(finsh)結束
5.RST(reset)重置
6.URG(urgent)緊急

第一次揮手:當傳輸的數據到達尾部時,host1向host2發送FIN = 1標志位;可理解成,host1向host2說,我這邊數據傳送完成了,我准備斷開連接了
第二次揮手:因TCP的連接是全雙工的雙向連接,關閉也是要從兩邊關閉;當host2收到host1發來的FIN=1的標志位后,host2不會立刻向host1發送FIND=1的請求關閉信息,而是先向host1發送一個ACK=1的應答信息,表示:你請求關閉的請求我已經收到,但我可能還有數據沒有完成傳送,你再等下,等我數據傳輸完成了我就告訴你
第三次揮手:host2數據傳輸完成,向host1發送FIN=1,host1收到請求關閉 連接的請求后,host1就明白host2的數據已經傳輸完成,現在可以斷開連接了
第四次揮手:host1收到FIN = 1后,host1還是怕由於網絡不穩定的原因,怕host2不知道他要斷開連接,於是向host2發送ACK = 1確認信息進行確認,把自己(host1)設置成TIME_WAIT的狀態並啟動2MSL定時器,如果host2沒有收到ACK,host2端重傳定時器觸發,會重發FIN = 1,要求host1重新發送ACK,當host2收到ACK后,host2就斷開連接;;當host1等待2MSL(2倍報文最大生存時間)后,仍然沒有收到host2的重傳請求,他就知道 host2已經收到了ACK,所以 host1此時才關閉連接,否則會重復上述過程,如果被動一方始終沒能收到ACK,最終會超過最大重傳次數,連接被關閉 這一點設計地很巧妙