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

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

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

    狼人
    走在SCJP的路上
    posts - 12,  comments - 14,  trackbacks - 0
    摘自:http://topic.csdn.net/u/20090630/13/f3c5c6cc-020c-48ac-b1b7-df73820746ab.html?33795
    作者:jinxfei

    IP地址的記法:
     
    IP地址由四個字節構成,為了方便閱讀和書寫,每個字節用0-255的數字表示,字節之間用'.'分割,如: 
    10.10.152.235 
    有時候我們會看到這樣的IP: 
    10.10.152.235/24, 
    后面的/24表示子網掩碼,24表示子網掩碼上有24個1,等價于255.255.255.0 。 

    IP地址和子網掩碼按位 與,得到的是 網絡號(Network ID), 
    剩余的部分是子網內的 主機號(host ID,當然,這個名字小有問題,因為現在有IP的可不僅僅是主機,暫且這么稱呼吧), 


    特殊的IP地址段: 
    127.x.x.x 
    這是大家最熟悉不過的本地loopback地址,在windows和linux上等價于localhost。 
    我們習慣于使用127.0.0.1,實際上, 
    如果你在命令行下ping 127.0.0.1-127.255.255.254之間的任意地址,結果都是一樣的,它們是等價的。 

    正常的網絡包從ip層進入鏈路層,然后發送到網絡上, 
    而發向loopback地址的包,直接在IP層短路了,也就是發到IP層的包直接被IP層接收了,不再向下發送。 

    私網地址段: 
    10.x.x.x、192.168.x.x、172.16.x.x~172.31.x.x、169.254.x.x 
    這些私網地址段是不允許出現在Internet上的,主用保留用于企業內部組網使用, 
    這可以在一定程度上緩解IP地址不夠用的問題。 
    大型企業的OA網用10地址段的比較多,因為這是一個A類地址段,包含的IP很多。 
    小公司用192.168.0地址段的比較多。 
    而169.254則主要是分配給DHCP服務使用的。 

    保留地址段: 
    128.0.x.x、191.255.x.x、192.0.0.x、233.255.255.x 
    這些地址被保留起來,不做分配且沒有明確的用途。 

    其它特殊IP: 
    255.255.255.255是全局廣播地址, 
    主機號全部為1的地址是子網廣播地址,如:192.168.1.255 
    主機號全部為0的地址是代表該子網的網絡地址,如:192.168.1.0 


    一個非常特殊的IP:0.0.0.0 
    這個IP相當于java中的this,代表當前設備的IP。 
    我們在java編程中使用ServerSocket做網絡偵聽,通常只需要如下代碼: 

    ServerSocket serverSock=new ServerSocket(8888);
    serverSock.accept();

    假如我的主機ip為:10.10.152.8, 
    用以上代碼做偵聽,127.0.0.1:8888或者10.10.152.8:8888都可以連上, 
    但大家有沒有想過過,這個ServerSocket到底使用哪個IP在做偵聽? 

    如果我們將以上代碼改成顯式綁定: 

    ServerSocket ss=new ServerSocket();
    String ip
    ="10.10.152.8";
    int port=8888;
    InetSocketAddress addr
    =new InetSocketAddress(ip,port);
    ss.bind(addr);
    ss.accept();

    你會發現,127.0.0.1:8888是無法訪問的, 
    而如果將ip改成127.0.0.1,那么10.10.152.8:8888是無法訪問的。 

    實際上,背后的秘密就在與0.0.0.0這個IP,他可以代表本機的所有IP地址, 
    但這個IP并不是真是存在的,我們ping不通它,如果將ip改成0.0.0.0: 

    ServerSocket ss=new ServerSocket();
    String ip
    ="0.0.0.0";
    int port=8888;
    InetSocketAddress addr
    =new InetSocketAddress(ip,port);
    ss.bind(addr);
    ss.accept();

    我們會發現,這和默認行為是一樣的,127.0.0.1:8888或者10.10.152.8:8888都可以連上

    posted on 2009-07-02 16:06 狼人 閱讀(712) 評論(2)  編輯  收藏 所屬分類: Java

    FeedBack:
    # re: IP和Socket小知識
    2010-04-23 23:33 | Aemon
    呵呵,樓主的這段話可以解開很多人心中關于Socket端Bind()函數的疑惑。
    這也就正是SOCKET在服務端要調用binds()的原因。
    如果一個server有多個IP,且server只想讓某一個網段的人訪問,呵呵,這時候BINDS()就大大有用了。反之只想在自己電腦上開個端口自己用(典型的是socket 本地代理服務器)就要用到127.0.0.1地址的綁定了,這樣,安全啊。  回復  更多評論
      
    # re: IP和Socket小知識
    2010-07-06 19:39 | 狼人
    @Aemon
    你這么說,讓我很慚愧。我摘抄的,看最前面的摘自
    作者:jinxfei
    原連接地址http://topic.csdn.net/u/20090630/13/f3c5c6cc-020c-48ac-b1b7-df73820746ab.html?33795  回復  更多評論
      

    <2009年7月>
    2829301234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产大片线上免费看| 91制片厂制作传媒免费版樱花| 在线a人片天堂免费观看高清| 亚洲国产综合人成综合网站00| 无码国产精品一区二区免费3p| 亚洲视频一区调教| 18禁美女裸体免费网站 | 91视频国产免费| 亚洲六月丁香婷婷综合| 国产一精品一AV一免费孕妇| 精品亚洲AV无码一区二区三区 | 日韩免费视频播播| 国产精品亚洲а∨无码播放麻豆| 国产又大又长又粗又硬的免费视频| 色欲色欲天天天www亚洲伊| 免费人成视频在线观看视频| 少妇亚洲免费精品| 亚洲成a人片在线观看无码 | 久久精品国产亚洲AV蜜臀色欲 | 色欲aⅴ亚洲情无码AV| 四虎免费久久影院| 国产va免费观看| 精品日韩亚洲AV无码| 欧美最猛性xxxxx免费| 国产成人精品亚洲| 亚洲av无码无在线观看红杏| 精品免费人成视频app| 日韩欧美亚洲中文乱码| 自拍偷自拍亚洲精品第1页| 国产男女爽爽爽爽爽免费视频| 亚洲欧美国产日韩av野草社区| 亚洲一区二区三区国产精品| 91热成人精品国产免费| 日日摸日日碰夜夜爽亚洲| 亚洲Av无码精品色午夜| 成人人观看的免费毛片| 亚洲五月午夜免费在线视频| 亚洲jjzzjjzz在线观看| 久久精品国产精品亚洲| 无码国产精品久久一区免费| 香蕉视频在线免费看|