连接断开的过程:

主机A发起请求断开连接,主机B回应ACK,FIN包,当主机A收到FIN包时,TIME_WAIT定时器开始启动,然后A向B发送ACK包,因为B没有收到ACK包,所以B不知道自己的FIN包是否发送成功

  1. B成功收到ACK包,连接断开
  2. B没有收到ACK包,认为自己发送的FIN包出现问题,则重新发送FIN包,
为什么有Time_wait状态?
  1. 如果没有Time_wait状态,A向B发送完ACK包后套接字完全终止,但是ACK包中途丢失,则B认为发送给A的FIN包丢失了,继续重传,但主机A已经处于完全终止状态,永远收不到来自A的消息,
  2. 如果TIME_WAIT状态存在,那么A可以再次重传ACK消息连接可以正常终止.


服务器程序如果Ctrl+c杀掉后,立马重启,因为端口位于Time_wait状态下的套接字,所以bind() error,

谁先发起断开连接请求TIME_WAIT在这一端,一般不关注客户端的Time_wait,客户端的端口都是随机动态分配


地址再分配(端口重用):

Time_wait状态下的套接字端口号可以重新分配给新的套接字.在使用前修改SOL_SOCKET中的SO_REUSEADDR状态(=1可重用).

#include <me.h>#define TRUE  1
#define FALSE 0int main(int argc,char *argv[])
{int serv_sock,clnt_sock;char message[30];int option,str_len;socklen_t optlen,clnt_adr_sz;struct sockaddr_in serv_adr,clnt_adr;if (argc != 2){printf("Usage : %s <port>\n",argv[0]);exit(1);}serv_sock = socket(PF_INET,SOCK_STREAM,0); //创建TCP套接字if (serv_sock == -1)error_handle("socket() error");optlen = sizeof(option);option = TRUE;setsockopt(serv_sock,SOL_SOCKET,SO_REUSEADDR,(void*)&option,optlen);memset(&serv_adr,0,sizeof(serv_adr));serv_adr.sin_family       = AF_INET;serv_adr.sin_addr.s_addr  = htonl(INADDR_ANY);//服务器端监听所有网卡 serv_adr.sin_port         = htons(atoi(argv[1]));if (bind(serv_sock,(struct sockaddr*)&serv_adr,sizeof(serv_adr)))error_handle("bind() error");if (listen(serv_sock,5) == -1)error_handle("listen() error");//接收客户端请求clnt_adr_sz = sizeof(clnt_adr);clnt_sock   = accept(serv_sock,(struct sockaddr*)&clnt_adr,&clnt_adr_sz);while((str_len = read(clnt_sock,message,sizeof(message))) != 0){write(clnt_sock,message,str_len);write(1,message,str_len);//标准输出}close(clnt_sock);close(serv_sock);return 0;
}

//后面用到
#ifndef _ME_H_
#define _ME_H_#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netdb.h>#define error_handle(message) \{fputs(message,stderr);\fputc('\n',stderr);\exit(1);}#endif

来自<<TCP/IP 网络编程 尹圣雨>>

