网络程序编写所需基本网络知识介绍

什么是协议:

为进行网络中的数据交换(通信)而建立的规则、标准或约定。(=语义+语法+规则)

不同层具有各自不同的协议。

 

网络的状况:

多种通信媒介――有线、无线……

不同种类的设备――通用、专用……

不同的操作系统――UNIXWINDOWS……

不同的应用环境――固定、移动

不同的业务种类――分时、交互、实时……

宝贵的投资和积累――有形、无形……

用户业务的延续性――不允许出现大的跌宕起伏。

它们互相交织,形成了非常复杂的系统应用环境。

网络异质性问题的解决

1.          网络体系结构:就是使这些用不同媒介连接起来的不同设备和网络系统在不同的应用环境下实现互操作性。并满足各种业务需求的一种粘合剂,它营造了一种“生存空间”――任何厂商的任何产品、迟缓任何技术只要遵守这个空间的行为规则,就能够在其中生存并发展。

2.          网络体系结构:解决异质性问题采用的是分层方法――把复杂的网络互联问题划分为若干个较小的、单一的问题,在不同层上予为解决。

就是我们在编程时把问题分解为很多小的模块来解决一样。

ISO/OSI七层参考模型

1.          OSI(Open System Interconnection)参考模型将网络的不同功能划分为7层。

 

 

 

 

 

2.          通信实体对对等层之间不允许直接通信。

3.          各层之间是严格单向依赖。

4.          上层使用下层提供的服务――Service user;

5.          下层向上层提供服务――Service provider

 

对等通信示例

对等层通信的实质

1.          对等层实体之间虚拟通信。

2.          下层向上层提供服务,实际通信在最底层完成。

OSI各层所使用的协议

1.          应用层:远程登录协议Telnet、文件传输协议Ftp、超文本传输协议HTTP、域名服务DNS、简单邮件传输协议SMTP、邮局协议POP3等。

2.          传输层:传输控制协议TCP、用户数据报协议UDP

n          TCP:面向连接的可靠的传输协议。

n          是无连接的,不可靠的传输协议。

既然UDP有这么多缺点,那么我们为什么还要去用它呢?

主要查因为UDP不需要建立连接,而且没有数据确认和重传的机制,所以实时性比较高,在一些实时性要求比较高的场合,我们就可以使用UDP进行通信。比如:电话会议,视频点播等,因为对于这些应用,丢失少量的数据,不会影响我们观看视频。而那么地数据完全性要求比较高场合,我们就可以采用TCP,例如:你在网上下载一个安装程序,如果丢失少数数据,你的安装程序就不可以使用了。

3.          网络层:网际协议IPInternet互联网控制报文协议ICMPInternet组管理协议IGMP

 

数据封装

1.          一台计算机要发送数据到另一台计算机,数据首先必须打包,打包的过程称为封装。

2.          封装就是在数据前面加上特定的协议头部。

3.          OSI参考模板中,对等层协议之间交换的信息单元统称为协议数据单元(PDUProtocol Data Unit)。

4.          OSI参考模型中每一层都要依靠下一层提供的服务。

5.          为了提供服务,下层把上层的PDU作为本层的数据封装,然后加入本层头部(和尾部)。头部中含有完成数据传输所需的控制信息。

6.          这样,数据自上而下递交的过程实际上就是不断封装的过程。到达目的地后自下而上递交的过程就是不断拆封的过程。由此可知,在物理线路上传输的数据,其外面实际上被包封了多层“信封”。

7.          但是,某一层只能识别由对等层封装的“信封”,而对于被封装在“信封”内部的数据仅仅是拆封后将其提交给上层,本层不作任何处理。

 

TCP/IP模型

1.          TCP/IP起源于美国国防部高级研究规划署(DARPA)的一项基础研究计划――实现若干台主机的通信。

2.          现在TCP/IP已成为Internet上通信的工业标准。

3.          TCP/IP模型包括4个层次:   

n          应用层

n          传输层

n          网络层

n          网络接口层

 

TCP/IPOSI参考模型的对应关系

端口:

1.          按照OSI七层模型的描述,传输层提供进程(应用程序)通信的能力。为了标识通信实体中进行通信的进程(应用程序),TCP/IP协议提出了协议端口(protocol port,简称端口)的概念。

2.          端口是一种抽象的软件结构(包括一些数据结构和I/0缓冲区)。应用程序通过系统调用与某端口建立连接(binding)后,传输层付给该端口的数据都被相应的进程所接收,相应进程发给传输层的数据都通过该端口输出。

