面向报文(UDP)和面向字节流(TCP)的区别

linux系统管理 struggling 2155次浏览 2个评论
文章目录

TCP(Transmission Control Protocol):传输控制协议

UDP(User Datagram Protocol):用户数据报协议

1,TCP是面向连接(Connection oriented)的协议,UDP是无连接(Connection less)协议;

以下举例进行说明:

对于面向连接的: 两个人打电话时,双方确认并建立连接后才能进行通信。

对于面向无连接的:在邮局寄信时,你只需要将信放在邮筒里,不需要给收件人通知,收件人也不知道你给他寄信了。

TCP 与 UDP 通信的方式分别如下所示:

1363304870_3150

2,TCP无界,UDP有界;

TCP通过字节流传输,即TCP将应用程序看成是一连串的无结构的字节流。每个TCP套接口有一个发送缓冲区,如果字节流太长时,TCP会将其拆分进行发送。当字节流太短时,TCP会等待缓冲区中的字节流达到一定程度时再构成报文发送出去,TCP发给对方的数据,对方在收到数据时必须给矛确认,只有在收到对方的确认时,本方TCP才会把TCP发送缓冲区中的数据删除。

而UDP传输报文的方式是由应用程序控制的,应用层交给UDP多长的报文,UDP照样发送,既不拆分,也不合并,而是保留这些报文的边界,即一次发送一个报文。

有界与无界之分是根据接收报文来划分的,对于TCP协议,客户端连续发送数据,只要服务端的这个函数的缓冲区足够大,会一次性接收过来,即客户端是分好几次发过来,是有边界的,而服务端却一次性接收过来,所以证明是无边界的;
而对于UDP协议,客户端连续发送数据,即使服务端的这个函数的缓冲区足够大,也只会一次一次的接收,发送多少次接收多少次,即客户端分几次发送过来,服务端就必须按几次接收,从而证明,这种UDP的通讯模式是有边界的。

3,TCP可靠,UDP不可靠;

由于TCP要保证所有的数据包都可以到达,所以,需要有重传机制(快重传,快恢复,超时重传),UDP不会进行重传。当出现以下情况时会进行重传:

1,数据报传输中途丢失

2,接收端的ACK确认报文在传输中途丢失

3,接收端异常未响应ACK或被接收端丢弃

TCP重传机制:1,超时重传机制;2,快速重传机制;3,SACK 方法;4,Duplicate SACK – 重复收到数据的问题

4,TCP有序,UDP无序;

消息在传输过程中可能会乱序,后发送的消息可能会先到达,TCP会对其进行重排序,UDP不会。

5,TCP有流量控制(拥塞控制),UDP没有;

流量控制:TCP利用滑动窗口机制在TCP连接上实现对发送方的流量控制, 如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。

拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提:网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络传输性能有关的所有因素。

当出现网络抖动时,TCP会自觉降低发送速度,他会努力维护次序,但udp依然保持速度不变,

6,TCP的头部比UDP大;

TCP头部20 bytes

16
32 bits
Source port
Destination port
Sequence number
Acknowledgement number
Offset
Resrvd
U
A
P
R
S
F
Window
Checksum
Urgent pointer
Option + Padding
Data
TCP header structure

UDP头部8 bytes

16
32 bits
Source port
Destination port
Length
Checksum

Data
UDP header structure

TCP报头中的蓝色字段是20字节固定首部,UDP报头中的蓝色字段是其8字节固定首部。


DevOps-田飞雨 》》转载请注明源地址
喜欢 (7)or分享 (0)
发表我的评论
取消评论
*

表情 贴图 加粗 链接 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(2)个小伙伴在吐槽
  1. 转载请注明原链接
    struggling  2016-04-23 16:41 回复