暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
UDP协议.doc
17
4页
0次
2025-08-14
免费下载
UDP
协议
UDP
协议是无面向连接的、不可靠的、无序的、无流量控制的传输层协议,
UDP
发送的每个数据报是记录型的数据报,所谓的记录型数据报就是接收进程
可以识别接收到的数据报的记录边界。
TCP
协议是面向连接的、可靠的、有序
的、拥有流量控制的传输层协议,它是字节流的协议,无记录边界。
1.
记录与字节流
UDP
协议:发送进程在发送每个数据报的时候并不等待多个数据报集中在
一起以一个较大数据报发送出去,而是立即发送出去,它是记录型的协议。并
且接收进程每次通过
read
recv……
获得的数据报必定是发送进程所发送的
那个数据报不可能是多个数据报,接收进程可以识别到发送进程所发送的每个
数据报的记录边界。
TCP
协议:发送进程在发送每个数据报的时候在内核处理过程中有可能并
不立即发送出去,而是会将多个数据报集中在一起以一个较大的数据报来发送,
它是字节流的协议。而接收进程每次通过
read
来读取发送进程发送过来的数
据报并不一定是发送进程原先发送数据报,接收进程无法识别每个数据报的记
录边界,所以
TCP
协议就是字节流的、无记录边界的协议。
例如:
QQ
聊天所用到的协议就应该是有记录边界的,聊天过程中是以“消
息”为单位,消息可以看成一个记录,所以
QQ
聊天协议采取
UDP
协议而不是
TCP
协议。
2.
有序与无序
UDP
协议:发送进程所发送的每个数据报并不按照原先发送的顺序到达接
收进程,有可能早发送的数据报较后到达接收进程。因为数据报在经过中间路
径的传送时会因为各个数据报传送的路径不同或者其它原因而造成这些数据报
到达的顺序不同,
UDP
协议是无序的传输协议。所以为了使基于
UDP
协议的
应用程序有序,必须在应用程序中设置序号、确认机制来使其有序。
TCP
协议:有序协议,有超时、序号、重传、确认机制。
例如:
FTP
协议是用于传送文件的协议,为了确保在传送文件内容的时候,
传送的每个数据报协议有序接收,所以
FTP
协议是基于
TCP
协议。
那为什么
TFTP
协议是基于
UDP
协议?因为为了保证有序,
TFTP
协议中
引入了确认、序号字段。
这里还有一个问题,
FTP
协议中的控制连接传送的内容好像都是基于消息
形式,客户端在控制连接上发出一个请求消息,服务器端返回一个请求结果消
息,感觉应该
FTP
控制连接采取
UDP
协议,为什么采取
TCP
协议?因为控制
连接上是交互式的消息传送,客户端在发送一个请求之后,在服务器端的响应
消息未到达之前,客户端是不会发送第二个请求消息,所以不用担心这两个请
求消息会叠加在一起。也就是对于交互式的消息传递也可以采用
TCP
协议。
3.
流量控制
UDP
协议:没有流量控制机制,如果发送进程发送数据报塞满了接收进程
的接收缓冲区,就会丢弃数据报。出现这种情况,
UDP
协议不会通知发送进程
减缓数据的发送速率。
TCP
协议:拥有流量控制。
4.
客户端通信过程比较
4.1
客户端的连接过程比较
UDP
协议在创建插口之后,可以同多个服务器端建立通信,而
TCP
协议只
能与一个服务器端建立通信,
TCP
不允许目的地址是广播或多播地址,
UDP
许。
UDP
协议客户端同服务器端的通信关系可以是一对多的关系,而
TCP
协议
只能是一对一的关系。
当然
UDP
协议也可以像
TCP
协议一样,通过
connect
来指定对方的
ip
址、端口(对应下图
1
中的③操作),
connect
是插口连接操作,
connect
作之后代表对应的插口已连接,与
TCP
协议不同,
UDP
connect
实现不包
含三向握手。不管是
UDP
协议还是
TCP
协议,
connect
实现的共同部分都包
括:若所指定插口的本地地址、端口未指定,那么
connect
的时候由内核为其
指定本地地址、本地端口,内核根据插口中的目的地址来判断外出接口,然后
指定该出接口的
IP
地址为插口的本地地址。
UDP
协议通过
connect
操作之
后同服务器端的通信关系成为一对一关系,不是一对多的关系,而且这时也
不能指定目的地址为广播或多播地址,因为
connect
数不允许目的地址为广
播或多播地址。
UDP
协议经过
connect
之后,在通过
sendto
来发送数据报时
需要指定目的地址、端口,如果指定了目的地址、端口,那么会返回错误
通过
UDP
协议可以同一个插口指定多次
connect
操作,而
TCP
协议不可以,
TCP
只能指定一次
connect
操作。
UDP
协议指定第二次
connect
操作之后会
口第一次的连接,然后建立第二次的连接。
客户端在建立同服务器端的连接过程中,第一都会通过
socket
建立连
接字,然后通过
bind
定本地地址、本地端口,当然定操作可以不用
指定,
UDP
协议:若未指定定操作,那么可以通过下面
connect
操作来由
内核负责插口的定操作,若
connect
未指定,那么定操作只好通过插口
操作(
sendto
sendmsg
)来指定目的地址、端口,这时插口本地地址
不会指定,为通地址,而本地端口由内核指定,第一次
sendto
操作之后,
插口的本地端口经过内核指定之后就不会更改
TCP
协议:若未指定定操作,可以通过下面
connect
操作来由内核负责
插口的定操作。内核会根据插口中的目的地址来判断外出接口,然后指定该
of 4
免费下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