《分布式系统:概念与设计》一3.4.6 TCP和UDP

简介: 本节书摘来华章计算机《分布式系统:概念与设计》一书中的第3章 ,第3.4节,(英) George Coulouris Jean DollimoreTim Kindberg Gordon Blair 著 金蓓弘 马应龙 等译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.4.6 TCP和UDP

TCP和UDP以一种对应用程序有用的形式提供了互联网的通信能力。应用开发者可能需要其他类型的传输服务,如提供实时保证或安全性,但这些服务需要比IPv4更多的网络层支持。TCP和UDP忠实地反映了IPv4提供的应用编程级的通信设施。IPv6必然会继续支持TCP和UDP,但它包含了通过TCP和UDP无法方便访问的功能。当IPv6的部署已足够广,从而证明了那些功能的开发是必要的,那么可引入其他类型的传输服务来挖掘这些功能。
第4章从分布式程序开发者的角度描述了TCP和UDP的特征。这里我们仅描述它们给IP加入的功能。
端口的使用 第一个要注意的特征是,尽管IP协议支持两台计算机(由IP地址标识)之间的通信,但作为传输层的协议,TCP和UDP必须提供进程间的通信。这通过使用端口来完成。端口号用于将消息寻址到特定计算机上的进程,它仅在此计算机上有效。端口号是一个16位整数。一旦一个IP数据包被发送到目的主机,TCP或UDP层的软件就通过该主机的特定端口将它分派到一个进程中。
UDP的特点 UDP基本上是IP在传输层的一个复制。UDP数据报被封装在一个IP数据包中,它具有一个包含了源端口号和目的端口号的短的头部122(相应的主机地址位于IP头部)、一个长度域和一个校验和。UDP不提供传输保证。我们已经注意到,IP数据包可能会由于拥塞或网络错误被丢弃。除了可选的校验和外,UDP未增加任何额外的可靠性机制。如果校验和域非零,则接收主机根据数据包内容计算出一个校验值,与接收到的校验和相比,若两者不匹配则数据包被丢弃。
因此,依赖IP传输,UDP提供了一种在IP上附加最小开销或传输延迟、在进程对(或者在数据报地址是IP组播地址情况下,从一个进程发送到多个进程)之间传送最长达64KB的消息的方法。它不需要任何创建开销以及管理用的确认消息,但它只适应于不需要可靠传送单个或多个消息的服务和应用。
TCP的特点 TCP提供了一个更复杂的传输服务。它通过基于流的编程抽象,提供了任意长度字节串的可靠传输。可靠性保证使得发送进程递交给TCP软件的数据传送到接收进程时,其顺序是相同的。TCP是面向连接的,在数据被传送前,发送进程和接收进程必须合作,建立一个双向的通信通道。连接只是一个执行可靠数据传输的端到端的协议,中间结点(如路由器)并没有关于TCP连接的知识,一个TCP传输中传输数据的所有IP数据包并不一定使用相同的路由。
TCP层包含额外机制(在IP之上实现)以保证可靠性。这些机制包括:
排序:TCP发送进程将流分割成数据片断序列,然后将之作为IP数据包传送。每个TCP片断均有一个序号。它在该片断的第一个字节给出流中的字节数。接收程序在将数据放入接收进程的输入流前,使用序号对收到的片断排序。只有所有编号较小的片断都已收到并且放入流中后,编号大的片断才能被放入流中,因此,未按顺序到达的片断必须保存在一个缓冲区中,直到它前面的片断到达为止。
流控制:发送方管理不能使接收方或者中间结点过载,这通过片断确认机制完成。当接收方成功地接收了一个片断后,它会记录该片断的序号。接收方会不时地向发送方发送确认信息,给出输入流中片断的最大序号以及窗口大小。如果有反向的数据流,则确认信息被包含在正常的片断中,否则被放在确认数据片中。确认片断中的窗口大小域指定了在下一个确认之前允许发送方传送的数据量。
当一个TCP连接用于与一个远程交互程序通信时,会猝发产生数据,但产生的数据量可能很小。例如,利用键盘输入可能每秒仅输入几个字符,123但字符的显示必须足够快,以便用户看到自己的打字结果。这通过在本地缓冲区中设置一个超时值T(一般是0.5s)来实现。使用这个简单的方案,只要数据片断已在输出缓冲区中停留T秒,或是缓冲区的内容到达MTU限制,就将片断发送到接收方。该缓冲区方案不会使交互式延迟再增加T秒以上。Nagle描述了另一个产生较少流量的算法,它对一些交互式应用更有效[Nagle 1984]。Nagle的算法已用于许多TCP实现中。大多数TCP实现是可以配置的,允许应用程序修改T值,或是在几个缓冲区算法中选择其一。
由于无线网络的不可靠性,会导致数据包丢失频繁发生,上面的流控制机制对于无线通信不是特别适用。这是广域移动通信使用的WAP协议族采纳另一种传输机制的原因。但对无线网络而言,实现TCP也是很重要的,为此提出了TCP机制的修改提议[Balakrishnan et al.1995,1996]。其思想是在无线基站(有线网络和无线网络之间的网关)实现一个TCP支持组件。该组件探听进出无线网络的TCP片断,重传任何未被移动接收方快速确认的外发片断,并且在注意到序列号有间隔时,请求重传接收数据。
重传:发送方记录它发送的片断的序号。当它接收到一个确认消息时,它知道片断被成功接收,并将之从外发缓冲区中清除。如果在一个指定超时时间内,片断并没有得到确认,则发送方重发该片断。
缓冲:接收方的接收缓冲区用于平衡发送方和接收方之间的流量。如果接收进程发出receive操作的速度比发送进程发出send操作的速度慢很多,那么缓冲区中的数据量就会增加。通常情况下,数据在缓冲区满之前被取出,但最终缓冲区会溢出,此时到达的片断不被记录就直接被丢弃了。因此,接收方不会给出相应的确认,而发送方将被迫重新发送片断。
校验和:每个片断包含一个对头部和片断中数据的校验和,如果接收到的片断和校验和不匹配,则片断被丢弃。

