计算机网络协议第四章,传输层协议
来源:互联网 发布:淘宝商家所在地怎么改 编辑:程序博客网 时间:2024/05/22 06:06
UDP协议
协议介绍
UDP (User Datagram Protocol)用户数据报协议。UDP是不可靠的、无连接的数据报服务。只是将应用层数据通过IP协议发送出去,而提供传输可靠性需要使用TCP协议。
UDP协议使用端口号区分发送端和接受端的进程,保留IP协议传输的原始特性,并没有定义不同于IP协议的传输行为。
RFC 768定义UDP首部格式如下:
16位源端口、目的端口:标记应用进程。
16位UDP长度:UDP整体报文长度(包括UDP首部长度+UDP数据长度)。
16位UDP校验和:校验UDP报文的一致性。
校验和
UDP首部长度8字节,最小UDP报文为8字节,也就是没有UDP数据部分。
回想IP校验和只是校验IP首部,UDP校验和校验整个UDP报文,如此整个IP数据报文都得到校验,想必TCP校验和也是如此。但是校验和只是对反码求和,不能百分百保证数据的一致性,只是降低数据出错的可能性。
IP分片
UDP基于IP协议,必须遵从IP分片机制,由于链路层限制导致IP数据报必须进行分片。UDP应用层每次写操作产生一个IP数据报,如果UDP数据报长度小于MTU则远端可以正常发送出去,如果大于MTU长度则需要分片。
IP协议中定义MF(更多分片)标记,如果需要分片则除最后一个分片外应该设置MF标记,每个分片都共用一个IP数据报标识。
IP协议中定义DF(不需要分片)标记,如果打开该标记则IP数据报大于MTU必须丢弃,并且返回一个ICMP差错报文,此机制用于发现路径MTU。
当UDP应用程序需要传输一个1473字节的数据时导致IP分片发生。此时MTU=1500, 最大UDP数据应该是1472(1500-20-8)。
从上图我们发现UDP的首部字节只出现在第一个IP分片中,我举一个简单的例子印证这个现象。
我们在使用基于UDP的SIP协议进行抓包,SIP协议的端口通用5060,我们使用tcpdump指定端口进行协议抓包分析。比如下面这行命令:
tcpdump -s 0 -i any port 5060 -w xx.cap
使用wireshark进行SIP协议分析的时候经常出现包被截断了,无法看到完整的SIP消息。出现该现象的原因就是由于SIP消息过长导致IP分片,如果使用port 5060进行过滤只能抓到IP第一个分片,因为UDP的首部只出现在第一个分片,因此只能通过第一个分片才知道端口是5060的UDP报文。
UDP不可靠特性
UDP协议思考
TCP协议
协议介绍
TCP与UDP的比较
面向连接
是字节流可靠占用资源多不支持UDP
否数据报不可靠占用资源少支持
小结
参考
《TCP/IP详解-协议》卷一 W.Richard Stevens
修订
初稿 2014-11-2 Simon
- 计算机网络协议第四章,传输层协议
- 【计算机网络】传输层协议TCP
- 计算机网络—传输层协议之TCP
- 计算机网络—传输层协议之UDP
- 计算机网络——传输层协议
- 计算机网络协议第三章,网络层协议
- 计算机网络 | 邮件传输协议
- 计算机网络各层协议
- 计算机网络各层协议
- 计算机网络各层协议
- 计算机网络各层协议
- 计算机网络协议层
- 计算机网络各层协议
- 计算机网络各层协议
- 计算机网络--七层协议/五层协议
- Internet 传输层协议
- 传输层协议
- (传输层)UDP协议
- 第十二章之异步查询
- UVA - 10887 Concatenation of Languages
- 【单调队列】POJ 2823 Sliding Window
- 记录3--ubuntu在grub resume里修复引导
- MYSQL UPDATE
- 计算机网络协议第四章,传输层协议
- dojo小例子(27)去除EnhancedGrid Filter插件中的“任何列”选项
- 李玉刚歌曲汇总
- CMake入门(二)
- mysql密码更改
- Activity 的生命周期
- 幂模运算
- VS C++ MFC编写GDI+实例
- python web编程---geturl(),urlunparse()