TCP建立连接的过程-----------三次握手
建立一个双向链接的过程(建立一个A----->B的会话,再建立一个B----->A的会话)
A先给B发信息,请求建立连接(SYN--请求标记位 置1) ----B收到A的“请求建立连接”包,给A回消息,ACK确认标记位 置1。---------A----->B的会话建立。
B先给A发消息,请求建立连接(SYN---请求标记位 置1)----A收到B的“请求建立连接”包,给B回消息,ACK确认标记位 置1.----------B----->A的会话建立。
三次握手---B给A回消息的同时(ACK置1)SYN置1
完成TCP建立连接的过程
加序号
A先给B发信息,初始序号是随机值----Seq=x
B收到A的“请求建立连接”包,1.给A回消息(ACK=1)--------ACK No.=x+1
2.请求建立连接(SYN=1)------Seq =y
A收到B的“请求建立连接”包,1.给B回消息(ACK=1)----------ACK No. =y+1
B希望A将x+1的数据包发回去-----------Seq=x+1
TCP断开连接的过程--------四次挥手(考虑到两边是否扔完数据)
A想跟B结束会话,FIN(结束标记位)置1
B收到A的请求,ACK置1
B想跟A结束会话,FIN=1
A收到B的请求,ACK=1
(该过程需要4个数据包--------四次挥手)
至此,TCP连接过程断开
PS:三次握手中,ACK和SYN合并到一个包中--------没有牵扯到任何数据(连接未建立之前)
但是连接一旦建立,会牵扯到收发数据
A和B的数据不同,假设A少B多,A先将数据传完-------可断开连接
A断开连接后,B的数据没传完------B不能断开与A的连接
B确认自己的数据发完后才会发FIN包
A回一个ACK包--------彻底断开连接
特例(真实情况下):1.若AB数据相同,那么四次挥手可能看到三次挥手,将ACK与FIN合到一 起发包
2.两次挥手-------A给B发消息并断开,看不到B给A发消息并断开------B的数据一直没发完
3.一次挥手------A给B发消息,B不回消息--------超时,自动断开