1.1 概述
1.1.2 OSI模型和TCP/IP四层结构
在计算机网络发展的早期,为了使不同体系结构的计算机网络都能互连,国际标准化组织 ISO 于 1977 年成立了专门机构研究该问题,并提出一个试图使各种 计算机在世界范围内互联成网的标准框架,即著名的开放系统互连基本参考模型 OSI/RM Open Systems Interconnection Reference Model ),简称为 OSI 。 OSI 参考模型中采用了七个层次的体系结构,这七个层次从上到下依次是应用层、表示层、会话层、运输层、网络层、数据链路层和物理层。但是由于 OSI 的七层体系结构既复杂又不实用,所以得到最广泛应用的不是国际标准OSI ,而是非国际标准的 TCP/IP 。 如图1-3所示, 同时给出了 OSI 模型和 TCP/IP 模型。
TCP/IP 模型中将OSI 模型中最下两层合并为一层,称为网络接口层,它是随系统提供的设备驱动程序和网络硬件。除了需要知道数据链路的某些特性如1500 字节的以太网外,不需要关心这两层。网际层负责相邻互联网上的不同主机之间的通信,主要包括IPv4、ICMP、RIP、IGMP 等协议。传输层负责主机中两个进程之间的通信,主要包括TCP、UDP 两种协议。TCP/IP 模型将OSI 模型的上三层合并成一层即应用层,应用层直接为用户的应用进程提供服务,应用层是Web 客户(浏览器),Telnet 客户、FTP 服务器等其他应用进程所在的层。在随后学到的套接字编程就是应用层到传输层的接口,如图1-4 所示。
由于应用层处理应用程序,如FTP、Telnet 或HTTP 的细节,但不了解通信细节,下三层处理所有的通信细节,如发送数据、等待、确认,给无序到达的数据排序等,但不了解应用程序。而且应用层通常形成用户进程,下三层通常作为操作系统内核的一部分。所以Linux与其他现代操作系统都提供分隔用户进程与内核的机制,因此应用层和传输层之间的接口自然成了应用程序编程接口,也就是常说的API。
1.2 IP 协议介绍
网际层IP(Internet Protocol)协议是TCP/IP 体系中的核心协议,它提供无连接的传输服务,不能保证数据包的可靠传输。
1.3 TCP协议
TCP(传输控制协议)是 TCP/IP 体系中面向连接的运输层协议,它可以保证数据可靠的传输。
1.3.1 TCP连接建立与终止
TCP 是面向连接的协议。TCP 连接的建立和释放是每一次通信中必不可少的过程。
TCP连接建立
TCP连接的建立需要经过三次数据传输。通常将这个过程称之为三次握手。
(1)首先服务器必须已经准备好接收客户的连接请求,这通过调用socket、bind、和listen函数来完成。客户通过调用connect 函数进行主动打开,这引起客户端发送一个SYN 分解到服务器端。
(2)服务器收到客户端发来的SYN 分节后,必须发送ACK 对其确认,同时发送一个自己的SYN 分节给客户端,表示接受客户端建立连接的请求。
(3)客户端发送ACK 确认服务器的SYN,连接建立成功。
TCP连接终止
当数据传输完毕后,TCP 需要发送四个分节终止该连接。
(1)客户端应用进程首先调用close,调用close 的结果就是发送一个FIN 分节主动关闭连接。
(2)服务器收到FIN 后执行被动关闭,发送ACK 对客户端的FIN 分节确认。
(3)当服务器将待发的数据发送完后,调用close 关闭它的套接字,这导致它的TCP 发送一个FIN 分节给客户端。
(4)接受到服务器的FIN 分节后,对其发送一个ACK 确认分节,当前的连接被彻底关闭。
1.4 UDP协议
用户数据包协议UDP 是面向无连接的服务,提供不可靠的数据传输。一个UDP 客户端可以只创建一个套接字向不同客户端发送数据报。同样,一个UDP 服务器也可以用同一个套接字向若干个不同客户端连续发送数据报。虽然UDP 提供不可靠的数据传输,但在许多方面还必须使用UDP 协议,如:名字转换DNS,远程文件服务器NFS 等服务都使用UDP 协议传输数据。