首页 > 编程知识 正文

传输层中tcp协议和udp协议的差异和应用领域,udp协议是网络的传输层协议对吗

时间:2023-05-03 23:04:24 阅读:263435 作者:671

首先我们看一下UDP和TCP的特点:
UDP:无连接 、不可靠、面向数据报、没有发送缓冲区
TCP:面向连接、可靠、面向字节流、有发送缓冲区

1 无连接和面向连接
UDP:“无连接”
在网络中使用UDP协议时,只需要提供对端的IP地址和端口号PORT就可以与对端进行通信,并不需要和对端建立连接
TCP:“面向连接”“三次握手、四次挥手”
在网络中使用TCP协议时,不仅需要对端的IP地址和端口号PORT,还需要通过“三次握手”建立连接,“四次挥手”断开连接

什么是连接?以打电话来举个例子

2 不可靠和可靠
我们可以先看一下UDP和TCP协议的报头信息

UDP的报头中只有校验和,但是校验和只能检查报头信息是否出错不足以保证协议的可靠性。
TCP的报头中添加了很多字段来保证协议的可靠性,如:序号、确认序号、窗口大小
UDP:不可靠。UDP没有提供使数据可靠传输的机制
TCP:可靠。
(1)确认应答机制和超时重传机制;
可以通过序号和确认序号,提供确认应答机制和超时重传机制处理在传输过程中的丢包问题,同时可以保证数据的按序到达,并且能够达到去除重复数据的效果。
(2)流量控制机制:通过窗口大小显示自己接收缓冲区的大小,使对端在发送数据时控制速率,防止对端发送速率过大而自己的接收能力不足而导致的数据丢包。
(3)拥塞避免机制:避免发送效率过大而导致的网络拥塞,先发送少量数据探测网络状况。
同时TCP为提升自身性能,还提供了滑动窗口、快重传、延迟应答、捎带应答机制。

3 面向数据报和面向字节流
UDP:面向数据报
在发送和接收数据时必须一个报文一个报文的进行,不能发送/接收半个报文
TCP:面向字节流
在发送和接收数据时不必要一个报文一个报文的进行,可以发送/接收半个报文。由于TCP是面向字节流的,也因此会导致粘包问题(解决方式见:传输层——TCP协议)

4 没有发送缓冲区和有发送缓冲区
UDP:没有发送缓冲区;由于UDP是不可靠的,不需要将发送的数据保存至发送缓冲区再移交给内核(这样当数据丢包时,发送缓冲区的内容会再次向内核发送),而是直接调用sendto发送给内核
TCP:有发送缓冲区

4 编写程序
编写UDP服务器程序步骤:
(1)创建套接字socket;
(2)填充本地套接字;
(3)绑定端口号bind;
(4)进行数据传输:接收数据:recvfrom,发送数据:sendto
编写TCP服务器程序步骤:
(1)创建套接字socket;
(2)填充本地套接字;
(3)绑定端口号bind;
(4)将套接字设置为监听状态listen;
(5)获得新连接accept;
(6)进行数据传输:读数据:read,写数据:write

5 适用场景
为什么UDP不可靠但是没有被TCP完全替换呢?
TCP虽然可靠,但是为了维护它的可靠性,需要花费大量的成本和资源,从而可能导致TCP的性能受损,速度降低
UDP虽然不可靠,但是它不需要花费其余资源,只是将自己的全部精力关注在数据的收发上,所以UDP的成本小且速度快
在视频/图片传输的过程中,一般丢一两帧画面是没有什么问题了,所以可以采用UDP这种传输协议。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。