TCP协议和UDP协议
本章从网络程序设计角度提供足够的细节以理解如何使用TCP协议和UDP协议。同时提供这些协议的实际设计、详细实现和相关的考前须知。
本章的焦点是计算机网络传输层效劳,即面向连接效劳和面向无连接效劳
TCP协议和UDP协议
本章从网络程序设计角度提供足够的细节以理解如何使用TCP协议和UDP协议。同时提供这些协议的实际设计、详细实现和相关的考前须知。
本章的焦点是计算机网络传输层效劳,即面向连接效劳和面向无连接效劳,它们所使用的相关协议分别是TCP协议和UDP协议。目前绝大多数的客户效劳器应用程序都使用TCP协议或UDP协议。这两个协议使用网络层协议IP:IPv4或IPv6。尽管应用程序能够绕过传输层直截了当使用IPv4或IPv6,但这种方法(称为原始套接口)使用较少。
UDP是一个简单的传输层协议,应用程序写一个数据报到UDP套接口,由它封装成IPv4或IPv6数据报,然后发送到目的地址。但是,UDP并不能保证UDP数据报最终能够到达目的地。使用UDP进展程序设计所遇到的咨询题是缺乏可靠性。假如要确保一个数据报能够到达目的地,必须在应用程序中建立相应的特性,主要包括:来自另一端确实认、超时、重传等等。
每个UDP数据报都有一定的长度,能够把一个数据报看作一个记录。假如数据报最终正确地到达目的地(即分组到达目的地且校验和正确),那么该数据报的长度将传递给接收方的应用进程。而TCP是一个字节流协议,无记录边界。
向应用程序提供的TCP效劳与UDP效劳不同。首先,TCP提供客户与效劳器的连接;其次,TCP提供可靠性;第三,TCP通过给所发送数据的每一个字节关联一个序列号进展排序;第四,TCP提供流量操纵。
总之,UDP协议是一种简单的、不可靠的数据报协议,而TCP协议是一种复杂的、可靠的字节流协议。只有正确理解这两个协议提供应应用程序的效劳,才能清晰这些协议能够处理什么,应用程序又需要处理什么。
只有深化理解TCP协议和UDP协议的某些特征,才能更容易编写强健的、高效的客户效劳器程序。
:用户数据报协议
UDP是一个简单的面向数据报的传输层协议:进程的每个输出操作刚好产生一个UDP数据报,该数据报导致一个IP数据报的发送。
图2-1显示了作为IP数据报的UDP数据报的封装。
IP数据报
UDP数据报
IP报头
UDP报头
UDP数据
20字节8字节
图2-1UDP封装
RFC768[Postel1980]是UDP的官方描绘。
UDP不提供可靠性:它发送应用程序数据到IP层的数据报,但不保证这些数据报到达其目的地。鉴于这种不可靠性,我们或许认为应
防止UDP而总使用一个可靠的协议。应用程序应留意所产生IP数据报的大小。假设超出网络的MTU,该IP报会被分段。这适用于数据报从源到目的所跨越的每个网络,不只是适用于发送主机的第一个网络。
图2-2列出了UDP报头的各个域。
0151631
16位目的端口号
16位源端口号
8字节
16位UDP检查和
16位UDP长度
数据
(假如有)
图2-2UDP报头
端口号标识出发送进程和接收进程。由于IP已将到来的IP数据报分解复用为TCP和UDP,这意味着TCP端口号由TCP查看,UDP端口号由UDP查看。TCP端口号与UCP端口号无关。尽管二者无关,但假设一个众所周和的效劳TCP和UDP都提供,端口号通常取同一个值。
UDP长度域是以字节为单位的UDP数据和UDP报头之长,其最小值为8。该UDP长度是冗余的,IP报含有其总长度,故UDP报长为该总长度减去IP报头长度。
UDP校验和覆盖UDP和UDP数据。而IP报头中的校验和仅覆盖该IP报头,它不涉及IP数据报中的任何数据。UDP和TCP均在其报头中有覆盖其报头和数据的校验和。对UDP而言,校验和是可选的,而TCP则是必需的。
首先,UDP数据报的长度能够是奇数个字节,而校验和算法是加16位字。处理方法是在尾部追加0的填充字节,而这填充字节仅为计算校验和所需。
另外,UDP和TCP均在UDP报中包含一个12字节的伪报头以计算校验和。该伪报头包含IP报头的某些域,目的是让UDP检测数据确已到达正确的目的端。
假如发送者确实计罢了校验和同时接收者检测出校验和错误,则该UDP数据报会被简单地扔弃,不产生错误信息。
UDP校验和是端对端校验和。它由发送者计算,然后由接收者验证。这用于捕捉在发送者与接收者之间任何地点的UDP报头或数据所发生的任何改动。
尽管UCP校验和是可选的,但他们应该总是能打开的。尽管这在单一的LAN上可能是可接受的,由于在数
TCP协议和UDP协议 来自淘豆网m.daumloan.com转载请标明出处.