TCP三次/四次握手
TCP协议
Transmission Control Protocol(TCP)
TCP 三次握手->建立连接
-
第一次握手,客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号seq:100,向服务端申请报文传送,告诉他这是我请求连接接的凭证,客户端现在是SEND状态
-
第二次握手,服务端接收请求SYN报文后,用自己的报文SYN和序列号seq:200做响应,并拿客户端的seq+1即作为ACK(101)的值,一起回复给客户端,告诉他我接受到你的申请了,好的,可以连接,这是我的连接接凭证,服务端现在是RECEIVE 状态
-
第三次握手,客户端接收到服务端响应后,会发一个ACK报文,把服务器的 seq+ 1即201作为 ACK 的值协同服务端发来的信息再一起发送给服务端,告诉服务端我收到了你的 SYN 报文,既然你答应了,我现在要链接你了,此时客户端变成 ESTABLISHED 状态。服务器收到 ACK 报文之后,发现凭证正确,就说OK,也变成 ESTABLISHED 状态,此时,双方已建立起了连接,可以开始通信了。
TCP 四次握手->中断链接
TCP Header Format
-
初始化序列号(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:
本文作者:Kane,转载请注明原文链接:https://www.cnblogs.com/hackerk/p/16490069.html