《UNIX网络编程 卷1:套接字联网API(第3版)》——2.3 用户数据报协议(UDP)

2.3 用户数据报协议(UDP)

UDP是一个简单的传输层协议,在RFC 768[Postel 1980]中有详细说明。应用进程往一个UDP套接字写入一个消息,该消息随后被封装(encapsulating)到一个UDP数据报,该UDP数据报进而又被封装到一个IP数据报,然后发送到目的地。UDP不保证UDP数据报会到达其最终目的地,不保证各个数据报的先后顺序跨网络后保持不变,也不保证每个数据报只到达一次。

我们使用UDP进行网络编程所遇到的问题是它缺乏可靠性。如果一个数据报到达了其最终目的地,但是校验和检测发现有错误,或者该数据报在网络传输途中被丢弃了,它就无法被投递给UDP套接字,也不会被源端自动重传。如果想要确保一个数据报到达其目的地,可以往应用程序中添置一大堆的特性:来自对端的确认、本端的超时与重传等。

每个UDP数据报都有一个长度。如果一个数据报正确地到达其目的地,那么该数据报的长度将随数据一道传递给接收端应用进程。我们已经提到过TCP是一个字节流(byte-stream)协议,没有任何记录边界(见1.2节),这一点不同于UDP。

我们也说UDP提供无连接的(connectionless)服务,因为UDP客户与服务器之间不必存在任何长期的关系。举例来说,一个UDP客户可以创建一个套接字并发送一个数据报给一个给定的服务器,然后立即用同一个套接字发送另一个数据报给另一个服务器。同样地,一个UDP服务器可以用同一个UDP套接字从若干个不同的客户接收数据报,每个客户一个数据报。

时间: 2024-11-13 06:34:06

《UNIX网络编程 卷1:套接字联网API(第3版)》——2.3 用户数据报协议(UDP)的相关文章

UNIX网络编程:通用套接字选项

1. SO_BROADCAST 套接字选项 本选项开启或禁止进程发送广播消息的能力.只有数据报套接字支持广播,并且还必须是在支持广播消息的网络上(例如以太网,令牌环网等).我们不可能在点对点链路上进行广播,也不可能在基于连接的传输协议(例如TCP和SCTP)之上进行广播. 2. SO_DEBUG 套接字选项 本选项仅由TCP支持.当给一个TCP套接字开启本选项时,内核将为TCP在该套接字发送和接受的所有分组保留详细跟踪信息.这些信息保存在内核的某个环形缓冲区中,并可使用trpt程序进行检查. 3

socket-unix网络编程环境怎么配置?我买了套接字联网api和tcp/ip详解,但是书上的代码都不能运行.

问题描述 unix网络编程环境怎么配置?我买了套接字联网api和tcp/ip详解,但是书上的代码都不能运行. 就下面这个代码,运行提示没有unp.h,找了个unp.h,但是还是提示什么各种数据类型重复定义.我到现在觉得是不是这本书写错了. #include "unp.h" int main(int argc, char **argv) { int sockfd, n; char recvline[MAXLINE + 1]; struct sockaddr_in servaddr; if

《UNIX网络编程 卷1:套接字联网API(第3版)》——导读

**前言**本书面向的读者是那些希望自己编写的程序能使用称为套接字(socket)的API进行彼此通信的人.有些读者可能已经非常熟悉套接字了,因为这个模型几乎已经成了网络编程的同义词,但有些读者可能仍需要从头开始学习.本书想达到的目标是向大家提供网络编程指导.这些内容不仅适用于专业人士,也适用于初学者:不仅适用于维护已有代码,也适用于开发新的网络应用程序:此外,还适用于那些只是想了解一下自己系统中网络组件的工作原理的人. 书中的所有示例都是在Unix系统上测试通过的真实的.可运行的代码.但是,考

《UNIX网络编程 卷1:套接字联网API(第3版)》——1.8 BSD网络支持历史

