TCP / UDP的区别

Reference

TCP UDP

  • TCP(Transmission Control Protocol):传输控制协议
  • UDP(User Datagram Protocol):用户数据报协议
  • TCP UDP 都是传输层协议

目录

TCP / UDP的区别

  • TCP 是面向连接的协议,UDP 是无连接协议
  • TCP 是字节流模式,UDP 是数据报模式
  • TCP无界,UDP有界
  • TCP有序,UDP无序
  • TCP可靠,UDP不可靠
  • TCP有流量控制(拥塞控制),UDP没有
  • UDP程序结构较简单

TCP是面向连接的协议,UDP是无连接协议

TCP是面向连接的,在连接持续的过程中,socket中收到的数据都是由同一台主机发出的,因此,知道保证数据是有序的到达就行了,至于每次读取多少数据自己看着办。

UDP是无连接的协议,只要知道接收端的IP和端口,且网络是可达的,任何主机都可以向接收端发送数据。客户端一次读取超过一个报文的数据,则会数据错乱

TCP可靠,UDP不可靠

由于TCP有重传机制,UDP不会进行重传。

TCP有序,UDP无序

消息在传输过程中可能会乱序,后发送的消息可能会先到达,TCP会对其进行重排序,UDP不会。

UDP程序结构较简单

TCP报头是20字节 > UDP报头是8字节。

TCP和UDP的使用场景

  • UDP适用于对传输效率要求高,但准确率要求低的应用场景:

    • 包总量较少的通信(DNS、SNMP等)
    • 视频、音频等多媒体通信(即时通信)
    • 广播通信
    • DNS:用于域名解析服务,53号端口。
    • SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
    • TFTP(Trival File Transfer Protocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。
  • TCP适合对传输效率要求低,但准确率要求高的应用场景:

    • HTTP:万维网协议,是从Web服务器传输超文本到本地浏览器的传送协议。
    • FTP:文件传输协议,使用21端口。
    • Telnet:一种用于远程登陆的端口,使用23端口
    • SMTP:邮件传送协议,用于发送邮件,使用25号端口。
    • POP3:接收邮件,使用110端口。

为什么TCP会粘包、拆包,而UDP不会

TCP粘包、拆包发生原因

  1. 要发送的数据 > 发送缓冲区剩余空间大小,将会拆包。

  2. 待发送数据 > 最大报文长度,将会拆包。

  3. 要发送的数据 < TCP发送缓冲区的大小,TCP会启用Nagle算法,对多次的数据流进行合并,写入缓冲区的数据一次发送出去,将会发生粘包。

  4. 接收数据端的应用层没有及时读取缓冲区中的数据,服务器下次发送将会发生粘包。

再说UDP不会粘包、拆包原因

他不会对数据包进行合并发送,每一个数据包都是完整的(数据+UDP头+IP头等等封装一次)也就没有粘包一说了。

TCP粘包与分包的处理方法

客户端在数据包固定位置添加包的长度信息,服务器接收到数据后,先解析包长度,然后根据包长度截取数据包(客户端有自动重发机制,故而在应用层不会导致数据的不完整性)

TCP的三次握手

• 第一次握手:客户端发送一个同步标志SYN=1,ACK=0标志的数据包给接收端,请求进行连接;
• 第二次握手:接收端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发送端,可以通讯了,并且让发送端发送一个确认数据包
• 第三次握手:发送端发送一个SYN=0,ACK=1的数据包给接收端,确认连接建立,可以通讯。
• 中断连接端可以是Client端,也可以是Server端。

为什么连接的时候是三次握手,关闭的时候却是四次挥手?

• 因为三次握手中Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。
• 但是关闭连接时,当Server端收到FIN报文时,并不会立即关闭SOCKET,先应答Client端一个ACK报文,等确认所有的数据都发送完了,才能发送FIN报文,由于不能一起发送,所以是四次握手。
posted @ 2020-05-31 23:31  justblue  阅读(384)  评论(0编辑  收藏  举报