对于不从事底层开发的人员来讲,或者对于开发应用的人来讲,最常用的就是这两个协议。
1.TCP 是面向连接的,UDP 是面向无连接的。
什么叫面向连接,什么叫无连接呢?
1.在互通之前,面向连接的协议会先建立连接.//例如,TCP 会三次握手
2.而 UDP 不会建立连接
为什么要建立连接呢?UDP不是也可以发3个包么?为啥不发?
1.所谓的建立连接,是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的面向连接的特性。
2.例如,TCP 提供可靠交付。通过 TCP 连接传输的数据,无差错、不丢失、不重复、并且按序到达。我们
都知道 IP 包是没有任何可靠性保证的,一旦发出去,都只能随它去。
3.而UDP 继承了 IP包的特性,不保证不丢失,不保证按顺序到达。
4.再如,TCP 是面向字节流的。发送的时候发的是一个流,没头没尾。IP 包可不是一个流,而是一个个的
IP 包。之所以变成了流,这也是 TCP 自己的状态维护做的事情。
5.而UDP 继承了 IP 的特性,基于数据报的,一个一个地发,一个一个地收。
6.还有TCP 是可以有拥塞控制的。它意识到包丢弃了或者网络的环境不好了,就会根据情况调整自己的行
为,看看是不是发快了,要不要发慢点。UDP 就不会,应用让我发,我就发,管它呢。
因而TCP 其实是一个有状态服务,通俗地讲就是有脑子的,里面精确地记着发送了没有,接收到没有,发送到哪个了,应该接收哪个了,错一点儿都不行。
而UDP 则是无状态服务。通俗地说是没脑子的,发出去就发出去了。
1.MAC 层定义了本地局域网的传输行为
2.IP 层定义了整个网络端到端的传输行为
UDP 包头
UDP 的三大特点
1.沟通简单,相信网络世界是美好的,相信网络通路默认就是很容易送达的,不容易被丢弃的。
2.轻信他人。它不会建立连接,虽然有端口号,但是监听在这个地方,谁都可以传给他数据,他也可以传给任何人数据,甚至可以同时传给多个人数据。
3.做事不懂权变,不会根据网络的情况进行
发包的拥塞控制,无论网络丢包丢成啥样了,它该怎么发怎么发
1.第一,需要资源少,在网络情况比较好的内网,或者对于丢包不敏感的应用
2.不需要一对一沟通,建立连接,而是可以广播的应用
UDP 的不面向连接的功能,可以使得可以承载广播或者多播的协议
DHCP 就是一种广播的形式,就是基于 UDP 协议的
3.第三,需要处理速度快,时延低,可以容忍少数丢包,但是要求即便网络拥塞,也毫不退缩,一往无前