三次握手和四次挥手

TCP三次握手:

 三次握手和四次挥手

                                     3

第一次握手:建立连接。客户端发送位码为SYN=1,随机产生一个值seq=x(随机产生的一个序号)的数据包发送到服务器,要求建立连接,然后客户端进入SYN_SENT(同步已发送)状态,等待服务器的确认。

第二次握手:服务器收到请求要确认连接信息,发送SYN=1,ACK=1,ack=x+1(确认号,意思就是你发的x包我收到了,希望下次你发x+1的包),seq=y(随机产生),的数据包发送给客户端确认连接请求,服务器进入SYN_RCVD(同步收到)状态。(ACK表示标记位,ack表示确认号)

第三次握手:客户端收到后发送ACK=1(确认收到了服务器发的请求),seq=x+1(上次发送的是x包,这次发送x+1的包),ack=y+1(确认收到y给服务器,客户端和服务器都进入ESTABLISHED(已建立连接)状态,完成三次握手。

(之所以会是三次握手,是出于安全考虑。虽然三次握手也有隐患,相对来说较合适)

TCP四次挥手:(以客户端挥手为例)

 三次握手和四次挥手

                                          图2

第一次挥手:客户端发送FIN=1(发送关闭连接请求),seq=u去关闭客户端到服务器的数据传送,客户端进入FIN_WAIT_1(终止等待1)状态。

第二次挥手:服务器收到FIN后,发送ACK=1(关闭连接请求收到了)给客户机,seq=v(随机生成的号),ack=u+1(确认客户端发送的u收到了,希望下次发u+1),服务器进入CLOSE_WAIT(关闭等待)状态。

第三次挥手:服务器发送FIN=1,ACK=1,seq=w,ack=u+1(确认收到了u+1)用来关闭服务器到客户端的数据传送,服务器进入LAST_ACK(最后确认)状态。

第四次挥手:客户端收到FIN后,进入TIME_WAIT(时间等待)状态,接着发送ACK=1,seq=u+1(确认收到u+1),ack=w+1(收到w,希望下次发w+1)给服务器,服务器进入CLOSED状态,完成四次挥手。

状态:

CLOSED 没有任何连接状态

LISTEN 侦听状态,等待来自远方TCP端口的连接请求

SYN-SENT 在发送连接请求后,等待对方确认

SYN-RECEIVED 在收到和发送一个连接请求后,等待对方确认

ESTABLISHED 代表传输连接建立,双方进入数据传送状态

FIN-WAIT-1 主动关闭,主机已发送关闭连接请求,等待对方确认

FIN-WAIT-2 主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求

TIME-WAIT 完成双向传输连接关闭,等待所有分组消失

CLOSE-WAIT 被动关闭,收到对方发来的关闭连接请求,并已确认

LAST-ACK 被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失

LOSING 双方同时尝试关闭传输连接,等待对方确认

注:
   1.为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?
    这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。
   2.为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?
    这是因为虽然双方都同意关闭连接了,而且握手的4个报文也都协调和发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SEND状态到ESTABLISH状态那样);但是因为我们必须要假想网络是不可靠的,你无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文。

 


原创文章,作者:吼吼哈嘿,如若转载,请注明出处:http://www.178linux.com/85993

(0)
吼吼哈嘿吼吼哈嘿
上一篇 2017-09-02 19:42
下一篇 2017-09-02 20:36

相关推荐

  • LVM 逻辑卷管理器

    1、什么是LVM:PV、PE、VG、LV的意义    LVM:Logical Volume Manager(逻辑卷管理器),可以将多个物理分区整合成看起来像一个磁盘一样,并可随意增加或减少逻辑卷大小 dm:device mapper,将一个或多个底层块设备组织成一个逻辑设备的模块; /dev/mapper/VG_NAME-LV_NAME …

    Linux干货 2016-09-19
  • Lamp应用

    练习:分别使用CentOS 7和CentOS 6实现以下任务 (1) 配置三个基于名称的虚拟主机; (a) discuzX (b) wordpress (c) https: phpMyAdmin (2) 对discuzX的主页做压测; 分别给出并发10, 100, 200, 500等每秒的响应数 建立私有CA (umask 077;openssl genrs…

    Linux干货 2016-10-12
  • HA cluster原理

    HA cluster 一、什么是高可用集群   高可用集群就是当某一个节点或服务器发生故障时,另一个节点能够自动且立即向外提供服务,即将有故障节点上的资源转移到另一个节点上去,这样另一个节点有了资源既可以向外提供服务。高可用集群是用于单个节点发生故障时,能够自动将资源、服务进行切换,这样可以保证服务一直在线。在这个过程中,对于客户端来说是透明的。 …

    2016-11-27
  • 数据库的备份和恢复

    数据库的备份和恢复 一 (理论篇)、数据库备份与恢复基础 1、数据库的备份与恢复 备份:存储的数据副本; 原始数据:持续改变; 恢复:把副本应用到线上系统; 仅能恢复至备份操作时刻的数据状态; 时间点恢复: binary logs; 2、为什么备份? 灾难恢复: 硬件故障(冗余)、软件故障(bug)、自然灾害、黑客攻击、误操作、…&nb…

    2016-11-22
  • 脚本进阶笔记整理

    一、逻辑运算 变量:   本地变量、环境变量、局部变量、位置参数变量、特殊变量   变量赋值:name=value,export name=value,declare -x name=value   变量引用:$name,${name}   注意:有些时候{}不能省略,例如 &n…

    Linux干货 2017-03-26
  • 作业-第二周

    1、linux常用文件管理命令 ls rm chmod touch mv cp 2、echo $? 如果返回0则成功,其他失败 3、 mkdir /tmp/{a,b}_{c,d} mkdir -p /tmp/mylinux/bin /tmp/mylinux/boot/ /tmp/mylinux/boot/grup /tmp/mylinux/dev \ /tm…

    Linux干货 2016-06-23