网络编程.docx
- 文档编号:11085043
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:28
- 大小:290.52KB
网络编程.docx
《网络编程.docx》由会员分享,可在线阅读,更多相关《网络编程.docx(28页珍藏版)》请在冰点文库上搜索。
网络编程
1.TCP/IP(TransmissionControlProtocol/InternetProtocol,传输控制协议/网际协议)是一系列,或者说是一个协议族,它定义了数据传输如何通过因特网进行交换。
它具有开放性的特点。
2.OSI/RM(OpenSystemInterconnection/ReferenceModel,开放系统互连参考模型)将计算机网络通信定义为一个七层框架模型,如图1.1所示。
表1.1OSI模型中各个层的功能
每一层负责的功能如下:
· 链路层:
有时被称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡,它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。
·网络层:
有时也被称为互联网层,负责分组在网络中的活动,包括IP(网际协议)、ICMP(Internet控制报文协议)以及IGMP(Internet组管理协议)。
传输层:
该层主要为两台主机上的应用程序提供端到端的数据通信,它分为两个不同的协议——TCP(传输控制协议)和UDP(用户数据报协议)。
TCP提供端到端的质量保证的数据传输,该层负责数据的分组、质量控制和超时重发等,对于应用层来说,就可以忽略这些工作。
UDP则只负责简单地把数据报从一端发送到另一端,至于数据是否到达或按时到达、数据是否损坏都必须由应用层来做。
这两种协议各有用途,前者可用于面向连接的应用,而后者则在及时性服务中有着重要的用途,如网络多媒体通信等。
· 应用层:
该层负责处理实际的应用程序细节,包括Telnet、HTTP、SMTP、FTP、DNS和SNMP等协议和应用。
3.特殊的IP地址:
·网络地址:
IP中主机地址为0的地址表示网络地址,如128.211.0.0。
· 广播地址:
网络号后跟一个所有位全是1的后缀,就是直接广播地址。
·回送地址:
127.0.0.1用于测试。
(功能)域名系统:
一个系统的全域名由主机名、域名和扩展名三部分组成,各部分间使用“.”分隔,例如。
在TCP/IP应用中,域名系统(DNS)是一个分布的数据库,由它来提供IP地址和主机名之间的映射信息,可以通过在程序中调用标准库函数来编程实现域名与IP地址之间的相互转换。
通过从域名地址到IP地址的映射,使得在日常的网络应用中可以使用域名这种便于记忆的网络地址表示形式。
所有的网络应用程序理论上都应该具有内嵌的域名解析机制。
数据包的封装和分用:
当应用程序用TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层,直到被当作一串比特流送入网络。
其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息),该过程如图1.5所示。
TCP传给IP的数据单元称作TCP报文段或简称TCP段。
IP传给网络接口层的数据单元称作IP数据报(IPDatagram)。
通过以太网传输的比特流称作帧(Frame)。
图1.5中帧头和帧尾下面所标注的数字是典型以太网帧首部的字节长度。
以太网数据帧的长度必须在46~1518字节之间。
4.以太网数据链路层帧结构
IEEE802.3定义了一种具有七个字段的帧(MAC):
前导符、起始帧分界符、目标地址、源地址、PDU的长度/类型、数据以及CRC。
以太网不提供任何对收到的帧进行确认的机制,确认在高层完成,这表明它是一种不可靠的介质。
CSMA/CD中MAC帧的格式
前导符(Preamble):
该字段长7个字节(56位),其中1和0交替出现,警告接收系统即将有数据帧到来,同时同步系统时序。
· 起始帧分界符(SFD):
该字段长1字节,为10101011,标志帧的开始。
SFD通知接收方后面所有的内容都是数据。
· 目标地址(DestinationAddress):
该字段长6个字节,包含了数据帧的目的物理地址。
一个系统的物理地址是一个在它的网络接口卡(NIC)上编码的比特模式。
每一个NIC由一个独一无二的地址将它和其他所有的NIC区别开来。
· 源地址(SourceAddress):
该字段同样长6个字节,包含转发数据帧的最后一个设备的物理地址。
该设备可以是发送站点,也可以是接收和转发数据包的最近路由器。
· PDU的长度/类型(Length/Type):
该字段的两个字节指出PDU的长度或封装的数据类型。
当PDU的长度固定时,这个字段可以用来表示数据类型,如IP(0x0800)、ARP(0x0806)、RARP(0x8035)等。
在以太网中,如果高层协议采用TCP/IP协议族,则MAC帧的结构如图1.8所示(没有标出前导符和起始帧分界符)。
· 数据:
保存高层协议的数据(PDU)。
· CRC:
IEEE802.3MAC帧的最后一个字段是检错信息,通常为CRC-32。
5.IP
IP负责在TCP/IP主机之间提供数据报服务,进行数据封装及产生协议头。
由于在以太网中帧的大小要受到限制,并且不同的帧可能由不同的网络路径传送,因此IP协议需要将较大的数据报文分割开来,并在目的主机处按正确顺序组合。
另外,IP协议不负责包的校验,它是一种无连接、不可靠的传输。
如果发生任何错误,IP协议则丢弃该数据报,然后发送ICMP消息报给信源端。
IP协议还要负责寻找路由,因此它还需要配套一个确定的IP地址。
在IP报文的包头中包含了源与目的IP地址。
一般来说不会有应用程序直接访问IP协议。
IP数据报是Internet上数据通信的基本单元,这些数据报不超过1000字节长,当人们打开Web页、下载文件或者发送E-mail时,这些数据报就在世界各地来回传输。
IP数据报的报文格式如图所示
· IP数据报头的最小长度是5个字(word,1字=4字节),如果有其他选项,报头可能会更长。
IPv4数据报中的数据(包括报头中的数据)以32位(4字节)的方式来组织。
IPv4中包含至少12个不同字段,且在没有选项时长度为20个字节,但在包含选项时可达60个字节。
· 版本(VERS):
指定IP协议的版本号,对于IPv4来说,版本为4。
· 报头长度(HLENS):
指定IP报头的长度,以字为单位,范围为5~15个字。
· 服务类型(ToS,TypeofService):
表示数据报的服务类型,即处理的优先级,包括延时、吞吐量、可靠性或代价,它在IPv4中的应用并不广泛。
· 报文总长度(TotalLength):
以字节为单位指定数据报的总长度,IP数据报的长度最大为65535字节,网络主机可以使用数据报长度来确定一个数据报的结束和下一个数据报的开始;当传送长度超过65535字节的IP数据报时,大多数的链路层都会分片。
主机一般要求接收的数据报不超过576字节。
由于TCP把用户数据分成若干片,因此,一般来说这个限制不会影响TCP。
· 标识符(ID):
该16位标识符由产生它的主机唯一指定给数据报,分段后的数据报共享同一个数据报ID,有助于接收主机对分段的数据报重装。
· 标志(FLG):
包括3个1位标志,标识报文是否允许被分段和是否使用了这些域。
第一位保留并设为0;第二位标识报文能否被分段,其中0表示报文可以被分段,1表示报文不能被分段;第三位只有在第二位为0时才有意义,这一位标识此报文是否是这一系列分段的最后一个,或者接收应用程序是否还希望有更多的段,0指示报文是最后一个。
·分段偏移量(FragmentOffset):
指定分段在整个数据报中的位置。
接收主机同时使用标志位和分段偏移,以重组被分段的数据报。
这个值以64位为单位递增。
生命周期(TTL,TimeToLive):
代表数据报在被丢弃前能够穿越的最大主机跳数。
TTL的初始值由源主机设置,其理论最大值为255,每经过一个处理节点减1。
当该字段的值为0时,报文就被认为是不可转发的,之后产生一个ICMP报文发回源主机,并丢弃该不可转发的报文。
· 协议(Protocol):
指明数据报中携带的载荷类型,主要标识所使用的协议,一般是指TCP协议、UDP协议、ICMP报文和IGMP报文。
·头校验和(HeaderChecksum):
目的是保证报头的正确性,目的机、网络中的每个网关都要重新计算报头的校验和,如果计算出的校验和与报文所含的校验和不同,则丢弃该报文
·源IP地址(SourceIPAddress):
指明数据报的发送方地址。
· 目的IP地址(DestinationIPAddress):
指明数据报的接收方地址。
· 选项(Options):
在IPv4中,主要用于网络测试和调试。
· 填充区(Padding):
为了保证IP头长度是32位的整数倍,要填充额外的0。
IP协议是TCP与UDP的基础。
TCP和UDP的每组数据都通过端系统和每个中间路由器中的IP层在互联网中进行传输。
ICMP作为IP协议的附属协议,用来与其他主机或路由器交换错误报文和其他重要信息。
IP层协议的另一个附属协议是IGMP(Internet组管理协议),它用来把一个UDP数据报多播或组播到多个主机。
6.TCP提供一个可靠连接的方式是通过三次握手(Three-wayHandshake)来完成的。
三次握手是指通信双方彼此交换三次信息。
三次握手是在存在包丢失、重复和延迟的情况下,确保通信双方信息交换确定性的充分必要条件。
三次握手的操作过程如图所示
(1)请求端(通常称为客户)发送一个SYN段,指明客户打算连接的服务器的端口以及初始序号(SEQ)。
这个SYN段为报文段1。
(2)服务器发回包含服务器的初始序号的SYN报文段(报文段2)作为应答。
同时,将确认序号设置为客户的ISN加1,用以对客户的SYN报文段进行确认。
一个SYN占用一个序号。
(3)客户必须将确认序号设置为服务器的ISN加1,用以对服务器的SYN报文段进行确认(报文段3)。
上述三个过程依次完成,即表明建立了TCP连接。
建立一个TCP连接需要三次握手,而正常终止一个连接要经过四次握手,这是由TCP的半关闭(half-close)特性造成的。
由于TCP是全双工连接,每个方向的连接必须单独关闭,因此当一方完成数据发送任务后必须发送一个FIN标志来终止这个方向的连接。
当一端收到一个FIN后,必须通知应用层另一端已经终止了该方向的数据传送。
发送FIN通常是应用层关闭连接的结果。
TCP连接收到一个FIN标志只意味着对方已不再发送数据,但己方仍能发送数据,这是半关闭型应用。
正常关闭过程如下图所示。
下图中的报文段1发起终止连接,TCP客户端发送一个FIN,用来关闭从客户机到服务器的数据传送。
当服务器收到这个FIN时,它发回一个ACK,确认序号为收到的序号加1(报文段2)。
和SYN一样,一个FIN占用一个序号,同时TCP服务器还向应用程序传送一个文件结束符。
接着这个服务器程序就关闭它的连接,TCP端发送一个FIN(报文段3),客户必须发回一个确认,并将确认序号设置为收到的序号加1(报文段4)。
7.UDP
UDP(UserDatagramProtocol)即用户数据报协议,它属于面向无连接、不可靠传输的类型。
该协议只负责接收和传送由上层协议传递的消息,它本身不做任何检测、修改与应答,上层协议需要自己处理这些事务。
UDP的报头格式较简单,主要是地址信息、包的长度和校验信息。
TCP包的头信息有10多个域。
因此,UDP的网络开销一般要小于TCP。
由于UDP在传送数据过程中没有建立连接,亦不进行检查,因此在良好的网络环境中,其工作效率较TCP要高。
由于UDP的这种特点,因此它也是进行网络广播的首选协议。
UDP的报头格式如图所示。
· 源端口(SourcePort):
16位的源端口是发送端上的连接端口,它和IP首部中的源IP地址的作用是标识发送UDP报文的计算机及应用程序。
· 目的端口(DestinationPort):
16位的目的端口是接收端上的连接端口,它和IP首部中的目的IP地址的作用是标识接收报文的计算机及应用程序。
· 报文长度(TotalLength):
报文长度字段为16位,存储UDP首部和UDP数据的字节长度,最小值为8字节。
·校验和(Checksum):
16位的校验和字段存储基于报文的内容计算得到的错误检查信息。
接收端执行和发送端相同的数学计算,若两个计算值不同则表明报文在传输过程中出现了错误。
8.ARP/RARP
ARP(AddressResolutionProtocol,地址解析协议)和RARP(ReverseAddressResolutionProtocol,逆向地址解析协议)是某些网络接口(如以太网和令牌环网)使用的特殊协议,用来转换IP层和网络接口层使用的地址。
每一块网卡(NIC,NetworkInterfaceCard)都有一个唯一的硬件地址(是由网卡的生产厂商设置的,需要使用特殊的方式才可以修改)。
这个硬件地址称为MAC(MediumAccessControl,媒体访问控制)。
一块网卡依据数据帧的包头信息中是否写有它的MAC地址来决定是否接受并上传该帧。
分配给主机使用的IP地址和它固有的MAC地址是互不相干的。
IP地址只对TCP/IP有效,MAC地址只对网络访问层有意义。
在物理网络上的数据帧交换依赖于MAC地址,ARP实现了从IP地址到MAC地址的映射,而RARP负责根据NIC硬件地址去查询对应的IP地址。
ARP要求网络接口有一个硬件地址。
在硬件上进行的数据帧交换必须有正确的接口地址。
ARP中规定了两种信息的基本类型:
请求(Request)和应答(Response)。
9.ICMP
ICMP全称为InternetControlMessageProtocol,即Internet控制报文协议。
ICMP是IP的附属协议,IP用它来与其他主机或路由器交换错误报文和其他一些网络情况。
在ICMP包中携带了控制信息和故障恢复信息,这些信息可以用于以下几方面:
源抑制,路径重定向,主机不可到达,应答请求与回复。
路径重定向:
由网关向请求其提供服务的主机发送,用于通知该主机在网络中还有其他距离目的主机更近的网关(是服务器,具有一定的连接服务,属于四到七层的连接。
例如:
防火墙网关在连接上增加了防火墙的功能。
)。
10.FTP协议(了解)
FTP(FileTransferProtocol)即文件传输协议。
在该协议中,要求使用者是经过授权的用户,从而使文件的访问具有一定的安全限制。
由于FTP口令在网络上是以明文传输的,因此一旦被监听泄密就会威胁到系统安全。
许多站点也提供匿名FTP服务(AnonymousFTP),在这类站点上,通常的登录用户名为Anonymous(匿名的),口令按照惯例是Guest,也可以是用户的E-mail地址。
HTTP协议
HTTP(HyperTextTransferProtocol,超文本传输协议)是WWW服务程序所用的协议,也是目前在Internet中使用最广泛的协议。
HTTP客户端包括InternetExplorer、NetscapeNavigator、Opera、Mozilla等。
通过WWW方式,可以进行信息查询、文件下载、访问WWW方式的E-mail、在线聊天等,功能非常强大。
11.服务类型的选择
从通信的角度看,网络协议栈中的各层所提供的服务可以分为两大类:
面向连接(connection-oriented)服务和无连接(connectionless)服务。
1)面向连接服务
所谓连接,是指两个对等实体为进行数据通信而进行的一种结合。
面向连接服务要求在数据交换之前先建立连接;当数据交换结束后终止该连接。
一般来说,面向连接服务过程分为三个阶段:
连接建立、数据传输和连接释放。
在传送数据时是按序传送的。
这点和电路交换的许多特性很相似,因此面向连接服务又称为“虚电路服务”。
面向连接服务比较适合于在一段时间间隔内要向同一目的地发送许多报文的情况。
对于发送很短的零星报文,则连接建立和释放的开销过大。
2)无连接服务
无连接服务指两个实体之间的通信不需要先建立好一条连接,其所需的下层资源在数据传输时动态地进行分配。
无连接服务的另一个特征是它不需要通信的两个实体同时是活跃的。
只有发送端的实体正在进行发送时,它才必须是活跃的。
而接收端的实体只有在进行接收操作时才必须是活跃的。
无连接服务的优点是灵活方便和效率高;但它不能防止报文的丢失、重复或失序,该问题必须由应用程序根据需要自行解决。
无连接服务特别适合于传送少量零星的报文。
无连接服务又可分为以下三种类型:
· 数据报(datagram):
它的特点是不需要接收端做任何响应,因而是一种不可靠的服务。
数据报常被描述为“尽最大努力交付”(besteffortdelivery)。
在TCP/IP协议栈中,由UDP协议提供数据报服务。
·证实交付(confirmeddelivery):
又被称为可靠的数据报。
这种服务对每一个报文由提供服务的协议层产生一个证实给发方,这种证实只能保证报文已经发送给远端目的站了,但并不能保证目的站用户已收到这个报文。
·请求应答(request-reply):
这种类型的数据报是接收端的用户每收到一个报文,就向发送端的用户发送一个应答报文。
与“证实交付”的主要区别在于应答是由接收端的用户而不是提供服务的协议层发出的。
事务处理(transaction)中的“一问一答”方式的短报文以及数据库中的查询,都很适合使用这种类型的服务。
12.NetBIOS是1983年IBM为PC-Network开发的一套网络标准,并于1984年8月首次出现在由Sytek公司为IBM设计的IBMPCNetBIOSLAN网络适配器(LANA,LANAdapter)上。
在网络层次中,NetBIOS工作于国际标准化组织(ISO)开放系统互连(OSI)的参考模型中的表示层与会话层之间,处于参考模型的高层。
NetBIOS程序的网络通信功能主要是通过四种NetBIOS应用服务实现的,这四种应用服务是:
(1)名字支持:
名字的作用是标识计算机中希望在网络中可见的实体,NetBIOS名字支持服务功能允许加入一个名字、加入一个组名或删除一个名字。
(2)数据报支持:
NetBIOS使用数据报支持服务可以方便地在网络中发送、接收数据报,以及进行广播功能。
(3)会话支持:
会话支持服务是NetBIOS最复杂的功能,其中呼叫功能用于建立一条与被呼叫的主机之间的连接。
一旦建立了连接,就有了一条虚电路,双方就可以在这条链路上进行通信。
会话支持还有一些其他服务提供了各种不同类型报文的发送和接收,以及结束一个会话等功能。
(4)一般命令:
这组服务允许对网络接口适配器进行复位,以及获得其状态等其他功能。
13.NetBIOS数据报
数据报是一种短信息,它的大小可由NetBIOS的执行程序改变。
数据报服务可以将数据发送到特定的地点或组中所有成员,也可广播到整个局域网。
NetBIOS数据报通信是无连接、非可靠的一种通信方式。
数据报通信有广播式数据报和普通数据报两种。
1)广播式数据报(广播型)
广播式数据报是用NetBIOS的发送广播数据报命令所发送的。
任何适配器(包括发送适配器),如果事前发送过NetBIOS接收广播数据报命令,它也可以接收到这个广播数据报。
广播数据报有可能导致进程间数据收发的混乱,应当谨慎使用。
2)普通数据报(定向型)
普通数据报是用NetBIOS的发送数据报命令发送的。
与NetBIOS发送广播数据报命令不同的是,应用程序要用发送数据报命令指出接收者的名字。
包括发送适配器在内的任何适配器,都可接收到数据报。
普通数据报可被传送给把名字作为唯一名使用的适配器,或传送给共享一组名的一组适配器。
数据报通信的主要优点是它所消耗的工作资源比会话通信少,省去了建立连接所需的开销。
但这种类型的服务不提供任何保障,对因目标接收机退出网络、掉电、数据丢失等多种原因导致的数据传输失败,都不会提供任何错误提示。
14NetBIOS会话
NetBIOS会话连接是在两个应用程序之间建立一个可靠的虚电路,应用程序可以驻留在同一个工作站(本地会话)或不同的工作站(远程会话)中,每一个应用程序构成会话的一边。
NetBIOS会话服务提供给用户程序一种面向连接的、可靠的、全双工的连接服务。
NetBIOS会话的建立需要双方预定的合作,会话过程需要一个是客户端程序,一个是服务器端程序。
在这种服务中,服务器通常将自己注册到一个已知的名字下。
客户机会搜寻这个名字,以便建立与服务器的通信。
NetBIOS服务器进程会针对想和它建立通信的每一个LANA编号,将自己的名字加入与其对应的名字表。
而对于其它机器上的客户来说,就可将一个服务名解析成机器名,然后要求同服务器进程建立连接。
通常,会话过程包括建立会话、接收命令、发送命令及结束会话。
1)建立会话
当应用程序发出NetBIOS监听命令以访问NetBIOS名字表中的某个名字时,会话就产生了。
监听命令也可指出一个远程名,申请对话的应用程序把它看作会话伙伴。
第二个应用程序接着发出一条NetBIOS调用命令,去访问NetBIOS名字表中的名字,而这个名字正是第一个应用所期望的伙伴的名字。
该调用命令还访问它在NetBIOS名字表中的第一个应用程序的名字,两个名字完全相匹配就会满足两个应用程序建立会话的标准,所进行的监听及调用命令也随之完成。
2)接收命令
会话建立以后,在会话过程中双方可以使用NetBIOS的Send和Receive命令操作来传输数据。
如果用一个名字产生几个会话,则应用程序也可发出NetBIOS“指定数据任意接收”命令,该命令就提供与这个指定名有关的任何会话数据。
更一般的情况是,应用程序可以发出“任意名的任意接收”命令,提供适配器所建立的任何会话中的数据。
3)发送命令
应用程序发出NetBIOSSend命令把数据发送给其他应用程序。
该命令允许应用程序发送的信息范围是0~64KB;数据必须处于连续的内存中。
应用程序也可以调用NetBIOS的CHAIN类发送命令(NCBCHAINSEND和NCBCHAINSENDNA),该命令允许数据驻留在两个区域的缓冲区中。
4)结束会话
在会话最后,会话的一边或两边发出NetBIOSHangup命令就可终止会话,各程序将执行挂起命令。
在以后发出这样的命令时,其他应用程序也会得到会话结束的通知。
应用程序也可发出NetBIOS会话状态命令,以指出会话的状态。
会话通信的优点体现为,在保证通信具有极高可靠性的同时,数据包的收发顺序正确无误。
但是,会话是一种“以消息为基础”的服务,建立会话、维护会话及适配器之间数据包应答的开销保证了其可靠性。
需引起注意的是:
NetBIOS假定局域网足够快,能够传输需要的数据,因而没有为会话服务设计流控制。
15.Ncb/Mcb
Ncb也叫信息控制块(Messagecontrolblock,Mcb),实际上就是一个数据结构。
Ncb/Mcb域
在Win32环境VC++6.0编译器中,Ncb的结构在nb30.h文件中定义。
下面是Ncb结构的定义。
Ncb有64个字节,分为14个域(或称为字段)和一个10字节的保留域,表2.1显示了Ncb和它的域。
Ncb的各域名解释:
调用(远程)名(ncb_callname[NCBNAMSZ])
调用(远程)名是一个由应用程序设置的16字节域,其值是远程处理的逻辑名。
应用程序设置一个连接或向远程处理发送一个数据包时,将相应设置该字段。
在远程驱动程序连接正期待着接收连接呼叫的本地处理时,NetBI
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 编程
![提示](https://static.bingdoc.com/images/bang_tan.gif)