• 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报文,由于不能一起发送,所以是四次握手。
  • 相关阅读:
    iOS开发富文本制作 图片和文字/NSMutableParagraphStyle/NSMutableAttributedString
    LintCode-Previous Permuation
    LintCode-Heapify
    LintCode-Median II
    LintCode-Longest Increasing Subsequence
    LintCode-Kth Largest Element
    LintCode-Majority Number III
    LintCode-Majority Number II
    LintCode-Majority Number
    LintCode-Subarray Sum
  • 原文地址:https://www.cnblogs.com/justblue/p/13022414.html
Copyright © 2020-2023  润新知