标签:send tcp连接 问题: info dup 努力 函数 网络模型 关系
看回顾一下OSI 7层协议网络模型
再回顾一下OSI每一层的作用
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
3、tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制(TCP粘包处理)。
3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
4、TCP对系统资源要求较多,UDP对系统资源要求较少。
- TCP 是流式协议没有消息边界,客户端向服务器端发送一次数据,可能会被服务器端分成多次收到。客户端向服务器端发送多少数据。服务器端可能一次全部收到。
2.保证传输的可靠性,顺序。
3.TCP有拥塞控制,所以数据包可能会延后发送。
1什么是 TCP 粘包?
TCP 粘包是指发送方发送的若干包数据?到?接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。(多条信息可能会合成一条消息)
2 TCP 出现粘包的原因?
发送方:发送方需要等缓冲区满才发送出去,造成粘包
接收方:接收方不及时接收缓冲区的包,造成多个包接收
3.TCP粘包的处理
方式一:手动解决粘包,客户端发送明文消息,在消息结尾加上特定的EOF标记。服务端接收到消息后,通过特定EOF将数据报分割多条,每条即是原始消息。
方式二:客户端按照约定的封包类型对消息进行封包pack操作,服务端开启消息的包格式校验,符合条件后对消息进行解包操作。
2.缓冲区拥堵或溢出
每个 socket 被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区。
write()/send() 并不立即向网络中传输数据,而是先将数据写入缓冲区中,再由TCP协议将数据从缓冲区发送到目标机器。
一旦将数据写入到缓冲区,函数就可以成功返回,不管它们有没有到达目标机器,也不管它们何时被发送到网络,这些都是TCP协议负责的事情。TCP协议独立于 write()/send() 函数,数据有可能刚被写入缓冲区就发送到网络,
也可能在缓冲区中不断积压,多次写入的数据被一次性发送到网络,
这取决于当时的网络情况、当前线程是否空闲等诸多因素,不由程序员控制。
标签:send tcp连接 问题: info dup 努力 函数 网络模型 关系
原文地址:https://blog.51cto.com/phpme/2506541