- WinSock网络编程经络
- 张会勇
- 1234字
- 2020-08-28 19:07:24
2.4 架构
公司的组织结构中,从上到下分为不同的等级,每一级又分为不同的部门,它们之间相互协作,完成一项复杂的任务。TCP/IP与公司的组织结构非常类似,分为不同的层次,每一层又有不同的协议,分别完成不同的功能,它们通过上下层的接口,相互协作,完成整个网络通信中的数据传输。
图2.3描述了实现中常用的TCP/IP网络架构,只列出了一些最常用的协议。图中的应用层协议直接连接到了底层协议,这只是说明应用协议是使用这些协议提供的服务。TCP/IP协议的实现中,应用程序是调用socket接口使用底层协议,而不是直接与底层协议打交道。TCP/IP协议簇中,应用层协议是最多的,它们为用户提供丰富多彩的功能。应用层协议的数量没有限制,当有新的需要、而已有的应用协议无法满足要求时,可以不断地开发出新的应用层协议。用户或企业甚至可以定义自己内部的应用层协议,设计应用层协议,根据它的功能特点选择使用不同的底层协议。
TCP是面向连接的传输层协议,可以把它看作一个全双工的管道,里面是字节流,它按应用程序交给它的顺序依次发送数据,不区分数据的边界。虽然使用不可靠的IP协议,但它通过确认、超时重传来为应用层协议提供可靠的数据传输。另外,它还使用通告窗口和重传定时器来判断对方的处理能力和网络状况,为应用程序提供流量和拥塞控制。有了这些功能,应用程序就不再需要关心传输的细节,只需要处理它自己的数据格式,然后简单地发送和接收数据即可。使用TCP的应用层协议有:HTTP、FTP、POP3、Telnet等。
图2.3 TCP/IP网络架构
UDP是不可靠的,不能保证应用程序的数据可靠地到达目的地,它也是无连接的,不需要维护连接所带来的负担,只是把应用程序交给它的数据进行简单地封装,然后发送出去,因此数据传输速度较快。为了保证数据可靠到达,应用程序需要自己重传丢失的数据,如DNS、DHCP、TFTP等。它也适合对实时性要求高、但允许有数据丢失的应用,如:流媒体协议RTP、网络电话VoIP等。
IP是网络层的重要协议,TCP和UDP都使用IP传输数据。应用层协议也可以调用原始socket,直接访问IP层,这种程序比较少见,UNIX系统上的选路协议OSPF就是以这种方式实现的。另外,用户可以用原始socket实现自己的传输层协议,但UDP和TCP不能以这种方式实现,它们是由TCP/IP的内核直接处理的。
ICMP是IP协议的一部分,用于发送主机与其他主机或路由器交换错误或诊断报文,主要由IP使用,但应用程序也可以访问它。如最流行的网络诊断工具Ping和Traceroute都使用ICMP。
TCP/IP协议簇包括数百种协议,每个协议都有不同的RFC描述,在众多的TCP/IP协议中,传输层的TCP、UDP,网络层的IP,这几个协议负责完成协议簇最基本功能,是每一个TCP/IP中必须实现的,属于TCP/IP的核心协议。大部分应用程序都使用TCP、UDP提供的服务,一小部分应用程序也会直接使用IP或ICMP协议。
从上面可以看到,应用层不但可以访问传输层,也可以访问网络层。OSI参考模型中每一次只能使用与它相邻的下一层服务,与OSI模型相比,TCP/IP协议违反了分层原则,但却提供了灵活的可扩展性。普通用户只需要使用TCP/IP的基本服务,对于一些特殊的应用,可以直接访问IP层,如实现自己的传输层协议等,而不需要修改内核的实现。