3.          端口用一个整数型标识符来表示,即端口号。端口号跟协议相关,TCP/IP传输层的两个协议TCPUDP是完全独立的两个软件模块,因此各自的端口号也相互独立。

4.          端口使用一个16位数字来表示,它的范围是0655351024以下的端口号保留给预定义的服务。例如:http:使用80商品。

套接字(socket)的引入

1.          为了能够方便的开发网络应用软件,由美国伯克利大学在UNIX上推出了一种应用程序访问通信协议的操作系统调用socket(套接字)。Socket的出现,使程序员可以很方便的访问TCP/IP,从而开发各种网络应用的程序。

2.          随着UNIX的应用推广,套接字在编写网络软件中得到了极大的普及。后来,套接字又被引进了WINDOWS等操作系统,成为开发网络应用程序的非常有效快捷的工具。

3.          套接字存在于通信区域中。通信区域也叫地址族,它是一个抽象的概念,主要用于将通过套接字通信的进程的共有特性综合在一起。套接字通常只与同一区域的套接字交换数据(也有可能跨区域通信,但这只在执行了某种转换进程后才能实现)。WINDOWS SOCKET只支持一个通信区域:网际域(AF_INET),这个域被使用网际协议簇通信的进程使用。

 

网络字节顺序

不同的计算机存放多字节值的顺序不同,有的机器在起始地址存放低位字节(低位先存),有的机器在起始地址存放高位字节(高位先存)。基于INTERCPU,即我们常用的PC机采用的是低位先存。为保证数据的正确性,在网络协议中需要指定网络字节顺序。TCP/IP协议使用16位整数和32位整数的高位先存格式。

客户机/服务器模式

1.          TCP/IP网络应用中,通信的两个进程间相互作用的主要模式是客户机/服务器模式(client/server),即客户机向服务器提出请求,服务器接收到请求后,提供相应的服务。

2.          客户机/服 务器模式的建立基于以下两点:首先,建立网络的起因是网络中软硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众多资源的主机提供服务,资源较少 的客户请求服务这一非对等作用。其次,网间进程通信完全是异步的,相互通信的进程音即不存在父子关系,又不共享内在缓冲区,因此需要一种机制为希望通信的 进程间建立联系,为二者的数据交换提供同步,这就是基于客户机/服务器模式的TCP/IP

3.          客户机/服务器模式在操作过程中采取的是主动请求的方式。

首先服务器方要先启动,并根据请求提供相应的服务:

1.          打开一个通信通道并告知本地主机,它愿意在某一地址和端口上接收客户请求。

2.          等待客户请求到达该端口。

3.          接收到重复服务请求,处理该表示并发送应答信号。接收到并发服务请求,要激活一个新的进程(或线程)来处理这个客户请求。新进程(或线程)处理此客户请求,并不需要对其它请求作出应答。服务完成后,关闭新进程与客户的通信链路,并终止。

4.          返回第二步,等待另一客户请求。

5.          关闭服务器。

客户方:

1.          打开一个通信通道,并连接到服务器所在主机的特定端口。

2.          向服务器发服务请求报文,等待并接收应答;断续提出请求。

3.          请求结束后关闭通信通道并终止。

套接字类型

1.          流式套接字(SOCK_STREAM

提供面向连接、可靠的数据传输服务,数据无差错,无重复的发送,且按发送顺序接收。(tcp

2.          数据报式套接字(SOCK_DGRAM

提供无连接服务。数据包以独立包形式发送,不提供无错保证,数据可能丢失或重复,并且接收顺序混乱。

3.          原始套接字(SOCK_RAW

基于TCP(面向连接)的socket编程

1.          服务器端程序:

1.          创建套接字(socket)。

2.          将套接字绑定到一个本地地址和端口上(bind)。

3.          将套接字设为监听模式,准备接收客户请求(listen)。

4.          等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)。

5.          用返回的套接字和客户端进行通信(send/recv)

6.          返回,等待另一客户请求。

7.          关闭套接字。

2.          客户端程序:

1.          创建套接字(socket)。

2.          向服务器发出连接请求(connect)

3.          和服务器端进行通信(send/recv)。

4.          关闭套接字。

基干UDP(面向无连接)的socket编程

3.          服务器(接收端)程序:

1.          创建套接字(socket)。

2.          将套接字绑定到一个本地地址和端口上(bind)

3.          等待接收数据(recvfrom)。

4.          关闭套接字。

4.          客户端(发送端)程序:

1.          创建套接字(socket)。

2.          向服务器发送数据(sendto.

3.          关闭套接字。

 

2007-05-27机器人 于 北京

 

此条目发表在 c/c++ 分类目录,贴了 , 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>