Time_wait状态端口重利用相关推荐

  1. linux端口查看time_wait,netstat -an查看到大量的TIME_WAIT状态的解决办法

    netstat下time_wait状态的tcp连接: 1.这是一种处于连接完全关闭状态前的状态: 2.通常要等上4分钟(windows server)的时间才能完全关闭: 3.这种状态下的tcp连接占 ...

  2. 网络基础2-3(TCP协议,三次握手,四次挥手,TIME_WAIT状态的作用,TCP如何保证可靠传输,TCP连接中状态转化,滑动窗口,流量控制,快速重传,拥塞窗口,延迟应答,捎带应答,粘包问题)

    TCP协议 TCP协议概念 TCP全称为 "传输控制协议(Transmission Control Protocol"). 人如其名, 要对数据的传输进行一个详细的控制 TCP协议 ...

  3. 一个解除TCP连接的TIME_WAIT状态限制的简便方法

    近日无意间发现了一个小窍门:当TCP连接所对应socket的接收队列中仍有未读数据时,将此socket强行close后,将使此socket连接不会进入TIME_WAIT状态,用"netsta ...

  4. linux 进程 状态 ri,LINUX下解决netstat查看TIME_WAIT状态过多问题(转)

    # netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c 16 CLOSING 130 ESTABLISHED 298 FIN_WAIT1 13 FIN_WA ...

  5. 客户端死活连不上服务器,原因竟然是time_wait,怎样消除大量的time_wait状态

    最近项目中客户端连接服务器时死活都连不上了,服务器查询出现大量time_wait状态,于是迫在眉睫解决问题的着手点是如何避免出现大量的tima_wait状态.下面我将为大家介绍解决的方法: 下面让我们 ...

  6. 为什么TCP的TIME_WAIT状态要保持2MSL?

    TIMEWAIT状态也称为 2MSL等待状态. 每个具体TCP实现必须选择一个报文段最大生存时间MSL(Maximum Segment Lifetime). 它是任何报文段被丢弃前在网络内的最长时间. ...

  7. Linux-TCP/IP TIME_WAIT状态原理

    TIME_WAIT状态原理 ---------------------------- 通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT状态. 客户端主动关闭连接时,会发送最后一个 ...

  8. 面试官问:大量的 TIME_WAIT 状态 TCP 连接,对业务有什么影响?怎么处理?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 几个方面: 问题描述:什么现象?什么影响? 问题分析 解决 ...

  9. TIME_WAIT状态及存在原因

    1. 客户端与服务器端建立TCP/IP连接后关闭SOCKET后,服务器端连接的端口状态为TIME_WAIT:   2. 主动关闭的Socket端会进入TIME_WAIT状态,并且持续2MSL时间长度, ...

最新文章

  1. golang中文文档_Golang 标准库 限流器 time/rate 设计与实现
  2. Solaris 上swap -s的解释
  3. 045_Unicode对照表十一
  4. objective-c 加号 减号 - +
  5. CMAKE_CURRENT_BINARY_DIR
  6. 漫画:三分钟了解敏捷开发
  7. JavaScript笔记-使用反引号格式化字符串
  8. PyCharm——Youki觉得好用的快捷键~
  9. Java安装以及环境配置
  10. Const限定符与C++11Constexpr的区别
  11. 光学接触角计算机软件,接触角软件的功能
  12. 直播丨易鲸捷SQL编译器、达梦DM8数据库体系结构
  13. SQL SERVER数据库三种数据插入方式
  14. 文件夹加密狗的加密原理与解密
  15. 从.weights中提取权重数据
  16. Atiitt 前端技术点清单列表 attilax总结 v2 s11.docx 1. ui与前端系列 类库与api 3 1.1. 概念性技术 4 1.2. 运行环境 4 1.3. Ui技术点 4 1
  17. 优秀开源项目推荐之--文档库bookstack
  18. 小小白学习c语言分享
  19. win10的IE闪退及“启用或关闭windows功能”里没有IE选项
  20. 【牛客网】埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛 题解

热门文章

  1. 走近所罗门 Part 1 邮件中的所罗门
  2. 设计模式的艺术 工厂方法模式
  3. §7.3 n维欧氏空间中的紧致子集
  4. OFDM信号是一种广泛应用的调制技术,其优点在于比传统的单载波调制技术具有更好的频谱利用率和抗干扰性能。然而,OFDM信号的峰均功率比(PAPR)问题一直是制约...
  5. wordpress修改css样式的方法,在WordPress中添加自定义CSS代码的几种方法
  6. oracle总结大全(dos中操作)
  7. 辅助驾驶功能开发-功能对标篇(18)-NCA城市辅助系统-华为
  8. goldengate ddl mysql_配置GoldenGate同步DDL语句(3)
  9. 微软 IE 紧急补丁即将发布!
  10. 微软浏览器: 12月份浏览器市场份额 微软IE再下滑1.6%