TCP协议的三次握手与四次挥手

2019-02-08  本文已影响0人  晴天的晴q

两个序号和三个标志位:

  (1)序号:seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。

  (2)确认序号:ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。

  (3)标志位:共6个,即URG、ACK、PSH、RST、SYNFIN等,具体含义如下:

  (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 状态,完成四次挥手。

上一篇下一篇

猜你喜欢

热点阅读