在http的三次握手當中,首先客戶端發起一個我要發送一個數據包的請求,發送到服務端,這里面呢會有一個標志SYN=1,Seq=X,syn是一個標識,就是我這是一個創建請求的數據包,然后seq等於一個數字,一般來說都是1,然后服務端接收之后,知道了我有一個客戶要跟我創建連接了,那創建這個連接之后呢,服務端就會開啟一個tcp,socket的一個端口,然后這個端口開啟了之后,它返回給客戶端,它返回的數據里面也是一個SYN=1,ACK=X+1,Seq=Y,然后它會返回一個ACK,ACK就等於第一次發送過來的Seq,就是X,然后+1,然后它再發送一個Seq,這個是服務器端的一個Seq,然后客戶端拿到之后,服務端允許我們打開創建這個連接,然后客戶端再去發送它的ACK=Y+1,Seq=Z,它再發送一個Seq,等於一個新的數字Z,這就是tcp去創建的一個過程
=======================
第一次握手: 建立連接,客戶端A發送SYN=1、隨機產生Seq=client_isn的數據包到服務器B,等待服務器確認。
第二次握手: 服務器B收到請求后確認聯機(可以接受數據),發起第二次握手請求,ACK=(A的Seq+1)、SYN=1,隨機產生Seq=client_isn的數據包到A。
第三次握手: A收到后檢查ACK是否正確,若正確,A會在發送確認包ACK=服務器B的Seq+1、ACK=1,服務器B收到后確認Seq值與ACK值,若正確,則建立連接。
至於為什么要經過三次握手呢,是為了防止服務端開啟一些無用的鏈接,網絡傳輸是有延時的,中間可能隔着非常遠的距離,通過光纖或者中間代理服務器等,客戶端發送一個請求,服務端收到之后如果直接創建一個鏈接,返回內容給到客戶端,因為網絡傳輸原因,這個數據包丟失了,客戶端就一直接收不到服務器返回的這個數據,超過了客戶端設置的時間就關閉了,那么這時候服務端是不知道的,它的端口就會開着等待客戶端發送實際的請求數據,服務這個開銷也就浪費掉了
=====================
http的三次握手和四次揮手:
瀏覽器在給服,務器傳輸數據之前,有三次握手,握手成功之后,才可以傳輸數據
1、瀏覽器需要先發送SYN碼,客戶端請求和服務器建立連接;
2、服務器接收到SYN碼,再發送給客戶端SYN+ACK碼,我可以建立連接;
3、客戶端接收到ACK碼,驗證這個ACK是否正確,如果正確則客戶端和服務端則建立起數據連接;雙方的數據發送通道都將開啟;
四次揮手:
1、當客戶端無數據要傳輸了,會發送FIN碼告訴服務器,我發送完畢了;
2、當服務端接收完畢后,告訴客戶端ACK碼,告訴客戶端你可以把數據通道關閉了;
3、當服務器發送完畢之后,也會發送FIN碼,告訴瀏覽器,數據發送完畢;
4、當客戶端接收完畢 之后,同樣發送ACK碼,告訴服務器,數據接收完畢,你可以關閉;
三次握手和四次揮手的好處:確保數據的安全和完整
============
物理層將二進制的0和1和電壓高低,光的閃滅和電波的強弱信號進行轉換
鏈路層代表驅動