1.7.分用
当目的主机收到一个报文时,程序就开始一层层的解析,一层层地剥去各个首部,然后找到最终的应用程序,将真正的用户数据传给相对应的程序处理。具体如图1-5:
从这个架构图上观察,会发现ICMP与IGMP协议是在IP层上,貌似与TCP/UDP属于同一层,但实际上如上文所述,其实是属于IP协议的附属协议。ARP与RARP有同样的问题存在。这只能归结为一个问题,即分层协议设计的并不完美。
1.8.客户-服务器模型
绝大部分的应用程序所使用的网络模型都是客户服务器模型,客户通过向服务器发送请求,接着服务器应答客户请求的方式,来完成客户与服务器之间的交互。
这种交互模型实现又分为两类,重复型与并发型。
重复型通过以下步骤提供服务:
- 等待一个客户请求到来
- 处理客户请求
- 发送响应给客户请求
- 返回第一步继续等待客户请求
并发型通过以下步骤提供服务:
- 等待一个客户请求到来
- 生成一个新的进程/线程来处理到来的客户请求,处理结束后,终止相应进程。
- 返回第一步继续等待客户请求
并发服务器相比于重复型服务器的优势在于,多任务系统上时可以支持同时处理多个用户请求。
1.9.常见的tcp/udp服务
若想知道哪些服务是使用tcp/udp承载实现的,那么可以在linux系统下,运行grep tcp/udp /etc/services,正常情况下就会罗列出相应的服务,可以发现有些服务在tcp和udp上都有实现。
图1-6是我在linux系统下运行查询到的部分截图:
可以看到snmp协议也有承载在tcp协议上的实现,而上文曾提到snmp协议是属于udp协议上的实现,因此snmp协议在udp和tcp协议上都有实现,可通过grep snmp /etc/services命令验证,如图1-7:
可以发现二者的端口号不同。
1.10.应用编程接口
使用TCP/IP协议的应用程序通常采用两种网络编程接口,分别是socket和TLI。目前我们更常用的接口是socket接口。网络编程的socket接口,后续会另开章节补充。