比如說在同一個wifi下面好多人在用qq聊天,但是每個qq的外網ip地址一樣,但是伺服器怎麼知道這個消息是我的而不是別人的?


瀉藥...

按照題主的邏輯是:伺服器區分這個消息來源是通過IP地址和埠?這明顯是錯誤的認識,ip地址僅僅是數據轉發的依據,就像快遞一樣,ip服務就像順豐快遞,交給順豐,我一般情況下(除了不可抗力因素以外)都能把包裹送達給伺服器,而伺服器收到包裹之後,拆開包裹的外包(什麼tcp/ip啥的),其餘的都不重要了。重要的包裹中的的數據

那麼數據是什麼呢,一般情況下是支撐qq應用邏輯的協議,如登錄、註冊、好友列表獲取、消息發送等等。

那麼伺服器是怎麼區分是哪個客戶端發送的,這看你想怎麼實現啦,比如每次qq客戶端發送信息的時候都把自己的qq號碼(qq號碼可以唯一標示一個用戶吧)放在包裹裏,當伺服器收到包裹拆開後根據程序解析到qq號碼就知道是誰發送過來的信息了。。。


ID,對qq來說就是qq號,微信來說就是微信號。

其實內網穿透也是這個道理。

NAT 全稱是網際網路地址轉換協議。是為瞭解決網際網路IP不足而應運而生的

技術,通過NAT技術可以把一個機構的N臺主機對外網的訪問都映射成一個地址,這樣多臺主機就可以共用一個IP進行Internet訪問了

NAT一般都是由路由器實現的

分為靜態映射,動態映射,埠多路復用。前兩個原理很簡單,都是提供IP地址一對一的映射。靜態映射對內網的每臺主機的內網IP都映射一個外網IP。動態映射,對每個內網主機來說

對起映射的外網IP是動態的,每次連接可能都會變化。

對於上面兩種映射NAT只是簡單的替換了IP。

比如:主機A數據包發送給路由器 源IP: 10.10.168.78 目的IP: 69.234.2.34 源埠 :3305 目的埠:80 路由器轉發 源IP: 48.23.53.22 目的IP: 69.234.2.34 源埠 :3305

目的埠:80

10.10.168.78 48.23.53.22 內網和外網IP是固定的

無論是靜態映射還是動態映射,一旦映射關係建立了,信息就被路由器記錄下來了。 路由器接受: 源IP: 69.234.2.34 目的IP: 48.23.53.22 源埠 :80 目的埠:3302 路由器轉發: 源IP: 69.234.2.34 目的IP: 10.10.168.78

源埠 :80

目的埠:3302 可以看到路由器只是簡單的替換映射的IP

而最常用的是第三種,把內網每臺主機都映射到一個外網的IP

我們具體說下第三種的工作原理。大家可以看到,其實NAT對每臺主機都要做到一對一的映射,這個一對一是什麼意思呢。當外網的主機要發送一個數據給內網的某個主機時必須準確的找到映射關係前兩中映射通過IP地址的一一映射可以很輕易的實現但我們看到第三中方式主機和外網的IP不是一一映射的關係,而是多對一,那麼當外網的數據發送過來時如何才能正確的找到目的主機

呢。大家從這個方式的名字上看到些端倪了,我們只能在埠上做文章了

簡單的說就是把埠映射到內網的主機和對應的埠。具體過程如下:

主機A數據包發送給路由器

源IP: 10.10.168.78 目的IP: 69.234.2.34 源埠 :3305 目的埠:80 路由器轉發 源IP: 48.23.53.22 目的IP: 69.234.2.34 源埠 :5000 //這個地方是關鍵

目的埠:80

路由器接受: 源IP: 69.234.2.34

目的IP: 48.23.53.22 源埠 :80 目的埠:5000 路由器轉發: 源IP: 69.234.2.34 目的IP: 10.10.168.78 源埠 :80 目的埠:3302

上面路由器把源埠3305該成了5000;

大家注意5000此時就不在僅僅是埠信息了它隱含只內網主機的IP和埠

即RE[5000] = [10.10.168.78/80]路由器通過500就能得到10.10.168.78/80信息。從上面的分析大家可以看到前兩種內網主機可以做伺服器。動態映射用花生殼工具即可第三種則不行,為什麼呢。因為外網無法知道內網伺服器IP和埠號映射後的埠號是什麼。所以要想讓其能訪問內網的伺服器,就必須在路由器裏進行設置。
伺服器不知道,但是伺服器上面的程序知道,因為扣扣號不同

有些同學對問題理解可能有點跑偏。 @朱曉飛

伺服器發包當然是首先根據IP找到外網,再用埠找到內網的終端。題主和其他答案對這個過程理解沒有問題。

下一步區分QQ應用才會拆封識別應用層協議,也就是說如果一臺電腦上開雙QQ,那麼到達這個電腦的消息根據QQ號可以決定哪個QQ進程可以打開消息。


這個工作是你的路由器在做,路由器有NAT功能,它就是起到公網轉發內網的工作,你的電腦訪問外網一個網站,那麼你的請求中會帶上你電腦的內網IP與埠的,路由器通過公網把該請求發出去之後會記錄源埠及內網IP及埠對應信息的,收到回復再轉發回去。


通過埠號


推薦閱讀:
相關文章