当两台主机采用 TCP 协议进行通信时,在交换数据前将建立连接。通信完成后,将关闭会话并终止连接。连接和会话机制保障了TCP 的可靠性功能。

请参见图中建立并终止 TCP 连接的步骤。

主机将跟踪会话过程中的每个数据段,并使用 TCP 报头中的信息了解每台主机所接收到的数据。

每个连接都代表两股单向通信数据流或者会话。若要建立连接,主机应执行三次握手。TCP 报头中的控制位指出了连接的进度和状态。

三次握手:

1.确认目的设备存在于网络上;

2.确认目的设备有活动的服务,并且正在源客户端要使用的目的端口号上接受请求;

3.通知目的设备源客户端想要在该端口号上建立通信会话。

在 TCP 连接中,充当客户端的主机将向服务器发起该会话。

TCP 连接创建的过程分为三个步骤:

1. 客户端向服务器发送包含初始序列值的数据段,开启通信会话;

2. 服务器发送包含确认值的数据段,其值等于收到的序列值加 1,并加上其自身的同步序列值。该值比序列号大 1,因为 ACK 总是下一个预期字节或二进制八位数。通过此确认值,客户端可以将响应和上一次发送到服务器的数据段联接起来;

3. 发送带确认值的客户端响应,其值等于接受的序列值加 1。这便完成了整个建立连接的过程。

为了理解三次握手的过程,必须考察两台主机间交换的不同值。在 TCP 数据段报头中,有六个包含控制信息的 1 比特字段,用于管理 TCP 进程。这些字段分别是:

URG — 紧急指针

ACK — 确认字段

PSH — 推送功能

RST — 重置连接

SYN — 同步序列号

FIN — 发送方已传输完所有数据

这些字段用作标志,由于它们都只有 1 比特大小,所以它们都只有两个值:1 或者 0。当值设为 1 时,表示数据段中包含控制信息。

通过 4 步流程法,可以交换标志,以终止 TCP 连接。

       

TCP三次握手

步骤 1:

TCP 客户端发送带同步序列号 (SYN) 控制标志设置的数据段,指示包含在报头中的序列号字段的初始值,用以开启三次握手。序列号的初始值称为初始序列号 (ISN),由系统随机选取,并用于跟踪会话过程中从客户端到服务器的数据流。在会话过程中,每从客户端向服务器发送一个字节的数据,数据段报头中包含的 ISN 值就要加 1。

如图所示,协议分析器的输出结果中显示了 SYN 控制标志和相应的序列号。

SYN 控制标志被置位并且相应的序列号设定为 0。尽管图中的协议分析器已显示了序列号和确认号的相应值,但其真实值应该为 32 位二进位数字。我们可以通过研究 Packet Bytes 窗格确定数据段报头中发送的实际数值。此处您可以看到以十六进制显示的四个字节。

步骤 2:

TCP 服务器需要确认从客户端处收到 SYN 数据段,从而建立从客户端到服务器的会话。为了达到此目的,服务器应向客户端发送带 ACK 标志设置的数据段,表明确认编号有效。客户端将这种带确认标志设置的数据段理解为确认信息,即服务器已收到从 TCP 客户端发出的 SYN 信息。

确认编号字段的值等于客户端初始序列号加 1。此时创建从客户端到服务器的会话。ACK 标志将在会话其间保持设置。我们在前面已经学过,客户端和服务器之间的会话实际上是由两个单向的会话组成的:一个是从客户端到服务器的会话,另一个则正好相反。在三次握手过程的第二步中,服务器必须发起从服务器到客户端的响应。为开启会话,服务器应采用与客户端同样的方法使用 SYN 标志。该操作设置报头中的 SYN 控制标志,从而建立从服务器到客户端的会话。SYN 标志表明序列号字段的初始值已包含在报头中,且该值将用于跟踪会话过程中从服务器返回客户端的数据流。

如右图所示,协议分析器的输出结果中显示了 ACK 和 SYN 控制标志的设置,以及相应的序列号和确认号。

