您的位置:首页 > 理论基础 > 计算机网络

TCP连接的建立过程

2011-08-01 18:57 931 查看
先来看TCP数据包的组成



先来解释几个连接过程中会用到的部分:

sequence number:TCP连接过程中,会对发送的数据部分按字节为单位编号,sequence num(缩写seq)字段代表了本报文发送的数据部分的第一字节的序号。

acknowledge number:缩写ack,该字段表示期望对方下一个报文的数据部分的第一字节的序号。

ACK:标识位,当该位为1时,ack字段有效。

SYN:标识位,在建立连接时用来同步。SYN=1,ACK=0,即表示一个连接请求报文,若对方同意则发送SYN=1,ACK=1的回应报文。

具体的连接过程是我们经常说的三次握手。

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连接完成
具体来看:

握手阶段:

序号 方向 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: