关于TCP的三次握手和四次分手(整理)

这个协议非常重要,这里把它的链接和释放整理一下

首先是三次握手:

1、  客户端发起,像服务器发送的报文SYN=1,ACK=0,然后选择了一个初始序号:seq=x。

SYN是干什么用的?

在链接的时候创建一个同步序号,当SYN=1同时ACK=0的时候,表明这是一个连接请求的报文段。如果对方有意链接,返回的报文里面SYN=1,ACK=1,。从这个意义上来说,SYN=1的时候,就表明这是一个‘请求’或者‘接受请求’的报文。

SYN=1的报文段不能携带数据。但是要消耗掉一个序号,

ACK是干什么用的?

仅当ACK=1的时候,确认字号(期望收到对方下一个报文段的第一个数据字节的编号)才有效。因此,TCP规定,当链接建立之后,所有往来的报文里面的ACK都应该是1(事实上,也只有客户端发起的链接请求报文的ACK没有置1)。

现在的状态:客户端进入SYN-SEND状态;

2、  服务器接收到了SYN=1,ACK=0的请求报文之后,返回一个SYN=1,ACK=1的确认报文。

同时,确认号ack=x+1,同时也为自己选择一个初始序号seq=y

现在的状态:服务器进入SYN-REVD状态;

3、  客户端接收到了服务器的返回信息之后,还要给服务器返回最后一条确认,ACK=1,确认号ack=y+1;

现在的状态:客户端进入ESTABLISHED状态。

 

下面说一下为什么两次握手不行,非得三次:

 

首先说明一种正常的情况,就是客户端发送了一条请求链接的报文,但是由于网络原因丢失了,所以,不可能接收到服务器端的确认。这个时候,客户端就就只有再一次发送原来的请求报文,这次服务器收到之后返回确认,客户端再确认一次,链接确立。

然后考虑一种不正常的情况,客户端发了两次请求链接的报文,第二条被服务器捕捉到,返回数据,完成了两次握手。数据传送完成之后,链接关闭。但是这时候,第一条拥塞的请求报文现在到达了服务器端,服务器还以为客户端要又一次建立连接,于是发送确认,然后把自己敞开,等着客户端发送过来数据。于是,很多的网络资源就是这样浪费掉了。

要是实行三次握手,服务器收到了一条过期的请求报文,返回确认信息,客户端接收到了服务器的信息之后感到莫名其妙,心想:我他妈又没要链接,你返回这个是不是疯了。于是不置一词。服务器过一段时间还没有收到第三次握手的数据,知道客户端并没有要求建立链接的请求,含泪离开。

然后是四次分手:

现在双方的状态都是ESTABLISHED状态。

1、  客户端发起请求,请求断开链接。FIN=1,seq=u。u是之前传送过来的最后一个字节的序号+1。

FIN:用来释放一个链接,当FIN=1的时候,表明此报文的发送方已经完成了数据的发送,没有新的数据要传送,并要求释放链接。

客户端进入FIN-WAIT-1状态,等着服务器返回确认;

2、  服务器收到客户端的请求断开链接的报文之后,返回确认信息。ACK=1,seq=v,ack=u+1。

服务器进入CLOSE-WAIT状态。

这个时候,客户端不能给服务器发送信息报文,只能接收。但是服务器要是还有信息要传给服务器,仍然能传送。

3、  当服务器也没有了可以传的信息之后,给客户端发送请求结束的报文。FIN=1,ACK=1,

ack=u+1,seq=w。

这个时候的状态:服务器进入LAST-ACK状态。

4、  客户端接收到FIN=1的报文之后,返回确认报文,ACK=1,seq=u+1,ack=w+1。

发送完毕之后,客户端进入等待状态,等待两个时间周期。关闭。

为什么最后还要等待两个时间周期呢?

1、  客户端的最后一个ACK报文在传输的时候丢失,服务器并没有接收到这个报文。这个候。

服务器就会超时重传这个FIN消息,然后客户端就会重新返回最后一个ACK报文,等待两个时间周期,完成关闭。如果不等待这两个时间周期,服务器重传的那条消息就不会收到。服务器就因为接收不到客户端的信息而无法正常关闭。

2、  预防上一次在三次握手中提到的失效的报文干扰。两个时间周期过去之后,所有的报文都会在网络中消失,保证下一次重新连接的时候有乱七八糟的报文影响。

http://www.cnblogs.com/lamian/p/3983497.html

http://kb.cnblogs.com/page/209100/

时间: 2024-10-09 16:13:30

关于TCP的三次握手和四次分手(整理)的相关文章

简析TCP的三次握手与四次分手

TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇文章时,我想你也知道TCP的概念了,想要更深入的了解TCP的工作,我们就继续.它只是一个超级麻烦的协议,而它又是互联网的基础,也是每个程序员必备的基本功.首先来看看OSI的七层模型: 我们需要知道TCP工作在网络OSI的七层模型中的第四层——Transport层,IP在第三层——Network层,ARP在第二层——Data Link层:在第二层上的数据,我们把它叫Frame,在第三层上的数据叫Packet,第四层的数据叫Se