1.8 BSD网络支持历史 套接字API起源于1983年发行的4.2BSD操作系统.图1-15展示了各种BSD发行版本的发展史,并注明了TCP/IP的主要发展历程.1990年面世的4.3BSD Reno发行版本随着OSI协议进入BSD内核而对套接字API做了少量的改动. 图1-15中从4.2BSD往下到4.4BSD的通路展示了源自Berkeley计算机系统研究组(Computer Systems Research Group,CSRG)的各个版本,它们要求获取者已拥有Unix的源代码许可权.然而

《UNIX网络编程 卷1:套接字联网API(第3版)》——2.2 总图

2.2 总图 虽然协议族被称为"TCP/IP",但除了TCP和IP这两个主要协议外,还有许多其他成员.图2-1展示了这些协议的概况. 图2-1中同时展示了IPv4和IPv6.从右向左查看该图,最右边的5个网络应用在使用IPv6:我们将在第3章中随sockaddr_in6结构讲解AF_INET6常值.随后的6个网络应用使用IPv4. 最左边名为tcpdump的网络应用或者使用BSD分组过滤器(BSD packet filter,BPF),或者使用数据链路提供者接口(datalink pr

《UNIX网络编程 卷1:套接字联网API(第3版)》——8.11 UDP的connect函数

8.11 UDP的connect函数 在8.9节结尾我们提到,除非套接字已连接,否则异步错误是不会返回到UDP套接字的.我们确实可以给UDP套接字调用connect(4.3节),然而这样做的结果却与TCP连接大相径庭:没有三路握手过程.内核只是检查是否存在立即可知的错误(例如一个显然不可达的目的地),记录对端的IP地址和端口号(取自传递给connect的套接字地址结构),然后立即返回到调用进程. 给connect函数重载(overload)UDP套接字的这种能力容易让人混淆.如果使用约定,令so

《UNIX网络编程 卷1:套接字联网API(第3版)》——8.12 dg_cli函数(修订版)

8.12 dg_cli函数(修订版) 现在我们回到图8-8中的dg_cli函数,把它重写成调用connect.图8-17所示为新的函数. 所做的修改是调用connect,并以read和write调用代替sendto和recvfrom调用.该函数不查看传递给connect的套接字地址结构的内容,因此它仍然是协议无关的.图8-7中的客户程序main函数保持不变. 在主机macosx上运行该程序,并指定主机freebsd4的IP地址(它没有在端口9877上运行相应的服务器程序),我们得到如下输出: m

《UNIX网络编程 卷1:套接字联网API(第3版)》——2.11 缓冲区大小及限制

2.11 缓冲区大小及限制 下面我们将介绍一些影响IP数据报大小的限制.我们首先介绍这些限制,然后就它们如何影响应用进程能够传送的数据进行综合分析. IPv4数据报的最大大小是65 535字节,包括IPv4首部.这是因为如图A-1所示其总长度字段占据16位.IPv6数据报的最大大小是65 575字节,包括40字节的IPv6首部.这是因为如图A-2所示其净荷长度字段占据16位.注意,IPv6的净荷长度字段不包括IPv6首部,而IPv4的总长度字段包括IPv4首部.IPv6有一个特大净荷(jumbo

《UNIX网络编程 卷1:套接字联网API(第3版)》——第1章 简介 1.1概述

第一部分 简介和TCP/IP 第1章 简介 1.1 概述 要编写通过计算机网络通信的程序,首先要确定这些程序相互通信所用的协议(protocol).在深入设计一个协议的细节之前,应该从高层次决断通信由哪个程序发起以及响应在何时产生.举例来说,一般认为Web服务器程序是一个长时间运行的程序(即所谓的守护程序,daemon),它只在响应来自网络的请求时才发送网络消息.协议的另一端是Web客户程序,如某种浏览器,与服务器进程的通信总是由客户进程发起.大多数网络应用就是按照划分成客户(client)和服