小弟正在做一个关于P2P的软件,技术遇到很多障碍,来这里找下答案,希望大家来帮帮我啊!!!公司情况是这样的,我们公司现在有个外网IPxxx.xxx.xxx.70,子网掩码255.255.255.252,只划分了一个子网,并且NAT是Cone NAT,我采用的通信协议时UDP,有如下几个问题:1.路由器上的IP是xxx.xxx.xxx.70,默认网关是xxx.xxx.xxx.69,这两者区别是什么,如果数据包从内网发送到外网,并且从外网进入内网,怎么个走法?2.内网客户端访问内网服务器,用的是外网IP,即用192.168.100.186:2887访问xxx.xxx.xxx.70:8181,此时服务器记录下来的源地址是内网路由地址及NAT转换后的端口192.168.100.254:10000,这种访问数据包需要通过路由器发送到外网再回来吗?还是直接通过路由器回来?3.还是上面的情况,现在有两个内网客户端A B,我从xxx.xxx.xxx.70:8181取得对方的IP,A取得B的IP 192.168.100.254:10000,B取得A的IP 192.168.100.254:20000,如果A直接访问B访问不通,此时NAT映射表记录情况是怎样的,
然后B访问A也不通,此时NAT映射表记录情况又是怎样的?路由器是怎么个反映?这些问题小弟真弄不懂,来位大侠救救我把!

解决方案 »

  1.   

    我只能大概给你说一下啊,因为我刚毕业 有些东西我还是记得一点的不过,不是很拿的准。同一个网段内,包的发送是直接发送的不通过路由器的转发。
    路由器上的IP是xxx.xxx.xxx.70,默认网关是xxx.xxx.xxx.69。再说了 你把地址写清楚点么,IP地址分为
    五类,这些东西你先要搞清楚吧,同一个网段内的网络前缀是一样。IP地址:网络号+子网号+主机号 如果有子网存在的话 否则只有1 3 ,判断有没有在同一个 子网里面,主要是通过子网掩码来判断写成二进制数(百度) 不清楚再问
      

  2.   


    这些我知道,我写的IP地址是外网IP,通过255.255.255.252划分子网,划分了一个子网,我内部PC访问内部Server采用外网IP地址,访问后Server记录下内网PC的nat映射后的外网IP地址,肯定经过路由器的,如果不经过的话可以发送,但是就是Server他不知道我内部PC机的内网IP啊,因为我是通过外网IP访问Server的
      

  3.   

    http://www.chinaunix.net/jh/29/402963.html
      

  4.   


    这篇文章我看过,其中有句重要的话理解不了.
    The two clients will be 
       able to communicate with each other this way as long as the NAT 
       allows hosts on the internal network to open translated UDP sessions 
       with other internal hosts and not just with external hosts. We refer 
       to this situation as "loopback translation," 谢谢
      

  5.   


    http://www.cppblog.com/ivenher/articles/2682.html
      

  6.   

    1.应由C->S 再S->C NAT映射后的两个客户端(同网段)的IP相同,端口号不同 服务器只需要向这个两个地址发送信息路由会发送给对应的客户端
    2.- - 没看明白。。是想两个客户端之间通信还是干啥?
    3.A要与B通信 A->S获取B的信息,同时S向B发送A要发送的请求,同时将A的信息告知B 由B->A发信息(信息被丢弃,但通路创建) 此时A向B发送信息便可以了