TCP三次/四次握手

TCP协议
Transmission Control Protocol(TCP)

TCP 三次握手->建立连接

3_way_handshake
  1. 第一次握手,客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号seq:100,向服务端申请报文传送,告诉他这是我请求连接接的凭证,客户端现在是SEND状态

  2. 第二次握手,服务端接收请求SYN报文后,用自己的报文SYN和序列号seq:200做响应,并拿客户端的seq+1即作为ACK(101)的值,一起回复给客户端,告诉他我接受到你的申请了,好的,可以连接,这是我的连接接凭证,服务端现在是RECEIVE 状态

  3. 第三次握手,客户端接收到服务端响应后,会发一个ACK报文,把服务器的 seq+ 1即201作为 ACK 的值协同服务端发来的信息再一起发送给服务端,告诉服务端我收到了你的 SYN 报文,既然你答应了,我现在要链接你了,此时客户端变成 ESTABLISHED 状态。服务器收到 ACK 报文之后,发现凭证正确,就说OK,也变成 ESTABLISHED 状态,此时,双方已建立起了连接,可以开始通信了。

TCP 四次握手->中断链接

4_way_handshake

TCP Header Format

3_way_handshake
  • 初始化序列号(Initial Sequence Number)

    在建立连接之初,通信双方都会各自选择一个序列号,叫做初始化序列号。在建立连接时,通信双方通过 SYN 报文交互彼此的 ISN。

  • 确认号(Acknowledgment number)

  • 序号(sequence number): TCP是面向字节流的。在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。整个要传送的字节流的起始序号必须在连接建立时设置

  • Urgent Pointer(16 bits): 紧急指针,它告诉系统此报文段中有紧急数据,应尽快发送(相当于高优先级的数据),而不要按原来的排队顺序来传送。

  • Checksum(16 bits): 标头在传输过程中是否损坏。

  • Windows(16 bits):指定发送方接收窗口的大小(即,可用于传入数据的缓冲区空间)。

  • option: 长度可变 (Variable length),最长可达40个字节。当没有使用“选项”时,TCP的首部长度是20字节。

TCP Flags

  • Rreserved: 占6位,保留为今后使用,但目前应置为0。
  • SYN(Synchronize): 用于发起连接数据包同步双方的初始化序列号。
  • ACK(Acknowledge):确认数据。
    Packets that are used to confirm that the data packets have been received, also used to confirm the initiation request and tear down requests
  • RST(Reset):这个标记用来强制断开连接,然后重新建立连接。
  • FIN(Finish): 通知对方数据发送完毕,准备断开连接。
  • PSH(Push):告知对方这些数据包收到之后马上交给应用层,不能缓存。

References:

posted @ 2022-07-18 13:38  kingchou007  阅读(29)  评论(0编辑  收藏  举报