2014-11-04 07:07
⁄ 工业·编程
⁄ 共 15911字
本文谈一谈我在学习网络编程方面的一些个人经验。“网络编程”这个术语的范围很广,本文指用Sockets API开发基于TCP/IP的网络应用程序,具体定义见“网络编程的各种任务角色”一节。
受限于本人的经历和经验,这篇文章的适应范围是:
· x86-64 Linux服务端网络编程,直接或间接使用 Sockets API
· 公司内网。不一定是局域网,但总体位于公司防火墙之内,环境可控
本文可能不适合:
· PC客户端网络编程,程序运行在客户的PC上,环境...
网络编程阅读全文
2014-10-20 06:25
⁄ 工业·编程
⁄ 共 3238字
说到tcp协议,凡是稍微看过的人都能顺口说出三次握手和四次断连,再牛逼的一点的就能够把每个状态(SYNC_SENT、CLOSE_WAIT。。。。。。等)都能背出来,而说道socket编程,基本上写过网络编程的人都会熟悉那几个标准的API:socket、connect、listen、accept。。。。。。等
但是,我敢打赌很少有人明白tcp状态和socket编程API之间的关系。不信? 看看如下几个问题你是否知道吧:
1)什么时候客户端才能够连接上server端, 是serv...
网络编程阅读全文
2014-10-19 06:21
⁄ 工业·编程
⁄ 共 1383字
参考官方文档(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。
通过源码查看发现,这个选项比较简单,其实现...
网络编程阅读全文
2014-10-18 06:18
⁄ 工业·编程
⁄ 共 1424字
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_...
网络编程阅读全文
2014-10-17 06:15
⁄ 工业·编程
⁄ 共 2890字
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...
网络编程阅读全文
2014-10-16 06:09
⁄ 工业·编程
⁄ 共 1687字
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...
网络编程阅读全文
2014-10-15 06:01
⁄ 工业·编程
⁄ 共 1191字
tcp连接是网络编程中最基础的概念,基于不同的使用场景,我们一般区分为“长连接”和“短连接”,长短连接的优点和缺点这里就不详细展开了,有心的同学直接去google查询,本文主要关注如何解决tcp短连接的TIME_WAIT问题。
短连接最大的优点是方便,特别是脚本语言,由于执行完毕后脚本语言的进程就结束了,基本上都是用短连接。但短连接最大的缺点是将占用大量的系统资源,例如:本地端口、socket句柄。
导致这个问题的原因其实很简...
网络编程阅读全文
2014-10-14 06:07
⁄ 工业·编程
⁄ 共 1453字
1. TCP连接
当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的
经典的三次握手示意图:
经典的四次握手关闭图:
2. TCP短连接
我们模拟一下TCP短连接的情况,client向server发起连接请求,server接到请求,然后双...
网络编程阅读全文
2014-10-10 12:50
⁄ 工业·编程
⁄ 共 2090字
在开源的C/C++网络库中, 常用的就那么几个, 在业界知名度最高的, 应该是ACE了, 不过是个重量级的大家伙, 轻量级的有libevent, libev, 还有 Boost的ASIO。
ACE是一个大型的中间件产品,代码20万行左右,过于宏大,一堆的设计模式,架构了一层又一层,使用的时候, 要根据情况,看你从那一层来进行使用。支持跨平台。
Boost的ASIO是一个异步IO库,封装了对Socket的常用操作,简化了基于socket程序的开...
ACE, boost库, libev, libevent, 开源, 网络编程阅读全文
2014-10-07 05:55
⁄ 工业·编程
⁄ 共 2108字
网上也有不少网友针对使用ACE的负面评价,有些评价我也比较认可,不过每个技术都有它的缺点嘛,就像C、C++、Java、C#、PHP、Pyton等等,没有说哪个比哪个好,看具体应用了。抱着取其精华去其糟粕的态度学习了下。其实我学习ACE倒不是说准备使用它,而是觉得ACE在网络通讯结构、C++特性、设计模式这方面用到的知识蛮多的,就当是提高自己这方面能力吧。 因为自己能力有限且项目经验又少,所以看...
ACE, 网络编程阅读全文