注册 登录  
 加关注

网易博客网站关停、迁移的公告:

将从2018年11月30日00:00起正式停止网易博客运营
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

老狗的博客

尽管每一步都很微小,但我确认我在进步

 
 
 

日志

 
 
关于我
sky

认真生活,努力工作 热爱技术,关注DB,存储,分布式,中间层,java,c++,php

网易考拉推荐

tcp 连接的状态变化  

2013-03-25 00:32:04|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

建立连接:

1.  服务器首先调用socket函数,创建一个用于监听的socket
2.  其次服务器调用bind函数,将socket与ip以及端口绑定,服务端进入listen状态
3.  服务器端调用accept函数进入accept状态,等待accept连接进来的客户端的socket, accept状态如同饭店的迎宾员在门口等待顾客一样的状态
4. 当客户端socket connect的时候,客户端scoket 与 服务器端accept socket进行三次握手,建立tcp连接后,服务器端accept客户端的socket,创建新的socket为这个客户端socket进行服务



断开连接:
1. 服务完毕,客户端调用close函数断开连接,首先向服务器端socket发送FIN包,然后进入FIN_WAIT1状态
2. 服务器端受到FIN信号后,为客户端发送ack信号,服务器端进入close_wait状态
3. 客户端接收到ack信号后,进入FIN_WAIT2状态,客户端到服务器端的连接已经关闭掉
4. 服务器端数据传输完毕后,向客户端发送FIN信号,服务器端进入LAST_ACK状态
5. 客户端发送ACK信号,客户端进入TIME_WAITE状态,将在2MSL后进入closed状态
6. 服务器端收到ACK信号,进入closed状态

服务器端发出FIN信号后,
客户端ACK后,客户端进入time_wait状态,
并在2MSL后进入closed状态

这个设定的目的是为了避免这个链接被重用并重新创建了链接,而服务器端没有收到ack信号,然后超时重发FIN信号导致新的链接被关闭

但是这个问题可能会导致大量time_wait的问题,可以通过如下设定解决
修改/etc/sysctl.conf文件
# Open the TIME-WAIT sockets quick recovery
net.ipv4.tcp_tw_recycle = 1 
# Open TIME-WAIT sockets reuse
net.ipv4.tcp_tw_reuse = 1 
# Decrease the time default value for tcp_fin_timeout connection
net.ipv4.tcp_fin_timeout = 30
执行sysctl -p 配置生效
  评论这张
 
阅读(194)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018