现在位置: 首页 > 网络编程
2014-11-04 07:07 工业·编程 ⁄ 共 15911字 暂无评论
本文谈一谈我在学习网络编程方面的一些个人经验。“网络编程”这个术语的范围很广,本文指用Sockets API开发基于TCP/IP的网络应用程序,具体定义见“网络编程的各种任务角色”一节。 受限于本人的经历和经验,这篇文章的适应范围是: · x86-64 Linux服务端网络编程,直接或间接使用 Sockets API · 公司内网。不一定是局域网,但总体位于公司防火墙之内,环境可控 本文可能不适合: · PC客户端网络编程,程序运行在客户的PC上,环境...
阅读全文
说到tcp协议,凡是稍微看过的人都能顺口说出三次握手和四次断连,再牛逼的一点的就能够把每个状态(SYNC_SENT、CLOSE_WAIT。。。。。。等)都能背出来,而说道socket编程,基本上写过网络编程的人都会熟悉那几个标准的API:socket、connect、listen、accept。。。。。。等 但是,我敢打赌很少有人明白tcp状态和socket编程API之间的关系。不信? 看看如下几个问题你是否知道吧: 1)什么时候客户端才能够连接上server端, 是serv...
阅读全文
参考官方文档(http://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt),解释如下: tcp_max_tw_buckets - INTEGER Maximal number of timewait sockets held by system simultaneously.If this number is exceeded time-wait socket is immediately destroyed and warning is printed. 官方文档没有说明默认值,通过几个系统的简单验证,初步确定默认值是180000。 通过源码查看发现,这个选项比较简单,其实现...
阅读全文
tcp_tw_reuse选项的含义如下(http://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt): tcp_tw_reuse - BOOLEAN Allow to reuse TIME-WAIT sockets for new connections when it is safe from protocol viewpoint. Default value is 0. 这里的关键在于“协议什么情况下认为是安全的”,由于环境限制,没有办法进行验证,通过看源码简单分析了一下。 =====linux-2.6.37 net/ipv4/tcp_ipv4.c 114===== int tcp_twsk_...
阅读全文
tcp_tw_recycle选项作用为:Enable fast recycling TIME-WAIT sockets. Default value is 0. tcp_timestamps选项作用为:Enable timestamps as defined in RFC1323. Default value is 1. 这两个选项是linux内核提供的控制选项,和具体的应用程序没有关系,而且网上也能够查询到大量的相关资料,但信息都不够完整,最主要的几个问题如下; 1)快速回收到底有多快? 2)有的资料说只要打开tcp_tw_recycle即可,有的又说要tcp_time...
阅读全文
SO_LINGER是一个socket选项,通过setsockopt API进行设置,使用起来比较简单,但其实现机制比较复杂,且字面意思上比较难理解。 解释最清楚的当属《Unix网络编程卷1》中的说明(7.5章节),这里简单摘录: SO_LINGER的值用如下数据结构表示: struct linger {      int l_onoff; /* 0 = off, nozero = on */      int l_linger; /* linger time */ }; 其取值和处理如下: 1、设置 l_on...
阅读全文
tcp连接是网络编程中最基础的概念,基于不同的使用场景,我们一般区分为“长连接”和“短连接”,长短连接的优点和缺点这里就不详细展开了,有心的同学直接去google查询,本文主要关注如何解决tcp短连接的TIME_WAIT问题。 短连接最大的优点是方便,特别是脚本语言,由于执行完毕后脚本语言的进程就结束了,基本上都是用短连接。但短连接最大的缺点是将占用大量的系统资源,例如:本地端口、socket句柄。 导致这个问题的原因其实很简...
阅读全文
2014-10-14 06:07 工业·编程 ⁄ 共 1453字 暂无评论
1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的 经典的三次握手示意图: 经典的四次握手关闭图: 2. TCP短连接 我们模拟一下TCP短连接的情况,client向server发起连接请求,server接到请求,然后双...
阅读全文
    在开源的C/C++网络库中, 常用的就那么几个, 在业界知名度最高的, 应该是ACE了, 不过是个重量级的大家伙, 轻量级的有libevent, libev, 还有 Boost的ASIO。 ACE是一个大型的中间件产品,代码20万行左右,过于宏大,一堆的设计模式,架构了一层又一层,使用的时候, 要根据情况,看你从那一层来进行使用。支持跨平台。 Boost的ASIO是一个异步IO库,封装了对Socket的常用操作,简化了基于socket程序的开...
阅读全文
2014-10-07 05:55 工业·编程 ⁄ 共 2108字 暂无评论
      网上也有不少网友针对使用ACE的负面评价,有些评价我也比较认可,不过每个技术都有它的缺点嘛,就像C、C++、Java、C#、PHP、Pyton等等,没有说哪个比哪个好,看具体应用了。抱着取其精华去其糟粕的态度学习了下。其实我学习ACE倒不是说准备使用它,而是觉得ACE在网络通讯结构、C++特性、设计模式这方面用到的知识蛮多的,就当是提高自己这方面能力吧。 因为自己能力有限且项目经验又少,所以看...
阅读全文