tcp/ip详解卷1:协议 读书笔记 UDP:用户数据报

一、UDP特点

1)UDP是一个简单的面向数据报的传输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发的IP数据报,也就是说UDP数据报在IP层不会分成多分UDP数据报进行传输(但是当UDP数据报长度加IP部首大于了MTU,会导致IP分片,就是将UDP数据报形成的IP数据报进行分片,每片的大小小于MTU,然后到下一站目的地就将每片的IP数据报重组,形成原来的UDP数据报形成的IP数据报),而由于IP数据报格式中字长的限制,最大UDP数据报的长度为65507(65535-20-8)字节,但是具体这个最大UDP数据报长度还和其他原因有关,例如应用程序可能会受到其程序接口的限制,这个长度和应用程序可以读写的最大UDP数据报长度直接相关,另一个就是限制来源于TCP/IP的内核实现,可能存在一些具体的实现,使IP数据报长度小于65535字节。IP能够发送或者接受特定最大长度的数据报但这不意味着应用程序可以读取该最大长度的数据报,UDP编程接口允许应用程序指定每次返回的最大字节数,如果接收到的数据报大于应用程序所能处理的长度,该问题的答案取决于编程的接口和实现,例如1)有的对UDP数据报进行截断丢弃任何多余的数据;2)有的并不截断数据报,超出的部分数据在后面的读取返回,但不通知应用程序是从单个UDP数据报中多次读取得到的;3)还有返回一个标志表明可以获得同一个UDP包的更多数据,应用通过此标志读取数据报的其余部分。

说明:UDP是面向的数据报,我的理解就是一个数据包,每次用read方法(如果要是用的UDP协议传输)获得的是一个UDP数据报(包),也就是程序所使用的每个UDP端口号都与一个有限大小的输入队列相联系,来自不同的客户UDP数据报将在此缓冲区自动排队(以数据报为单位进行排队),接收到的UDP数据报以其接收顺序交个应用程序而不是以其他规则将数据报给应用程序;而TCP提供的是连续的字节流(以字节流为单位排队,TCP本身保证字节流的顺序是正确的),没有任何信息边界,TCP应用程序读操作时所要求的长度来传送数据,在这个接口下,不会发生数据丢失。也就是从逻辑上看UDP传输的是数据包,而TCP传输的字节流。

2)UDP不提供可靠性;1)UDP把应用程序传给IP层的数据发送出去,但是并不保证数据能到达目的地,有可能在中间传输过程中出错而被丢弃。2)即使数据报到达了目的地,目的地也不会告诉源发送端其已经收到数据报即当收到数据时,接收端没有任何确认。3)ICMP源站抑制差错,UDP没有端到端的流量控制,也就是当接收数据报的速度比处理速度快时,当缓存用完,导致接受的数据报丢失,可能会产生ICMP源站抑制差错,而UDP没有流量控制消除ICMP源站抑制错误。(有的支持在没有缓存时,发送ICMP源站抑制差错报告,这主要是从拥塞控制的角度考虑的,可以是上层协议去消除这种ICMP源站抑制差错,从而提高传输效率和可靠性。有的不支持发送ICMP源站抑制差错报告,因为它消耗带宽;不同的路由器支持的不同)4)UDP数据报到达目的地的顺序是不确定的,也就是说发出的UDP数据报的顺序是1号、2号、3号,但是可能接收到的顺序为2、1、3或者其他乱序或者也是1、2、3,就是顺序不确定。这是因为每个UDP数据报的路由是独立的,相互不影响,这和TCP是不同的。

3)物理网络层一般要限制每次发送数据帧的最大长度,任何时候IP层接收到一份要发送的IP数据报时,它要判断相抵哪个借口发送数据(选路),并查询该接口获得其MTU,IP层把MTU与数据报长度进行比较,如果大于MTU,则进行分片,分片可以发生在原始发送端主机,也可能发生在中间路由器。把一份IP数据报分片以后,等分片全部到达目的地才进行组装(他们要求在下一站就进行组装,而不是最终的目的地)。重新组装由下一站的IP层完成,其目的是使分片和重新组装过程对传输层(TCP  UDP)是透明的。当IP数据报被分片后,每一片都成为一个分组,具有自己的IP首部,并在选择路由时与其他分组独立,数据报的这些片到达目的端时有可能会失序(这也是UDP包失序的原因),但在IP首部中有足够的信息让接收端能正确组装这些数据报片。

4)IP分片过程

对于发送端发送的每份IP数据报来说,其标识字段包含一个唯一值,该值在数据报分片时被复制到每个片中,标志字段用其中一个比特来表示“不是最后一片”,除了最后一片外,其他每个组成数据报的片都要把该比特置1。片偏移字段指的是该片偏移原始数据报开始处的位置,当数据报被分片后,每个片的总长度值要改为该片的长度。标识字段中有一个比特乘坐“部分片”位,如果将这一比特置1,IP将不对数据报进行分片,需要进行分片但设置了不分片比特,主机把数据报丢弃并发送一个ICMP差错报文。

