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