三次握手Three-way Handshake
一个虚拟连接的建立是通过三次握手来实现的
1. (B) –> [SYN] –> (A)
假如服务器A和客户机B通讯. 当A要和B通信时,B首先向A发一个SYN (Synchronize) 标记的包,告诉A请求建立连接.
注意: 一个 SYN包就是仅SYN标记设为1的TCP包(参见TCP包头Resources). 认识到这点很重要,只有当A受到B发来的SYN包,才可建立连接,除此之外别无他法。因此,如果你的防火墙丢弃所有的发往外网接口的SYN包,那么你将不能让外部任何主机主动建立连接。
2. (B) <– [SYN/ACK] <–(A)
接着,A收到后会发一个对SYN包的确认包(SYN/ACK)回去,表示对第一个SYN包的确认,并继续握手操作.
注意: SYN/ACK包是仅SYN 和 ACK 标记为1的包.
3. (B) –> [ACK] –> (A)
B收到SYN/ACK 包,B发一个确认包(ACK),通知A连接已建立。至此,三次握手完成,一个TCP连接完成
Note: ACK包就是仅ACK 标记设为1的TCP包. 需要注意的是当三此握手完成、连接建立以后,TCP连接的每个包都会设置ACK位
握手阶段:
序号 方向 seq ack
1 A->B 10000 0
2 B->A 20000 10000+1=10001
3 A->B 10001 20000+1=20001
解释:
1:A向B发起连接请求,以一个随机数初始化A的seq,这里假设为10000,此时ACK=0
2:B收到A的连接请求后,也以一个随机数初始化B的seq,这里假设为20000,意思是:你的请求我已收到,我这方的数据流就从这个数开始。B的ACK是A的seq加1,即10000+1=10001
3:A收到B的回复后,它的seq是它的上个请求的seq加1,即10000+1=10001,意思也是:你的回复我收到了,我这方的数据流就从这个数开始。A此时的ACK是B的seq加1,即20000+1=20001
数据传输阶段:
序号 方向 seq ack size
23 A->B 40000 70000 1514
24 B->A 70000 40000+1514-54=41460 54
25 A->B 41460 70000+54-54=70000 1514
26 B->A 70000 41460+1514-54=42920 54
解释:
23:B接收到A发来的seq=40000,ack=70000,size=1514的数据包
24:于是B向A也发一个数据包,告诉B,你的上个包我收到了。B的seq就以它收到的数据包的ACK填充,ACK是它收到的数据包的SEQ加上数据包的大小(不包括以太网协议头,IP头,TCP头),以证实B发过来的数据全收到了。
25:A在收到B发过来的ack为41460的数据包时,一看到41460,正好是它的上个数据包的seq加上包的大小,就明白,上次发送的数据包已安全到达。于是它再发一个数据包给B。这个正在发送的数据包的seq也以它收到的数据包的ACK填充,ACK就以它收到的数据包的seq(70000)加上包的size(54)填充,即ack=70000+54-54(全是头长,没数据项)。
其实在握手和结束时确认号应该是对方序列号加1,传输数据时则是对方序列号加上对方携带应用层数据的长度.如果从以太网包返回来计算所加的长度,就嫌走弯路了.
另外,如果对方没有数据过来,则自己的确认号不变,序列号为上次的序列号加上本次应用层数据发送长度.
分享到:
相关推荐
tcp三次握手四次挥手 TCP 三次握手(Three-Way Handshake) SYN 握手:客户端发送一个带有 SYN(同步序列编号)标志的 TCP 段到服务器,请求建立连接。这表示客户端希望与服务器建立连接,并告知客户端的初始序列号...
TCP协议内容详细说明: 三次握手Three-way Handshake…… 四次握手Four-way Handshake……
在TCP协议中,为了确保两个通信端点之间能够可靠地建立连接,它采用了一种被称为“三次握手”(Three-Way Handshake)的机制。这个过程涉及到客户端和服务器之间的多个交互步骤,以确保双方都准备好进行数据传输。 ...
三次握手(Three-way Handshake)是建立TCP连接的过程,分为以下步骤: 1. 第一次握手:客户端发送一个带有SYN(同步序列编号)标志的数据包给服务器,请求建立连接。此时客户端处于SYN_SEND状态。 2. 第二次握手...
TCP连接的建立过程通常被称为三次握手(Three-Way Handshake),它确保了两个通信端点能够正确地建立连接并开始数据传输。在这个过程中,每个步骤都由特定的数据包来实现。本篇文章将详细介绍如何在Linux环境下通过...
三次握手(Three-way Handshake)是TCP(传输控制协议)建立连接时的一种机制,用于同步双方的序列号和确认号,并交换TCP窗口大小等信息。 该教学设计包括三个阶段:课前预习、课中互动和课后巩固。在课前,学生...
-Simulated three-way handshake protocol tcp mfc using winpcap development in a multi-thread synchronization aspects of some small problems windows xp sp2 and above the original system can not send tcp...
TCP连接的过程通常分为三个阶段:三次握手(Three-way Handshake)、数据传输和四次挥手(Four-way Handshake)。下面将详细介绍这些过程以及TCP连接的关键知识点。 1. **三次握手**: - 第一次握手:客户端发送一...
连接建立阶段,也被称为三次握手(Three-Way Handshake),确保了双方的通信有效性和初始化参数的协商。首先,客户端发送一个带有SYN标志的数据包,其中包含一个序列号x,表明数据传输的起始序号。服务器接收到请求...
三次握手(Three-way Handshake)是指建立一个 TCP 连接时,需要客户端和服务器总共发送 3 个包。其目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列号(seq)和确认号(ack),交换 TCP 窗口大小...
首先,TCP通信的基本流程包括三次握手(Three-way Handshake)和四次挥手(Four-way Handshake)。三次握手建立连接,四次挥手关闭连接。在模拟TCP通信时,我们需要实现这些关键步骤。 1. **三次握手**: - 第一次...
1. **三次握手(Three-Way Handshake)**:客户端发送一个SYN(同步序列编号)包给服务器,服务器响应一个SYN+ACK(同步+确认)包,最后客户端再发送一个ACK(确认)包,完成连接建立。 **TCP数据传输**: - TCP...
重点介绍了TCP(传输控制协议)和UDP(用户数据报协议)这两个传输层的重要协议,并对三次握手(three-way handshake)和四次挥手(four-way handshake)的过程进行了深入解析。 首先,三次握手是TCP协议用于建立...
TCP连接的建立通常被称为三次握手(Three-Way Handshake)。以下是三次握手的过程: 1. 第一次握手:客户端(Client)发送一个SYN(同步序列编号)数据包给服务器(Server),其中包含一个随机的初始序列号ISN...
1. 面向连接:TCP通信前,双方必须先建立连接,即著名的三次握手(Three-way Handshake)。这个过程确保了通信双方都有能力发送和接收数据。 - 第一次握手:客户端发送一个SYN(同步序列编号)报文给服务器,请求...
三次握手(Three-way Handshake)是TCP建立连接的机制,它包括以下步骤: 1. 客户端发送带有SYN标志的数据包给服务器,请求建立连接; 2. 服务器收到后,返回带有SYN/ACK标志的数据包,表示确认; 3. 客户端收到...
这个连接是通过三次握手(Three-Way Handshake)过程完成的。发送方首先发送一个SYN(同步序列号)报文段,接收方回应一个SYN+ACK(同步确认)报文段,最后发送方再回应一个ACK(确认)报文段,这样就建立了连接。 ...
1. **三次握手(Three-Way Handshake)**:这是TCP连接建立的过程。客户端发送一个SYN(同步序列编号)数据包到服务器,服务器接收到后回复一个SYN+ACK(确认)数据包,客户端再回应一个ACK数据包,至此连接建立完成...
TCP连接的建立通常被称为三次握手(Three-Way Handshake)。这个过程确保了双方都有能力并愿意进行通信,并且能够正确地接收和处理数据。以下是三次握手的详细步骤: 1. ROUND 1:客户端(发起连接的一方)发送一个...
TCP连接的建立过程通常被称为三次握手(Three-Way Handshake)。首先,客户端发送一个带有SYN(同步序列编号)标志的数据段,请求建立连接。服务器收到这个请求后,回应一个SYN+ACK的数据段,确认连接请求并设置自己...