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报文请求建立连接的一方。就比如你给别人打电话,你先拨号,你就是主动打开。
被动打开就是接受的另一方的请求报文并同意建立连接的一方。就比如你给别人打电话过去,对方接听了,打就是被动打开。
被动打开:因为有链接需要处理,因此被动打开。
主动打开:因为需要和对方建立链接,因此主动打开。

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

相关文章推荐

使用IPMI工具实现对服务器的远程管理

 认识IPMI回顶部   对于网管员来说,服务器远程管理是一个非常重要的技术,而在服务器远程管理方面,典型的解决方案是基于服务器操作系统的软件管理方式,但这样的方式有一个致命的缺陷就在于对...

开发中使用RabbitMQ的注意事项

使用消息队列处理消息的时候,我们可能会遇到以下问题: 消息处理失败消息体本身有误消息重复处理消息丢失 对于消息处理失败,有可能有由于网络波动导致的数据处理异常,待网络稳定时消息就会正常处理,对...

TCP三次握手和四次挥手

  • 2016年09月16日 22:55
  • 378KB
  • 下载

关于Tcp/ip协议的三次握手和四次挥手详解

首先我们需要知道,tcp/ip协议并不是一个协议,而是一个协议族,里面包好tcp,udp,ip等协议,tcp/ip网络协议栈包括应用层,传输层,网络层和链路层。 tcp协议是一中面向连接的,可靠的传...

TCP协议中的三次握手和四次挥手(socket状态图扭转)

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

TCP协议中的三次握手和四次挥手(图解)

一、TCP报文格式         TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图: 图1 TCP报文格式         上图中有几个字段需要重点...

TCP协议的三次握手和四次挥手的整理

三次握手 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 第一次 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_...
  • fnzsjt
  • fnzsjt
  • 2014年11月22日 20:45
  • 749

TCP协议中的三次握手和四次挥手(图解) .

建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示: 先来看看如何建立连接的。   首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,...

TCP协议中的首部格式 三次握手和四次挥手(图解)

TCP协议中的三次握手和四次挥手(图解)

TCP/IP协议三次握手和四次挥手大白话解说

昨天晚上被一位师傅问到了TCP/IP的工作机制,心里很清楚三次握手,然而对于四次挥手却忘了,这是大学习里学过的,奋而翻阅书籍和网络对之前所学的做一个温顾,算是夯实自我吧。TCP(Transmissio...
  • li0978
  • li0978
  • 2016年09月20日 20:20
  • 2468
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TCP协议中的三次握手和四次挥手
举报原因:
原因补充:

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