




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
网络编程的基本原理,本讲大纲:,计算机网络,TCP/IP协议,IP地址简介,套接字编程原理,计算机网络,1.计算机网络定义所谓的计算机网络,就是一些互相连接的、自治的计算机的集合。计算机网络有很多种类别。(1)根据不同的作用范围可以将计算机网络理解为广域网(WAN)、城域网(MAN)、局域网(LAN)、个人区域网(PAN)。(2)根据不同的使用者,可以将计算机网络分为公用网和专用网。2.计算机网络的通信模式计算机网络的通信模式有两种,一种是线路交换,另一种是包交换。所谓的线路交换,就是我们家家最开始用的电话的网络连接技术,是通过在发送端和接受端之间建立一条特定的线路,进行数据的传输。而包交换,就是我们现在常用到的计算机的网络通信模式,是通过将所有的计算机放到一个共同的网络连接中,数据的发送端将要传输的数据分割成几份,然后将每一份数据封装成一个包,包中含有接收端的属性信息等,且每个包都是单独传输的。3.计算机网络的体系结构计算机网络主要是分层次的体系结构,可以将需要高度协调的网络通信转化为局部的小问题,分层次的解决这些问题。而根据不同的分层标准,产生了许多不同的计算机网络的体系结构。开放式系统互联(OpenSystemInterconnection)简称OSI,是国际标准化组织(ISO)为了实现计算机网络的标准化而颁布的参考模型。OSI参考模型采用分层的划分原则,将网络中的数据传输划分为7层,每一层使用下层的服务,并向上层提供服务。表12.1描述了OSI参考模型的结构。表12.1OSI参考模型层次名称功能描述第7层应用层(Application)应用层负责网络中应用程序与网络操作系统之间的联系。例如,建立和结束使用者之间的连接,管理建立相互连接使用的应用资源第6层表示层(Presentation)表示层用于确定数据交换的格式,它能够解决应用程序之间在数据格式上的差异,并负责设备之间所需要的字符集和数据的转换第5层会话层(Session)会话层是用户应用程序与网络层的接口,它能够建立与其他设备的连接,即会话。并且它能够对会话进行有效的管理第4层传输层(Transport)传输层提供会话层和网络层之间的传输服务,该服务从会话层获得数据,必要时对数据进行分割,然后传输层将数据传递到网络层,并确保数据能正确无误地传送到网络层第3层网络层(Network)网络层能够将传输的数据封包,然后通过路由选择、分段组合等控制,将信息从源设备传送到目标设备第2层数据链路层(DataLink)数据链路层主要是修正传输过程中的错误信号,它能够提供可靠的通过物理介质传输数据的方法第1层物理层(Physical)利用传输介质为数据链路层提供物理连接,它规范了网络硬件的特性、规格和传输速度OSI参考模型的建立不仅创建了通信设备之间的物理通道,还规划了各层之间的功能,为标准化组合和生产厂家定制协议提供了基本原则,它有助于用户了解复杂的协议,例如TCP/IP、X.25协议等。用户可以将这些协议与OSI参考模型对比,进而了解这些协议的工作原理。,TCP/IP协议,TCP/IP(TransmissionControlProtocal/InternetProtocal,传输控制协议/网际协议)协议是互联网上最流行的协议,但它并不完全符合OSI的7层参考模型。传统的开放式系统互联参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务,该模型的目的是使各种硬件在相同的层次上相互通信,这7层是物理层、数据链路层、网路层、传输层、话路层、表示层和应用层。而TCP/IP通信协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为:应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。传输层:在此层中提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据包协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中。这一层负责传送数据,并且确定数据已被送达并接收。互联网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。网络接口层:对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、SerialLine等)来传送数据。,IP地址简介,IP被称为网际协议,Internet上使用的一个关键的底层协议就是IP协议。我们利用一个共同遵守的通信协议,使Internet成为一个允许连接不同类型的计算机和不同操作系统的网络。要使两台计算机彼此之间进行通信,必须使两台计算机使用同一种“语言”。通信协议正像两台计算机交换信息所使用的共同语言,它规定了通信双方在通信中所应共同遵守的规定。IP协议具有能适应各种各样网络硬件的灵活性,对底层网络硬件几乎没有任何要求,任何一个网络只要可以从一个地点向另一个地点传送二进制数据,就可以使用IP协议加入Internet。如果希望在Internet上进行交流和通信,则每台连上Internet的计算机都必须遵守IP协议。为此,使用Internet的每台计算机都必须运行IP软件,以便时刻准备发送或接收信息。,套接字编程原理,套接字,英文为socket,是一个指向传输提供者的句柄。在Linux系统的网络编程中,就是通过操作该句柄来实现网络通信和管理的。根据性质和作用的不同,套接字可以分为3种,即原始套接字、流式套接字和数据包套接字。原始套接字能够使程序开发人员对底层的网络传输机制进行控制,在原始套接字下接收的数据中含有IP头。流式套接字提供了双向、有序、可靠的数据传输服务,该类型套接字在通信前需要双方建立连接,大家熟悉的TCP协议采用的就是流式套接字。与流式套接字对应的是数据包套接字,数据包套接字提供双向的数据流,但是它不能保证数据传输的可靠性、有序性和无重复性,UDP协议采用的就是数据包套接字。在套接字编程中,套接字接口定义了很多函数,用于套接字编程的创建、打开、连接、数据传入传出等等。接下来对这些函数在Linux中的定义进行介绍。1.套接字建立为了建立套接字,程序可以调用socket()函数,该函数返回一个类似于文件描述符的句柄。socket()函数原型为:intsocket(intdomain,inttype,intprotocol);参数domain代表所使用的协议族,通常为AF_INET,表示互联网协议族(TCP/IP协议族);参数type指定套接字的类型,type可取值为:SOCK_STREAM(流式套接字)或SOCK_DGRAM(数据包套接字),socket接口还定义了SOCK_RAW(原始套接字),允许程序使用底层协议;参数protocol通常赋值0。2.套接字配置通过socket()函数调用返回一个套接字描述符后,在使用套接字进行网络传输以前,必须配置该套接字。面向连接的套接字客户端通过调用connect()函数在套接字数据结构中保存本地信息和远端信息。无连接套接字的客户端和服务端以及面向连接套接字的服务端通过调用bind()函数来配置本地信息。bind()函数将套接字与本机上的一个端口相关联,随后就可以在该端口下,监听服务请求。bind()函数的定义形式如下:intbind(intsockfd,conststructsockaddr*my_addr,socklen_taddrlen);参数sockfd是调用socket()函数返回的套接字描述符;参数my_addr是一个指向包含有本机IP地址及端口号等信息的sockaddr类型的指针;参数addrlen通常被设置为结构体structsockaddr的长度,即sizeof(structsockaddr)。3.字节优先顺序计算机数据存储有两种字节优先顺序:高位字节优先和低位字节优先。在互联网上数据以高位字节优先顺序在网络上传输,所以对于在内部是以低位字节优先方式存储数据的机器,在互联网上传输数据时就需要进行转换,否则就会出现数据不一致。4.连接建立面向连接的客户程序使用connect()函数来配置套接字并与远端服务器建立一个TCP连接,该函数的定义形式如下:intconnect(intsockfd,conststructsockaddr*serv_addr,socklen_taddrlen);参数sockfd是socket()函数返回的套接字描述符;参数serv_addr是包含远端主机IP地址和端口号的指针;参数addrlen是远端地质结构的长度。,套接字编程原理,5.监听模式函数listen()使套接字处于被动的监听模式,并为该套接字建立一个输入数据队列,将到达的服务请求保存在此队列中,直到程序对它们进行处理它们。intlisten(intsockfd,intbacklog);参数sockfd是socket()函数返回的套接字描述符;参数backlog指定在请求队列中允许的最大请求数,进入的连接请求将在队列中等待accept()等系统调用的操作。参数backlog对队列中等待服务的请求的数目进行了限制,大多数系统缺省值为20。如果一个服务请求到来时,输入队列已满,该套接字将拒绝连接请求,客户将收到一个出错信息。6.接收请求accept()函数让服务器接收客户的连接请求。在建立好输入队列后,服务器就调用accept()函数,然后睡眠并等待客户的连接请求intaccept(intsockfd,structsockaddr*addr,socklen_t*addrlen);参数sockfd是socket()函数返回的套接字描述符;参数addr通常是一个指向sockaddr_in变量的指针,该变量用来存放提出连接请求服务的主机的信息;参数addrten通常为一个指向值为sizeof(structsockaddr_in)的整型指针变量。函数调用出错时accept()函数返回-1,并置相应的errno值。7.数据传输函数send()和recv()用于在面向连接的套接字上进行数据传输。ssize_tsend(intsockfd,constvoid*msg,size_tlen,intflags);参数sockfd是socket()函数返回的套接字描述符;参数msg是一个指向要发送数据的指针;参数len是以字节为单位的数据的长度;参数flags一般情况下置为0。send()函数返回实际上发送出的字节数,可能会少于你希望发送的数据。在程序中应该将send()的返回值与想要发送的字节数进行比较。当send()返回值与len不匹配时,应该对这种情况进行处理。ssize_trecv(ints,void*buf,size_tlen,intflags);参数sockfd是socket()函数返回的套接字描述符;参数buf是存放接收数据的缓冲区;参数len是缓冲的长度。参数flags也被置为0。函数recv()返回实际上接收的字节数,当出现错误时,返回-1并置相应的errno值。函数sendto()和recvfrom()用于在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- JJF(烟草)4.1-2010烟草及烟草制品连续流动法测定常规化学成分测量不确定度评定指南第1部分:水溶性糖
- 考研复习-风景园林基础考研试题附参考答案详解(培优a卷)
- 风景园林基础考研资料试题及参考答案详解(培优)
- 《风景园林招投标与概预算》试题A带答案详解(巩固)
- 2025-2026年高校教师资格证之《高等教育法规》通关题库附答案详解(考试直接用)
- 2023国家能源投资集团有限责任公司第一批社会招聘笔试备考题库附答案详解(基础题)
- 2025福建晋园发展集团有限责任公司权属子公司招聘7人笔试备考题库及答案详解(夺冠)
- 2025年黑龙江省五常市辅警招聘考试试题题库附答案详解(培优a卷)
- 2025年河北省定州市辅警招聘考试试题题库附答案详解ab卷
- 2.3.2漏电流的检测设备的电气绝缘应具有良好的防电击性能
- 运动技能学习与控制智慧树知到期末考试答案章节答案2024年牡丹江师范学院
- 毕业设计(论文)-某机修厂供配电系统设计
- 2024网络信息安全应急响应Linux应急手册
- 授权委托代理人出庭范文
- 企业网络管理员年终总结报告
- 三病母婴阻断
- 煤矿调度员十项应急处置
- T-CPHA 20-2023 集装箱起重机远程控制F5G网络系统技术要求
- 分布式光伏发电建设背景和必要性
- 人工智能在智能体育中的应用创新
- 2024年全国初中数学联赛试题及答案(修正版)
评论
0/150
提交评论