<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Jack Jiang

    我的最新工程MobileIMSDK:http://git.oschina.net/jackjiang/MobileIMSDK
    posts - 494, comments - 13, trackbacks - 0, articles - 1

    本文引用了“帥地”發表于公眾號苦逼的碼農的技術分享。

    1、引言

    搞網絡通信應用開發的程序員,可能會經常聽到外網IP(即互聯網IP地址)和內網IP(即局域網IP地址),但他們的區別是什么?又有什么關系呢?另外,內行都知道,提到外網IP和內網IP就不得不提NAT路由轉換這種東西,那這雙是什么鬼?本文就來簡單講講這些到底都是怎么回事。

    另外,以下是與本文內相關知識點有關聯的文章,可詳細閱讀之:

    P2P 技術詳解(一):NAT詳解——詳細原理、P2P簡介

    P2P 技術詳解(二):P2P中的NAT穿越(打洞)方案詳解

    通俗易懂:快速理解P2P技術中的NAT穿透原理

    網絡編程懶人入門(六):史上最通俗的集線器、交換機、路由器功能原理入門

    網絡編程懶人入門(九):通俗講解,有了IP地址,為何還要用MAC地址?

    腦殘式網絡編程入門(五):每天都在用的Ping命令,它到底是什么?

    學習交流:

    - 即時通訊開發交流3群:185926912[推薦]

    - 移動端IM開發入門文章:《新手入門一篇就夠:從零開發移動端IM

    (本文同步發布于:http://www.52im.net/thread-2082-1-1.html

    2、系列文章

    本文是系列文章中的第6篇,本系列大綱如下:

    腦殘式網絡編程入門(一):跟著動畫來學TCP三次握手和四次揮手》(本文)

    腦殘式網絡編程入門(二):我們在讀寫Socket時,究竟在讀寫什么?

    腦殘式網絡編程入門(三):HTTP協議必知必會的一些知識

    腦殘式網絡編程入門(四):快速理解HTTP/2的服務器推送(Server Push)

    腦殘式網絡編程入門(五):每天都在用的Ping命令,它到底是什么?

    腦殘式網絡編程入門(六):什么是公網IP和內網IP?NAT轉換又是什么鬼?

    3、每臺電腦都必須要一個公網IP嗎?

    答案:不是。

    我們都知道,IPv4中的IP地址的數量是有限的(所以現在都在搞IPv6嘛),每次把一部分地址分配出去,那么就意味著能夠用來分配的IP地址就更少了,而且隨著現在手機,電腦等的快速發展,如果每個手機或者電腦都要求一個IP地址,那么顯然IP地址是不夠用的。

    為了解決這個問題,我們可以采取這樣的策略:例如對于一個公司來說,每個公司都會有一個屬于自己公司的內網(也可以稱之為局域網)。

    內網(學名應叫局域網(Local Area Network,LAN))是在一個局部的地理范圍內,一般可以是是幾米內(比如家庭內網),也可以是方圓幾千米以內(比如一個大學內網),將各種計算機、外部設備和數據庫等互相聯接起來組成的計算機通信網。

    內網主要作用有:

    1)共享傳輸信道:簡單地理解就是不需要每臺電腦一個外網IP地址;

    2)傳輸速率高:內網之間的電腦因為沒有外網網絡拓撲的復雜性,所以互相通信的網絡可以很快,比如從一個臺電腦向另一臺電腦復制一個幾G的文件可能只需要數十秒時間。

    3)誤碼率低:因為通信距離很近,所以誤碼率很低,換句話說就是網絡很穩定(老一點的程序員都知道,讀大學的時候同一個宿舍內網聯網玩C/S游戲,幾乎不會遇到斷網或卡頓的事情,除非有人下毛片或者把網絡給拔了,哈哈)。

    4、公司的內網是如何實現內網IP地址分配和管理的?

    假如我們給這個公司A分配了一個IP=192.168.1.1。我們把這個IP作為這個公司內網的網關吧。

    在公司A的內網里面有3臺電腦,如果這三臺電腦要上網的話,我們需要給他分配一個IP,那么就像上一節提到的:我們一定需要去申請3個IP地址來使用嗎?

    答否。我們不一定需要去申請3個IP的,在我們這個內網里,我們可以指定自己的規則,例如,我們可以給這三臺電腦隨便分配三個IP(請注意,這三個IP不是去申請的,而且我自己隨意給它分配的)。分別分配電腦A = 192.168.1.2   電腦B = 192.168.1.3 電腦C = 192.168.1.4。

    而這個規則可以由我們的內網網關來管理,就像下面這樣:

    5、NAT技術:實現內網電腦訪問外網的能力

    假如電腦A想要訪問百度,百度的IP我們假設為:172.168.30.3:

    我們都知道,電腦A的IP是我們虛構的,實際上可能并不存在這樣一個IP,如果用電腦A的IP去訪問百度,那肯定行不通。

    我們也知道,由于百度和電腦A不在一個局域網內,所以A要訪問百度,那么必須得經過網關。而網關的這個IP地址,是真實存在的,是可以訪問百度的。

    為了讓 A 可以訪問百度,那么我們可以采取這樣的方法:讓網關去幫助 A 訪問,然后百度把結果傳遞給網關,而網關再把結果傳遞給 A,這樣不就可以解決了?

    不過電腦A、B、C都可能拜托網關去幫忙訪問百度,而百度返回的結果 的目的IP都是網關的IP=192.168.1.1。那么網關該如何進行區分這結果是A的、B的還是C的呢?

    我們去訪問百度的時候,不是需要指定一個端口嗎?只要我們把 A的IP + 端口  映射成  網關的IP+端口,不就可以唯一確定身份了?

    例如A用端口60去訪問百度,網關把   A的IP+端口60    映射成     網關的IP+端口80 不就可以了?

    百度把結果返回給網關的80端口之后,網關再通過映射表,就可以把結果返回給 A的60端口 了。

    如果B也是用60端口去訪問百度的話,也是一樣,可以把它映射到90端口。

    這種方法地址的映射轉換,我們也稱之為網絡地址轉換,英文為 Network Address Translation,簡稱NAT。

    而像A、B、C這樣的IP地址我們也稱之為內網IP,即內網IP;而像網關,百度這樣的IP我們稱之為外網IP(即互聯網公網IP)。

    所以,一個典型的內網訪問公網的原理,就像下圖這樣就可以實現了:

    現在知道外網IP和內網IP了吧?

    6、本文小結

    為了解決IP地址短缺,技術專家們發明了內網技術,而內網技術的理論支撐就是NAT技術,所以搞網絡通信的程序員非常有必要對NAT技術有一個深入的理解。

    如果你想詳細了解NAT路由轉換技術,不防從下面幾篇文章開始:

    P2P 技術詳解(一):NAT詳解——詳細原理、P2P簡介

    P2P 技術詳解(二):P2P中的NAT穿越(打洞)方案詳解

    通俗易懂:快速理解P2P技術中的NAT穿透原理

    網絡編程懶人入門(六):史上最通俗的集線器、交換機、路由器功能原理入門

    幾點需要注意的地方:

    1)對于全球IP,顯然每個IP都是唯一的,而對于私有IP,同一個局域網內,也得是唯一的,但在兩個不同的局域網中,是可以有相同的私有IP的;

    2)局域網內主機之間的通信,是不需要進行地址轉換的,而如果需要訪問外網,才需要進行地址轉換。

    實際上,我們也可以把這種地址轉換稱之為一種代理。網關就相當于一個代理,把局域網內的主機的一些信息都給隱藏了起來。就像本內里所描述的那樣,百度并不知道是主機A訪問它,他只知道是網關訪問了它。

    附錄:更多網絡編程方面的文章

    [1] 網絡編程基礎資料:

    TCP/IP詳解 - 第11章·UDP:用戶數據報協議

    TCP/IP詳解 - 第17章·TCP:傳輸控制協議

    TCP/IP詳解 - 第18章·TCP連接的建立與終止

    TCP/IP詳解 - 第21章·TCP的超時與重傳

    技術往事:改變世界的TCP/IP協議(珍貴多圖、手機慎點)

    通俗易懂-深入理解TCP協議(上):理論基礎

    通俗易懂-深入理解TCP協議(下):RTT、滑動窗口、擁塞處理

    理論經典:TCP協議的3次握手與4次揮手過程詳解

    理論聯系實際:Wireshark抓包分析TCP 3次握手、4次揮手過程

    計算機網絡通訊協議關系圖(中文珍藏版)

    UDP中一個包的大小最大能多大?

    P2P技術詳解(一):NAT詳解——詳細原理、P2P簡介

    P2P技術詳解(二):P2P中的NAT穿越(打洞)方案詳解

    P2P技術詳解(三):P2P技術之STUN、TURN、ICE詳解

    通俗易懂:快速理解P2P技術中的NAT穿透原理

    高性能網絡編程(一):單臺服務器并發TCP連接數到底可以有多少

    高性能網絡編程(二):上一個10年,著名的C10K并發連接問題

    高性能網絡編程(三):下一個10年,是時候考慮C10M并發問題了

    高性能網絡編程(四):從C10K到C10M高性能網絡應用的理論探索

    高性能網絡編程(五):一文讀懂高性能網絡編程中的I/O模型

    高性能網絡編程(六):一文讀懂高性能網絡編程中的線程模型

    不為人知的網絡編程(一):淺析TCP協議中的疑難雜癥(上篇)

    不為人知的網絡編程(二):淺析TCP協議中的疑難雜癥(下篇)

    不為人知的網絡編程(三):關閉TCP連接時為什么會TIME_WAIT、CLOSE_WAIT

    不為人知的網絡編程(四):深入研究分析TCP的異常關閉

    不為人知的網絡編程(五):UDP的連接性和負載均衡

    不為人知的網絡編程(六):深入地理解UDP協議并用好它

    不為人知的網絡編程(七):如何讓不可靠的UDP變的可靠?

    網絡編程懶人入門(一):快速理解網絡通信協議(上篇)

    網絡編程懶人入門(二):快速理解網絡通信協議(下篇)

    網絡編程懶人入門(三):快速理解TCP協議一篇就夠

    網絡編程懶人入門(四):快速理解TCP和UDP的差異

    網絡編程懶人入門(五):快速理解為什么說UDP有時比TCP更有優勢

    網絡編程懶人入門(六):史上最通俗的集線器、交換機、路由器功能原理入門

    網絡編程懶人入門(七):深入淺出,全面理解HTTP協議

    網絡編程懶人入門(八):手把手教你寫基于TCP的Socket長連接

    網絡編程懶人入門(九):通俗講解,有了IP地址,為何還要用MAC地址?

    技術掃盲:新一代基于UDP的低延時網絡傳輸層協議——QUIC詳解

    讓互聯網更快:新一代QUIC協議在騰訊的技術實踐分享

    現代移動端網絡短連接的優化手段總結:請求速度、弱網適應、安全保障

    聊聊iOS中網絡編程長連接的那些事

    移動端IM開發者必讀(一):通俗易懂,理解移動網絡的“弱”和“慢”

    移動端IM開發者必讀(二):史上最全移動弱網絡優化方法總結

    IPv6技術詳解:基本概念、應用現狀、技術實踐(上篇)

    IPv6技術詳解:基本概念、應用現狀、技術實踐(下篇)

    從HTTP/0.9到HTTP/2:一文讀懂HTTP協議的歷史演變和設計思路

    以網游服務端的網絡接入層設計為例,理解實時通信的技術挑戰

    邁向高階:優秀Android程序員必知必會的網絡基礎

    >> 更多同類文章 ……

    [2] NIO異步網絡編程資料:

    Java新一代網絡編程模型AIO原理及Linux系統AIO介紹

    有關“為何選擇Netty”的11個疑問及解答

    開源NIO框架八卦——到底是先有MINA還是先有Netty?

    選Netty還是Mina:深入研究與對比(一)

    選Netty還是Mina:深入研究與對比(二)

    NIO框架入門(一):服務端基于Netty4的UDP雙向通信Demo演示

    NIO框架入門(二):服務端基于MINA2的UDP雙向通信Demo演示

    NIO框架入門(三):iOS與MINA2、Netty4的跨平臺UDP雙向通信實戰

    NIO框架入門(四):Android與MINA2、Netty4的跨平臺UDP雙向通信實戰

    Netty 4.x學習(一):ByteBuf詳解

    Netty 4.x學習(二):Channel和Pipeline詳解

    Netty 4.x學習(三):線程模型詳解

    Apache Mina框架高級篇(一):IoFilter詳解

    Apache Mina框架高級篇(二):IoHandler詳解

    MINA2 線程原理總結(含簡單測試實例)

    Apache MINA2.0 開發指南(中文版)[附件下載]

    MINA、Netty的源代碼(在線閱讀版)已整理發布

    解決MINA數據傳輸中TCP的粘包、缺包問題(有源碼)

    解決Mina中多個同類型Filter實例共存的問題

    實踐總結:Netty3.x升級Netty4.x遇到的那些坑(線程篇)

    實踐總結:Netty3.x VS Netty4.x的線程模型

    詳解Netty的安全性:原理介紹、代碼演示(上篇)

    詳解Netty的安全性:原理介紹、代碼演示(下篇)

    詳解Netty的優雅退出機制和原理

    NIO框架詳解:Netty的高性能之道

    Twitter:如何使用Netty 4來減少JVM的GC開銷(譯文)

    絕對干貨:基于Netty實現海量接入的推送服務技術要點

    Netty干貨分享:京東京麥的生產級TCP網關技術實踐總結

    新手入門:目前為止最透徹的的Netty高性能原理和框架架構解析

    >> 更多同類文章 ……

    (本文同步發布于:http://www.52im.net/thread-2082-1-1.html



    作者:Jack Jiang (點擊作者姓名進入Github)
    出處:http://www.52im.net/space-uid-1.html
    交流:歡迎加入即時通訊開發交流群 215891622
    討論:http://www.52im.net/
    Jack Jiang同時是【原創Java Swing外觀工程BeautyEye】【輕量級移動端即時通訊框架MobileIMSDK】的作者,可前往下載交流。
    本博文 歡迎轉載,轉載請注明出處(也可前往 我的52im.net 找到我)。


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    Jack Jiang的 Mail: jb2011@163.com, 聯系QQ: 413980957, 微信: hellojackjiang
    主站蜘蛛池模板: 国产午夜成人免费看片无遮挡| 中文字幕a∨在线乱码免费看| 美女扒开屁股让男人桶爽免费| 免费精品国产自产拍在线观看| 三级黄色免费观看| 久久午夜羞羞影院免费观看| 中文字幕无码视频手机免费看| 国产成人免费福利网站| 亚洲一区二区三区在线观看精品中文 | 久久亚洲精品无码av| 一级做a爰片久久毛片免费陪| 波多野结衣免费一区视频| 日韩免费一区二区三区在线| 日本一区二区三区日本免费| 亚洲宅男天堂在线观看无病毒| 久久综合亚洲鲁鲁五月天| 色欲色欲天天天www亚洲伊| 抽搐一进一出gif免费视频| 18禁美女黄网站色大片免费观看| 在线免费视频一区二区| 成人午夜亚洲精品无码网站| 亚洲婷婷综合色高清在线| 色屁屁www影院免费观看视频| 美女被cao网站免费看在线看| 欧美三级在线电影免费| 亚洲色偷偷狠狠综合网| 亚洲国产成人久久综合一区| 日韩在线视频线视频免费网站| 最近中文字幕完整版免费高清| 国产午夜影视大全免费观看| 亚洲AV成人片色在线观看| 国产亚洲欧美日韩亚洲中文色| 人人玩人人添人人澡免费| 国产精品冒白浆免费视频| 亚洲丁香色婷婷综合欲色啪| 精品久久亚洲一级α| 亚洲免费在线观看视频| 国产亚洲精品自在线观看| 亚洲一级特黄特黄的大片| 国产免费爽爽视频在线观看 | 免费国产在线视频|