《网络编程基础课程精品内容分享》由会员分享,可在线阅读,更多相关《网络编程基础课程精品内容分享(18页珍藏版)》请在金锄头文库上搜索。
1、网络编程基本课程精品内容分享揭开Soket编程的面纱对 TCP 、 P 、 oce 编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问:1什么是 C/IP、DP?2 cet在哪里呢?3. oke是什么呢?4. 你会使用它们吗?什么是TCPIP、UD?CP/I(Transmssin ontrol Protocl/nterne tco)即传播控制合同/网间合同,是一种工业原则的合同集,它是为广域网(ANs)设计的。U(User Daa Prooc,顾客数据报合同)是与TC相相应的合同。它是属于TCPIP合同族中的一种。这里有一张图,表白了这些合同的关系。图1 TC/P
2、合同族涉及运送层、网络层、链路层。目前你懂得TCP/P与UDP的关系了吧。固然对于编程人员来说尚有最重要的一点:TCP/IP合同中涉及自动验证数据有效性机制,如果传播过程中丢包,系统会自动祈求数据包重发。而P则不考虑丢包问题。固然UD没有验包机制,自然性能会有所提高。Sket在哪里呢?在图中,我们没有看到ockt的影子,那么它究竟在哪里呢?还是用图来说话,一目了然。 图2 本来Soket在这里。Socke是什么呢?Sockt是应用层与TP/合同族通信的中间软件抽象层,它是一组接口。在设计模式中,Sot其实就是一种门面模式,它把复杂的TC/IP合同族隐藏在ocket接口背面,对顾客来说,一组简朴
3、的接口就是所有,让ocket去组织数据,以符合指定的合同。通俗的来说:Sce并不是网络传播合同,她只是对网络传播合同进行了封装,从而使得可以在前台使用相似措施进行基于TCP合同与UP合同的通讯了。你会使用它们吗?前人已经给我们做了好多的事了,网络间的通信也就简朴了许多,但毕竟还是有挺多工作要做的。此前听到ocket编程,觉得它是比较高深的编程知识,但是只要弄清Scket编程的工作原理,神秘的面纱也就揭开了。一种生活中的场景。你要打电话给一种朋友,先拨号,朋友听到电话铃声后提起电话,这时你和你的朋友就建立起了连接,就可以发言了。等交流结束,挂断电话结束本次交谈。生活中的场景就解释了这工作原理,也
4、许TCP/P合同族就是诞生于生活中,这也不一定。 图3 先从服务器端说起。服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(litn),调用acep阻塞,等待客户端连接。在这时如果有个客户端初始化一种Soket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据祈求,服务器端接受祈求并解决祈求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。TC/IP合同引入了下列几种概念端口网络中可以被命名和寻址的通信端口,是操作系统可分派的一种资源。 按照OSI七层合同的描述,传播层与网络层在功能上的最大区别是
5、传播层提供进程通信能力。从这个意义上讲,网络通信的最后地址就不仅仅是主机地址了,还涉及可以描述进程的某种标记符。为此,TPP合同提出了合同端口(rotcprt,简称端口)的概念,用于标记通信的进程。端口是一种抽象的软件构造(涉及某些数据构造和/O缓冲区)。应用程序(即进程)通过系统调用与某端口建立连接(biding)后,传播层传给该端口的数据都被相应进程所接受,相应进程发给传播层的数据都通过该端口输出。在TPIP合同的实现中,端靠纪纪作类似于一般的I/O操作,进程获取一种端口,相称于获取本地唯一的I/O文献,可以用一般的读写原语访问之。 类似于文献描述符,每个端口都拥有一种叫端标语(portn
6、umber)的整数型标记符,用于区别不同端口。由于TC传播层的两个合同CP和DP是完全独立的两个软件模块,因此各自的端标语也互相独立,如TP有一种255号端口,UDP也可以有一种25号端口,两者并不冲突。 端标语的分派是一种重要问题。有两种基本分派方式:第一种叫全局分派,这是一种集中控制方式,由一种公认的中央机构根据顾客需要进行统一分派,并将成果发布于众。第二种是本地分派,又称动态连接,即进程需要访问传播层服务时,向本地操作系统提出申请,操作系统返回一种本地唯一的端标语,进程再通过合适的系统调用将自己与该端标语联系起来(绑扎)。CP/I端标语的分派中综合了上述两种方式。TCP/IP将端标语分为
7、两部分,少量的作为保存端口,以全局方式分派给服务进程。因此,每一种原则服务器都拥有一种全局公认的端口(即周知口,wel-knwnport),虽然钥纪纪同机器上,其端标语也相似。剩余的为自由端口,以本地方式进行分派。TCP和UDP均规定,不不小于256的端标语才干作保存端口。地址网络通信中通信的两个进程分别钥纪纪同的机器上。在互连网络中,两台机器也许位涌纪纪同的网络,这些网络通过网络互连设备(网关,网桥,路由器等)连接。因此需要三级寻址:1.某一主机可与多种网络相连,必须指定一特定网络地址;2.网络上每一台主机应有其唯一的地址; .每一主机上的每一进程应有在该主机上的唯一标记符。 一般主机地址由
8、网络ID和主机D构成,在TCP/IP合同中用32位整数值表达;TCP和UD均使用16位端标语标记顾客进程。网络字节顺序 不同的计算机寄存多字节值的顺序不同,有的机器在起始地址寄存低位字节(低价先存),有的存高位字节(高价先存)。为保证数据的对的性,在网络合同中须指定网络字节顺序。TCPI合同使用位整数和32位整数的高价先存格式,它们均含在合同头文献中。 连接两个进程间的通信链路称为连接。连接在目纪纪体现为某些缓冲区和一组合同机制,在外部体现出比无连接高的可靠性。半有关综上所述,网络中用一种三元组可以在全局唯一标志一种进程: (合同,本地地址,本地端标语)这样一种三元组,叫做一种半有关(hlf-
9、socatio),它指定连接的每半部分。全有关 一种完整的网间进程通信需要由两个进程构成,并且只能使用同一种高层合同。也就是说,不也许通信的一端用TCP合同,而另一端用D合同。因此一种完整的网间通信需要一种五元组来标记: (合同,本地地址,本地端标语,远地地址,远地端标语) 这样一种五元组,叫做一种有关(sciatio),即两个合同相似的半有关才干组合成一种合适的有关,或完全指定构成一连接。顺序 在网络传播中,两个持续报文在端-端通信中也许通过不同途径,这样达到目的地时的顺序也许会与发送时不同。“顺序”是指接受数据顺序与发送数据顺序相似。CP合同提供这项服务。差错控制 保证应用程序接受的数据无
10、差错的一种机制。检查差错的措施一般是采用检查“检查和(hesum)”的措施。而保证传送无差错的措施是双方采用确认应答技术。TCP合同提供这项服务。 流控制 在数据传播过程中控制数据传播速率的一种机制,以保证数据不被丢失。P合同提供这项服务。字节流 字节流方式指的是仅把传播中的报文看作是一种字节序列,不提供数据流的任何边界。P合同提供字节流服务。客户服务器模式在TCPIP网络应用中,通信的两个进程间互相作用的重要模式是客户/服务器模式(ient/Server mode),即客户向服务器发出服务祈求,服务器接受到祈求后,提供相应的服务。客户/服务器模式的建立基于如下两点:一方面,建立网络的起因是网
11、络中软硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众多资源的主机提供服务,资源较少的客户祈求服务这一非对等作用。另一方面,网间进程通信完全是异步的,互相通信的进程间既不存在父子关系,又不共享内存缓冲区,因此需要一种机制为但愿通信的进程间建立联系,为两者的数据互换提供同步,这就是基涌纪纪户/服务器模式的C/IP。客户服务器模式钥纪纪作过程中采用的是积极祈求方式:一方面服务器方要先启动,并根据祈求提供相应服务: . 打开一通信通道并告知本地主机,它乐旨在某一公认地址上(192。168.1.10:234)接受客户祈求;. 等待客户祈求达到该端口; 3. 接受到反复服务祈求,解决该祈求并发送
12、应答信号。接受到并发服务祈求,要激活一新进程来解决这个客户祈求。新进程解决此客户祈求,并不需要对其他祈求作出应答。服务完毕后,关闭此新进程与客户的通信链路,并终结。 4 返回第二步,等待另一客户祈求。 5. 关闭服务器 客户方: 1.打开一通信通道,并连接到服务器所在主机的特定端口; 2. 向服务器发服务祈求报文,等待并接受应答;继续提出祈求. 3.祈求结束后关闭通信通道并终结。从上面所描述过程可知: 1. 客户与服务器进程的作用是非对称的,因此编码不同。 2. 服务进程一般是先涌纪纪户祈求而启动的。只要系统运营,该服务进程始终存在,直到正常或逼迫终结。套接字类型CP/IP的ke提供下列三种类
13、型套接字。流式套接字(OK_SRM) 提供了一种面向连接、可靠的数据传播服务,数据无差错、无反复地发送,且按发送顺序接受。内设流量控制,避免数据流超限;数据被看作是字节流,无长度限制。文献传送合同(TP)虽然用流式套接字。 数据报式套接字(SKRAM) 提供了一种无连接服务。数据包以独立包形式被发送,不提供无错保证,数据也许丢失或反复,并且接受顺序混乱。网络文献系统(N)使用数据报式套接字。 原始式套接字(OCK_AW) 该接口容许对较低层合同,如I、CM直接访问。常用于检查新的合同实现或访问既有服务中配备的新设备。基本套接字系统调用创立套接字socet() 应用程序在使用套接字前,一方面必须
14、拥有一种套接字,系统调用socket()向应用程序提供创立套接字的手段,其调用格式如下:Socke(AddesFamil, SoketT, PrtoolType) 使用指定的地址族、套接字类型和合同初始化 ocet 类的新实例。 AddrsFamil:指定 Socet 类的实例可以使用的寻址方案。(InrNwr是只基于IPv4。)SockTye:指定 Soc 类的实例表达的套接字类型。(ram支持可靠、双向、基于连接的字节流,而不反复数据,也不保存边界。此类型的 Sockt 与单个对方主机进行通信,并且在通信开始之前需要远程主机连接。Srea使用传播控制合同ProtoolTypeTp 和 dressamily.InNetwork。)ProoolTyp: 指定 Socke类支持的合同。(TP 基于P合同。)指定本地地址bin()当一种套接字用sckt()创立后,存在一种名字空间(地址族),但它没有被命名。()将套接字地址(涉及本地主机地址和本地端口地址)与所创立的套接字号联系起来,即将名字赋予套接字,以指定本地半有关。其调用格式如下:plcvi id(EPint lcalEP)使 Scke 与一种本地终结点有关联。地址在建立套接字通信过程中起着重要作用,作为一种网络应用程序设计者对套接字地址构造必须有明确结识。(IP端口)建立套接字连接cnect()与cept()这两个系统调用用