图1-5 数据进入协议栈时的封装过程
2.7 分用
当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议。这个过程称作分用(De multiplexing),图1-6显示了该过程是如何发生的。
图1-6 以太网数据帧的分用过程
为ICMP协议和IGMP协议定位一直是一件很棘手的事情。在图1-3中,把协议ICMP协议和IGMP协议与I P协议放在同一层上,那是因为事实上它们是IP的附属协议。但是在这里,我们又把它们放在IP层的上面,这是因为ICMP协议和IGMP协议报文都被封装在IP协议数据报中。而对于ARP协议和RARP协议,理论上也遇到类似的难题。在这里把它们放在以太网设备驱动程序的上方,这是因为它们和IP协议数据报一样,都有各自的以太网数据帧类型。这些分层协议盒并不都是完美的。当进一步描述TCP协议的细节时,将看到协议确实是通过目的端口号、源I P地址和源端口号进行解包的。
2.8客户-服务器模型
大部分网络应用程序在编写时都假设一端是客户,另一端是服务器,其目的是为了让服 务器为客户提供一些特定的服务。可以将这种服务分为两种类型:重复型或并发型。重复型服务器通过以下步骤进行交互:
1 等待一个客户请求的到来。
2 处理客户请求。
3 发送响应给发送请求的客户。
4 返回第1步。
重复型服务器主要的问题发生在第二2状态。在这个时候,重复型服务器不能为其他客户机提供服务。相应地,并发型服务器采用以下步骤:
C1 等待一个客户请求的到来。
C2 启动一个新的服务器来处理这个客户的请求。
在这期间可能生成一个新的进程、任务或线程,并依赖底层操作系统的支持。这个步骤如何进行取决于操作系统。生成的新服务器对客户的全部请求进行处理。处理结束后,终止这个新服务器。
C3 返回C1步。
并发服务器的优点在于它是利用生成其他服务器的方法来处理客户的请求。也就是说,每个客户都有它自己对应的服务器。如果操作系统允许多任务,那么就可以同时为多个客户服务。对服务器,而不是对客户进行分类的原因是因为对于一个客户来说,它通常并不能够辨别自己是与一个重复型服务器或并发型服务器进行对话。一般来说,TCP服务器是并发的,而UDP服务器是重复的,但也存在一些例外 嵌入式系统中TCP/IP协议的研究(5):http://www.751com.cn/tongxin/lunwen_6273.html