TCP协议中的三次握手和四次挥手

原创 2015年11月19日 15:46:34

建立TCP连接需要三次握手,而断开连接则需要四次挥手。

有以下几种标示:

SYN(synchronous建立联机)
ACK(acknowledgement 确认)
PSH(push传送)
FIN(finish结束)
RST(reset重置)
URG(urgent紧急)

Sequence number(顺序号码)
Acknowledge number(确认号码)

一、三次握手

第一次握手:客户端向服务器发送连接请求包,标志位SYN(同步序号)置为1,序号为X=0。

第二次握手:服务器收到客户端发来的报文,由SYN=1知道客户端要求建立联机。向客户端发送一个SYN和ACK都置为1的TCP报文,设置初始序号Y=0,将确认序号(Acknowledgement Number)设置为客户的序列号加1,即X+1=0+1=1。

第三次握手:客户端收到服务器发来的包后检查确认序号(Acknowledgement Number)是否正确,即第一次发送的序号加1(X+1=1)。以及标志位ACK是否为1。若正确,客户端再次发送确认包,ACK标志位为1,SYN标志位为0。确认序号(Acknowledgement Number)=Y+1=0+1=1,发送序号为X+1=1。服务器端收到后确认序号值与ACK=1则连接建立成功,可以传送数据了。

连接建立过程如下图:
这里写图片描述

例题:
TCP建立连接的过程采用三次握手,已知第三次握手报文的发送序列号为1000,确认序列号为2000,请问第二次握手报文的发送序列号和确认序列号分别为多少?(1999,1000)。

解析:

一般是客户端先向服务器发送请求:

第一次握手发送一个序列号;
第二次握手的序列号是单独发送的,第二次握手的确认号是第一次握手序列号+1;
第三次握手的序列号是第二次握手的确认号,第三次握手的确认号是是第二次握手的序列号+1;

二、四次挥手

中断连接端可以是Client端,也可以是Server端。

第一次挥手:客户端给服务器发送TCP包,用来关闭客户端到服务器的数据传送。将标志位FIN和ACK置为1,序号为X=1,确认序号为Z=1。

第二次挥手:服务器收到FIN后,发回一个ACK(标志位ACK=1),确认序号为收到的序号加1,即X=X+1=2。序号为收到的确认序号=Z。

第三次挥手:服务器关闭与客户端的连接发送一个FIN。标志位FIN和ACK置为1,序号为Y=1,确认序号为X=2。

第四次挥手:客户端收到服务器发送的FIN之后,发回ACK确认(标志位ACK=1),确认序号为收到的序号加1,即Y+1=2。序号为收到的确认序号X=2。

断开连接过程如下图:
这里写图片描述

【问题1】为什么连接的时候是三次握手,关闭的时候却是四次握手?

答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,”你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

【问题2】为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
答:虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假想网络是不可靠的,有可能最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。

主动打开的的一方称为客户端,被动打开的一端称为服务端。
主动打开就是指利用TCP报文请求建立连接的一方。就比如你给别人打电话,你先拨号,你就是主动打开。
被动打开就是接受的另一方的请求报文并同意建立连接的一方。就比如你给别人打电话过去,对方接听了,打就是被动打开。
被动打开:因为有链接需要处理,因此被动打开。
主动打开:因为需要和对方建立链接,因此主动打开。

版权声明:本文为博主原创文章,未经博主允许不得转载。

TCP为何采用三次握手来建立连接,若采用二次握手可以吗?

 首先简单介绍一下TCP三次握手     在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并...
  • jk110333
  • jk110333
  • 2014年05月04日 10:05
  • 5679

TCP 第三次握手失败

这是另外一个问题,之前对于TCP握手以及通信底层没有什么概念。出现问题后,客户发来了Wireshark抓包。 客户端101.253发出了SYN包给服务器102.24, 客户端进入SYN_SEND状...
  • king523103
  • king523103
  • 2015年08月19日 11:41
  • 4210

TCP建立连接为什么是三次握手?

我们都知道TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP也是日常通讯中用的最广泛的一种协议,TCP的连接需要三次握手,断开连接需要四次挥手,那么TCP的连接过程为什么是三次握手而不...
  • dreamhougf
  • dreamhougf
  • 2015年10月20日 11:16
  • 763

TCP三次握手的思考,为什么要有三次握手

大家都知道TCP有三次握手的过程,今天我就仔细想了想为什么TCP要有三次握手     先贴一张三次握手的示意图     其实这个问题就是说,为什么tcp不能两次握手,或者一次握手就建立连接,和三次握...
  • whyliyu
  • whyliyu
  • 2016年04月06日 21:03
  • 4029

TCP连接建立过程中为什么需要“三次握手”

 传输控制协议(Transmission Control Protocol, TCP)是一种面向连接的、可靠的、基于字节流的运输层(Transport layer)通信协议。是专门为了在不可靠的...
  • doitsjz
  • doitsjz
  • 2015年11月22日 11:36
  • 896

TCP的三次握手(建立连接)和四次挥手(关闭连接)详解

建立连接理解: 1、TCP的流量控制 2、TCP使用窗口机制进行流量控制 3、什么是窗口? 连接建立时,各端分配一块缓冲区用来存储接收的数据,并将缓冲区的尺寸发送给另一端接收方发送的确认信息中...
  • u010870518
  • u010870518
  • 2015年08月17日 00:15
  • 2662

TCP建立连接三次握手和释放连接四次握手

TCP建立连接三次握手和释放连接四次握手     【尊重原创,转载请注明出处】http://blog.csdn.net/guyuealian/article/details/52525724 ...
  • guyuealian
  • guyuealian
  • 2016年09月14日 14:55
  • 6653

TCP 三次握手建立连接,四次挥手断开连接,图解详细分析

继文章  http://blog.csdn.net/simonchi/article/details/41722511   之后,我觉得有必要来详细的说一下TCP的三次握手和四次挥手的过程,帮助大家理...
  • chiweitree
  • chiweitree
  • 2014年12月12日 17:30
  • 1682

tcp为什么要三次握手,而不能二次握手?

1、为什么TCP连接需要三次握手,而不是二次? 谢希仁版《计算机网络》中的例子是这样的,“已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网...
  • xumin330774233
  • xumin330774233
  • 2013年11月07日 11:52
  • 31312

TCP握手最后一次失败

最近笔试遇到一个题目:如果tcp建立连接时第三次握手失败,tcp会做何操作?该问题的本质是判断我们对tcp的状态转换是否能有比较深刻的理解。只要理解了下面的状态转换图,很容易回答上述问题。 ...
  • u010590166
  • u010590166
  • 2014年04月03日 19:03
  • 716
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TCP协议中的三次握手和四次挥手
举报原因:
原因补充:

(最多只允许输入30个字)