tcp连接的建立与释放

1、TCP是面向连接的协议。

运输连接时用来传送TCP报文的。TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程。因此,运输链接就有三个阶段,即:连接建立、数据传送和连接释放。

在TCP连接建立过程中要解决以下三个问题:

(1)要能使每一方都确知对方的存在。

(2)要允许双方协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等)。

(3)能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。

2、TCP的连接建立

上面给出的连接建立过程叫做三次握手

2.1、为什么A的最后还要发送一个确认报文呢?

这主要是为了防止已经失效的连接请求报文段突然又传送到了B,因而产生错误。所谓“已失效的连接请求报文段”是这样产生的。考虑一种正常情况。A发出连接请求,但因连接请求报文丢失而未收到来自B的确认。于是A再次重传一次连接请求。后来收到了确认,建立连接。数据传输完毕后,就释放了连接。A共发送了两个连接请求报文段,其中第一个丢失,第二个到达了B。没有“已失效的连接请求报文段”。

现假定出现一种异常情况,即A发出的第一个连接请求报文段并没有丢失,而是在某个网络节点长时间滞留了,以致延误到连接释放之后的某个时间才到达B。本来这是一个早已经失效的报文段。但B受到此失效的连接请求报文段后,就误认为是A又发出了一次新的连接请求。于是就向A发出确认报文段,同意建立连接。假定不采用三次握手,那么只要B发出确认,新的连接就建立了。由于现在A并没有发出建立连接的请求,因此不会理睬B的确认,也不会向B发送数据,但B却以为新的运输连接已经建立了,并一直等待A发来数据。B的许多资源就这样白白浪费了。

采用三次握手的办法就可以防止上述现象的发生。例如在刚才的情况下,A不会向B的确认发出确认。B由于收不到确认,就知道A并没有要求建立连接。

2.2、假设我们发送的第三个ACK报文段丢失了怎么办?

答:当Client段收到了Server的SYN+ACK应答后,其状态变为ESTABLISHED,并发送ACK包给Server;如果此时ACK在网络中走丢了,没有送达到服务器端,那么Server端该TCP连接的状态为SYN-RECV,并且一次等待一定的时间重新发送SYN+ACK包给客户端,直到连接正常的完成建立。

2.3、为什么TCP连接的建立要消耗序列号?

答:设想一下,如果TCP连接的建立不需要发送序列号,那么黑客要想攻击你的服务器不是变得非常简单的一件事,只要伪造TCP连接建立报文对你的服务器进行攻击,我们的服务器时刻都处在危险状态,所以TCP连接的建立不仅仅需要消耗序列号,还要求序列号算法越随机越好,黑客不能伪造出你的序列号,就无法通过TCP连接建立报文段对你的服务器进行攻击。

3、TCP连接的释放

上面给出释放连接的过程叫做四次挥手

请注意,当最后一个确认报文发送完毕之后,TCP连接还没有完全的释放掉。必须要经过时间等待计时器设置的2MSL时间后,A才进入到CLOSED状态,时间MSL叫做最长报文段寿命,建议设置为2分钟。单着完全是从工程上来考虑的,对于现在的网络MSL=2分钟可能太长了一些,因此TCP允许不同的实现可根据具体情况使用更小的MSL值。因此,从A进入到TIME-WAIT状态后,要经过4分钟才能进入到CLOSED状态,才能开始建立下一个新的连接。当A撤销香影的传输控制块TCB后,就结束了这次的TCP连接。

3.1、为什么A在TIME-WAIT状态必须等待2MSL的时间呢?这里给出两个理由。

第一,为了保证A发送的最后一个ACK报文段能够到达B。这个ACK报文段有可能会丢失,因而使处在LAST-ACK状态的B收不到对已发送的FIN+ACK报文段的确认。B会超时重传这个FIN+ACK报文段,而A就能在2MSL时间内收到这个重传的FIN+ACK报文段,接着A重传一次确认,重新启动2MSL计时器。最后A和B都能正常进入到CLOSED状态。如果A在TIME-WAIT状态不等待一段时间,而是在发送完ACK报文段后立即释放连接,那么就无法收到B重传的FIN+ACK报文段,因而也不会再发送一次确认报文段,这样,B就无法按照正常步骤进入CLOSED状态。

第二,防止我们之前提到的“已失效的连接请求报文段”出现在本连接中。A在发送完最后一个ACK报文段后,再经过2MSL,就可以使本链接持续时间内所产生的所有报文段都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。

3.2、除时间等待计时器外,TCP还设有一个保活计时器。

设想有这样的情况:客户已主动与服务器建立了TCP连接。但后来客户端的主机突然出现了故障。显然,服务器以后就不能再收到客户发来的数据。因此,应当有措施使得服务器不要在白白的等待下去。这个就是使用保活计时器。服务器每收到一次客户的数据,就重新设置保活计时器,时间的设置通常是两个小时。偌两个小时没有收到客户的数据,服务器就发送一个探测报文段,以后则每隔75分钟发送一次。若一脸发送10个探测报文段后仍无客户的响应,服务器就认为客户端出现了故障,接着就关闭这个连接。

