一.三次握手
首先来说一说过会图中出现的名词.
SYN:连接请求标示,SYN = 1表示请求一个连接
ACK: 确认标示,ACK = 1表示一个确认请求的连接
FIN: 结束标示,FIN = 1用来表示结束请求。
seq: 序号,为了保证传输有序,TCP给请求编的号
ack: 确认序号,发送方期望下一个要接收的序号,接收后加一,来判断是否接收成功.
ack与seq
这里先简单理解一下,如上图,B向A发送一个ack = x。A接收到之后向B发送一个seq = x+1.B通过解析,发现后者正好比前者大一,表示A接收成功.
正题
言归正传,开始讲三次握手.
A先向B发起追求,SYN = 1,表示其对B有意思。并发出信息seq = x
B同样对A感兴趣,发出请求SYN = 1,并且小心翼翼的进行确认,ACK = 1.同时发出信息seq = y.并且告诉A,如果对我有意思,就对我发x+1的信息,我好确认
A收到信息狂喜,接着就发了x+1,这次没有请求只有确认。然后两个人幸福的生活在一起[滑稽]
为什么需要第三次握手
不正经的说,A追了B,B告诉A自己喜欢他,然后A不说话了,不合适.
正经的说法:
第一次握手,B知道A的发送没问题,知道自己的接收没问题.
第二次握手,A知道自己发送接收没问题,B的发送接收没问题
但是此时,B并不知道A的接收是否有问题,所以需要A再次发送,确认一下。
二.四次挥手
名词同上,这里就不解释了.四次挥手是一个结束连接的过程,本质上就是这样
A:我要关连接了
B:等等,我还有数据没发完
发数据ing。。。
B:我发完了
A:OK
关闭连接
与刚刚类似,看图
为什么需要四次,而不是三次
按照上面三次握手的方式,确实是三次。但是由于B方,也就是被终止方可能数据还没有发完,所以需要先发一个请求,告诉A方,数据还没有传完,得等一等。所以就多出来一个报文。
为什么客户端还要等2MSL
为了保证发送方的最后一个ACK报文段能够到达接收方。因为这个ACK有可能丢失,但这个ACK丢失的话,接收方也就无法正常的进入关闭连接状态。