步骤 3:

最后,TCP 客户端发送包含 ACK 信息的数据段,以示对服务器发送的 TCP SYN 信息的响应。在该数据段中,不包括用户数据。确认号字段的值比从服务器接收的初始序列号值大 1。一旦在客户端和服务器之间建立了双向会话,该通信过程中交换的所有数据段都将包含 ACK 标志设置。

如图所示,协议分析器的输出结果中显示了 ACK 控制标志,以及相应的序列号和确认号。

通过以下方式,可以加强数据网络的安全性:

拒绝建立 TCP 会话;

只允许建立特定服务的会话;

只允许已建立会话之间的通信。

以上安全策略可以应用于所有 TCP 会话,也可以仅应用于某些选定会话。

若要关闭连接,应设置数据段报头中的 FIN(结束) 控制标志。为终止每个单向 TCP 会话,需采用包含 FIN 数据段和 ACK 数据段的二次握手。因此,若要终止 TCP 支持的整个会话过程,需要实施四次交换,以终止两个双向会话。注意:在本部分中,为了更容易理解,采用了客户端和服务器端进行说明。实际上,终止的过程可以在任意两台完成会话的主机之间展开。

1. 当客户端的数据流中没有其它要发送的数据时,它将发送带 FIN 标志设置的数据段;

2. 服务器发送 ACK 信息,确认收到从客户端发出的请求终止会话的 FIN 信息;

3. 服务器向客户端发送 FIN 信息,终止从服务器到客户端的会话;

4. 客户端发送 ACK 响应信息,确认收到从服务器发出的 FIN 信息。

当会话中的客户端没有其它要传输的数据时,它将在数据段报头中设置 FIN 标志。然后,会话中的服务器端将发送包含 ACK 标志设置的一般数据段信息,通过确认号确认已经收到所有数据。当所有数据段得到确认后,会话关闭。

另一方向的会话采用相同的方式关闭。接收方在数据段的报头中设置 FIN 标志,然后发送到发送方,表明没有其它需要发送的数据。返回的确认信息确定已接收所有数据,随即该方向的会话关闭。

如右图所示,在数据段报头中设置了 FIN 和 ACK 控制标志,并从而关闭了 HTTP 会话。

也可以通过三次握手方式关闭连接。当客户端没有其它要传输的数据时,它将向服务器发送 FIN 信息。如果服务器也没有其它要传输的数据,它将发送同时包含 FIN 和 ACK 标志设置的响应信息,将两步并作一步。最后,客户端返回 ACK 信息。

TCP三次握手详解的更多相关文章

  1. TCP三次握手详解及释放连接过程

    TCP在传输之前会进行三次沟通,一般称为"三次握手",传完数据断开的时候要进行四次沟通,一般称为"四次挥手". 两个序号和三个标志位: (1)序号:seq序号, ...

  2. TCP三次握手四次挥手详解

    转载 http://www.cnblogs.com/zmlctt/p/3690998.html 相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需 ...

  3. [ 转载 ] Tcp三次握手和四次挥手详解

    #TCP的报头: 源端口号:表示发送端端口号,字段长为16位.目标端口号:表示接收端口号,字段长为16位.序列号:表示发送数据的位置,字段长为32位.每发送一次数据,就累加一次该数据字节数的大小.注意 ...

  4. [转]Linux服务器上11种网络连接状态 和 TCP三次握手/四次挥手详解

    一.Linux服务器上11种网络连接状态: 图:TCP的状态机 通常情况下:一个正常的TCP连接,都会有三个阶段:1.TCP三次握手;2.数据传送;3.TCP四次挥手. 注:以下说明最好能结合”图:T ...

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

    目录 TCP三次握手与四次挥手详解 1.TCP报文格式 2.TCP三次握手 3.TCP四次挥手 4.为什么建立连接需要三次握手? 5.为什么断开连接需要四次挥手? 6.为什么TIME_WAIT状态还需 ...

  6. TCP三次握手四次挥手详解2

    相对应socket开发者,TCP创建过程和连接拆除过程是由TCP/IP协议栈自动创建的,因此开发者并不需要控制这个过程,但是对于理解TCP底层运作机制,相当有帮助 TCP三次握手 所谓三次握手,是指建 ...

  7. TCP三次握手四次分手—简单详解

    关于TCP三次握手四次分手,之前看资料解释的都很笼统,很多地方都不是很明白,所以很难记,前几天看的一个博客豁然开朗,可惜现在找不到了.现在把之前的疑惑总结起来,方便一下大家. 疑问一,上图传递过程中出 ...

  8. TCP三次握手/四次挥手详解

    一. TCP/IP协议族 TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负责不同的通信功能.包含以下四个层次: 1. 链路层,也称作数据链路层或者网络接口层,通常包括操作系统中的设备驱动程 ...

  9. TCP三次握手原理详解

    TCP/IP协议不是TCP和IP这两个协议的合称,而是指因特网整个TCP/IP协议族. 从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层.网络层.传输层.应用层. TCP协议:即传输控制 ...

