数据库引擎开发以及常见数据库内部原理学习(3):网络编程基础
2014-09-02 08:46
691 查看
康奈尔笔记
线索 网络理论 程序流程 | [b]1.记录: [/b] 网络原理 计算机网路是一种允许计算机进行即时通讯的工具 计算机物理连接可能是电缆也可能是无线介质 生成、转发以及销毁数据的网络设备称之为网络节点 OSI模型 国际标准协议OSI模型是一种字面模型,而且跟IP协议没关系 第一层:物理层:bit流传输,主要是物理介质 第二层:数据链路层:提供介质访问,链路管理,各种链路转换 第三层:网络层:寻址和路由的选择,路由器,转换寻址,路由器 第四层:传输层:建立主机端到端的连接,4层,0保障最少,3最多 第五层:会话层:建立、维护和管理会话,建立的检查点等机制 第六层:表示层:处理数据格式、数据加密,提供与应用分离的格式 第七层:应用层:提供应用程序间通信,识别资源模式 IP协议 为计算机网络相互连接进行通讯而设计的协议 是一套由软件、程序所组成的协议,把各种系统不同的信息转换成统一的格式,使所有的网络节点能实现互通。 第一层:链路层 第二层:连接层,IPV4、IPV6 第三层:传输层 第四层:应用层 TCP协议 TCP协议是IP协议组件中最重要的组成部分 TCP基于IP协议,提供了可靠,有序,错误校验的数据流,用于局域网和广域网中程序之间的信息交换。 坐落于IP协议的传输层 Socket套接字 程序间通讯流的终端,客户端使用套接字进行通讯。 套接字API是一种应用程序开发接口,一般由操作系统提供。(一般指广域网套接字) 一般为IP地址与端口的结合 组成:本地IP、远程IP、协议 程序流程 客户端流程:建立套接字-连接服务器-进行通讯-关闭套接字 服务端流程:建立套接字-监听-接收连接请求-进行通讯-接收客户端关闭套接字信息-关闭套接字 函数接口 socket()创建一个新的套接字并分配系统资源 bind()一般用于服务端,将套接字与套接字地址(例如本地端口以及IP地址)绑定 listen() 一般用于服务端,将绑定的TCP置于监听状态 connect() 一般用于客户端,分配一个本地的空闲端口,并且与远程地址建立连接 accept() 一般用于服务端,接受一个新的连接请求,并创建一个与该链接绑定的套接字 send() 与 recv(), 或 write() 与read(), 或sendto() 与recvfrom()用于发送和接收数据 close() 关闭一个打开的套接字并释放资源 gethostbyname() 与gethostbyaddr() 在IPv4协议中解析域名和地址 select() 用于等待一个或多个指定套接字的下一个读写事件 poll()用于测试一个或多个套接字的读写状态 getsockopt() 得到指定套接字的参数 setsockopt() 配置指定套接字的参数 典型服务端 int main(void) { //套接字地址 struct sockaddr_instSockAddr; //建立套接字 intSocketFD= socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); //判断套接字是否成功 if(-1==SocketFD) { perror("can not create socket"); exit(EXIT_FAILURE); } //重置套接字地址信息 memset(&stSockAddr,0,sizeof(stSockAddr)); stSockAddr.sin_family= AF_INET; stSockAddr.sin_port= htons(1100); stSockAddr.sin_addr.s_addr= htonl(INADDR_ANY); //绑定端口 if(-1== bind(SocketFD,(structsockaddr*)&stSockAddr, sizeof(stSockAddr))) { perror("error bind failed"); close(SocketFD); exit(EXIT_FAILURE); } //监听端口 if(-1== listen(SocketFD,10)) { perror("error listen failed"); close(SocketFD); exit(EXIT_FAILURE); } //循环 for(;;) { //监听连接 intConnectFD= accept(SocketFD, NULL, NULL); if(0>ConnectFD) { perror("error accept failed"); close(SocketFD); exit(EXIT_FAILURE); } /* perform read write operations ... read(ConnectFD,buff,size)*/ if(-1== shutdown(ConnectFD, SHUT_RDWR)) { perror("can not shutdown socket"); close(ConnectFD); close(SocketFD); exit(EXIT_FAILURE); } close(ConnectFD); } close(SocketFD); return EXIT_SUCCESS; } 典型客户端 int main(void) { struct sockaddr_instSockAddr; intRes; intSocketFD= socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); if(-1==SocketFD) { perror("cannot create socket"); exit(EXIT_FAILURE); } memset(&stSockAddr,0,sizeof(stSockAddr)); stSockAddr.sin_family= AF_INET; stSockAddr.sin_port= htons(1100); Res= inet_pton(AF_INET,"192.168.1.3",&stSockAddr.sin_addr); } if(0>Res) { perror("error: first parameter is not a valid address family"); close(SocketFD); exit(EXIT_FAILURE); } elseif(0==Res) { perror("char string (second parameter does not contain valid ipaddress)"); close(SocketFD); exit(EXIT_FAILURE); } if(-1== connect(SocketFD,(struct sockaddr*)&stSockAddr, sizeof(stSockAddr))) { perror("connect failed"); close(SocketFD); exit(EXIT_FAILURE); } /* perform read write operations ... */ (void) shutdown(SocketFD, SHUT_RDWR); close(SocketFD); return EXIT_SUCCESS; } [b]2.简化: [/b] 计算机网络是一种允许计算机通讯的工具。 OSI模型是一种标准化的字面模型,没有真正的广泛运用,其包括:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 IP网络互联协议是一种被广泛运用的互联网协议,主要包括:链路层、连接层、传输层、应用层。 TCP基于IP协议,提供了可靠,有序,错误校验的数据流,是广泛运用与程序中间的。 套接字是一种一般由系统提供的应用程序开发接口。 3.背诵: [b]4.思考: [/b] 网络编程的难度到底在哪里,这里一直是我薄弱网络编程水平所无法真正理解的地方。作为一个java程序员,了解过c,api不难用,netty也关注过,似乎打造一个稳定的网络服务是一件非常麻烦的事情,作为程序员,其实在本质上很难理解对错之外的事情。这个似乎可以说得上是缺陷。能力上的缺陷。 5.复习: |
总结 数据库调优里面有这么句话,80%的数据库问题,与数据库本身无关,这些无关问题里面,又以网络问题为重中之重,Oracle的监听配置也是非常容易出现问题。 在分布式数据库时代,成本的开销主要集中在网络IO之上,所以说,网络对于数据库的重要性不言而喻。 我们这里网路暂时需要的是建立一个客户端与服务端的通讯 |
相关文章推荐
- 数据库引擎开发以及常见数据库内部原理学习(3):网络编程基础
- 数据库引擎开发以及常见数据库内部原理学习(3):网络编程基础
- 数据库引擎开发以及常见数据库内部原理学习(1)
- 数据库引擎开发以及常见数据库内部原理学习(2)
- 数据库引擎开发以及常见数据库内部原理学习(2)
- 数据库引擎开发以及常见数据库内部原理学习(1)
- 数据库引擎开发以及常见数据库内部原理学习(1)
- 数据库引擎开发以及常见数据库内部原理学习(2)
- FFmpeg基础库编程开发学习笔记——音频常见格式及字幕格式
- FFmpeg基础库编程开发学习笔记——音频常见格式及字幕格式
- 深度学习基础模型算法原理及编程实现--09.自编码网络
- 深度学习基础模型算法原理及编程实现--06.循环神经网络
- Struts2框架的运行原理,以及开发流程,和数据库MylSAM引擎的简介
- java连接常见数据库的连接字符串-Java基础-Java-编程开发
- 深度学习基础模型算法原理及编程实现--04.改进神经网络的方法
- FFmpeg基础库编程开发学习笔记——视频常见格式
- Mars老师的Android学习基本路线Linux、数据库、网络协议、服务器端开发知识基础知识
- 网络-两远程客户端之间的通讯原理-Java基础-Java-编程开发
- [做全栈攻城狮]程序员带你学习安卓开发-安卓基础之网络编程 大汇总
- Mars老师的Android学习基本路线Linux、数据库、网络协议、服务器端开发知识基础知识