两个序号和三个标志位:
(1)序号:seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
(2)确认序号:ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。
(3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
(A)URG:紧急指针(urgent pointer)有效。
(B)ACK:确认序号有效。
(C)PSH:接收方应该尽快将这个报文交给应用层。
(D)RST:重置连接。
(E)SYN:发起一个新连接。
(F)FIN:释放一个连接。
需要注意的是:
(A)不要将确认序号ack与标志位中的ACK搞混了。
(B)确认方ack=发起方req+1,两端配对。
三次握手
浏览器向服务器发出请求链接报文段
第一次握手:浏览器随机选择一个序列号 seq = x 作为自己的初始序号发送给服务器
第二次握手:服务器使用 ack 对浏览器的数据包进行确认,因为收到序列号为 x 的数据包,所以 ack = seq + 1,同时服务器告诉浏览器自己的初始序号 seq = y
第三次握手:浏览器告诉服务器收到了服务器的确认消息并准备建立链接,浏览器自己此条消息的序列号是 x + 1,所以 seq = x + 1,而 ack = y + 1 是表示浏览器正准备接收服务器序列号为 y + 1的数据包
四次挥手
由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接
收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。
第一次挥手:浏览器发送一个 FIN,用来关闭浏览器到服务器的数据传送,浏览器进入 FIN_WAIT_1 状态。
第二次挥手:服务器收到 FIN 后,发送一个 ACK 给浏览器,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务器进入 CLOSE_WAIT 状态。
第三次挥手:服务器发送一个 FIN,用来关闭服务器到浏览器的数据传送,服务器进入 LAST_ACK 状态。
第四次握手:浏览器收到 FIN 后,服务器进入 TIME_WAIT 状态,接着发送一个 ACK 给服务器,确认序号为收到序号+1,服务器进入 CLOSED 状态,完成四次挥手。
网友评论