相关文章
|
1月前
|
网络协议 算法 网络性能优化
|
18天前
|
网络协议 SEO
TCP连接管理与UDP协议IP协议与ethernet协议
TCP、UDP、IP和Ethernet协议是网络通信的基石,各自负责不同的功能和层次。TCP通过三次握手和四次挥手实现可靠的连接管理,适用于需要数据完整性的场景;UDP提供不可靠的传输服务,适用于低延迟要求的实时通信;IP协议负责数据包的寻址和路由,是网络层的重要协议;Ethernet协议定义了局域网的数据帧传输方式,广泛应用于局域网设备之间的通信。理解这些协议的工作原理和应用场景,有助于设计和维护高效可靠的网络系统。
27 4
|
24天前
|
缓存 负载均衡 网络协议
面试:TCP、UDP如何解决丢包问题
TCP、UDP如何解决丢包问题。TCP:基于数据块传输/数据分片、对失序数据包重新排序以及去重、流量控制(滑动窗口)、拥塞控制、自主重传ARQ;UDP:程序执行后马上开始监听、控制报文大小、每个分割块的长度小于MTU
|
2月前
|
网络协议 前端开发 物联网
TCP和UDP区别?
本文首发于微信公众号“前端徐徐”,详细介绍了TCP和UDP两种传输层协议的核心概念、连接性和握手过程、数据传输和可靠性、延迟和效率、应用场景及头部开销。TCP面向连接、可靠、有序,适用于网页浏览、文件传输等;UDP无连接、低延迟、高效,适用于实时音视频传输、在线游戏等。
49 1
TCP和UDP区别?
|
2月前
|
Web App开发 缓存 网络协议
不为人知的网络编程(十八):UDP比TCP高效?还真不一定!
熟悉网络编程的(尤其搞实时音视频聊天技术的)同学们都有个约定俗成的主观论调,一提起UDP和TCP,马上想到的是UDP没有TCP可靠,但UDP肯定比TCP高效。说到UDP比TCP高效,理由是什么呢?事实真是这样吗?跟着本文咱们一探究竟!
53 10
|
2月前
|
网络协议 网络性能优化 C#
C# 一分钟浅谈:UDP 与 TCP 协议区别
【10月更文挑战第8天】在网络编程中,传输层协议的选择对应用程序的性能和可靠性至关重要。本文介绍了 TCP 和 UDP 两种常用协议的基础概念、区别及应用场景,并通过 C# 代码示例详细说明了如何处理常见的问题和易错点。TCP 适用于需要可靠传输和顺序保证的场景,而 UDP 适用于对延迟敏感且可以容忍一定数据丢失的实时应用。
39 1
|
2月前
|
网络协议 Linux 网络性能优化
Linux C/C++之TCP / UDP通信
这篇文章详细介绍了Linux下C/C++语言实现TCP和UDP通信的方法,包括网络基础、通信模型、编程示例以及TCP和UDP的优缺点比较。
38 0
Linux C/C++之TCP / UDP通信
|
2月前
|
网络协议 算法 数据格式
【TCP/IP】UDP协议数据格式和报文格式
【TCP/IP】UDP协议数据格式和报文格式
134 3
|
2月前
|
存储 网络协议 Java
【网络】UDP和TCP之间的差别和回显服务器
【网络】UDP和TCP之间的差别和回显服务器
67 1
|
2月前
|
网络协议 网络性能优化
详解TCP/IP协议以及UDP
详解TCP/IP协议以及UDP
58 0
下一篇
无影云桌面