Tcp连接的七次握手浅析
LINUX 查看tcp连接数及状态
# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
TIME_WAIT 8947 等待足够的时间以确保远程TCP接收到连接中断请求的确认
FIN_WAIT1 15 等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN_WAIT2 1 从远程TCP等待连接中断请求
ESTABLISHED 55 代表一个打开的连接
SYN_RECV 21 再收到和发送一个连接请求后等待对方对连接请求的确认
CLOSING 2 没有任何连接状态
LAST_ACK 4 等待原来的发向远程TCP的连接中断请求的确认
TCP连接状态详解:
LISTEN: 侦听来自远方的TCP端口的连接请求
SYN-SENT: 再发送连接请求后等待匹配的连接请求
SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认
ESTABLISHED: 代表一个打开的连接
FIN-WAIT-1: 等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2: 从远程TCP等待连接中断请求
CLOSE-WAIT: 等待从本地用户发来的连接中断请求
CLOSING: 等待远程TCP对连接中断的确认
LAST-ACK: 等待原来的发向远程TCP的连接中断请求的确认
TIME-WAIT: 等待足够的时间以确保远程TCP接收到连接中断请求的确认
CLOSED: 没有任何连接状态
连接的三次握手

- 客户端向服务器发送SYN请求
- 服务器发送ACK回应请求,并同时发送一个SYN的请求给客户端
- 客户端回应ACK应答
关闭的四次握手
对于关闭流程,一共有三种情况:客户端主动关闭,服务器端主动关闭,客户端和服务器端同时主动关闭。这里仅仅以客户端主动关闭为例列出下图。

- 客户端主动关闭,发送FIN请求
- 服务器回应ACK应答
- 服务器被动关闭,发送FIN请求
- 客户端回应ACK应答
对于关闭流程,服务器端和客户端是对等的地位,其它两种场景处理过程类似。需要注意的是,由于对端是是可以主动关闭的,因此在代码中需要加上被动关闭的响应流程。
为什么连接和关闭握手次数不一样
看到上述流程,可能有一个疑问:为什么连接和关闭的握手次数不一样?其实,不论是连接还是关闭,客户端和服务器端都是发送了一次请求(SYN/FIN),回应了一次应答(ACK),它们是对称的。但是,在连接的时候服务器端的请求和应答是在一次握手中同时完成的,而关闭的时候却是分两次完成的,所以就造成了连接和关闭的握手次数不对称。
现在,新问题又来了:为什么连接时复用一次握手,而关闭的时候不复用握手?这个则是因为连接和关闭的行为不是一样所造成的。
- 在连接过程中,客户端是主动连接,服务器端是被动连接,这个顺序是确定了的,因此,可以复用第二次握手。
- 在关闭的过程中,客户端和服务器端可能同时主动关闭,此时就不能复用第二次握手了,因此请求和应答需要单独的发送。
Tcp连接的状态迁移图
前面只考虑了理想的情况,在实际的过程中,可能还需要处理一些异常操作,如下则是一个完成的TCP连接的状态迁移图。