时间: 2024-08-07 05:17:45

tcp连接的建立与释放的相关文章

计算机网络(11)-----TCP连接的建立和释放

TCP连接的建立和释放 概述 TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程,运输连接有三个阶段:连接建立,数据传送和连接释放. TCP连接的建立 如图所示,假定A主机是客户端程序,B主机是服务端程序.最初两端的TCP进程都是出于CLOSED(关闭)状态. (1)B的TCP服务器进程先创建传输控制块TCB(transmission Control Block),准备接受客户进程的连接请求.然后服务器就进入LISTEN(监听)状态,等待客户端的连接请求. (2)A的TCP客户进程

【网络协议】TCP连接的建立和释放

转载请注明出处:http://blog.csdn.net/ns_code/article/details/29382883 TCP首部格式 先看TCP报文段的格式,例如以下; TCP报文段首部的前20个字节是固定的,后面有4N字节是依据须要而添加的选项.因此TCP报文段的最小长度为20个字节. 首部固定部分的各字段的意义例如以下: 1.源port和目的port:加上IP首部的源IP地址和目的IP地址,确定唯一的一个TCP连接.另外通过目的port来决定TCP将数据报交付于那个应用程序,从而实现T

在Linux下使用tcpdump抓包分析TCP连接的建立与释放

笔者使用的环境为WIN7 64位旗舰版下使用VirtualBox安装的centOS6.5实验环境 建立连接 ---------------------------------------------------------------- 在终端1中进入root权限,键入 tcpdump tcp -vX -i eth2 #使用man手册查看tcpdump的使用方法 #eth2为接口,可以使用arp -a显示当前的接口 在终端2中键入 telnet www.baidu.com 80 #远程登录www

【网络基础】03、TCP传输连接的建立与释放

一.TCP的传输连接管理的三个阶段  IP协议的作用范围:提供主机之间的逻辑通信 TCP和UDP协议的作用范围:提供进程之间的逻辑通信 TCP (Transmission Control Protocol)   传输控制协议 UDP (User Datagram Protocol )      用户数据报协议 当运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的(只提供尽最大努力服务),但这种逻辑通信信道就相当于一条全双工的可靠信道. 当运输层采用无连接的UDP协议时,这种逻辑通信信道是

TCP协议的建立与释放及TCP的有限状态基

一.TCP的链接建立(三次握手) 如下图所示:假定最初两端的TCP进程都处于关闭状态.下图中,client主动打开链接,server被动打开链接 创建过程: ①.server的TCP服务器进程先创建传输控制块TCB(存储了每一个链接中的重要信息),准备接受client进程的连接请求.然后服务器进程就处于LISTEN(收听)状态,等待客户的连接请求.如有,作出响应. ②.client的TCP客户进程也是首先创建传输控制模块TCB,然后向server发出连接请求报文段,这时首部中的同步位SYN =1

TCP连接的建立和断开

1.TCP连接的建立 设主机B运行一个服务器进程,它先发出一个被动打开命令,告诉它的TCP要准备接收客户进程的连续请求,然后服务进程就处于听的状态.不断检测是否有客户进程发起连续请求,如有,作出响应.设客户进程运行在主机A中,他先向自己的TCP发出主动打开的命令,表明要向某个IP地址的某个端口建立运输连接,过程如下: 1)主机A的TCP向主机B的TCP发出连接请求报文段,其首部中的同步比特SYN应置1,同时选择一个序号x,表明在后面传送数据时的第一个数据字节的序号是x. 2)主机B的TCP收到连

TCP学习(2)--TCP连接的建立(三次握手)

一.TCP的连接建立 TCP的建立连接的过程如下图所示.假设客户端A运行的是TCP客户程序,而服务器B运行的是TCP服务器程序.最初两端的TCP进程都处于CLOSED状态. B的TCP服务器进程先创建传输控制块TCB,准备接受客户进程的连接请求,然后服务器进行就处于LISTEN状态,等待客户端的连接请求. TCP连接的建立过程如下: (1).客户端A发起连接请求,发送一个SYN=1,ACK=0,seq=x的报文段给服务器B,并进入SYN-SENT状态: (2).服务器B收到连接请求报文之后,如果

TCP连接的建立与终止

我们通过一个例子来说说TCP连接的建立与断开: 在这个例子中,客户端发起连接,发送请求,服务端响应请求,然后客户端主动关闭连接. 建立连接的过程: 1.客户端发出段1,SYN表示连接请求,如图中所示,序号是1000,每发送一个数据字节,这个序号就要加1,这样在接收端可以根据序号排出数据包的正确顺序,也可以发现丢包的情况,SYN和FIN位也要占一个序号,从第一段可以看出,这次发送的数据是0(即没有发送数据),但是由于SYN要占一位,因此下次发送数据要从1001开始.mss表示最大段尺寸,如果一个段

TCP/IP(十)TCP连接的建立与中止

建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源.Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了. 那如何断开连接呢?简单的过程如下: [注意]中断连接端可以是Client端,也可以是Server端. 假设Client端发起中断连接请求,也就是发送FIN报文.Server端接到FIN报文后,