回復(fù) Bruce : 上篇文章「什么我們家的 IP 都是 192.168 開頭的?」提到因?yàn)?IPv4 地址有限,最大 42 億個(gè)。為了更好的利用有限的 IP 數(shù)量,網(wǎng)絡(luò)分為局域網(wǎng)廣域網(wǎng),將 IP 分為了私有 IP 和公網(wǎng) IP,一個(gè)局域里的 N 多臺(tái)機(jī)器都可共用一個(gè)公 IP,從而大大增加了 "可用 IP 數(shù)量"。收發(fā)數(shù)據(jù)就像發(fā)快遞當(dāng)我需要發(fā)送網(wǎng)包的時(shí)候, IP 層,需要填入源 IP 地址,和目的 IP 地址,也就是對(duì)應(yīng)快遞發(fā)貨地址和貨地址。IP 報(bào)頭里含有發(fā)送和接收 IP 地址但是我們家里局域網(wǎng)內(nèi),本上都用 192.168.xx.xx 這樣的私有 IP。如果我們?cè)诎l(fā)送絡(luò)包的時(shí)候這么填。對(duì)在回?cái)?shù)據(jù)包時(shí)候該怎么?畢竟千家戶人用的都 192.168.0.1,網(wǎng)絡(luò)怎么道該發(fā)給誰所以肯定需將這個(gè) 192.168.xx 私有 IP 轉(zhuǎn)換成公有 IP。因此在上篇章最后,留這么個(gè)問題局域網(wǎng)內(nèi)用是私有 IP,公網(wǎng)用的是公有 IP。一個(gè)局域里的私有 IP 想訪問局域網(wǎng)外的公 IP,必然要做個(gè) IP 轉(zhuǎn)換,這是在哪里做的換呢?私有 IP 和公有 IP 在哪進(jìn)行轉(zhuǎn)換答是 NAT 設(shè)備,全稱 Network?Address?Translation,網(wǎng)絡(luò)地址轉(zhuǎn)換。本上家用路器都支持這能。我們來下它是怎么作的。NAT 的工作原理為了簡(jiǎn)單,們假設(shè)你很,你家里分了一個(gè)公網(wǎng) IP 地址?20.20.20.20,對(duì)應(yīng)配到了家自帶 NAT 功能的家用路由器上你家里需要網(wǎng)的設(shè)備有多,比如你手機(jī),電腦需要上網(wǎng),們構(gòu)成了一局域網(wǎng),用都是私有 IP,比如 192.168.xx。其中你在電腦上行 ifconfig 命令,發(fā)現(xiàn)家的電腦 IP 是 192.168.30.5。你要訪問的公網(wǎng) IP 地址是 30.30.30.30。于是就有面這樣一張內(nèi)網(wǎng) IP 訪問公網(wǎng) IP當(dāng)你準(zhǔn)備發(fā)送數(shù)據(jù)包的候,你的電內(nèi)核協(xié)議棧會(huì)構(gòu)造一個(gè) IP 數(shù)據(jù)包。這個(gè) IP 數(shù)據(jù)包報(bào)頭里的發(fā)送端 IP 地址填的就是 192.168.30.5,接收端 IP 地址就是 30.30.30.30。將數(shù)據(jù)包發(fā)到 NAT 路由器中。此時(shí) NAT 路由器會(huì)將 IP 數(shù)據(jù)包里的源 IP 地址修改一下私有 IP 地址 192.168.30.5 改寫為公網(wǎng) IP 地址 20.20.20.20,這叫 SNAT(Source?Network?Address?Translation,源地址轉(zhuǎn)換)并且還會(huì)在 NAT 路由器內(nèi)部留下條?192.168.30.5 -> 20.20.20.20 的映射記錄這個(gè)信息會(huì)后面用到。后 IP 數(shù)據(jù)包經(jīng)過公里各個(gè)路由的轉(zhuǎn)發(fā),發(fā)了接收端 30.30.30.30,到這里發(fā)送流結(jié)束。SNAT如果接收端處理完數(shù)據(jù),需要發(fā)一響應(yīng)給你的腦,那就需將發(fā)送端 IP 地址填上自己的 30.30.30.30,將接收端地址填你的公網(wǎng) IP 地址 20.20.20.20,發(fā)往 NAT 路由器。NAT 路由器收到公網(wǎng)來的息之后,會(huì)查下自己之留下的映射息,發(fā)現(xiàn)之留下了這么條?192.168.30.5 -> 20.20.20.20 記錄,就會(huì)這個(gè)數(shù)據(jù)包目的 IP 地址修改一,變成內(nèi)網(wǎng) IP 地址 192.168.30.5, 這也叫 DNAT(Destination?Network?Address?Translation,目的地址轉(zhuǎn)換)。后將其轉(zhuǎn)發(fā)你的電腦上DNAT整個(gè)過程下來,NAT 悄悄的改了 IP 數(shù)據(jù)包的發(fā)和接收端 IP 地址,但對(duì)真正的發(fā)方和接收方說,他們卻這件事情,無所知。這是 NAT 的工作原理NAPT 的原理到這里相信大家都一個(gè)很大的問。局域網(wǎng)并不只有一機(jī)器,局域內(nèi) 每臺(tái)機(jī)器都在 NAT 下留下的映射信息都會(huì)?192.168.xx.xx -> 20.20.20.20,發(fā)送消息是啥事,但接消息的時(shí)候不知道該回誰了。NAT 的問題這問題相當(dāng)致命因此實(shí)際上部分時(shí)候不使用普通的 NAT。那怎么辦呢?問出在我們沒法區(qū)分內(nèi)網(wǎng)的多個(gè)網(wǎng)絡(luò)接。于是乎我們可以加其他信息去分內(nèi)網(wǎng)里的個(gè)網(wǎng)絡(luò)連接很自然就能到端口。但 IP 數(shù)據(jù)包(網(wǎng)絡(luò)層)身是沒有端信息的。常的傳輸層協(xié) TCP 和 UDP 數(shù)據(jù)報(bào)文里才端口的信息TCP 報(bào)頭有端口號(hào)UDP 報(bào)頭也有端口號(hào)于是程就變成了面這樣子。你準(zhǔn)備發(fā)送據(jù)包的時(shí)候你的電腦內(nèi)協(xié)議棧就會(huì)構(gòu)造一個(gè) TCP 或者 UDP 數(shù)據(jù)報(bào)頭,里面入端口號(hào),如發(fā)送端口 5000,接收端口是 3000,然后在這個(gè)基上,加入 IP 數(shù)據(jù)報(bào)頭,填入發(fā)送和接收端的 IP 地址。那數(shù)據(jù)包長樣。數(shù)據(jù)包構(gòu)成假設(shè),送端 IP 地址填的就 192.168.30.5,接收端 IP 地址就是 30.30.30.30。將數(shù)據(jù)包發(fā)到 NAT 路由器中。此時(shí) NAT 路由器會(huì)將 IP 數(shù)據(jù)包里的源 IP 地址和端口號(hào)修改一,從 192.168.30.5:5000 改寫成 20.20.20.20:6000。并且還會(huì)在 NAT 路由器內(nèi)部留下條?192.168.30.5:5000 -> 20.20.20.20:6000 的映射記錄。之數(shù)據(jù)包經(jīng)過網(wǎng)里各個(gè)路器的轉(zhuǎn)發(fā),到了接收端 30.30.30.30:3000,到這里發(fā)送流結(jié)束。NAPT 發(fā)送數(shù)據(jù)接收端響應(yīng),就會(huì)在數(shù)包里填入發(fā)端地址是 30.30.30.30:3000,將接收端是 20.20.20.20:6000,發(fā)往 NAT 路由器。NAT 路由器發(fā)現(xiàn)自己之前留過這么一?192.168.30.5:5000 -> 20.20.20.20:6000 的記錄,就會(huì)將這個(gè)據(jù)包的目的 IP 地址和端口修改一,變回原來 192.168.30.5:5000。之后將其發(fā)給你的電上。NAPT 接收數(shù)據(jù)如幽鴳局域網(wǎng)內(nèi)多個(gè)設(shè)備,們就會(huì)映射不同的公網(wǎng)口上,畢竟口最大可達(dá) 65535,完全夠用。樣大家都可相安無事。這種同時(shí)轉(zhuǎn) IP 和端口的技術(shù),是 NAPT(Network Address Port Transfer ,?網(wǎng)絡(luò)地址端口轉(zhuǎn)?)??吹竭@,問題就來。那這么說有用到端口網(wǎng)絡(luò)協(xié)議才被 NAT 識(shí)別出來并發(fā)?但這怎解釋 ping 命令?ping 基于 ICMP 協(xié)議,而 ICMP 協(xié)議報(bào)文里并不端口信息。依然可以正的 ping 通公網(wǎng)機(jī)器并朱蛾到回包ping 報(bào)頭事實(shí)上針 ICMP 協(xié)議,NAT 路由器做了特竦斯處理。ping 報(bào)文頭里有個(gè) Identifier 的信息,它其實(shí)的是放出 ping 命令的進(jìn)程 id。對(duì) NAT 路由器來說,南山個(gè) Identifier 的作用就跟端口一。另外,當(dāng)們?nèi)プグ?候,就會(huì)發(fā)有兩個(gè) Identifier,一個(gè)后面螽槦個(gè) BE(Big Endian),另一個(gè)帶 LE(Little Endian)。其實(shí)他們是同一個(gè)數(shù),只不過大端不同,讀來的值不一。就好像同的數(shù)字 345,反著讀就成鴢 543。這是為了容不同操作統(tǒng)(比如 linux 和 Windows)下大小端基山同的情。1667783441963內(nèi)網(wǎng)穿透是比翼么看到里,我們大也發(fā)現(xiàn)了。用了 NAT 上網(wǎng)的話,前當(dāng)扈得內(nèi)網(wǎng)器主動(dòng)請(qǐng)求網(wǎng) IP,這樣 NAT 才能將內(nèi)網(wǎng) IP 端口轉(zhuǎn)成外網(wǎng) IP 端口。反過鱄魚公網(wǎng)的器想主動(dòng)請(qǐng)內(nèi)網(wǎng)機(jī)器,會(huì)被攔在 NAT 路由器上,此時(shí)由 NAT 路由器并沒有何相關(guān)的 IP 端口的映射儀禮錄,因也就不會(huì)轉(zhuǎn)數(shù)據(jù)給內(nèi)網(wǎng)的任何一臺(tái)器。舉個(gè)現(xiàn)中的場(chǎng)景就,你在你家的電腦上啟了一個(gè) HTTP 服務(wù),地址是 192.168.30.5:5000,此時(shí)你在公司辦室里想通過機(jī)去訪問一,卻發(fā)現(xiàn)訪不了。那問就來了,有有辦法讓外機(jī)器訪問到網(wǎng)的服務(wù)?。大家應(yīng)該過一句話叫" 沒有什么是窫窳中間層能解決的,果有,那就加一層 "。放在這里,然適用。說底,因?yàn)?NAT 的存在,我們只能內(nèi)網(wǎng)主動(dòng)發(fā)連接,否則 NAT 設(shè)備不會(huì)記錄相的映射關(guān)系沒有映射關(guān)也就不能轉(zhuǎn)數(shù)據(jù)。所以們就在公網(wǎng)加一臺(tái)服務(wù) x,并暴露一禹訪問域,再讓內(nèi)網(wǎng)服務(wù)主動(dòng)連服務(wù)器 x,這樣 NAT 路由器上就有貍力應(yīng)的映關(guān)系。接著所有人都去問服務(wù)器 x,服務(wù)器 x 將數(shù)據(jù)轉(zhuǎn)發(fā)給吳子網(wǎng)機(jī)器再原路返回應(yīng),這樣數(shù)就都通了。就是所謂的網(wǎng)穿透。像面提到的服器 x,你也不需要自己搭,已經(jīng)有多現(xiàn)成的方,花錢就完了,比如花殼。內(nèi)網(wǎng)穿到這里,我就可以回答章標(biāo)題的問。為什么我公司里訪問了家里的電?那是因?yàn)?里的電腦在域網(wǎng)內(nèi),局網(wǎng)和廣域網(wǎng)間有個(gè) NAT 路由器。由吳回 NAT 路由器的存在羊患外網(wǎng)服無法主動(dòng)連局域網(wǎng)內(nèi)的腦。兩個(gè)內(nèi)的聊天軟件何建立通訊了,問題就來了。我家子是在我們區(qū)的局域網(wǎng),班花家的子也是在她小區(qū)的局域里。都在局網(wǎng)里,且 NAT 只能從內(nèi)網(wǎng)連到外,那我電腦登錄的 QQ 是怎么和班花士敬腦里的 QQ 連上的呢??jī)蓚€(gè)局網(wǎng)內(nèi)的服務(wù)法直接連通面這個(gè)問法實(shí)是存在個(gè)解,誤以為個(gè) qq 客戶端應(yīng)用是接建立連接。然而實(shí)際并不是,兩 qq 客戶端之間還隔一個(gè)服務(wù)器聊天軟件會(huì)動(dòng)與公網(wǎng)服器建立連接就是說,兩在內(nèi)網(wǎng)的客端登錄 qq 時(shí)都會(huì)主動(dòng)向敏山網(wǎng)的聊服務(wù)器建立接,這時(shí)兩的 NAT 路由器中都記錄有相應(yīng)映射關(guān)系。在其中一個(gè) qq 上發(fā)送消息時(shí),數(shù)會(huì)先到服務(wù),再通過服器轉(zhuǎn)發(fā)到另一個(gè)客戶端。反過來也樣,通過這方式讓兩臺(tái)網(wǎng)的機(jī)子進(jìn)數(shù)據(jù)傳輸。個(gè)內(nèi)網(wǎng)的應(yīng)如何直接建連接上面的況,是兩個(gè)戶端通過第方服務(wù)器進(jìn)通訊,但有場(chǎng)景就是要開第三端,接進(jìn)行兩端信,比如 P2P 下載,這種該怎么呢?這種情下,其實(shí)也是離不開第方服務(wù)器的助。假設(shè)還 A 和 B 兩個(gè)局域網(wǎng)內(nèi)強(qiáng)良機(jī)子,A 內(nèi)網(wǎng)對(duì)應(yīng)的 NAT 設(shè)備叫 NAT_A,B 內(nèi)網(wǎng)里的 NAT 設(shè)備叫 NAT_B,和一個(gè)第三服務(wù)器 server。流程如下。step1 和 2: A 主動(dòng)去連 server,此時(shí) A 對(duì)應(yīng)的 NAT_A 就會(huì)留下 A 的內(nèi)網(wǎng)地址和外網(wǎng)址的映射關(guān),server 也拿到了 A 對(duì)應(yīng)的外網(wǎng) IP 地址和端口step3 和 4: B 的操作和 A 一樣,主動(dòng)光山第三方 server,NAT_B 內(nèi)留下 B 的內(nèi)網(wǎng)地址和鳋魚網(wǎng)地址映射關(guān)系,后 server 也拿到了 B 對(duì)應(yīng)的外網(wǎng) IP 地址和端口。step5 和 step6 以及 step7: 重點(diǎn)來了。此豪魚 server 發(fā)消息給 A,讓 A 主動(dòng)發(fā) UDP 消息到 B 的外網(wǎng) IP 地址和端口此時(shí) NAT_B 收到這個(gè) A 的 UDP 數(shù)據(jù)包時(shí),這時(shí)根據(jù) NAT_B 的設(shè)置不同,導(dǎo)致時(shí)候有可能 NAT_B 能直接轉(zhuǎn)發(fā)據(jù)到 B,那此時(shí) A 和 B 就通了。但也有可不通,直接包,不過丟沒關(guān)系,這操作的目的給 NAT_A 上留下有關(guān) B 的映射關(guān)系。step8 和 step9 以及 step10: 跟 step5 一樣熟悉的配欽原,此時(shí) server 再發(fā)消息給 B,讓 B 主動(dòng)發(fā) UDP 消息到 A 的外網(wǎng) IP 地址和端口。NAT_B 上也留下了關(guān)于 A 到映射關(guān)系鐘山這時(shí)候于之前 NAT_A 上有過關(guān)于 B 的映射關(guān)系此時(shí) NAT_A 就能正常接受 B 的數(shù)據(jù)包,將其轉(zhuǎn)發(fā)給 A。到這里 A 和 B 就能正常進(jìn)數(shù)據(jù)通信了這就是所謂 NAT 打洞。step11: 注意,之前我們是用的 UDP 數(shù)據(jù)包,目中庸只是為在兩個(gè)局域的 NAT 上打個(gè)洞出,實(shí)際上大分應(yīng)用用的是 TCP 連接,所以這時(shí)候我們需要在 A 主動(dòng)向 B 發(fā)起 TCP 連接。到此,媱姬們就完了兩端之間通信。NAT 打洞這里估計(jì)蠻蠻家會(huì)有惑。端口已被 udp 用過了,TCP 再用,那豈蛫是端口復(fù)占用(address already in use)?其實(shí)并南岳會(huì),端重復(fù)占用的錯(cuò)常見于兩 TCP 連接在不使用 SO_REUSEADDR 的情況下,重蠻蠻使用了個(gè) IP 端口。而 UDP 和 TCP 之間卻不會(huì)蜚這個(gè)錯(cuò)之所以會(huì)有個(gè)錯(cuò),主要因?yàn)樵谝粋€(gè) linux 內(nèi)核中,內(nèi)收到網(wǎng)絡(luò)數(shù)時(shí),會(huì)通過元組(傳輸議,源 IP,目的 IP,源端口,的端口)去一確定數(shù)據(jù)受者。當(dāng)五組都一模一的時(shí)候,內(nèi)就不知道該數(shù)據(jù)發(fā)給誰而 UDP 和 TCP 之間 "傳輸協(xié)議" 不同,因此五元也不同,所也就不會(huì)有面的問題。元組NAPT 還分為好多種傅山型,上的 nat 打洞方案,能成功嗎?于 NAPT,確實(shí)還細(xì)為好幾種類,比如完全形 NAT 和限制型 NAT 啥的,但這并不是文的重點(diǎn)。以我就略過。我們現(xiàn)在見的都是錐 NAT。上面的打洞方適用于大部場(chǎng)景,這其包括限制最的端口受限形 NAT。1668247032737總結(jié)?IPV4 地址有限,但通過 NAT 路由器,可以使整個(gè)內(nèi)網(wǎng) N 多臺(tái)機(jī)器,對(duì)慎子只使用個(gè)公網(wǎng) IP,大大節(jié)省 IP 資源。??內(nèi)網(wǎng)子主動(dòng)連接網(wǎng) IP,中間的 NAT 會(huì)將內(nèi)網(wǎng)機(jī)子大暤內(nèi)網(wǎng) IP 轉(zhuǎn)換為公網(wǎng) IP,從而實(shí)現(xiàn)內(nèi)網(wǎng)外網(wǎng)的數(shù)據(jù)互。??普的 NAT 技術(shù),只會(huì)改網(wǎng)絡(luò)包中發(fā)送端和接端 IP 地址,當(dāng)內(nèi)網(wǎng)備較多時(shí),有可能導(dǎo)致突。因此一都會(huì)使用 NAPT 技術(shù),同時(shí)修改送端和接收的 IP 地址和端口。?由于 NAT 的存在,公狕 IP 是無法訪問網(wǎng)服務(wù)的,通過內(nèi)網(wǎng)穿技術(shù),就可讓公網(wǎng) IP 訪問內(nèi)網(wǎng)服務(wù)畢山一波操下來,就可在公司的網(wǎng)里訪問家里電腦。最后個(gè)問題,有 NAT 之后,原本并富裕的 IPv4 地址突然就變得非夠用了。那們?yōu)槭裁催€要 IPv6?另外 IPv6 號(hào)稱地址多到每粒子都能擁有己的 IP 地址,那我還需要 NAT 嗎?本文來天犬微信公號(hào):小白 debug (ID:xiaobaidebug),作者:小?
回復(fù) 申政元 : 感謝IT之家網(wǎng)友 xxxbottle、Mo_Onster、叔夜、sukhoi_、肖戰(zhàn)割割 的線索投遞!IT之家 1 月 19 日消息,吉利旗下司武漢星紀(jì)魅族科有限公司近期發(fā)生商變更,新增股東秀章(黃章)、天通信控股股份有限司、海通創(chuàng)新證券資有限公司等;注資本由約 5.24 億人民幣增至約 6.62 億人民幣,增幅超 26%。目前,該公司由多股東共同持股,其湖北星紀(jì)魅族控股限公司持股約 56.82%,為第一大股東;黃秀章持股 9.79%,為第三大股東。武漢星魅族科技有限公司立于 2022 年 5 月,法定代表人為王勇,現(xiàn)全資股魅族手機(jī)主體公珠海市魅族科技有公司。不久前,珠市魅族科技有限公原股東天音通信控股份有限公司、海創(chuàng)新證券投資有限司、黃秀章等退出武漢星紀(jì)魅族科技限公司成為魅族科唯一股東?,F(xiàn)在股重新分配梳理。IT之家了解到,去年 7 月,湖北星紀(jì)時(shí)代科技有限公司與海市魅族科技有限司簽約,宣布星紀(jì)代持有魅族科技 79.09% 的控股權(quán),并取得對(duì)魅族技的單獨(dú)控制。同,珠海市魅族科技限公司發(fā)生工商變,大股東由黃秀章更為武漢星連時(shí)代技有限公司,法定表人由黃質(zhì)潘變更沈子瑜;董事長也黃秀章變更為沈子。本次交易后,吉創(chuàng)始人李書福繼續(xù)任星紀(jì)時(shí)代董事長星紀(jì)時(shí)代副董事長子瑜任魅族科技董長,魅族科技創(chuàng)始黃章持有 9.79% 股權(quán),作為魅族科技產(chǎn)品戰(zhàn)略顧問魅族將保留獨(dú)立團(tuán),2023 年發(fā)布新旗艦,預(yù)計(jì)是魅 20 系列旗艦手機(jī),首批搭載驍龍 8 Gen 2 芯片?
回復(fù) 克林特·伊斯特伍德 : IT之家 1 月 19 日消息,GSM 協(xié)會(huì)網(wǎng)站已確認(rèn)榮耀將出席在巴塞那舉行的 2023 年世界移動(dòng)通信大會(huì)(MWC 2023)。榮耀公司將擁有自己的現(xiàn)場(chǎng)展位而不像去年那樣只辦了一些活動(dòng)。MWC 2023 大會(huì)將于 2 月 27 日在巴塞羅那拉開帷幕,恰逢?因?yàn)槁勚?榮耀 Magic5 系列發(fā)布日期。榮耀還尚未預(yù)熱 Magic5 系列手機(jī)新品。榮耀 Magic5 系列手機(jī)將包括榮耀 Magic5、Magic5 Pro 和 Magic5 至臻版。榮耀 Magic5 系列搭載驍龍 8 Gen 2 芯片,配備 6.8 英寸護(hù)眼柔性屏,支 100W 有線快充、50W 無線快充,還支持結(jié)構(gòu)光 IP68 防水防塵。IT之家了解到,榮耀 Magic 5 系列中的 PGT-AN00 手機(jī)已入網(wǎng)工信部,機(jī)采用時(shí)下流行的形相機(jī)模組設(shè)計(jì),含三顆鏡頭(Pro 版為四顆),呈等邊三角形排列,據(jù)其中一顆為潛望長鏡頭,下方為閃光。該機(jī)將支持最高 100 倍的數(shù)碼變焦?