Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1396169
  • 博文数量: 277
  • 博客积分: 2551
  • 博客等级: 少校
  • 技术积分: 3918
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-21 22:46
文章分类

全部博文(277)

文章存档

2017年(3)

2016年(9)

2015年(65)

2014年(27)

2013年(85)

2012年(61)

2011年(27)

分类: LINUX

2013-04-02 20:41:28

       tcp/ip中的listen与accept模型
           如果说listen与accept占用的是同一个端口,那么连接的监听过程与建立过程使用的是同一个状态机。
           连接建立过程主要是在accept系统调用中体现,listen只不过是相当于设置了一个标志,所有试图连接上这个应用程序,
           都要进行连接状态的检查,如果连接已经建立成功,则可以直接发送数据了,转移到select/epoll/poll的监控集合中,
           这个也许就是listen的作用;如果没有建立成功,或是初次连接或是正在进行3次握手,都是由accept处理,accept会查询
           当前连接的状态机进行适当的处理,一旦经过了3次握手的状态机,那么就可以转移到select/epoll/poll的监控集合中。
       tcp/ip中的缓冲区与队列
           tcp/ip的缓冲区与队列是socket描述符的(发送与接收)缓冲区,也是socket描述符的消息队列,
           并不是端口的接收/发送缓冲区和消息队列。
       tcp/ip的描述符的限制
           有时作为服务器或客户端需要打开socket描述符的限制,这个在/etc/sysconfig/limits.conf中;
           当机器作为客户端去连接某个服务器时,它最多只能打开65536个socket,建立一个连接就要占用一个端口,
           而TCP/IP协议中的port是用2字节的int表示,最大就是65536。
           而作为服务器,在理论上可以允许2^48个客户端的连接,当然这是说服务器在特定的端口上允许的连接数目。
           2^48=2^16*2^32,就是{remote_ip,remote_port}的组合数目。
           
          
阅读(1233) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~