1、這么多設備向服務器發請求,服務器怎么知道某個響應結果應該回傳給我的設備,而不是你的設備?

首先,一般的HTTP協議的請求,都是在TCP的3次握手之后再進行數據傳輸的。在這3次握手之后就已經“建立起了連接”??梢哉f在3次握手的時候就已經確定了源和目標的ip+端口(如果是IPv4 Internet Protocol version 4的話)。

那具體是怎么知道的呢?

1.源和目標之間發送的是數據包,是一段數據流。
2.這個IP包有自己的數據結構,如下:


*轉載自http://blog.csdn.net/ns_code/article/details/29382883 *

3.而其中IP頭部的數據結構如下:


轉載自http://www.51testing.com/html/66/138366-216709.html

4.TCP頭部的數據結構如下:


5.可以看到,IP頭部結構中的Source Address和Destination Address,長度為32bit(最多可表示256的4次方),即源和目標的IP地址。

6.TCP頭部結構中的源端口號和目的端口號,就標識了客戶端和服務器中具體的某一個進程。

有了這些數據就能唯一確定源和目標,這樣服務器的結果就能只響應給我,而不是響應給你。


另外,我們常說的“3次握手之后就建立起了連接,就能傳數據了”,這個“建立起了連接”是啥意思?

“建立起了連接”是個籠統的說法,更準確的版本是“建立起了傳輸數據的環境”或者說“接收方和發送方,都知道自己要向什么地方發送數據,而且能夠保證自己所得到的數據,就是發送方發的數據”。

這個環境至少需要兩個條件:

  • 源和目標的IP+端口號
  • 源和目標雙方都確認了起始序列號

第一點其實就是上面說的,第二點是這樣:

首先
TCP 會通過三次握手來完成連接建立,具體過程是這樣的:
1.客戶端首先向服務端發送一個 SYN 包和一個隨機序列號 A
2.服務端收到后會回復客戶端一個 SYN-ACK 包以及一個確認號(用于確認收到 SYN)A+1,同時再發送一個隨機序列號 B
3.客戶端收到后會發送一個 ACK 包以及確認號(用于確認收到 SYN-ACK)B+1 和序列號 A+1 給服務端
轉載自https://objccn.io/issue-10-6/

有了這些序列號,源和目標才能夠保證數據的有效性,也就是我們說的“建立起了連接”

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 18.1 引言 TCP是一個面向連接的協議。無論哪一方向另一方發送數據之前,都必須先在雙方之間建立一條連接。本章將...
    張芳濤閱讀 3,427評論 0 13
  • 個人認為,Goodboy1881先生的TCP /IP 協議詳解學習博客系列博客是一部非常精彩的學習筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,092評論 0 8
  • 1.這篇文章不是本人原創的,只是個人為了對這部分知識做一個整理和系統的輸出而編輯成的,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,134評論 6 174
  • 簡介 用簡單的話來定義tcpdump,就是:dump the traffic on a network,根據使用者...
    保川閱讀 5,987評論 1 13
  • 轉眼又都了榆樹返青的季節了,榆錢兒一嘟嚕一嘟嚕的長勢喜人?;蹆嚎粗抑械倪@幾棵大榆樹喜上眉梢,父親的藥費這下有著...
    十里春風在等你閱讀 506評論 0 1