TCP-UDP

一.概念
打个比喻TCP,你家有个蓄水池,你可以往蓄水池里倒水,蓄水池上有个龙头,你可以通过龙头将水池的水放出来,然后水各种各样的容器装(杯子、矿泉水瓶、锅碗瓢盆)接水。
上面的例子中,往蓄水池中倒几次水和接几次水是没有必然联系的,也就是说你可以只倒1次水,然后分10次接完。另外,蓄水池里的水接多少就会少多少;往蓄水池倒多少水,就会增加多少水,但是不能超过蓄水池的容量,多出的水会溢出。
TCP:
结合TCP的概念,蓄水池就好比接收缓存,倒水就相当于发送数据,接水就相当于读取数据。好比你通过TCP连接给另一端发送数据,你只调用了1次write,发送了100个字节,但是对方可以分10次收完,每次10个字节;你也可以调用10次write,每次10个字节,但是对方可以1次就收完。(假设数据都能到达)但是,你发送的数据量不能大于对方的接收缓存(流量控制),如果你硬是要发送过量数据,则对方的缓存满了就会把多出的数据丢弃。
UDP:
UDP和TCP不同,发送端调用了几次write,接收端必须调用相同次数的read读完。UPD是基于报文的,在接收的时候,每次最多只能读取1个报文,报文和报文是不会合并的,如果缓冲区小于报文长度,则多出的部分会被丢弃。也就说,如果不指定MSG_PEEK标志,每次读取操作将消耗1个报文。
二. 区别
(1)TCP是面向连接(Connection oriented)的协议,UDP是无连接(Connection less)协议
对于面向连接的: 两个人打电话时,双方确认并建立连接后才能进行通信。
对于面向无连接的:在邮局寄信时,你只需要将信放在邮筒里,不需要给收件人通知,收件人也不知道你给他寄信了。首先 UDP 是不需要和 TCP一样在发送数据前进行三次握手建立连接的,想发数据就可以开始发送了。并且也只是数据报文的搬运工,不会对数据报文进行任何拆分和拼接操作。
在发送端,应用层将数据传递给传输层的 UDP 协议,UDP 只会给数据增加一个 UDP 头标识下是 UDP 协议,然后就传递给网络层了在接收端,网络层将数据传递给传输层,UDP 只去除 IP 报文头就传递给应用层,不会任何拼接操作
(2)TCP无界,UDP有界
TCP通过字节流传输,即TCP将应用程序看成是一连串的无结构的字节流。每个TCP套接字有一个发送缓冲区,如果字节流太长时,TCP会将其拆分进行发送。当字节流太短时,TCP会等待缓冲区中的字节流达到一定程度时再构成报文发送出去,TCP发给对方的数据,对方在收到数据时必须给予确认,只有在收到对方的确认时,本方TCP才会把TCP发送缓冲区中的数据删除。
UDP传输报文的格式是由应用程序控制的,应用层交给UDP多长的报文,UDP照样发送,既不拆分,也不合并,而是保留这些报文的边界,即次发送1个报文。
有界与无界之分是根据接收报文来划分的,对于TCP协议,客户端连续发送数据,只要服务端的这个函数的缓冲区足够够,会一次性接收过
来,即客户端是分好几次发过来,是有边界的,而服务端却1次性接收过来,所以证明是无边界的;
对于UDP协议,客户端连续发送数据,即使服务端的这个函数的缓冲区足够大,也只会1次1次的接收,发送多少次接收多少次,即客户端分几次发送过来,服务端就必须按几次接收,从而证明,这种UDP的通讯模式是有边界的。
(3) TCP有序,UDP无序
消息在传输过程中可能会乱序,后发送的消息可能会先到达,TCP会对其进其重排序,UDP不会。
(4) TCP有流量控制(拥塞控制),UDP没有
流量控制:TCP利用滑动窗口机制在TCP连接上实现对发送方的流量控制, 如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。
拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有1个前提:网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络传输性能有关的所有因素。
当出现网络抖动时,TCP会自觉降低发送速度,他会努力维护次序,但UDP依然保持速度不变
(5) TCP可靠,UDP不可靠;
由于TCP要保证所有的数据包都可以到达,所以,需要有重传机制(快重传,快恢复,超时重传),UDP不会进行重传。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值