TCP11种状态集之TIME_WAIT
先看一个实例,上代码:
#!/usr/bin/env python3
# _*_ coding:utf- _*_
import socket
sk = socket.socket()
sk.bind(("0.0.0.0",)) # 把IP绑定到套接字
sk.listen() # 监听链接 print("等待客户端连接....")
conn,addr = sk.accept() # 接收客户端链接
print("IP: %s Port: %s 已建立连接..." %(addr[],addr[])) client_data = conn.recv() # 接收客户端信息
print(client_data) #打印客户端信息息 conn.send(b"haha") # 向客户端发送信息 conn.close() # 关闭这次的连接
sk.close() # 关闭服务器socket,相当于停止了服务
基于tcp协议的socket server
运行以上代码: 使用 telnet 连接服务端

# 客户端退出连接, 再次启动服务端会报错,说端口已经被占用。

# 查看tcp状态,TIME_WAIT。。什么鬼 程序已经结束了,socket为啥还存在呢? 这是因为tcp协议的可靠性。

解决办法:
#加入一条socket配置,重用ip和端口 phone=socket(AF_INET,SOCK_STREAM)
phone.setsockopt(SOL_SOCKET,SO_REUSEADDR,) #就是它,在bind前加
phone.bind(('127.0.0.1',))
方法一:在代码中加参数
vi /etc/sysctl.conf 编辑文件,加入以下内容:
net.ipv4.tcp_syncookies =
net.ipv4.tcp_tw_reuse =
net.ipv4.tcp_tw_recycle =
net.ipv4.tcp_fin_timeout = 然后执行 /sbin/sysctl -p 让参数生效。 net.ipv4.tcp_syncookies = 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭; net.ipv4.tcp_tw_reuse = 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭; net.ipv4.tcp_tw_recycle = 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。 net.ipv4.tcp_fin_timeout 修改系統默认的 TIMEOUT 时间
linux系统: 设置内核参数
tcp协议三次握手与四次挥手
三次握手:

.客户端:
客户端发送syn信息给服务端,然后客户端从closed状态变为syn_send(请求建立连接)状态(三次握手的第一次握手)
.服务端:
①服务端从closed(关闭状态)状态转换为listen(监听状态)状态(在服务端开启相应服务),只有在listen状态才可以接收客户端建立连接请求
closed--listen状态,实际上就是创建了一个socket条目信息
②服务端在listen状态接收到客户端发送的syn请求,会响应syn和ack信息,并且从listen状态变为syn_rcvd状态(三次握手的第二次握手)
.客户端:
客户端在syn_send状态接收到syn和ack字段信息,然后回复ack确认信息(三次握手的第三次握手)
syn_send状态变为最终建立连接的状态(established)
.服务端:
服务端在syn_rcvd状态接收到了ack字段信息,从syn_rcvd状态变为established
tcp三次握手状态集的转换
四次挥手:

.客户端:
在established状态发送fin字段信息给服务端(四次挥手过程第一次挥手)
然后客户端状态转变为fin_wait1(第一次等待:服务端的确认ack信息)
.服务端:
① 服务端在established状态接收到客户端发送的fin字段信息,从established状态变为close_wait
② 服务端在close_wait发送ack确认字段(四次挥手的第二挥手)
.客户端
①客户端在fin_wait1状态接收服务端的ack信息,进入到fin_wait2(第二次等待:)
.服务端:
服务端在close_wait发送fin断开连接字段给客户端(四次挥手的第三次挥手)
服务端从close_wait变为last_ack状态
.客户端
客户端在fin_wait2状态接收服务端的fin信息,然后响应ack信息,并将自己的状态转变为time_wait状态
(四次挥手的第四次挥手)
.服务端:
服务端在last_ack状态接收到客户端发送的ack字段信息之后,就会最终变为closed状态
.客户端:
在time_wait会等待120秒钟时间,才能进入到closed状态
tcp四次挥手状态集的转换
tcp十一种状态集转换