简析TCP的三次握手与四次分手(TCP协议头部的格式,数据从应用层发下来,会在每一层都会加上头部信息,进行封装,然后再发送到数据接收端)good

2014-10-30 分类:理论基础 / 网络开发 阅读(4127) 评论(29) TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇文章时,我想你也知道TCP的概念了,想要更深入的了解TCP的工作,我们就继续.它只是一个超级麻烦的协议,而它又是互联网的基础,也是每个程序员必备的基本功.首先来看看OSI的七层模型: 我们需要知道TCP工作在网络OSI的七层模型中的第四层——Transport层,IP在第三层——Network层,ARP在第二层——Data Link层:在第二

大杂烩 -- 简析TCP的三次握手与四次分手

基础大杂烩 -- 目录 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇文章时,我想你也知道TCP的概念了,想要更深入的了解TCP的工作,我们就继续.它只是一个超级麻烦的协议,而它又是互联网的基础,也是每个程序员必备的基本功.首先来看看OSI的七层模型: 我们需要知道TCP工作在网络OSI的七层

抓包分析TCP的三次握手和四次分手

一:三次握手 三次的握手的过程是: 1.由发起方HostA向被叫方HostB发出请求报文段,此时首部中的同步位SYN=1,同时选择一个序列号seq=x.TCP规定,SYN报文(即SYN=1的报文段)不能携带数据,但要消耗一个序列号.这时,TCP客户端进程进入SYN-SENT(同步已发送)状态. 2.HostB收到连接请求报文后,如同意建立连接,则向HostA发送确认.在确认报文段中应把SYN和ACK都置为1,确认号是ack=x+1,同时也为自己选择一个序列号seq=y.请注意这个报文段也不能携带

TCP的三次握手与四次分手

TCP的位置 TCP工作在网络OSI的七层模型中的第四层——Transport层,IP在第三层——Network层,ARP在第二层——Data Link层: 在第二层上的数据,我们把它叫Frame,在第三层上的数据叫Packet,第四层的数据叫Segment. 数据从应用层发下来,会在每一层都会加上头部信息,进行封装,然后再发送到数据接收端.这个基本的流程你需要知道,就是每个数据都会经过数据的封装和解封装的过程. 在OSI七层模型中,每一层的作用和对应的协议如下: 3次握手 第一次握手:主机A发

通俗大白话来理解TCP协议的三次握手和四次分手

通俗理解: 但是为什么一定要进行三次握手来保证连接是双工的呢,一次不行么?两次不行么?我们举一个现实生活中两个人进行语言沟通的例子来模拟三次握手. 引用网上的一些通俗易懂的例子,虽然不太正确,后面会指出,但是不妨碍我们理解,大体就是这么个理解法. 第一次对话: 老婆让甲出去打酱油,半路碰到一个朋友乙,甲问了一句:哥们你吃饭了么? 结果乙带着耳机听歌呢,根本没听到,没反应.甲心里想:跟你说话也没个音,不跟你说了,沟通失败.说明乙接受不到甲传过来的信息的情况下沟通肯定是失败的. 如果乙听到了甲说的话

理解TCP中的三次握手和四次分手

1.前言 之前上过计算机网络这门课,由于当时初次接触计算机网络,其中的有些概念无法深入理解,只停留在表面.这次借着学网络编程的机会,也把TCP的三次握手和四次分手重新梳理了一遍,有了不同的理解.借此,想做一个总结. 2.TCP协议 在学习TCP三次握手和四次分手之前,首先得对TCP协议有一个大概的了解.TCP全称是传输控制协议,其是面向连接的,可靠的,基于字节流的传输层通信协议.相比与UDP(用户数据报协议)而言,具有以下几个特点: TCP协议是面向连接的.基于TCP协议,客户端和服务端要想传输

TCP/IP 三次握手,四次断开

TCP/IP 三次握手,四次断开 一.TCP报文格式                     TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷 本. 下面是TCP报文格式图: 图1-1 TCP报文格式 上图中有几个字段需要重点介绍下:1.序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记.2.确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效(Ack=Seq+1).3.标志位:共6个,即URG.ACK.PSH.R

抓包分析TCP的三次握手和四次握手

问题描写叙述: 在上一篇<怎样对Android设备进行抓包>中提到了,server的开发者须要我bug重现然后提供抓包给他们分析.所以抓好包自己也试着分析了一下.发现里面全是一些TCP协议和HTTP协议.所以要想进行抓包分析,必须先了解TCP的原理.这里介绍了TCP的建立连接的三次握手和断开连接的四次握手. 问题分析: 1.TCP建立连接的三次握手 1.1前言:介绍三次握手之前,先介绍TCP层的几个FLAGS字段,这个字段有例如以下的几种标示 SYN表示建立连接, FIN表示关闭连接. ACK