• TCP与UDP


    TCP:面向字节流的传输方式  ,应用层和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序看成一连串的无结构的字节流。TCP有一个缓冲,当应用程序传送的数据块太长,TCP将它划分短一些再发送。如果应用程序发送数据太短,TCOP等待积累足够多的字节后再构成报文段发送出去。

    UDP:面向报文的传输方式  应用层交给UDP多长的报文,UDP都照样发送,即一次一个报文。因此,应用程序必须选择大小合适的报文。若报文太长,则IP层需要分片,降低效率。若太短,会使IP太小。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。也就是说,应用层给UDP多长的报文,UDP都照样发送。

    TCP 传输控制协议 

    • 面向连接的协议
    • 需要三次握手
    1. 客户端发送:SYN=1,SEQ=x,端口号
    2. 服务器回复:SYN=1,ACK=x+1.SEQ=y
    3. 客户端发送:ACK=y+1,SEQ=x+1
    • 需要四次挥手
    1. A向B提出停止连接请求,FIN=1
    2. B收到,ACK=1
    3. B向A提出停止连接请求,FIN=1
    4. A收到,ACK=1
    • Tcp报头最小长度:20字节

    优点:(可靠,稳定)

    1. 传递数据前,会有三次握手建立连接
    2. 传递数据时,有确认,重传,拥塞机制
    3. 传递后,会断开连接节省系统资源

    缺点:(传输速度慢,效率低,占用系统资源高,易被攻击)

    1. 传递数据前,建立连接需要耗时
    2. 传递数据时,确认,重传,拥塞会消耗大量事件以及CPU和内存等硬件资源
    3. 确认机制和三次握手机制会被人利用,实现DOS,DDOS攻击

    如何保证接受的顺序性

    1. TCP协议使用SEQ和ACK机制保证了顺序性
    2. TCP每个报文都是有序号的。确认应答信号ACK=SEQ+1

    UDP  用户数据报协议

    • 面向无连接的协议
    • 包头只有8字节
    • 简介:
    1. 传输数据前源端和终端不建立连接,当他想传送时就简单的抓取来自应用程序的数据,并尽可能快的把他扔到网络上
    2. 在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制
    3. 在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读取一个消息段
    4. 不建立连接,不需要维护连接状态,一台服务器可以同时向多个客户机传输相同的消息
    5. 标题只有8字节,相对于TCP的20字节,额外开销小
    6. 吞吐量不受拥挤算法的调节,只受应用软件生成数据的速度、传输带宽和终端主机性能的限制
    7. UDP使用尽最大努力的交付,不保证可靠性
    8. UDp面向报文,发送方的UDP对应用程序交下来的报文,在添加首部后就交给IP层。既不拆分也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小
    • 优点(传输速度快,较安全)
    1. 传输数据前,不需要建立连接
    2. 传输数据时,没有确认,重传,拥塞机制
    3. 被攻击的漏洞少
    • 缺点(不可靠,不稳定)
    1. 没有TCP机制,网络不好时,很可能丢包

    用UDP协议通讯时怎样得知目标机是否获得了数据包

      仿造TCP的做法,每发一个UDP包,都在里面加一个SEQ序号,接收方收到包后,将SEQ序号回复给发送方。如果发送方在指定时间以内没有收到回应,说明丢包了。

    为什么TCP比UDP可靠

    1. TCP是面向连接的,在建立连接后才发送数据;而UDP是无连接的,不管对方存不存在都会发送数据
    2. TCP有确认机制

    什么时候用TCP 

      当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。
      在日常生活中,常见使用TCP协议的应用如下:
        浏览器,用的HTTP
        FlashFXP,用的FTP
        Outlook,用的POP、SMTP
        Putty,用的Telnet、SSH
        QQ文件传输

    什么时候用UDP

      当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。
      比如,日常生活中,常见使用UDP协议的应用如下:
        QQ语音
        QQ视频
        TFTP

    TCP无边界,UDP有边界

      TCP无边界

        客户端分多次发送数据给服务器,若服务器的缓冲区够大,那么服务器端会在客户端发送完之后一次性接收过来,所以是无边界的;

      UDP有边界

        客户端每发送一次,服务器端就会接收一次,也就是说发送多少次就会接收多少次,因此是有边界的。

  • 相关阅读:
    vpp编写plugin
    vrf 命令
    vxlan + 多个vrf
    dpdk helloworld
    Go函数高级
    Go_defer
    Go递归函数
    Go作用域
    Go函数
    Go字符串
  • 原文地址:https://www.cnblogs.com/liuke-1264746554/p/10599619.html
Copyright © 2020-2023  润新知