1.udp介绍
udp是一个简单的面向数据报的运输层协议,进程的每个输出操作都正好产生一个udp数据报,并组装成一份待发送的ip数据包,
这与面向流字符的协议不同,如tcp,应用程序产生的全体数据与真正发送的单个ip数据报可能没有什么联系。
udp不提供可靠性:它把应用程序传给ip层的数据发送出去,但是并不保证它们能到达目的地
应用程序必须关心ip数据报的长度,如果它超过网络的mtu(2.8节),那么就要对ip数据报进行分片,我们将讨论ip分片机制。
udp首部
端口号表示发送进程和接收进程。
tcp端口号与udp端口号是相互独立的,(rsh和syslog=514)
尽管相互独立,如果tcp和udp同时提供某种知名服务,两个协议通常选择相同的端口号,这纯属是为了使用方便,而不是协议本身的要求。(dns)
udp长度字段指的是udp首部和udp数据的字节长度,该字段的最小值为8字节。
udp校验和
udp检验和覆盖udp首部的udp数据。
ip首部的检验和,它只覆盖ip的首部
udp的检验和是可选的,而tcp的检验和是必须的。
ip计算检验和udp计算检验和之间存在不同的地方,首先udp数据报的长度可以为奇数字节,但是检验和算法是把若干个16bit字相加。解决方法是必要时在最后增加填充字节0,这只是为了检验和的计算(也尺说,可能增加的填充字节不被传送)
udp数据报和tcp段都包含一个12字节长的伪首部,它是为了计算检验和而设置的,伪首部包含ip首部一些字段,其目的是让udp两次检查数据是否已经正确到达目的地(例如,ip没有接受地址不是本主机的数据报,以及ip没有把应传给另一高度的数据报传给udp)
ip分片
ip把mtu与数据报长度进行比较。
如果需要则进行分片,分片可以发生在原始端主机上,也可以发生在中间路由器上。
把一份ip数据报分片以后,只有到达目的地才进行重新组装。(fr fragment)
组装由目的端的ip层来完成,其目的是使分片和重新组装过程对运输层(tcp和udp)是透明的。
已经分片过的数据报有可能会再次进行分片(可能不止一次)。
ip分片
当ip数据报被分片后,每一片都成为一个分组,具有主机的ip首部,并在选择路由时与其他分组独立,当数据报的这些片到达目的端时有可能失序,但是在ip首部中有足够的信息让接收端能正确组装这些数据报片。
尽管ip分片过程看起来是透明的,但有一点让人不想使用它;即使丢失一片数据也要重传整个数据报。
ip层本身没有超时重传的机制--由更高层来负责超时和重传(tcp有超时和重传机制但udp没有,一些udp应用程序本身也执行超时和重传),当来自tcp报文段的某一片丢失后,tcp在超时后会重发整个tcp报文端,该报文段对应于一份ip数据报,没有办法只重传数据报中的一个数据报片。
如果对数据报分片的是中间路由器,而不是起始端系统,那么起始端系统就无法知道数据是如何被分片的,就这个原因,经常要避免分片。
ip分片:注意事项
在分片时,除最后一片外,其他每一片中的数据部分(除Ip首部外的其余部分)必须是8字节的整数倍。
ip首部被服务制到各个片中,但是,端口号udp首部,只能在第1片中被发现。
需要解释几个术语:ip数据报是指ip层端到端的传输单元(在分片之前和重新组装之后),分组是指ip层和链路层之间传送的数据单元,一个分组可以是一个完整的ip数据报,也可以是ip数据报的一个分片。
icmp不可达差错(需要分片)
发生icmp不可达差错的另一种情况是,当路由器收到一份需要分片的数据报,而在ip首部又设置了分片(df)的标志比特,如果某个程序需要判断到达目的端的路途中最小mtu是多少-称作路径mtu发现机制(2.9节),那么这个差错就可以被该程序使用。如果路由器没有提供这种新的icmp差错报文格式,那么下一站的mtu就设为0。
全球互联网
在18次运行当中,只有其中2次发现的路径mtu小于1500.其中一个跨大西洋的链路mtu值为572(其近似值甚至在rfc1191中没有被列出),而路由器返回的是新格式的icmp差错报文,另外一条链路,在日本的两个路由器之间,不能处理1500字节的数据帧,并且路由器没有返回新格式的icmp差错报文,把mtu值设成1006则可以正常工作。
从这个实验可以得出结论,现在许多但不是所哟偶的广域网都卡可以处理512字节的分组,利用路径mtu发现机制,应用程序就可以充分利用更大的mtu来发送报文。
标签:udp,首部,ip,介绍,tcp,分片,数据 From: https://www.cnblogs.com/smoke520/p/18359989