TCP11种状态集之TIME_WAIT的更多相关文章
- 网络基础二 tcp/ip协议簇 端口 三次握手 四次挥手 11种状态集
第1章 概念介绍 1.1 VLAN 1.1.1 什么是VLAN VLAN(Virtual LAN),翻译成中文是“虚拟局域网”.LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成 ...
- TCP/IP 协议簇 端口 三次握手 四次挥手 11种状态集
第1章 概念介绍 1.1 VLAN 1.1.1 什么是VLAN VLAN(Virtual LAN),翻译成中文是“虚拟局域网”.LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成 ...
- TCP11种状态
2.全部11种状态 2.1.客户端独有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 (4)CLOSING (5)TIME_WAIT . 2.2.服务器独有的:(1)L ...
- TCP/IP协议簇 端口 三次握手 四次挥手 11种状态集
第一章:概念介绍 1.1 VLAN 1.1.1 什么是VLAN VLAN (Virturl LAN) ,翻译成中文是:“虚拟局域网”.VLAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计 ...
- [svc]tcp三次握手四次挥手&tcp的11种状态(半连接)&tcp的time-wait
TCP的状态转化过程(11种状态)以及TIME_WAIT状态 高性能网络 | 你所不知道的TIME_WAIT和CLOSE_WAIT 我相信很多都遇到过这个问题.一旦有用户在喊:网络变慢了.第一件事情就 ...
- Hadoop_Block的几种状态_DataNode
在Hadoop 2.0 中HDFS 引入了 append 和 hflush 功能之后, 需要为 数据块增加新的状态 来尽最大可能的保证数据的一致性. 参阅文档: http://files.cnblog ...
- TCP11种状态分析和测试
-->简介 -->正文 -->测试一些状态 --------------------------------------------------------------------- ...
- [linux] C语言Linux系统编程-TCP通信的11种状态
三次握手由client主动发出SYN请求, 此时client处于SYN_SENT状态(第一次握手)当server收到之后会由LISTEN转变为SYN_REVD状态, 并回复client, client ...
- TCP的11种状态
TCP的11种状态 TCP三次握手建立连接 Tcp头部 六个标志位中,我们要用到三个: SYN:SYN= 1 表示这是一个连接请求或连接接受报文.在建立连接时用来进行同步序号(个人理解是,在建立连接的 ...
随机推荐
- uwp - 解决“Microsoft.EntityFrameworkCore.Tools –Pre因为在此系统上禁止运行脚本”
在uwp使用ef时,需要安装“Microsoft.EntityFrameworkCore.Tools –Pre” ,如果安装失败提示:“无法加载文件 \.nuget\packages\Microsof ...
- WPF 获取 ListView DataTemplate 中控件值
原文:WPF 获取 ListView DataTemplate 中控件值 版权声明:本文为博主原创文章,未经博主允许可以随意转载 https://blog.csdn.net/songqingwei19 ...
- Notepad++ 自定义关键字
Notepad++是一款輕便好用的編輯器,但可能有些語言的關鍵字不全,比方SQL中,默認關鍵字沒有Merge. 怎样給Notepad++中的語言添加關鍵字,而不是大動干戈自定義一個語言? 步驟: Se ...
- WPF后台动画DoubleAnimation讲解
WPF后台动画,使用DoubleAnimation做的. 1.移动动画 需要参数(目标点离最上边的位置,目标点离最左边的位置,元素名称) Image mImage = new Image(); Flo ...
- Matlab随笔之线性规划
原文:Matlab随笔之线性规划 LP(Linear programming,线性规划)是一种优化方法,在优化问题中目标函数和约束函数均为向量变量的线性函数,LP问题可描述为:min xs.t. ...
- POJ 1986 Distance Queries LCA两点距离树
标题来源:POJ 1986 Distance Queries 意甲冠军:给你一棵树 q第二次查询 每次你问两个点之间的距离 思路:对于2点 u v dis(u,v) = dis(root,u) + d ...
- Mysql事务,并发问题,锁机制-- 幻读、不可重复读--专题
1.什么是事务 事务是一条或多条数据库操作语句的组合,具备ACID,4个特点. 原子性:要不全部成功,要不全部撤销 隔离性:事务之间相互独立,互不干扰 一致性:数据库正确地改变状态后,数据库的一致性约 ...
- 定长文本格式编辑神器 - Record Editor
由于项目里有系统使用的是定长的文本格式,如果列数比较多的话编辑检查起来会特别麻烦.之前也找了各种编辑器的插件,最多只能显示列宽.辅助线而以还是不方便 .最后发现了一个开源项目 Record Edito ...
- Win10商店芒果TV UWP版更新,新增后台视频下载
湖南卫视旗下唯一官方视频平台<芒果TV>近日向Win10商店提交了芒果TV UWP V3.0.0版,这次为广大Win10平台用户带来了期待已久的重大功能和更新,可谓是良心厂商,值得鼓励和支 ...
- HtmlAgilityPack开发
官方网站: http://html-agility-pack.net/ Nuget安装: Install-Package HtmlAgilityPack C# HTML Parser Examples ...