半打开连接和半关闭连接
如前所述,建立或关闭一个连接时需要三或四步的,在这个过程中,TCP连接则会处于一个半打开或半关闭状态。例如,前面状态图中的FIN_WAIT_1和FIN_WAIT_2就是半关闭状态。
一般来说,半连接只是一个暂停的过程。但是,在一些异常的情况的时候(如远端主机故障)的时候常常会造成半关闭连接,由于Tcp连接处于半打开或半关闭状态的时候,仍然会占用相应的端口资源,尤其对于http之类的海量服务来说,会造成大量端口被占用,会造成资源的浪费。
另外,有的程序也针对Tcp协议的这一特征来恶意进行网络攻击。例如,对于一个服务器,大量的恶意客户端建立连接后,既不发请求,也不close套接字,这种情况下服务器如何保护自己呢。因为如果听之任之的话,大量的恶意连接会耗尽服务器的可用描述符,导致服务器不能服务。就算服务器主动close,如果客户端不close的话,那么这个连接还是不能完全释放。对于服务器来说,需要增加相应的机制进行半连接的处理。
Tcp连接的七次握手浅析的更多相关文章
- 为什么建立TCP连接需要三次握手,为什么断开TCP连接需要四次握手,TIME_WAIT状态的意义
为什么建立TCP连接需要三次握手? 原因:为了应对网络中存在的延迟的重复数组的问题 例子: 假设client发起连接的连接请求报文段在网络中没有丢失,而是在某个网络节点长时间滞留了,导致延迟到达ser ...
- TCP连接的3次握手和4次挥手
TCP连接的3次握手和4次挥手笔记 三次握手 TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确 ...
- 详解TCP连接的“三次握手”与“四次挥手”(上)
一.TCP connection 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西: 由于TCP不存在连接的概念,只存在请求和响应,请求和响应都是数据包,它 ...
- 详解TCP连接的“三次握手”与“四次挥手”(下)
上文链接: 详解TCP连接的"三次握手"与"四次挥手"(上) 四.TCP的四次挥手(Four-Way Wavehand) 0.前言 对于"三次握手&q ...
- tcp连接的三次握手
为什么tcp连接需要三次握手才能建立连接 主要是为了初始化sequence number的初始值,通信的双方要互相通知双方的sequence number,这个要作为以后数据通信的序号,保证以后不会因 ...
- TCP连接的三次握手和四次解散过程
客户端和服务器在使用TCP连接传输数据的过程中,需要经过三次握手建立连接和四次握手断开连接操作. 具体如下图所示 上图描述了TCP连接从建立到断开的详细过程,以下就其中的具体报文细节展开讨论. 在TC ...
- tcp连接的3次握手
http://www.tcpipguide.com/free/t_TCPConnectionEstablishmentProcessTheThreeWayHandsh-3.htm synchronou ...
- python网络编程--TCP连接的三次握手(三报文握手)与四次挥手
一.TCP连接 运输连接有三个阶段: 连接建立.数据传送和连接释放. 在TCP连接建立过程中要解决以下三个问题: 1,要使每一方能够确知对方的存在. 2.要允许双方协商一些参数(如最大窗口之,是否使用 ...
- 为什么TCP连接需要三次握手分开需要四次握手?
TCP的三次握手和四次断开TCP是一个面向连接的服务,面向连接的服务是电话系统服务模式的抽象,每一次完整的数据传输都必须经过建立连接,数据传输和终止连接3个过程,TCP建立连接的过程称为三次握手,下面 ...
随机推荐
- windows下GitHub的安装、配置以及项目的上传过程详细介绍
概要 本文主要介绍了在Win10系统中安装Github终端.如何配置安装好的Git终端以及如何利用Git终端将自己的项目上传到远程服务器中 操作必备 win10系统电脑一台.良好的互联网连接.GitH ...
- Oracle 在SQL语句中如何获取系统当前时间并进行操作
select sysdate from dual;select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; select to_char(s ...
- css段落(后盾)
- Webpack打包方式及各场景下模块化语法总结
1.nodejs的方式:commonjs var xx =require() modules.exports=xxxx 注意:这种方式引入模块,路径会遵循node的规则,和js的src路径规则不 ...
- 虚幻4:2D游戏中实现二级或多级跳跃
转自:http://www.52vr.com/article-729-1.html 闲来无事,想做个二级跳跃或者多级跳跃的方法.. 如下所示.即可实现. 第一步:角色蓝图中.设置跳跃事件 第二部: ...
- package.json-nodeJs
package.json文件描述了一个NPM包的所有相关信息,包括作者.简介.包依赖.构建等信息.格式必须是严格的JSON格式. 通常我们在创建一个NPM程序时,可以使用npm init命令,通过交互 ...
- ZooKeeper系列(9):ZooKeeper实现分布式Barrier和Queue
1. 快速开始 1.1概述: Zookeeper是Hadoop的一个子项目,它是分布式系统中的协调系统,可提供的服务主要有:配置服务.名字服务.分布式同步.组服务等. 1.2 使用常见 1.2.1 统 ...
- 05-spark streaming & kafka
1.如何消费已经被消费过的数据? 答:采用不同的group 2.如何自定义去消费已经消费过的数据? Conosumer.properties配置文件中有两个重要参数 auto.commit.enabl ...
- apache(httpd)配置
1.简单配置 1 监听地址 2 主页目录 3 别名 4 目录访问的身份验证 5 https 6 MPM(under linux) * 配置文件中路径.文件名均不支持中文. <<<&l ...
- QTimer的一些注意事项和探索
注意事项: 1.QTimer's accuracy depends on the underlying operating system and hardware.Most platforms sup ...