TCP三次握手详解及释放连接过程

TCP在传输之前会进行三次沟通,一般称为“三次握手”,传完数据断开的时候要进行四次沟通,一般称为“四次挥手”。

两个序号和三个标志位:

(1)序号:seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
  (2)确认序号:ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。
  (3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
  (A)URG:紧急指针(urgent pointer)有效。
  (B)ACK:确认序号有效。
  (C)PSH:接收方应该尽快将这个报文交给应用层。
  (D)RST:重置连接。
  (E)SYN:发起一个新连接。
  (F)FIN:释放一个连接。

需要注意的是:
  (A)不要将确认序号ack与标志位中的ACK搞混了。
  (B)确认方ack=发起方req+1,两端配对。

在第一次消息发送中,A随机选取一个序列号作为自己的初始序号发送给B;第二次消息B使用ack对A的数据包进行确认,

因为已经收到了序列号为x的数据包,准备接收序列号为x+1的包,所以ack=x+1,同时B告诉A自己的初始序列号,就是seq=y;

第三条消息A告诉B收到了B的确认消息并准备建立连接,A自己此条消息的序列号是x+1,所以seq=x+1,而ack=y+1是表示A正准备接收B序列号为y+1的数据包。

四次挥手:

由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,

收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。

首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。
 (1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
  (2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
 (3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
  (4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

(1)三次握手是什么或者流程?四次握手呢?答案前面分析就是。
(2)为什么建立连接是三次握手,而关闭连接却是四次挥手呢?
  这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,收到对方的FIN报文时,

仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,

再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。

为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

不应该是为了防止B发送的FIN=1的包的丢失,因为如果A没有收到来自B的释放连接请求,是不会进入TIME-WAIT状态的。

所以正确的解释是:A发送的确认释放连接信息B没有收到,这时候B会再次发送一个FIN=1的释放连接请求,而这个时候A还处于TIME-WAIT,所以可以再次发送确认信息

时间: 2024-10-07 18:17:07

TCP三次握手详解及释放连接过程的相关文章

TCP三次握手详解和四次挥手

TCP的三次握手四次挥手时面试时面试官经常问道的问题 在互联网中,如何使不同网段的主机相互通信,需要用到TCP协议:TCP,提供面向连接的服务,在传送数据之前必须先建立连接,数据传送完成后要释放连接.TCP是一种可靠的的运输服务,采用三次握手建立一个连接. 首先介绍下TCP的报文格式序号 发送端为每个字节编号,方便接收端正确重组.确认号 用于确认发送端的信息.窗口大小 用于说明本地可接收数据段的数目. 标志位URG 紧急指针位 1 开启 0 关闭.不经过缓存直接提交给对方. PSH 快速接受传递

TCP三次握手详解(二)

四次挥手 以上过程流程图如下: 为什么断开连接需要四次握手?因为TCP链接是全双工的,即数据在两个方向上能同时传递,因此每个方向必须单独的进行关闭.这原则就是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向连接. 分析 TCP报文头中flags中的FIN被置为1,sequence number=418, acknowledgment number=203.返回一个确认报文,ack=seq+1=419,seq = ack=203.至此,source port23到dst port=54

TCP/IP三次握手详解

原文:http://www.cnblogs.com/CBDoctor/archive/2012/10/17/2727073.html 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认: 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态: 第

深入理解TCP协议:三次握手详解

1.什么是三次握手? TCP协议建立连接时,需要三次发送数据包: 第一次:客户机向服务器端请求建立连接 第二次:服务器收到客户机的请求,发出响应 第三次:客户机收到响应 认为连接建立成功 详细过程: 名词解释: SYN - 标志位 只有第一次和第二次为1,第三次和其他任何情况都是0 ACK - 标志位 只有第一次不为1,第二,三次和其他任何情况都是1 Sequence Number 顺序号,初始值为随机数 Acknowledgment Number 确认号,下一次对收到的数据顺序号的期望 第一次

TCP三次握手与Tcpdump抓包分析过程

一.TCP连接建立(三次握手) 过程 客户端A,服务器B,初始序号seq,确认号ack 初始状态:B处于监听状态,A处于打开状态 A -> B : seq = x (A向B发送连接请求报文段,A进入同步发送状态SYN-SENT) B -> A : ack = x + 1,seq = y (B收到报文段,向A发送确认,B进入同步收到状态SYN-RCVD) A -> B : ack = y+1 (A收到B的确认后,再次确认,A进入连接状态ESTABLISHED) 连接后的状态:B收到A的确认

TCP三次握手和四次挥手

TCP三次握手和四次挥手 在了解TCP三次握手和四次挥手之前我们先来了解一下TCP的标志位,这样有助于我们理解TCP三次握手和四次挥手的过程 TCP标志位: URG:表示TCP包的紧急指针域有效,用来保证TCP连接不被中断 ACK:表示确认序号有效 PSH:表示Push操作; 所谓Push操作就是指在数据包到达接收端以后, 立即传送给应用程序,不在缓冲区排队 RST:表示连接复位请求; 用来复位那些产生错误的连接 SYN:表示同步序号, 用来建立连接;SYN和ACK搭配使用,请求连接时,SYN=

Wireshark Tcp三次握手

TCP三次握手Three-way Handshake  一个虚拟连接的建立是通过三次握手来实现的 1. (B) --> [SYN] --> (A) 假如服务器A和客户机B通讯. 当A要和B通信时,B首先向A发一个SYN (Synchronize) 标记的包,告诉A请求建立连接. 注意: 一个 SYN包就是仅SYN标记设为1的TCP包(参见TCP包头Resources). 认识到这点很重要,只有当A受到B发来的SYN包,才可建立连接,除此之外别无他法.因此,如果你的防火墙丢弃所有的发往外网接口的

TCP三次握手与四次挥手详解

TCP三次握手与四次挥手详解 @(TCP/IP) [TOC] 1.TCP报文格式 TCP(Transmission Control Protocol) 传输控制协议.TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接. 我们需要知道TCP在网络OSI的七层模型中的第四层(Transport层),IP在第三层(Network层),第二层(Data Link层),在第二层上的数据,我们叫Frame,在第三层上的数据叫Packet,第四层的数据叫Segment. TC

wireshark抓包图解-tcp三次握手四次挥手详解/

http://www.seanyxie.com/wireshark%E6%8A%93%E5%8C%85%E5%9B%BE%E8%A7%A3-tcp%E4%B8%89%E6%AC%A1%E6%8F%A1%E6%89%8B%E5%9B%9B%E6%AC%A1%E6%8C%A5%E6%89%8B%E8%AF%A6%E8%A7%A3/ wireshark抓包图解-tcp三次握手四次挥手详解/ tcpdump抓包命令使用方法及内容解析/