今天要讲的就是OSI模型中的第四层:传输层.
传输层中主要有两种协议:TCP协议、UDP协议,那他们的区别又是啥呢?
TCP与UDP的区别
TCP是面向连接的,它需要先经过三次握手.而UDP是面向非连接,它直接发送出去而不需要接收任何反馈
什么是连接呢,就是在互相之前,面向连接的协议会先建议起连接。例如TCP会三次握手.而UDP不会
所谓的建立连接,是为了在客户端和服务端维护连接,而建立一定得数据结构来维护双方的交互的状态,用这样的数据结构来保证所谓的面向连接的特性
TCP既然面向连接,他是提供可靠交付的,他必须得保证传输是否已到达(如果未到达就重新发送),而且得保证数据的完整性.如果其中一段数据未到达,其他接收到的数据都会缓存起来,直到所有段接收完毕组成一个完整的数据.他是无差错、不丢失、不重复、并且是按序到达。我们都知道IP包在网络中是随时都会凭空消失,但是TCP号称能做到那个连接维护的程序做的事情
而UDP继承了IP包的特性,不保证报丢失,不保证按顺序到达属于无脑式发送,他不需要反馈结果(管你的收到没收到,反正我发出去了.也不会重复去发)
再如,TCP是面向字节流的、发送的时候发的是一个流,没头没尾。IP包可不是一个流,而是一个个的IP包。之所以变成了流,这也是TCP自己的状态维护做的事情。而UDO继承了IP的特性,基于数据包的,一个一个得发,一个一个地收
还有TCP是可以有拥塞控制的。他意识到包丢失或者网络环境不好,就会调整自己的频率。UDP还是那句话,无脑式的叫我发我就发,管他三七二十一
因而TCP其实是一个有状态服务,也就是有脑子的,里面精确记着发送了没有,接收到没有,发送到哪个了,应该手手哪个了,错一点儿都不行。UDP没脑子这个不用讲了
我们可以这样比喻。如果MAC层定义了本地局域网的创术行为,IP层定义了整个网络端到端的创术行为,这两层基本定义了这样的基因:网络传输是以包为单位的,二层叫帧,网络层叫包,传输层叫段。我们笼统的成为包。包单独传输,自行选路,在不同的设备封装解封装,不保证达到。基于这个基因,UDP很好的传承下去,几乎没有自己的思想(无脑)
UDP包头
我们都知道每个程序在系统中都有唯一的端口,这样传输层才知道把包发给哪个应用程序
UDP的三大特点
1.沟通简单。相信网络通路默认都是很容易送达的,不容易被丢弃
2.轻信他人。他不会建立连接,虽有端口号,但谁都可以发给他
3.愣头青,做事不懂权变。不会看时势,改发就发,不管前面是否丢失了多少包