TCP连接握手

为什么在TCPbuild立连接时使用3次握手? 意思是,为什么使用双向握手是不够的?

TCP中使用的握手机制被devise成使得两个尝试通信的主机在开始通信之前可以协商networking连接的参数。 双方都可以假定另一台电脑已经准备就绪并开始可靠地发送数据。

以下是握手期间双方发送的数据包的简图:

         SYN  - >
                     SYN收到
主机A < -  SYN ACK主机B
        收到SYN ACK
         ACK  - >           
                    收到ACK

       TCP连接已build立

SYN(同步)和ACK(确认)消息由段的TCP报头内的位/数指定。

该过程也被devise为使得两端可以同时启动和协商单独的连接。

为了结束两台计算机之间的连接,需要执行另一个3路通信来拆除TCP连接。 TCP连接的启动和拆除是使TCP成为可靠协议的一部分。

另请参阅: UDP和TCP有什么区别?

因此,两端可以相当有信心,另一端知道连接build立。

编辑:两种方式是不够的,因为收件人无法知道发件人知道收件人已回复,并且连接已准备就绪,这使得(双向握手连接)与三次握手相比不可靠

意识到这是一个真正的四方握手(每个方向两个)。 有一个SYN – > ACK和一个SYN < – ACK。 Host-B通过在ACK的Host-A同时发送SYN来节省时间。

此外,Dentrasi也有评论说,三方握手可以防止欺骗,但这不完全正确。

在nmap网站上查看更多信息: http : //nmap.org/book/osdetect-usage.html

“TCP序列预测系统的TCP初始序列号生成较差,容易受到TCP欺骗攻击的盲目性,也就是说,你可以完全连接这些系统,并在发送(但不接收)数据的同时欺骗不同的IP地址。日志会显示被欺骗的IP,并且可以利用它们之间的任何信任关系。在90年代中期,当人们通常使用rlogin允许login到他们的账户而没有来自可信IP地址的密码时,这种攻击是非常愤怒的。据称米特尼克曾在1994年12月利用这次袭击闯入了下村迫浩的电脑。

有关TCP序列预测攻击的更多信息,请访问: http : //en.wikipedia.org/wiki/TCP_sequence_prediction_attack

非技术性解释 – 全双工对话/连接需要3路握手。 连接意味着双方之间的协议。 协议是指当X发送Y接收,Y发送X接收时。 每个单方面的协议都需要两个步骤,要求许可(SYN),并知道其他方将监听/接收(ACK)你发送的内容。 所以两个SYN-ACK步骤。

它本质上是一个4步握手,第2步(通过Y发送ACK到X)和第3步(通过Y发送SYN到X)合并(步骤3中的第3步捎带),在最终导致一步。 这是可能的,因为两者都是从Y(相同的主机)同时发送的,并且信息在TCP报头中有一点传送(没有超大的问题)。 因此总共从4个步骤中分3步。

技术解释 – TCP是一个有状态的协议,它的状态机操作和改变其状态的方式在两端是对称的。 当您收到来自另一台机器的ACK时,达到已build立的状态。 为了使两个实体达到连接build立状态,状态机必须接收ACK。 所以ACK接收是重要的,并且为了接收ACK,主机必须发送SYN。 再一步4个步骤合并成3步,看引用的解释。

其余的细节 – 比如select一个随机的SYN值,这样可以防止预测攻击。 就攻击而言,中间人即将出现。 ps如果有人想知道如何发表评论。 我想你们中的大多数人都会知道,这很明显,所以我节省了你的阅读时间。

三次握手build立连接。 就像拿起电话一样,拨打电话,拨打号码,听到铃声,然后对方说“你好”。

很久以前就有人试图减lessbuild立和拆除短期TCP连接所需的“pipe理”数据包的数量。 它被称为“用于事务的TCP”或“T / TCP”,并且在RFC1644:

http://www.faqs.org/rfcs/rfc1644.html

TCP最初devise的目的是为长时间连接提供虚拟电路,其中安装和拆卸时间并不重要。 随着客户端 – 服务器模型变得越来越普遍,像T / TCP这样的需求变得更加显着。

T / TCP使用一些服务器caching机制来允许新连接的第一个数据包包含数据。 服务器端的拆卸请求也可以搭载在最后一个数据包上。 这减less了单包有效载荷消息所需的包的数量。

不幸的是,T / TCP从来没有达到临界质量。