5)尽管IP分片过程看起来是透明的,但是有一点让人不想使用它:即使只丢失一片数据也要重传整个数据报。因为IP层本省没有超时和重传机制,这些机制由更高层来负责超时和重传(TCP有超时和重传机制,但UDP没有,所以说是不可靠的协议),当来自TCP报文段的某一片丢失后,TCP在超时后会重发整个TCP报文段,该报文段对应一份IP数据报。协议中是没有办法只重传数据报中的一个数据报片的,因为如果对数据报分片的是中间路由器,而不是起始端系统,那么端系统就无法知道数据报是如何被分片的。因为这个原因,经常要避免分片,以提高传输速率,但这有一点需要平衡的地方,要是一次发一个很大的UDP包,若传输成功了就省了在目的地重组UDP包的时间那么传输效率就提高了,若是在传输过程中因为一个IP分组丢失就得重传整个UDP数据报,而导致传输效率降低。如果将一个大于MTU的数据,分几个UDP包去传输,就不会因为丢失一个数据报而重传其他的数据报了,但是应用程序需要自己去将UDP包重组,因为UDP的数据报是相互独立路由的,有可能失序,也有可能丢包,所以在应用程序中需要实现重组UDP包和有超时重传机制。

6)ICMP不可达错误(需要分片)

当路由器收到一份需要分片的数据报,而在IP首部又设置了不分片标志比特,就会发生ICMP不可达差错(分片),通过这个差错数据报,我们可以计算路径MTU。(MTU只是在主机或路由器发送的时候的才使用的,在接收是不管数据帧的长度是多少,全部接收)

另一个发现路径MTU的方法是使用Traceroute。利用路径MTU发现机制,应用程序可以充分利用更大的MTU来发送报文。

7)UDP和ARP之间的交互作用

用程序发送一个包含8192字节的数据的UDP数据报。结果如下:在第一个ARP应答返回以前,总共产生了6个ARP请求,这是因为IP层很快的将UDP报产生了6个数据报分组,而每个数据报片都引发以ARP请求,在接收到第一个ARP应答请求后,主机只发送最后一个数据片,而前五个数据片全都丢弃了。所以在发送第一个大UDP包时最好发送两次,以应对这种错误。

8)UDP输入队列

通常程序锁使用的每个UDP接口都与一个有限大小的输入队列相联系,来自不同可会的UDP数据报将根据接受的顺序自动排队,接收到的UDP数据报以其接受顺序交给应用程序,而在排队溢出时,内核中的UDP模块丢弃UDP数据报的可能性存在。

应用程序并不知道其输入队列何时溢出,只是由内核对超出数据报进行丢弃处理,内核没有发回任何信息告诉源端其数据报别丢弃,这里不存在像ICMP源站抑制这样 发挥发送端的数据报。UDP的输出队列是FIFO即哪个数据报先进来的就先将谁交个应用程序,而ARP输入却是LIFO即当UDP过大分片时,产生多次ARP请求时,最后一个数据报的ARP是最后一个进入ARP请求队列的但是第一个发出去的,所以第一次就发送了最后UDP的最后一片的数据报。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TCP/IP详解 1:协议(原书第2版)PDF》是由美国计算机科学家 Douglas Comer 所著的一本关于 TCP/IP 协议的经典教材。该书详细介绍了 TCP/IP 协议栈的各个层级以及其应用和实际场景。 这本书主要分为两个部分:第一部分是对 TCP/IP 协议栈的介绍和分析,包括网络层、传输层、应用层等各个方面的内容。第二部分是对 TCP/IP 协议的应用和实践指导,包括网络管理、安全性、多媒体和网络编程等内容。 通过阅读这本书,读者可以深入了解 TCP/IP 协议栈的工作原理、网络通信的基本概念和技术细节。书中提供了大量的实践案例和代码示例,可以帮助读者理解和应用 TCP/IP 协议栈。 《TCP/IP详解 1:协议(原书第2版)PDF》是一本权威且经典的教材,被广泛用于计算机网络和通信领域的学习和研究。无论是网络工程师、系统管理员、还是对计算机网络感兴趣的人都可以从中获得深入的知识和实践经验。 该书在网络技术的发展历程中具有重要的地位和影响力,它不仅仅是一本理论教材,更是对 TCP/IP 协议的全面解析和实践指南。对于想要深入掌握和理解 TCP/IP 协议栈的人来说,这本书是一本必不可少的参考资料。 总而言之,《TCP/IP详解 1:协议(原书第2版)PDF》是一本经典且权威的 TCP/IP 协议教材,适合各个层次的读者阅读和学习。无论是初学者还是专业人士,都可以通过阅读这本书,深入理解和应用 TCP/IP 协议栈。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值