Windows网络编程之TCP和UDP的区别联系

TCP和UDP是应用最广泛的两个传输层协议,它们的主要作用是将数据包通过路由器功能传送到目的地址,从而为上层应用和应用层协议(HTTP、FTP、SMTP、TELNST、SNMP、SYSLOG等)提供网络通信服务。

  1. TCP是面向连接的,TCP存在着三握四挥,并且三次握手和四次挥手是对TCP建立的连接有着重要意义的两步。两个主机进行TCP通信可以分为三个阶段,即建立连接阶段,数据传输阶段和断开连接释放资源阶段。TCP连接过程是状态的转换,用户可以通过调用OPEN,SEND,RECEIVE,CLOSE等操作来进行状态转换。Windows网络编程之TCP和UDP的区别联系
  2. TCP建立连接的过程是这样进行的:客户端发送一个SYN报文段(SYN为1) 指明希望连接的服务器端口和初始顺序号(ISN)。服务器发回包含服务器的初始顺序号的SYN报文段(SYN为1) 作为应答。同时,将确认号设置为客户端的 ISN 加1以对客户端的 SYN 报文段进行确认(ACK字段也为1, 表示该报文是对SYN=1的报文的应答)。客户端必须将确认号设置为服务器的ISN加1以对服务器的 SYN报文段进行确认,该报文通知目的主机双方已完成连接建立。Windows网络编程之TCP和UDP的区别联系
  3. TCP数据的传输过程是这样的:ICP是一种可靠的传输协议,它使用***来标识数据中的每个字节。***中包含每个主机中发送的字节的顺序、从而使目的主机可以按照顺序对数据进行重组。每个字节的***是递增的。在建立连接时3次握手的前两次中,两端的主机会交换初始***(ISN) .初始***是随机的,不可预知的。TCP主要采用累计确认的机制。接收者收到数据后,会发送一个确认包,指定需要接收的下一个字节的***。例如,主机A向主机B 发送4字节的数据,它们的***分别为100、101、102和103, 主机B在接收到这4字节后,会向主机A发送一个包含***104的确认包,表明它希望接收的下一个字节的***为104。除了累计确认外,接收者还可以发送选择确认包。通常在数据丢失或损坏时,接收者发送选择确认包来指定发送者重新发送指定的数据包。
  4. TCP断开连接可以通过以下过程进行,在多数情况下,TCP 使用4次握手来断开连接。当一方希望断开连接时,它会向对方发送一个FIN包;对方在收到FIN包后,会发送一个ACK 确认包。因此,通常来说双向连接需要从每个TCP端点发送一对FIN和ACK段。TCP 也可以使用3次握手的方式断开连接。当主机A发送FIN包后,主机B回复 FIN加ACK包,将上面的两个步骤合并为一个步骤,然后主机A再回复 ACK包。如果两个主机同时发送FIN包,然后又都收到了对应的ACK包,则这种情况可以看作是2次握手。
  5. UDP是一种不可靠的协议,在传送数据时,源主机和目的主机之间不建立连接。而TCP为了确保数据传输的准确和安全可靠,集成了各种安全保障功能,这在实际执行过程中会占用大量的系统开销。因此,UDP具有TCP无法比拟的速度优势。相对于可靠性而言,基于UDP的应用更注意性能。例如,我们经常使用 ping 命令来探测两台主机之间是否能够正常通信。在默认情况下,ping命令将向目标主机发出4个UDP数据包,目标主机每接收到一个数据包都会向发送方返回一个数据包,表明它处于在线状态。因为在发送数据之前不需要建立连接关系,所以 ping 命令在发送UDP 数据包之后很快就能收到回应的数据包。Windows网络编程之TCP和UDP的区别联系
  6. 与TCP相比,UDP更适合发送数据量比较少、但对响应速度要求比较高的情况。