码迷,mamicode.com
首页 > 其他好文 > 详细

TCP与DUP简单对比

时间:2020-06-23 15:48:43      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:send   tcp连接   问题:   info   dup   努力   函数   网络模型   关系   

  • 看回顾一下OSI 7层协议网络模型
    技术图片

  • 再回顾一下OSI每一层的作用
    技术图片

  • OSI 7层协议模型与TCP/IP 5层协议模型的对应关系
    技术图片
  • 从上述图片中可以看出tcp与udp 是传输层的协议。

    TCP与DUP比较:

    1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
    2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
    3、tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制(TCP粘包处理)。
    3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
    4、TCP对系统资源要求较多,UDP对系统资源要求较少。

    技术图片

    TCP可能存在的问题:

    TCP通信特点

    1. TCP 是流式协议没有消息边界,客户端向服务器端发送一次数据,可能会被服务器端分成多次收到。客户端向服务器端发送多少数据。服务器端可能一次全部收到。
      2.保证传输的可靠性,顺序。
      3.TCP有拥塞控制,所以数据包可能会延后发送。

    粘包问题

    1什么是 TCP 粘包?

    TCP 粘包是指发送方发送的若干包数据?到?接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。(多条信息可能会合成一条消息)

    2 TCP 出现粘包的原因?

    发送方:发送方需要等缓冲区满才发送出去,造成粘包
    接收方:接收方不及时接收缓冲区的包,造成多个包接收

    3.TCP粘包的处理

    方式一:手动解决粘包,客户端发送明文消息,在消息结尾加上特定的EOF标记。服务端接收到消息后,通过特定EOF将数据报分割多条,每条即是原始消息。
    方式二:客户端按照约定的封包类型对消息进行封包pack操作,服务端开启消息的包格式校验,符合条件后对消息进行解包操作。

    技术图片

    TCP消息传递过程

    2.缓冲区拥堵或溢出

     每个 socket 被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区。

    write()/send() 并不立即向网络中传输数据,而是先将数据写入缓冲区中,再由TCP协议将数据从缓冲区发送到目标机器。
    一旦将数据写入到缓冲区,函数就可以成功返回,不管它们有没有到达目标机器,也不管它们何时被发送到网络,这些都是TCP协议负责的事情。

     TCP协议独立于 write()/send() 函数,数据有可能刚被写入缓冲区就发送到网络,

    也可能在缓冲区中不断积压,多次写入的数据被一次性发送到网络,
    这取决于当时的网络情况、当前线程是否空闲等诸多因素,不由程序员控制。

    TCP与DUP简单对比

    标签:send   tcp连接   问题:   info   dup   努力   函数   网络模型   关系   

    原文地址:https://blog.51cto.com/phpme/2506541

    (0)
    (0)
       
    举报
    评论 一句话评论(0
    登录后才能评论!
    © 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
    迷上了代码!