使用场景:使用GPRS的场合。

  名词解释:NAT(Network Address Translation,网络地址转换)

  中国移动的GPRS网络是使用的虚拟IP地址,需要通过移动的虚拟地址转换路由器进行与internet之间消息的转发,具体实现过程:

  1、NAT路由器得到从内网IP地址发来的请求;

  2、把该请求的IP源地址,端口号替换成一个真实的internet IP地址和一个空闲端口号,并在内部表格中添加相应翻译信息的表项;

  3、把信息传递给远端

  今后NAT 路由器将维护该表格中的表项,如果从远端收到指向该表项端口号的信息,将把真实的虚拟IP地址和端口号翻译回来。
  因此使用GPRS网络进行与internet通信需要gprs虚拟IP侧首先发起tcp连结或发udp数据包给远端server,这样才能让NAT router 建立起正确的翻译表项。今后就可以进行双向网络数据传输了。
  从NAT协议的实现上,对UDP翻译表项和TCP翻译表项的保持时间不同,因为UDP没有类次TCP的连接撤销报文协议,因此采用超时无消息包传送即释放的方式,实测中国移动的网络UDP表项保持时间只有几秒钟。也就是说,如果几秒钟双方没有通信,如果是internet server侧发送信息给GPRS虚拟ip,该信息因为相应的NAT router表项已经释放的原因将丢失。为避免这个问题,除非用户仅实现gprs网络侧的上传等待回应这种消息传送方式,否则为了保持NAT路由器的翻译表项,GRPR需要不停发送信息(一般称为heartbeat信息,或称心跳信息)来获得该连结表项的保持。这样会带来额外的流量费用。
  而tcp做为一个连接型的协议,因此nat route 可以知道何时双方连接结束,因此会一直保持该连结,就不需要不停发heartbeat来保持该连结。当然也有可能需要重新刷新该表项的情况,如NAT 路由器掉电或复位,或资源不足而释放相应表项,但这种情况的概率是非常小的。可以使用发送超时或一个较长时间的heartbeat来解决。
  另外GPRS网络的时延和误码率相对较高,TCP协议实现了重发,排序和流控,而UDP需要用户自己在应用程序中做这些工作,用户自己的实现不可能比已经广泛应用了几十年的TCP协议更可靠,因此可知,tcp协议更适合gprs网络的现状。

最新文章

  1. 基于redis实现可靠的分布式锁
  2. 64位系统安装ODBC驱动的方法
  3. MySQL常用命令(待更新)
  4. CodeForces 702 A Maximum Increase (贪心,高效算法)
  5. 2.1.6 用ProtectX实现扫描的反击与追踪
  6. Zend studio 12.5.1安装aptana
  7. 转:Twitter.com在用哪些Javascript框架?
  8. OpenLayer 3 鹰眼控件和全屏显示
  9. catalan卡特兰数
  10. PHP函数register_shutdown_function的使用
  11. Educational Codeforces Round 63 (Rated for Div. 2) C. Alarm Clocks Everywhere gcd
  12. RN和IOS原生端交互
  13. Go 函数方法
  14. oracle多个结果集拼接字符串;where id in 字符串 (转)
  15. <转载> GIT 操作小结 http://www.cnblogs.com/-ding/p/6008096.html
  16. Spring mvc 4系列教程(二)——依赖管理(Dependency Management)和命名规范(Naming Conventions)
  17. Django入门与实践-第22章:基于类的视图
  18. sql server 根据经纬度计算两点间距离
  19. Spring--简记
  20. python DataFrame获取行数、列数、索引及第几行第几列的值

热门文章

  1. GTP
  2. 认识CSS中css引入方式、选择器、文本样式设置以及显示模式
  3. 3.nginx日志
  4. 基于spring和mybatis的简单项目流程
  5. vue开发的一些设置以及技巧
  6. docker 容器 centos + tomcat + jdk
  7. 引入background和background-size不显示图片
  8. oracle系统包——dbms_job用法(oracle定时任务)
  9. SP16580 QTREE7 - Query on a tree VII
  10. C#操作Redis SortedSet 有序集合