C++ 黑客编程揭秘与防范(第3版)
上QQ阅读APP看书,第一时间看更新

2.1.1 网络基础知识

各计算机之间通过互联网进行通信主要依赖TCP/IP。该协议是一个4层协议,由上至下分别是应用层、传输层、网际层和链路层。TCP/IP的下层协议总是为上层协议服务,下层协议的细节对于上层协议来说是透明的。分层设计的好处是,每一层的功能比较明确,而且修改某一层的实现不会影响其他层。TCP/IP在每层协议中都定义了非常多的不同的协议,比如网际层的协议ICMP、IGMP等,传输层的TCP、UDP等。在众多协议中,最具代表性的协议是TCP和IP,因此,互联网协议被称为TCP/IP族(千万别认为TCP和IP就是互联网协议的全部)。

:有的书认为TCP/IP是5层协议,有的书认为TCP/IP是4层协议。如果认为TCP/IP协议是5层协议,那么在链路层的下层会有一个物理层,而4层协议中将物理层归入了链路层。至于到底是4层还是5层,其实不必过于纠结,只要做到心中有数即可。

IP协议是“Internet Protocol”的简称,它是为计算机网络相互连接进行通信而设计的协议。在IP协议中最重要的就是IP地址,IP地址是用来在网络上唯一标识计算机主机的地址。互联网中没有两个机器有相同的IP地址,因此它是用来标识一台网络主机的。所有的IP地址都是32位长,它用点分十进制法来表示,比如“10.10.30.12”。IP地址指定的不是主机,而是网络接口设备。因此,一台主机有两个网络接口,那么就会有两个IP地址。通常情况下,对于一台普通主机只有一个网络接口设备,也就只有一个IP地址,比如个人使用的PC通常只有一个IP地址;而对于服务器或者网络设备(交换机、路由器等)来说,则会有多个网络接口设备,每个网络接口设备都会有一个IP地址,那么对于路由器这种网络设备来说就会有多个IP地址。

IP地址被分为5类,分别是A类、B类、C类、D类和E类。各类IP地址的范围如表2-1所示。

表2-1 各类IP地址的范围

IP工作在TCP/IP 4层协议的“网际层”,网际层最主要的工作是将数据包进行路由。这里所说IP是一种被路由协议,也就是在进行路由的过程中,IP协议会被路由协议用到。真正进行数据包选路的协议(其实就是路由的算法,数据包如何进行转发的算法)被称为路由协议,具体的路由协议有RIP、OSPF、BGP等。对于入门而言,只要了解了IP地址是什么,IP地址的作用是什么即可。

传输层主要有两大协议,分别是TCP协议和UDP协议。

TCP是“Transmission Control Protocol”的简称,其意思为传输控制协议。TCP是一种面向连接的、可靠的通信协议。TCP协议是IP协议的上层协议,IP服务于TCP。

UDP是“User Datagram Protocol”的简称,其意思为用户数据报协议。UDP是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

传输层是为应用层提供服务的,应用层的协议一部分是基于TCP的,比如FTP、HTTP,而一部分是基于UDP的,比如DNS。IP层提供了IP地址用来标识网络主机,而传输层提供了端口用来标识主机中的进程。确定了IP地址和端口号,就确定了网络上的主机及主机上通信的进程。

传输层提供了标识通信进程的端口号。按照协议划分,端口分为TCP端口和UDP端口,TCP端口和UDP端口各有65536个。对于应用程序而言,一般使用大于1024的端口号,因为小于1024的端口号属于保留端口。Internet上的很多服务都是用了小于1024的端口号。为了避免冲突,程序员自己编写的应用程序不要使用小于1024的端口号。同一协议的端口不能冲突,比如Web服务器占用了主机TCP的80端口,那么另外的程序就不可以再使用TCP的80端口。常用的端口号如表2-2所示。

表2-2 常用端口号举例

除了小于1024的端口号外,还有一些比较知名的端口号,比如MS SQL Server的端口号是1433,Windows的远程桌面端口号是3389等。程序员在编写自己的网络应用程序时,要避免与这些常用的端口冲突。