下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、udp协议是无面向连接的、不可靠的、无序的、无流量控制的传输层协议,udp发送的每个数据报是记录型的数据报, 所谓的记录型数据报就是接收进程可以识别接收到的数据报的记录边界。tcp协议是面向连接的、可靠的、有序的、拥有流量控制的传输层协议,它是字节流的协议,无记录边界。1. 记录与字节流udp协议:发送进程在发送每个数据报的时候并不等待多个数据报集中在一起以一个较大数据报发送出去,而是立即发送出去,它是记录型的协议。并且接收进程每次通过read 或 recv , 获得的数据报必定是发送进程所发送的那个数据报不可能是多个数据报,接收进程可以识别到发送进程所发送的每个数据报的记录边界。tcp协议:
2、发送进程在发送每个数据报的时候在内核处理过程中有可能并不立即发送出去,而是会将多个数据报集中在一起以一个较大的数据报来发送,它是字节流的协议。而接收进程每次通过read 来读取发送进程发送过来的数据报并不一定是发送进程原先发送数据报,接收进程无法识别每个数据报的记录边界,所以tcp协议就是字节流的、无记录边界的协议。例如:qq聊天所用到的协议就应该是有记录边界的,聊天过程中是以 “消息” 为单位, 消息可以看成一个记录,所以 qq聊天协议采取udp协议而不是tcp协议。2. 有序与无序udp协议:发送进程所发送的每个数据报并不按照原先发送的顺序到达接收进程,有可能早发送的数据报较后到达接收进程
3、。 因为数据报在经过中间路径的传送时会因为各个数据报传送的路径不同或者其它原因而造成这些数据报到达的顺序不同,udp协议是无序的传输协议。所以为了使基于udp协议的应用程序有序,必须在应用程序中设置序号、确认机制来使其有序。tcp协议:有序协议,有超时、序号、重传、确认机制。例如: ftp协议是用于传送文件的协议,为了确保在传送文件内容的时候,传送的每个数据报协议有序接收,所以 ftp协议是基于tcp协议。那为什么tftp协议是基于udp协议 ?因为为了保证有序,tftp协议中引入了确认、序号字段。这里还有一个问题,ftp协议中的控制连接传送的内容好像都是基于消息形式,客户端在控制连接上发出一
4、个请求消息,服务器端返回一个请求结果消息,感觉应该ftp控制连接采取udp协议,为什么采取tcp协议 ?因为控制连接上是交互式的消息传送,客户端在发送一个请求之后,在服务器端的响应消息未到达之前,客户端是不会发送第二个请求消息,所以不用担心这两个请求消息会叠加在一起。也就是对于交互式的消息传递也可以采用tcp协议。3. 流量控制udp协议:没有流量控制机制,如果发送进程发送数据报塞满了接收进程的接收缓冲区,就会丢弃数据报。出现这种情况, udp协议不会通知发送进程减缓数据的发送速率。tcp协议:拥有流量控制。4. 客户端通信过程比较4.1 客户端的连接过程比较udp协议在创建插口之后,可以同多
5、个服务器端建立通信,而tcp协议只能与一个服务器端建立通信,tcp不允许目的地址是广播或多播地址,udp允许。 udp协议客户端同服务器端的通信关系可以是一对多的关系,而tcp协议只能是一对一的关系。当然 udp协议也可以像tcp协议一样,通过connect 来指定对方的ip 地址、端口 ( 对应下图1 中的操作 ) ,connect 是插口连接操作,connect 操作之后代表对应的插口已连接,与 tcp协议不同, udp的 connect 实现不包含三向握手。不管是udp协议还是tcp协议, connect 实现的共同部分都包括:若所指定插口的本地地址、端口未指定,那么 connect 的
6、时候由内核为其指定本地地址、本地端口,内核根据插口中的目的地址来判断外出接口,然后指定该外出接口的ip 地址为插口的本地地址。udp协议通过connect 操作之后同服务器端的通信关系成为一对一关系,不再是一对多的关系,而且这时也不能指定目的地址为广播或多播地址,因为connect 函数不允许目的地址为广播或多播地址。udp协议经过 connect之后,在通过sendto 来发送数据报时不需要指定目的地址、端口,如果指定了目的地址、端口,那么会返回错误。通过udp协议可以给同一个插口指定多次connect 操作,而 tcp协议不可以, tcp只能指定一次connect 操作。 udp协议指定第
7、二次connect 操作之后会先断口第一次的连接,然后建立第二次的连接。客户端在建立同服务器端的连接过程中,第一步都会通过socket 建立连接套接字,然后通过bind 来绑定本地地址、本地端口,当然绑定操作可以不用指定。udp协议:若未指定绑定操作,那么可以通过下面connect 操作来由内核负责插口的绑定操作,若connect 又未指定,那么绑定操作只好通过插口的写操作(sendto 、 sendmsg)来指定目的地址、端口,这时插口本地地址不会指定,为通配地址,而本地端口由内核指定,第一次sendto 操作之后,插口的本地端口经过内核指定之后就不会更改。tcp协议:若未指定绑定操作,可以
8、通过下面connect 操作来由内核负责插口的绑定操作。内核会根据插口中的目的地址来判断外出接口,然后指定该外出接口的ip 地址为插口的本地地址。connect 操作对于tcp协议的客户端是必不可少的,必须指定。( 不管是 udp协议还是tcp协议,所对应插口经过connect 操作之后就是已连接的插口,未经过connect 就代表未连接的插口。) 通过 bind 来绑定本地地址、本地端口的时候,不管是已连接的还是未连接的插口,如果存在某一个插口的本地端口同用户所要绑定的本地端口相同,都会返回eaddrinuse(address already in use) 错误。如果要绑定同已存在插口的本
9、地端口相同的端口,必须先设置插口选项so_reuseaddr,然后再绑定。 在 linux系统中如果绑定的本地地址不同而本地端口相同可以不用设置插口选项so_reuseaddr,而对于其它的类unix 系统根据 unix 网络编程中所描述的都要预先设置 so_reuseaddr插口选项。对于 tcp协议绝不允许绑定的本地地址、端口同已存在的插口( 不管是已连接的还是未连接的插口) 相同。对于udp协议通过设置插口选项 so_reuseport,允许绑定相同的本地地址、本地端口。在linux系统中,没有so_reuseport这个选项,所以在 linux系统中 udp协议同 tcp协议一样都不允
10、许存在两个插口有相同的本地地址、本地端口。tcp协议同 udp协议还有一个很大的不同点:例如有一台多宿主机,它所拥有的ip 地址有 a 、 b、c,现在创建4 个相同的tcp监听端口port ,对应的四个插口地址结构(* ,port)、(a,port) 、(b,port) 、(c,port) ,现在有客户端要同 (a,port) 建立连接,那么只会同(a,port)插口建立连接,而不会同拥有通配地址* 的插口建立连接。而如果是创建4 个相同的udp监听端口port ,对应的四个插口地址结构(* ,port) 、 (a,port) 、(b,port) 、(c,port) ,那么有客户端要同(a,
11、port)建立通信,那么发送到(a,port) 的数据报也会拷贝一份到(* ,port) 插口。原因: tcp协议之间的通信是一对一的关系,而udp可以是一对多的关系。步骤udp协议tcp协议socket(af_inet,sock_dgram,ipproto_udp) socket(af_inet,sock_stream,ipproto_tcp) bind 捆绑本地地址、本地端口(可忽略,在下面connect 中或第一次sendto 由内核来指定)bind 捆绑本地地址、本地端口(可忽略,在下面的 connect 操作中由内核来指定本地地址、端口) connect 指定对方地址、端口,建立连接
12、(可忽略由 sendto 指定对方地址、端口)connect 指定对方地址、端口,建立连接读或写操作读或写操作图 1 客户端连接过程4.2 服务器端的连接过程比较对于 udp协议客户端与服务器端没有什么本质的区别,每个udp协议的客户端也是服务器端。而tcp协议就不同了, tcp协议必须通过listen 来申请监听,然后通过accept 来接收一个客户端的连接,当接收客户端的连接会再创建一个单独的插口用来同客户端之间进行数据通信,也就是说服务器端由一个单独的监听插口负责监听客户端的连接请求,当接收到一个来自客户端的连接请求之后,服务器会另外创建一个插口负责同客户端之间进行连接通信。服务端在通过bind 来绑定本地地址、本地端口的时候应注意的情况,同客户端是相同的。步骤udp协议tcp协议socket(af_inet,sock_dgram,ipproto_udp) socket(af_inet,sock_stream,ipproto_tcp) bin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年人事代理协议书写实例
- 2025年国际空陆联运合作协议
- 2025年住宅装修合同解除
- 二零二五年度绿色建材采购合同标准3篇
- 2025年咨询公司合作项目比例分成协议
- 2025年度高校校长任期产学研合作聘用合同2篇
- 2025年专业技术机密竞业禁止合同
- 2025年农业现代化建设PPP合作协议
- 2025版新能源产业用地买方土地居间合同协议4篇
- 2025年度煤矿公司员工劳动合同修订版4篇
- 深圳2024-2025学年度四年级第一学期期末数学试题
- 中考语文复习说话要得体
- 《工商业储能柜技术规范》
- 华中师范大学教育技术学硕士研究生培养方案
- 医院医学伦理委员会章程
- 风浪流耦合作用下锚泊式海上试验平台的水动力特性试验
- 高考英语语法专练定语从句含答案
- 有机农业种植技术操作手册
- 公园广场绿地文化设施维修改造工程施工部署及进度计划
- 塑料件缺陷汇总
- 2020年的中国海外工程示范营地申报材料及评分标准
评论
0/150
提交评论