三次握手和四次挥手

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

相关推荐

  • linux 学习(2)

    1 linux 常见的文件管理命令都有哪些?其常用的使用方法。 ls 文件列出命令   常见选项  -l 显示长文本信息          -d 显示当前目录信息          -a 显示所有文件信息     &nb…

    Linux干货 2016-10-09
  • 计算机组成原理

                                 计算机组成原理 Linux 操作系统是UNIX 操作系统的一种克隆系统。它诞生于1991 年的10 月5 日(这是第一次正式向外公布的时间)。以后借助于…

    Linux干货 2016-10-27
  • N23-第四周博客作业

    1、复制 /etc/skel 目录为 /home/tuser1,要求 /home/tuser1及其内部文件的属组和其他用户均没有任何访问权限。 [root@localhost ~]# cp -r /etc/skel /home/tuser1 && chmod -R g-r,o-r /home/tuser1 (1)使用cp命令的-r选项,将/e…

    Linux干货 2016-12-05
  • N-28作业第一周

    N-28作业第一周小结:以前看存储视频里面讲存储架构里不清楚的部分居然开始清晰。基础命令需要多花时间熟悉。

    2017-12-05
  • 虚拟化网络之OpenvSwitch(三)

    上一篇介绍了openvswitch利用GRE协议,搭建多台宿主机的虚拟网络,接下来在利用vxlan通道搭建一个跨多宿主机的虚拟化网络,深入了解openvswitch的功能。 一、实验拓扑 ip地址分配:  A1:192.168.10.1/24  A2:192.168.10.10/24   B1:192.168.10.2…

    系统运维 2016-03-27
  • 文件系统管理_设定文件系统的配额

    认识配置配额系统 :为控制用户使用的空间的大小,在linux可以实现对分区的大小控制,控制用户在这个分区内使用空间的大小同时还可以对用户的文件个数实现控制。 在linux系统中其遵循文件分区来实现控制 磁盘的配额只针对单个分区来实现控制,不能对单块磁盘(硬盘)来实现控制的 【搭建试验环境 1】 怎样把某一个文件夹(/home)单独放到(迁移)一个独立的分区中…

    Linux干货 2017-04-24