扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
客户机/服务器模式
在网络上大部分的通信都是在客户机/服务器模式下进行的。例如telnet。当你使用telnet连接到远程主机的端口23时,主机上的一个叫做telnetd的程序就开始运行。它处理所有进入的telnet连接,为你设置登录提示符等。
应当注意的是客户机/服务器模式可以使用SOCK_STREAM、SOCK_DGRAM或者任何其他的方式。例如telnet /telnetd、ftp/ftpd和bootp/bootpd。每当你使用ftp时,远程计算机都在运行一个ftpd为你服务。
一般情况下,一台机器上只有一个服务器程序,它通过使用fork( )来处理多个客户端程序的请求。最基本的处理方法是:服务器等待连接,使用accept()接受连接,调用fork( )生成一个子进程处理连接。
UDP广播模式
广播的用途之一是假定服务器主机在本地子网上,但不知道它的单播IP地址时,对它进行定位,这就是资源发现(resource discovery)。另一用途是当有多个客户和单个服务器通信时,减少局域网上数据流量。下面是几个以此为目的使用广播的因特网应用实例。
★ARP(地址解析协议,address Resolution Protocol。ARP是IPv4的一个基本组成部分,而不是一个用户应用程序。ARP在本地子网上广播一个请求:“具有IP地址a.b.c.d的系统请表明自己,并告诉我,你的硬件地址。”
★BOOTP(引导协议,Bootstrap Protocol)。客户假定有一台服务器主机在本地子网上。它以广播地址(通常是255.255.255.255,因为这是客户还不知道自己的IP地址、子网掩码或子网的受限广播地址)为目的地址发出自己的引导请求。
★NTP(网络时间协议,Network Time Protocol)。一种常见的情形是:一个NTP客户主机可能配置程使用一个或多个服务器主机的IP地址,其上面的NTP客户于是以某个频率(每64秒一次或更长)轮询这些服务器。客户采用基于服务器返送的时刻和到达服务器的往返时间的精确算法更新时钟。但在支持广播的局域网上,就不需要采用客户轮询服务器的方法,而代之以服务器以每64秒一次的频率向本地子网上的所有客户广播当前时刻。这样便可以减少网络上的数据流量。
★路由后台进程。routed是最常用的后台进程。它输出自己的路由表的方法便是局域网广播。所有其他连接到这些局域网上的路由器便可以同时接收这些路由通告,而不用每个路由器都必须配置其邻居路由器的IP地址。这个特性也被局域网上的主机用于侦听路由通告并相应更新它的路由表(许多人认为这是一种“误用”)
如果用{netid,subnetid,hostoid}。({网络Id,子网Id,主机ID})表示IPv4地址,那么有四种类型的广播地址。我们用-1表示所有比特位均为1的字段。
1、子网广播地址:{netid,subnetid,-1}。这类地址编排指定子网上的所有接口。例如,如果我们对B类地址128.7采用8位子网ID,那么128.7.6.225将是128.7.6的子网上所有接口的子网广播地址。
路由器通常不转发这类广播(TCPv2)图18.2给出了一个连接到128.7.1和128.7.6两个子网的路由器。路由器在12.7..1子网上接收到一个目的地址为210.37.6.255(另一个接口的子网广播地址)的单播IP数据报。路由器通常不向128.7.6子网转发这个数据报。有些系统具有运行转发子网广播数据报的配置选项。
2、 全部子网广播地址:{netid,-1,-1}。这类广播地址编排指定网络上的所有子网。如果说这类地址层被用过的话,那么现在已很少见了。
3、 网络广播地址:{netid,-1}。这类地址用于不进行子网划分的网络。但不进行子网划分的网络现在几乎不存在了。
4、 受限广播地址:{-1,-1,-1}或255.255.255.255。路由器从不转发目的地址为255.255.255.255的IP数据报。
在这四类广播地址中,子网广播地址是今天最常见的。但有些老系统仍然发送目的地址为255.255.255.255的数据报。还有些老系统不理解子网广播地址,他们将仅发往255.255.255.255的数据报解释为广播。
在查看广播之前,我们应该已清楚向单播地址发送UDP数据报的步骤。图中网络的地址为192.168.0,其中8位用作子网ID,8位用作主机ID。左边主机的应用程序在一个UDP套接口上调用sendto函数,将数据报发往IP地址192.168.0.3、端口1234。UDP层附加一个UDP头部,并将UDP数据报传递到IP层。IP层给它附加一个IPv4头部,并确定其外出接口。在以太网的情况下,将调用ARP来确定与目的IP地址相应的以太网地址:08:00:22:03:ff:42。然后,将分组作为以太网帧发送出去。以太网帧的目的地址是上述48位地址。帧类型字段的值为0800,指示这是一个IPv4分组。IPv6帧类型字段的值为86dd。
中间主机的以太网接口看到该帧,并将它的目的以太网地址与自己的以太网地址(02:60:8c:2f:4e:13:)进行比较。由于二者不相等,接口便忽略该帧。因此,单播帧不会对这台主机造成任何额外开销。右边主机的以太网接口也看到该帧。当它将该帧的目的以太网地址与自己的以太网地址进行比较时,发现二者相等,接口便读入整个帧。由于帧类型字段只为0800,于是将分组放入IP输入队列。
当IP层处理该分组时,它首先将目的IP地址进行比较,由于目的地址是其中之一,于是就接受这个分组。
然后,IP层检查IPv4头部协议字段,其值对于UDP为17.于是将IP数据报传送到UDP层。
UDP层检查其目的端口(如果其UDP套接口已连接,也可能检查源端口),将数据报方到相应套接口的接收队列。如果需要,就唤醒进程,由进程读取这个新接收的数据报。
这个例子的关键点是单播IP数据报只能由目的IP地址指定的主机接收。子网上的其它主机不受任何影响。我们现在考虑一个类似的例子:同样的子网,但发送进程发送的是子网广播数据报,其地址为192.168.0.255。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者