西维蜀黍

【Network】Wireshark 抓包学习TCP通讯

三次握手 (Three-way Handshake) 过程

  ...


【Network】KCP

  ...


【Network】QUIC

  ...


【Network】TCP(Transmission Control Protocol)

TCP(Transmission Control Protocol)

TCP(Transmission Control Protocol)提供一种面向连接的、可靠的字节流服务。TCP连接是全双工的,即数据在两个方向上能够同时传递。

TCP和UDP处在同一层(传输层),但是TCP和UDP最不同的地方是,TCP提供了一种可靠(reliable)的数据传输服务,TCP是面向连接的。

也就是说,利用TCP通信的两台主机首先要经历一个“拨打电话”的过程,等到通信准备结束才开始传输数据,最后结束通话。所以TCP要比UDP可靠的多,UDP是把数据直接发出去,而不管对方是不是在收信,就算是UDP无法送达,也不会产生ICMP差错报文。

  ...


【Network】TCP 三次握手(TCP Three-way Handshake)

TCP 三次握手(TCP Three-way Handshake)

TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP窗口大小信息。

第一次握手 - 建立连接

客户端发送连接请求报文段,将Control Flag中的SYN位置为1,Sequence Number(发送序号)为x;然后,客户端进入 SYN_SENT 状态,等待服务器的确认。

SYN报文段是指,Control Flag中的SYN位为1的TCP报文段。

第二次握手 - 服务器收到SYN报文段

服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置 Acknowledgment Number(确认序号)为x+1(即Sequence Number+1);同时,自己还要发送SYN请求信息(即将 SYN 位为1),Sequence Number(发送序号)为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入 SYN_RECV 状态

类似地,ACK报文段是指Control Flag中的ACK位为1的TCP报文段。而SYN+ACK报文段是指Control Flag中的SYN位和ACK位均为1的TCP报文段。

第三次握手 - 客户端收到服务器的SYN+ACK报文段

客户端收到服务器发送的SYN+ACK报文段后,将Acknowledgment Number(确认序号)设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端进入 ESTABLISHED 状态。当服务器端接收到这个ACK报文段后,服务器端进入 ESTABLISHED 状态,完成TCP三次握手。

而如果,客户端向服务器发送ACK报文段没有达到服务器端(或者延迟了),服务器会重新发送一个第二次握手阶段中的SYN+ACK报文段。

  ...