首页 > Python网络编程 阅读数:2

网络编程基础知识详解

网络系统(network system)是使用国际标准化组织(Open Systems Interconnection/International Standards Organization,OSI/ISO)制定的开放系统互连七层模型(seven-layer model)定义的。这七层模型代表七层的网络进程:物理层、数据链路层、网络层、传输层、会话层、表示层及应用层。

现在的网络协议(包括TCP/IP)实际上都使用较少的层数,而不是 OSI 定义的完整层数。

1. OSI七层模型

OSI 定义的七层网络模型如下:

1) 物理层(Physical layer):定义在实物上,如电缆上传输数据时所需的信息。

2) 数据链路层(Data link layer):定义数据如何在实物上传进/传出,点对点的错误更正通常是在此层进行。

3) 网络层(Network layer):设置唯一的地址给网络上的元素,如此信息才能传到正确的计算机上。IP 协议在此层进行。

4) 传输层(Transport layer):封装数据并确定数据传输没有错误。TCP 与 UDP 协议在此层进行。

5) 会话层(Session layer):处理每一个连接,一个连接称为一个会话(session)。

6) 表示层(Presentation layer):用来处理不同的操作系统,有不同的整数格式的问题。TCP/IP将此问题放在应用层上处理,Python 则使用 struct 模块处理此问题。

7) 应用层(Application layer):操作最后的产物。应用程序、FTP客户机、SMTP/POP3 邮件处理器及HTTP浏览器都属于此层。

网络的连接有两种类型:以连接为导向(connection-oriented)与以包为导向(packet-oriented)。

2. TCP/IP

TCP/IP 以包为导向,是目前非常受欢迎的网络协议。TCP/IP 原先是由美国国防部所创建,很快成为美国政府、因特网及大学广泛使用的网络协议。由于 TCP/IP 可以在任何操作系统上执行,因此在不同的局域网环境中都能适用。

TCP/IP 的网络层由IP(Internet Protocol)协议提供。IP协议提供包在 Internet 上传输的基本机制。因为IP协议将包在Internet传输,所以不需要创建 end-to-end 的连接。

由于 IP 协议不了解包之间的关系,也不提供重新传输,是无法信赖的传输协议,因此IP协议需要高阶的协议,如TCP与UDP提供可信赖的服务。TCP 与 UDP 可以保证IP表头不会被破坏。

TCP 代表传输控制协议(Transmission Control Protocol),是在因特网上传输的主要结构。因为 TCP 提供可信赖、以会话为基础、以连接为导向的传输包服务,所以每一个连接上交换信息的包都会给予一个序号,重复的包会被检测出来,并且被会话服务所丢弃。序号不需要是全域唯一,甚至是会话唯一。在很短的时间内,会话的序号会是唯一。

TCP/IP 并没有提供应用接口层,而是由应用程序提供应用层。socket 已经将 TCP/IP 比较重要的 peer-to-peer API 合并,让网络应用程序可以跨平台使用。

3. UDP协议

UDP 协议代表 User Datagram Protocol,是除 TCP 之外的另一种传输服务。UDP 协议提供不可信赖、快速、以包为导向的数据服务。UDP 被 ping 命令使用来检查主机是否可连通。

UDP 的速度比 TCP 快,因为 TCP 协议需要花时间转换机器间的信息,以确保信息确实有传输,而 UDP 则没有做此转换。另外一点就是,TCP 协议会等待所有的包到达后为客户端应用程序有序地整理数据包,UDP 则没有这么做,它让客户端应用程序自己决定如何解读数据包,因为数据包并不是按照顺序接收的。

4. 网络协议

Python 有许多模块可以处理下面的网络协议:
  • HTTP:浏览网页。
  • FTP:在不同计算机间传输文件。
  • Telnet:提供登录其他计算机的服务。
  • POP3:从 POP3 服务器读取电子邮件。
  • SMTP:送出电子邮件到邮件服务器。
  • IMAP:从 IMAP 服务器读取电子邮件。
  • NNTP:提供存取 Usenet 新闻。

这些协议使用 socket 提供的服务来连接不同的主机,以及在网络上传输包。

5. 网络地址

在 TCP/IP 的网络结构上,一个socket地址包含两部分:Inetrnet 地址(IP地址)和端口号(port number)。

IP 地址定义为在网络上传输数据的地址,是一个32 位(4 个字节)的数字。每一个字节所代表的数字在 0~255,中间以点号(.)隔开,如 128.72.23.50。IP 地址必须是唯一的。

一个端口号是服务器内应用程序或服务程序的入口。端口号是一个 16 位的整数,可表示的范围在 0~65535。端口号不能随便使用,0~1023 的端口号是保留给操作系统使用的,用户必须使用 1024 之后的端口号。

表 1 给出一些特定的端口号。在 Windows 操作系统上,用户可以在 C:\Windows 文件夹内的 Services 文件中找到更多的端口号定义。如果是 Linux/UNTX 操作系统,就是 /etc/services 文件。
表1:常用端口号
端口号 协议
20 FTP (文件传输)
70 Gopher (信息查找)
23 Telnet(命令行)
25 SMTP (发送邮件)
80 HTTP(网页访问)
110 POP3(接收邮件)
119 NNTP(阅读和张帖新闻文章)