关闭

TCP连接的建立与终止

标签: tcpTIME-WAITCLOSE-WAITcloseshutdown
98人阅读 评论(0) 收藏 举报
分类:

先附上正常连接和正常关闭情况下TCP状态变迁图
这里写图片描述
两个应用程序同时彼此执行主动打开的情况是可能的,尽管发生的可能性极小。TCP特意设计了可以处理同时打开,对于同时打开它仅建立一条连接而不是两条连接。
这里写图片描述
两个应用程序同时都执行主动关闭也是可能的,TCP协议也允许这样的同时关闭(simultaneous close)
这里写图片描述
TIME_WAIT
1. TIME_WAIT状态也称为2MSL等待状态。每个具体TCP实现必须选择一个报文段最大生存时间MSL,它是任何报文段被丢弃前在网络内的最长时间。
2. 防止上一次连接中的交互包,迷路后重新接收到,影响新的连接(经过2MSL,上一次连接中所有的重复包都会消失)。
3. 当TCP执行一个主动关闭时,第四次挥手的ACK可能会丢失,该连接必须在TIME_WAIT状态停留2MSL,这样另一端超时重发第三次挥手的FIN,主动关闭方可以再发送一次ACK。
4. 通过修改/etc/sysctl.conf文件,服务器能够快速回收和重用那些TIME_WAIT的资源。
CLOSE_WAIT
主动方发起关闭请求之后,被动方处于CLOSE_WAIT状态,通常情况下这个状态的时间应该很短,如果出现大量CLOSE_WAIT状态,说明被动方程序有问题,应该在主动方发起关闭时,被动方要在recv或者send检测到,然后立即也发起close操作。
TCP的半关闭
close和shutdown
1. close只是把文件描述符的引用计数减1,只有在该文件描述符的计数变为0时才关闭文件描述符。那么在单线程或者多线程模型中,在任意地方close一次就会关闭连接,但是在多进程模型中,共享的同一个socket必须所有的进程都调用了close才会真正的关闭连接。并且close直接终止读和写两个方向的数据传输。
2. shutdown则不然,这里是没有引用计数什么事的,只要调用了就会去关闭连接。所以,调用shutdown与多线程、多进程无关。并且shutdown有三个选项,SHUT_RD,SHUT_WR,SHUT_RDWR,可以选择关闭。
这里写图片描述

0
0

猜你在找
深度学习基础与TensorFlow实践
【在线峰会】前端开发重点难点技术剖析与创新实践
【在线峰会】一天掌握物联网全栈开发之道
【在线峰会】如何高质高效的进行Android技术开发
机器学习40天精英计划
Python数据挖掘与分析速成班
微信小程序开发实战
JFinal极速开发企业实战
备战2017软考 系统集成项目管理工程师 学习套餐
Python大型网络爬虫项目开发实战(全套)
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:15918次
    • 积分:531
    • 等级:
    • 排名:千里之外
    • 原创:37篇
    • 转载:0篇
    • 译文:0篇
    • 评论:21条
    联系方式

    公司:深信服科技股份有限公司


    所在地:中国-广东省-深圳市


    QQ交流群:165650716


    文章分类
    最新评论