《TCP UDP》

142 阅读2分钟

他们都是传输层的协议

一. TCP

1. TCP三次握手

在一个客户端和一个服务器之间通过TCP发送数据之前,必须先建立连接,这个建立TCP连接的过程,就是TCP握手。三次握手,就是说客户端和服务器要发送三个包。握手是由客户端发起的。

  1. 客户端发送一个SYN消息给服务器,指明要连接哪个端口。
  2. 服务器接收到该消息,发回一个SYN-ACK消息。
  3. 客户端收到该消息,再发送一个ACK消息确认包。

当服务器接收到ACK消息后,TCP连接就建立成功了,TCP握手结束。准备数据传输了。

2. TCP四次挥手

TCP连接的拆除需要发送四个包,就叫四次挥手。客户端和服务器都可以主动发起挥手动作,任何一方执行close()操作就可以产生挥手操作。

  1. 假设客户端想要关闭连接,客户端就发送一个FIN标志为1的包,表示我已经没有数据可以发送了。
  2. 服务器确认FIN包,发送一个确认包(ACK标志位为1),表示我已经收到关闭连接的请求,但是还没准备好关闭连接。
  3. 当服务器端准备好关闭连接时,像客户端发送结束连接的请求,发完以后,服务器就等待来自客户端的最后一个ACK包。
  4. 客户端接收到来自服务器的关闭请求,发送一个确认包。

服务器接收到确认包后,就关闭连接。

二. 区别

  1. TCP是面向连接的,也就是说,一个客户端和一个服务器之间要通过TCP发送消息之前,必须要先建立TCP连接(三次握手)。而UDP是无连接的,点对点连接之前不需要发送消息。
  2. TCP是可靠传输,它利用校验和,确认和重传机制保证可靠传输,如果消息在传输过程中丢失了,会重发。而UDP是不可靠的,它没有超时重传机制,不保证数据会最终到达。
  3. TCP保证消息的有序性,发出去的数据是有顺序的。而UDP是不保证数据的有序性的,数据包可能会以任何顺序到达。
  4. TCP传输速度慢,UDP的传输速度快。因为TCP需要建立连接,做比UDP更多的事,所以传输速度比UDP慢。
  5. TCP不保存数据的边界,因为数据以字节流的形式发送,没有标志表明消息的边界。而UDP中,数据包是单独发送的,每个UDP数据包都有长度和明确的界限。
  6. TCP只能点对点的通信,不能广播和多播。而UDP支持广播和多播。