《第18章 网络编程基础.ppt》由会员分享,可在线阅读,更多相关《第18章 网络编程基础.ppt(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第18章章 网络编程基础网络编程基础计算机网络是通过通信线路互相连接的计算机的集合,计算机网络是通过通信线路互相连接的计算机的集合,它是由计算机及外围设备、数据通讯和中断设备等构成的一它是由计算机及外围设备、数据通讯和中断设备等构成的一个群体。个群体。TCP/IP协议是协议是Internet上使用的协议,而上使用的协议,而Internet是是世界上最大的计算机网络。国际标准化组织世界上最大的计算机网络。国际标准化组织ISO对网络标准对网络标准提出了提出了OSI参考模型,该模型进一步规范了计算机网络的设参考模型,该模型进一步规范了计算机网络的设计并解决了计并解决了TCP/IP协议没有涉及的底层
2、实现问题。协议没有涉及的底层实现问题。Linux系系统的一个主要特点是他的网络功能非常强大。随着网络的日统的一个主要特点是他的网络功能非常强大。随着网络的日益普及,基于网络的应用也将越来越多。本章将讲解计算机益普及,基于网络的应用也将越来越多。本章将讲解计算机网络的基本概念,以及基础的网络编程方法。网络的基本概念,以及基础的网络编程方法。18.1 计算机网络组成计算机网络组成物理层面上,计算机网络由计算机设备、网络连接设备、物理层面上,计算机网络由计算机设备、网络连接设备、传输介质这三个部分组成;逻辑层面上,计算机网络由网络传输介质这三个部分组成;逻辑层面上,计算机网络由网络协议、网络应用软件
3、、数据这三个部分组成。计算机网络根协议、网络应用软件、数据这三个部分组成。计算机网络根据其组成的形式又可分为多种结构,有的结构适用于某种环据其组成的形式又可分为多种结构,有的结构适用于某种环境,但更多情况是将多种网络结构复合使用组成实际的网络。境,但更多情况是将多种网络结构复合使用组成实际的网络。为了规范不同的计算机和计算机网络进行通信,我们用网络为了规范不同的计算机和计算机网络进行通信,我们用网络模型来描述需要解决问题的层次,并以网络模型为基础编制模型来描述需要解决问题的层次,并以网络模型为基础编制出了多种网络传输协议。出了多种网络传输协议。18.1.1 网络结构网络结构简单的局域网简单的局
4、域网 星型网络星型网络 18.1.1 网络结构网络结构环状网络环状网络 总线网络总线网络 18.1.2 OSI 参考模型参考模型国际标准化组织开发了开放式系统互联参考模型,以促国际标准化组织开发了开放式系统互联参考模型,以促进计算机系统的开放互联。该模型的层次依次为:进计算机系统的开放互联。该模型的层次依次为:(1)物理层。)物理层。(2)数据链路层。)数据链路层。(3)网络层。)网络层。(4)传输层。)传输层。(5)会话层。)会话层。(6)表示层。)表示层。(7)应用层。)应用层。18.1.3 TCP/IP参考模型参考模型OSI参考模型并非实际应用中的标准,而只是一种抽象参考模型并非实际应用
5、中的标准,而只是一种抽象化表示方法。目前真正被广泛使用的是化表示方法。目前真正被广泛使用的是TCP/IP参考模型,它参考模型,它是以是以OSI参考模型作为基础设计的。参考模型作为基础设计的。1应用层应用层2传输层传输层3网络层网络层4物理链路层物理链路层18.2 TCP/IP协议协议TCP/IP协议(协议(Transmission Control Protocol/Internet Protocol)是随着是随着Internet而发展的网络协议,目前应用最为而发展的网络协议,目前应用最为广泛。广泛。Internet最初是因为美国国防需要而建立的,用以保最初是因为美国国防需要而建立的,用以保存美
6、国政府的计算机网络间能够互通,并保证遭受核打击时存美国政府的计算机网络间能够互通,并保证遭受核打击时不至于瘫痪。不至于瘫痪。TCP/IP很好的解决了不同网络互访问性和网路很好的解决了不同网络互访问性和网路的健全性,领导着的健全性,领导着Internet发展。几乎所有的操作系统都支发展。几乎所有的操作系统都支持持TCP/IP协议,协议,Linux系统更是将系统更是将TCP/IP协议作为重要标准,协议作为重要标准,成为了世界上最流行的网络服务器操作系统。成为了世界上最流行的网络服务器操作系统。18.2.1 IP协议与协议与InternetIP协议又称为网际协议,对应于协议又称为网际协议,对应于TC
7、P/IP参考模型的网参考模型的网络层,是络层,是Internet中最重要的协议。中最重要的协议。IP协议规定数据包由数协议规定数据包由数据包正文与报头两部分组成。数据包正文是要传递的数据,据包正文与报头两部分组成。数据包正文是要传递的数据,没有格式要求。报头包括发送主机的网络地址、接收主机的没有格式要求。报头包括发送主机的网络地址、接收主机的网络地址、数据包的报头校验和、数据包的长度等信息。网络地址、数据包的报头校验和、数据包的长度等信息。18.2.2 IP互联网协议地址互联网协议地址IP地址的取得方式,简单地说是大的组织先向地址的取得方式,简单地说是大的组织先向Internet的的NIC(N
8、etwork Information Center)申请若干申请若干IP地址,然地址,然后将其向下级组织分配,下级组织再向更下一级的组织分配后将其向下级组织分配,下级组织再向更下一级的组织分配IP地址。各子网的网络管理员将取得的地址。各子网的网络管理员将取得的IP地址指定给子网中地址指定给子网中的各台计算机。的各台计算机。IP地址分为三类:地址分为三类:1A类地址类地址2B类地址类地址3C类地址类地址18.2.3 TCP协议协议TCP协议最小的处理单位为字节,因此协议最小的处理单位为字节,因此TCP是面向字节的顺是面向字节的顺序协议。数据包内的每个字节都会被分配一个顺序编号,以及为序协议。数据
9、包内的每个字节都会被分配一个顺序编号,以及为了验证数据真实性的奇偶校验位。虽然这种做法传递了过多的冗了验证数据真实性的奇偶校验位。虽然这种做法传递了过多的冗余数据,但根本原因是由早期网络极为不可靠造成的。余数据,但根本原因是由早期网络极为不可靠造成的。18.2.4 UDP协议协议UDP又称用户数据包文协议,也又称用户数据包文协议,也TCP/IP的传输层协议,它是的传输层协议,它是无连接的、不可靠的传输服务。当接收数据时它不向发送方提供无连接的、不可靠的传输服务。当接收数据时它不向发送方提供确认信息,它不提供输入包的顺序,如果出现丢失包或重复包的确认信息,它不提供输入包的顺序,如果出现丢失包或重
10、复包的情况,也不会向发送方发出差错报文,与情况,也不会向发送方发出差错报文,与IP协议非常类似。协议非常类似。18.3 Socket套接字套接字Socket套接字由远景研究规划局(套接字由远景研究规划局(Advanced Research Projects Agency,ARPA)资助加里福利亚大学伯克利分校的资助加里福利亚大学伯克利分校的一个研究组研发。其目的是将一个研究组研发。其目的是将TCP/IP协议相关软件移植到协议相关软件移植到UNIX类系统中。设计者开发了一个接口,以便应用程序能类系统中。设计者开发了一个接口,以便应用程序能简单的调用该接口通信。这个接口不断完善,最终形成了简单的调
11、用该接口通信。这个接口不断完善,最终形成了Socket套接字。套接字。18.3.1 Socket套接字简介套接字简介Socket的英文原意是的英文原意是“插座插座”,作为类,作为类UNIX系统的进程通讯系统的进程通讯机制,它如同插座一样方便的帮助计算机接入互联网通信。机制,它如同插座一样方便的帮助计算机接入互联网通信。18.3.2 创建套接字创建套接字创建出来的套接字是一条通信线路的一个端点,创建出来的套接字是一条通信线路的一个端点,domain参数负责指定地址族,参数负责指定地址族,type参数负责指定与这个套接参数负责指定与这个套接字一起使用的通信类型,而字一起使用的通信类型,而proto
12、col参数负责制定所使用的参数负责制定所使用的协议。协议。domain参数的取值范围见表参数的取值范围见表18.2所示。所示。18.3.3 套接字地址套接字地址每个套接字域都有独特的地址格式。对于一个每个套接字域都有独特的地址格式。对于一个AF_UNIX套接字来说,它的地址是由一个包含在套接字来说,它的地址是由一个包含在“sys/un.h”头文件里的头文件里的sockaddr_un结构描述的。结构描述的。因为不同类型的地址都需要传递到对套接字进程处理的因为不同类型的地址都需要传递到对套接字进程处理的系统调用里去,所以定义各种地址格式时使用的结构也都很系统调用里去,所以定义各种地址格式时使用的结
13、构也都很相似,每个结构的开始都是一个定义地址类型(即套接字域)相似,每个结构的开始都是一个定义地址类型(即套接字域)的数据项。的数据项。18.3.4 套接字的名字套接字的名字要使要使socket()调用创建的套接字能够被其他进程使用,调用创建的套接字能够被其他进程使用,程序就必须给该套接字起个名字。程序就必须给该套接字起个名字。AF_UNIX套接字会关联套接字会关联到一个文件系统的路径名上去,到一个文件系统的路径名上去,AF_INET套接字将关联到一套接字将关联到一个个IP端口号上去。端口号上去。18.3.5 创建套接字队列创建套接字队列为了能够在套接字上接受接入的连接,服务器程序必须为了能够
14、在套接字上接受接入的连接,服务器程序必须创建一个队列来保存到达的请求。创建队列可使用系统调用创建一个队列来保存到达的请求。创建队列可使用系统调用listen()完成,它的一般形式为:完成,它的一般形式为:int listen(int socket,int backlog);Linux系统可能会对队列里能够容纳的排队连接的最大系统可能会对队列里能够容纳的排队连接的最大个数有限制。在这个最大值的范围内,个数有限制。在这个最大值的范围内,listen()将把队列长度将把队列长度设置为设置为backlog个连接。在套接字上排队的接入连接个数最个连接。在套接字上排队的接入连接个数最多不能超过这个数字,再
15、往后的连接将被拒绝,用户的连接多不能超过这个数字,再往后的连接将被拒绝,用户的连接请求将会失败。这是请求将会失败。这是listen()提供的一个机制,在服务器程序提供的一个机制,在服务器程序紧张地处理着上一个客户的时候,后来的连接将被放到队列紧张地处理着上一个客户的时候,后来的连接将被放到队列里排队等号。里排队等号。backlog常用的值是常用的值是5。18.3.6 接受连接接受连接服务器上的应用程序创建好命名套接字之后,就可以通服务器上的应用程序创建好命名套接字之后,就可以通过过accept()系统调用来等待客户端程序建立对该套接字的连系统调用来等待客户端程序建立对该套接字的连接了。接了。套
16、接字必须是被套接字必须是被bind()调用命名过的,并且还要有一个调用命名过的,并且还要有一个由由listen()调用分配的连接队列。客户的地址将被放在调用分配的连接队列。客户的地址将被放在address指向的指向的sockaddr结构里。如果我们不关心客户的地址,可以结构里。如果我们不关心客户的地址,可以在这里使用一个空指针。在这里使用一个空指针。18.3.7 请求连接请求连接当客户想要连接到服务器的时候,它会尝试在一个未命当客户想要连接到服务器的时候,它会尝试在一个未命名套接字和服务器的监听套接字之间建立一个连接。名套接字和服务器的监听套接字之间建立一个连接。EBADF文件描述符无效EAL
17、READY套接字上已经有了一个正在使用的连接ETIMEDOUT连接超时ECONNREFUSED连接请求被服务器拒绝18.3.8 关闭连接关闭连接系统调用系统调用close()函数可以结束服务器和客户上的套接字函数可以结束服务器和客户上的套接字连接,就象对底层文件描述符进行操作一样。要想关闭套接连接,就象对底层文件描述符进行操作一样。要想关闭套接字,就必须把服务器和客户两头都关掉才行。对服务器来说,字,就必须把服务器和客户两头都关掉才行。对服务器来说,应该在应该在read()返回返回0时进行该操作,但如果套接字是一个面向时进行该操作,但如果套接字是一个面向连接的类型并且设置了连接的类型并且设置了
18、SOCK_LINGER选项,选项,close()调用会调用会在该套接字尚有未传输数据时阻塞。在该套接字尚有未传输数据时阻塞。18.3.9 套接字通信套接字通信本节将设计两个例子演示套接字通信的过程,其中一个本节将设计两个例子演示套接字通信的过程,其中一个为服务器程序,另一个为客户程序。为服务器程序,另一个为客户程序。1服务器程序2客户程序18.4 网络通信网络通信在上一节的例子中,实现了在同一台计算机中通过套接在上一节的例子中,实现了在同一台计算机中通过套接字通信的方法。如果是在网络中,我们需要使客户端连接的字通信的方法。如果是在网络中,我们需要使客户端连接的地址为一个有效的地址为一个有效的I
19、P地址,这样就能在两台计算机之间通信。地址,这样就能在两台计算机之间通信。除了除了IP地址以外,计算机名也可以用来代表一台网络中的计地址以外,计算机名也可以用来代表一台网络中的计算机,例如在浏览器中使用的域名就是算机,例如在浏览器中使用的域名就是Internet中由中由DNS服服务所提供的网络地址机制。务所提供的网络地址机制。18.4.1 查询主机名称查询主机名称查询主机名称是通过访问主机数据库实现的,服务器数查询主机名称是通过访问主机数据库实现的,服务器数据库接口函数在头文件据库接口函数在头文件“netdb.h”中定义。与此相关的函中定义。与此相关的函数有数有sethostbyaddr()和
20、和gethostbyname()两个,他们的一般形两个,他们的一般形式如下:式如下:struct hostent*gethostbyaddr(const void*addr,size_t len,int type);struct hostent*gethostbyname(const char*name);18.4.2 Internet守护进程守护进程提供多项网络服务的提供多项网络服务的Linux系统通常是以超级服务器的系统通常是以超级服务器的方式来运行的,由方式来运行的,由Internet守护进程守护进程inetd同时监听着许多端同时监听着许多端口地址上的连接。当有客户连接到某项服务时,口地
21、址上的连接。当有客户连接到某项服务时,inetd程序就程序就会运行相应的服务器程序。这使服务器程序不必一直运行着;会运行相应的服务器程序。这使服务器程序不必一直运行着;他们可以在必要时由他们可以在必要时由inetd启动执行。启动执行。18.5 小结小结本章介绍了计算机网络的相关概念,以及使用套接字进本章介绍了计算机网络的相关概念,以及使用套接字进行网络间通信的方法。套接字通信的方法适用于设计较底层行网络间通信的方法。套接字通信的方法适用于设计较底层的通信协议设计,其他的各种网络协议如的通信协议设计,其他的各种网络协议如FTP、HTTP等都等都是在套接字的基础上建立的。如果需要进行网络间多点的连是在套接字的基础上建立的。如果需要进行网络间多点的连接,可使用多进程或多线程的编程方法,在每个进程或线程接,可使用多进程或多线程的编程方法,在每个进程或线程中建立一个套接字连接,这样就能保证多个客户同时连接到中建立一个套接字连接,这样就能保证多个客户同时连接到服务器。服务器。
限制150内