TCP三次握手和四次挥手通俗理解

一、TCP报文格式

    在了解三次握手和四次挥手之前,先知道TCP报文内部包含了哪些东西。

  1. TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接。TCP在发送数据前必须在彼此间建立连接,这里连接意思是:双方需要内保存对方信息(例如:IP,Port…)
  2. 报文主要段的意思

    序号:表示发送的数据字节流,确保TCP传输有序,对每个字节编号

    确认序号:发送方期待接收的下一序列号,接收成功后的数据字节序列号加 1。只有ACK=1时才有效。

    ACK:确认序号的标志,ACK=1表示确认号有效,ACK=0表示报文不含确认序号信息

    SYN:连接请求序号标志,用于建立连接,SYN=1表示请求连接

    FIN:结束标志,用于释放连接,为1表示关闭本方数据流

二、“三次握手”

2.1 三次握手过程

建立TCP连接时,需要客户端和服务器共发送3个包。

  • 第一次:客户端发送初始序号x和syn=1请求标志
  • 第二次:服务器发送请求标志syn,发送确认标志ACK,发送自己的序号seq=y,发送客户端的确认序号ack=x+1
  • 第三次:客户端发送ACK确认号,发送自己的序号seq=x+1,发送对方的确认号ack=y+1

2.2 三次握手过程分析:

  • 第一次:客户端发送请求到服务器,服务器知道客户端发送,自己接收正常。SYN=1,seq=x
  • 第二次:服务器发给客户端,客户端知道自己发送、接收正常,服务器接收、发送正常。ACK=1,ack=x+1,SYN=1,seq=y
  • 第三次:客户端发给服务器:服务器知道客户端发送,接收正常,自己接收,发送也正常.seq=x+1,ACK=1,ack=y+1

上面分析过程可以看出,握手两次达不到让双方都得出自己、对方的接收、发送能力都正常的结论的。

三、 “四次挥手”

3.1 四次挥手过程

  • 第一次挥手:客户端发出释放FIN=1,自己序列号seq=u,进入FIN-WAIT-1状态
  • 第二次挥手:服务器收到客户端的后,发出ACK=1确认标志和客户端的确认号ack=u+1,自己的序列号seq=v,进入CLOSE-WAIT状态
  • 第三次挥手:客户端收到服务器确认结果后,进入FIN-WAIT-2状态。此时服务器发送释放FIN=1信号,确认标志ACK=1,确认序号ack=u+1,自己序号seq=w,服务器进入LAST-ACK(最后确认态)
  • 第四次挥手:客户端收到回复后,发送确认ACK=1,ack=w+1,自己的seq=u+1,客户端进入TIME-WAIT(时间等待)。客户端经过2个最长报文段寿命后,客户端CLOSE;服务器收到确认后,立刻进入CLOSE状态。

3.2四次挥手过程分析

  • 第一次:客户端请求断开FIN,seq=u
  • 第二次:服务器确认客户端的断开请求ACK,ack=u+1,seq=v
  • 第三次:服务器请求断开FIN,seq=w,ACK,ack=u+1
  • 第四次:客户端确认服务器的断开ACK,ack=w+1,seq=u+1

四、其他问题

4.1为什么三次握手和四次挥手?

  • 三次握手时,服务器同时把ACK和SYN放在一起发送到了客户端那里
  • 四次挥手时,当收到对方的 FIN 报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方是否现在关闭发送数据通道,需要上层应用来决定,因此,己方 ACK 和 FIN 一般都会分开发送。

4.2为什么客户端最后还要等待2MSL?

  • 客户端需要保证最后一次发送的ACK报文到服务器,如果服务器未收到,可以请求客户端重发,这样客户端还有时间再发,重启2MSL计时。

参考:https://blog.csdn.net/u010918487/article/details/87207531

原文地址:https://www.cnblogs.com/jainszhang/p/10641728.html

时间: 2024-11-07 19:59:33

TCP三次握手和四次挥手通俗理解的相关文章

TCP三次握手和四次挥手

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

网络通信 --> TCP三次握手和四次挥手

TCP三次握手和四次挥手 建立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

应聘复习基础笔记1:网络编程之TCP与UDP的优缺点,TCP三次握手、四次挥手、传输窗口控制、存在问题

重要性:必考 一.TCP与UDP的优缺点 ①TCP---传输控制协议,提供的是面向连接.可靠的字节流服务.当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据.TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端的可靠传输.对可靠性要求较高的应用层协议,如FTP.Telnet.SMTP.HTTP.POP3 ②UDP---用户数据报协议,是一个简单的面向数据报的运输层协议.UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去

TCP三次握手和四次挥手以及11种状态

TCP三次握手和四次挥手以及11种状态 1.三次握手 置位概念:根据TCP的包头字段,存在3个重要的标识ACK.SYN.FIN ACK:表示验证字段 SYN:位数置1,表示建立TCP连接 FIN:位数置1,表示断开TCP连接 三次握手过程说明: 1.由客户端发送建立TCP连接的请求报文,其中报文中包含seq序列号,是由发送端随机生成的,并且将报文中的SYN字段置为1,表示需要建立TCP连接.(SYN=1,seq=x,x为随机生成数值)2.由服务端回复客户端发送的TCP连接请求报文,其中包含seq

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

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

Python中的TCP三次握手和四次挥手过程

tcp三次握手和四次挥手 首先先介绍什么是传输层: 1.三次握手 1) 三次握手的详述 首先Client(客户)端发送连接请求报文,Server(服务器)段接受连接后回复ACK报文,并为这次连接分配资源.Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了. 最初两端的TCP进程都处于CLOSED关闭状态,A主动打开连接,而B被动打开连接.(A.B关闭状态CLOSED--B收听状态LISTEN--A同步已发送状态SYN-SENT--B同步收到状态S

[转帖]脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手

脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手 http://www.52im.net/thread-1729-1-1.html 1.引言 网络编程中TCP协议的三次握手和四次挥手的问题,在面试中是最为常见的知识点之一.很多读者都知道"三次"和"四次",但是如果问深入一点,他们往往都无法作出准确回答. 本篇文章尝试使用动画图片的方式,来对这个知识点进行"脑残式"讲解(哈哈),期望读者们可以更加简单.直观地理解TCP网络通信交互的本

TCP‘三次握手’和‘四次挥手’(通俗易懂)

概述 我们都知道 TCP 是 可靠的数据传输协议,UDP是不可靠传输,那么TCP它是怎么保证可靠传输的呢?那我们就不得不提 TCP 的三次握手和四次挥手. 三次握手 下图为三次握手的流程图 下面通过我们 wireshark 抓包工具来分析三次握手 三次握手数据包 第一次握手 建立连接.客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x:(x 是随机生成的一个 int 数值)然后,客户端进入SYN_SEND状态,等待服务器的确认: 第二次握手 服务器收到SYN报文段.服

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

TCP相关知识 TCP是面向连接的传输层协议,它提供可靠交付的.全双工的.面向字节流的点对点服务.HTTP协议便是基于TCP协议实现的.(虽然作为应用层协议,HTTP协议并没有明确要求必须使用TCP协议作为运输层协议,但是因为HTTP协议对可靠性的的要求,默认HTTP是基于TCP协议的.若是使用UDP这种不可靠的.尽最大努力交付的运传输层协议来实现HTTP的话,那么TCP协议的流量控制.可靠性保障机制等等功能就必须全部放到应用层来实现)而相比网络层更进一步,传输层着眼于应用进程间的通信,而不是网