随机推荐

  1. ASP.NET MVC:Cookie 的过期时间在服务器端是获取不到的

    现状 一旦 Cookie 在服务器端设置后,在后续的请求中是获取不到过期时间的,因为:Cookie 是存储和过期处理都是由客户端管理的,在后续的请求中,浏览器向服务器发送 Cookie 的时候就不包含 ...

  2. fabric-ca-client

    fabric-ca-client enroll -u http://admin:adminpw@localhost:7054 /root/.fabric-ca-client:总用量 12-rwxr-x ...

  3. Material Designer的低版本兼容实现(十)—— CheckBox & RadioButton

    ChekBox的用途我们就不必多说了,算是一个很古老的控件了,何其类似的还有RadioButton,这个东西因为我目前还没写出来,所以用了别人的一个lib,这下面会说到.顺便说一句,如果你的app是在 ...

  4. git如何删除远端不存在的本地分支?

    问题:远端分支删除后,如何删除之前拉取的本地分支? 答案: git fetch -p git remote show origin 可以查看remote地址,远程分支,还有本地分支与之相对应关系等信息 ...

  5. 「BZOJ」「3262」陌上花开

    CDQ分治 WA :在solve时,对y.z排序以后,没有处理「y.z相同」的情况,也就是说可能(1,2,3)这个点被放到了(2,2,3)的后面,也就是统计答案在前,插入该点在后……也就没有统计到! ...

  6. [Windows_Server_2012优化V1.1_20140425]

    [Windows_Server_2012优化V1.1_20140425] Winsows Server 2012 Datacenter Evaluation Build 9200数据中心评估版GUI ...

  7. HTTPS那些事(三)攻击实例与防御

    在<HTTPS那些事(二)SSL证书>我描述了使用SSL证书时一些需要注意的安全问题,在这一篇文章里面我再演示一下针对HTTPS攻击的一些实例,通过这些实例能更安全的使用HTTPS.知己知 ...

  8. 数学图形之贝塞尔(Bézier)曲面

    前面章节中讲了贝塞尔(Bézier)曲线,而贝塞尔曲面是对其多一个维度的扩展.其公式依然是曲线的公式: . 而之所以由曲线变成曲面,是将顶点横向连了再纵向连. 很多计算机图形学的教程都会有贝塞尔曲面的 ...

  9. 命令行调用dubbo远程服务

    命令行调用dubbo远程服务 telnet远程连接到dubbo telnet 127.0.0.1 20880 查看提供服务的接口 dubbo>ls com.test.service.TestIn ...

  10. 读书笔记,《Java8实战》第一章,为什么要关心 Java8

       开篇作者就提出,Java8所做的改变在许多方面比java历史上任何一次改变都深远.而且好消息是,这些改变会让你编辑程序来更容易,再也不用写类似类似于以前的swing中的事件处理函数的啰嗦代码了. ...