TCP与DUP简单对比

  |   0浏览
  • 看回顾一下OSI 7层协议网络模型OSI参考模型

  • 再回顾一下OSI每一层的作用OSI每层所做的事

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

TCP与DUP比较:

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

TCP与DUP简单对比

TCP可能存在的问题:

TCP通信特点

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

粘包问题

1什么是 TCP 粘包?

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

2 TCP 出现粘包的原因?

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

3.TCP粘包的处理

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

TCP消息传递过程

TCP消息传递过程

2.缓冲区拥堵或溢出

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

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

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

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

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