Open wisecsj opened 5 years ago
问题
对于1,它的最大等待时间就是2MSL( Maximum Segment Life):去向ACK消息最大存活时间(MSL) + 来向FIN消息的最大存活时间(MSL).只有这样,A才能放心地释放连接占用的资源。
PS:当时写到四次挥手的时候,在想:为什么不把四次挥手中的第二步和第三步合并呢?B的ACK和FIN在一个报文段里都给发送了啊,还提高了效率。后来查了下,发现还真存在三次挥手!
大概就是说,当A向B发起FIN,B也确定再没有数据需要发送给A,那么它就可以将四次挥手简化为三次挥手了
A随机初生成一个序号n,作为报文段的序号字段;将报文段标记字段中的SYN标志置为1;发送给B
B收到A发送来的报文,检测到SYN标志为1,于是为该tcp连接分配缓存和变量(使得tcp易于受到SYN洪泛攻击),并向A发送允许连接的报文段:SYN位置为1,确认号置为n+1,生成数字m作为初始序号
A在收到B发来的确认报文后,也为该连接分配缓存和变量,并向B发送一个确认报文段:SYN位为1,序号为n+1,确认号为m+1,这一步中可以携带应用层数据
问题
TCP是一个面向连接的、可靠的传输层协议。而tcp协议用来保证可靠、有序的根本是通过什么------序列号。所以说,握手的本质是为了同步A、B的初始序列号,那这样的话,本来是需要握手四次的。但是通过,将2、3步合并(在一个报文段里既确认了对方的序列号,又告知了自己的序列号),就可以提高效率简化为三次握手了。