数据库引擎开发以及常见数据库内部原理学习(3):网络编程基础

康奈尔笔记

线索

  • 网络理论

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 程序流程

1.记录:

  1. 网络原理
    • 计算机网路是一种允许计算机进行即时通讯的工具
    • 计算机物理连接可能是电缆也可能是无线介质
    • 生成、转发以及销毁数据的网络设备称之为网络节点
  2. OSI模型
    • 国际标准协议OSI模型是一种字面模型,而且跟IP协议没关系
    • 第一层:物理层:bit流传输,主要是物理介质
    • 第二层:数据链路层:提供介质访问,链路管理,各种链路转换
    • 第三层:网络层:寻址和路由的选择,路由器,转换寻址,路由器
    • 第四层:传输层:建立主机端到端的连接,4层,0保障最少,3最多
    • 第五层:会话层:建立、维护和管理会话,建立的检查点等机制
    • 第六层:表示层:处理数据格式、数据加密,提供与应用分离的格式
    • 第七层:应用层:提供应用程序间通信,识别资源模式
  3. IP协议
    • 为计算机网络相互连接进行通讯而设计的协议
    • 是一套由软件、程序所组成的协议,把各种系统不同的信息转换成统一的格式,使所有的网络节点能实现互通。
    • 第一层:链路层
    • 第二层:连接层,IPV4、IPV6
    • 第三层:传输层
    • 第四层:应用层
  4. TCP协议
    • TCP协议是IP协议组件中最重要的组成部分
    • TCP基于IP协议,提供了可靠,有序,错误校验的数据流,用于局域网和广域网中程序之间的信息交换。
    • 坐落于IP协议的传输层
  5. Socket套接字
    • 程序间通讯流的终端,客户端使用套接字进行通讯。
    • 套接字API是一种应用程序开发接口,一般由操作系统提供。(一般指广域网套接字)
    • 一般为IP地址与端口的结合
    • 组成:本地IP、远程IP、协议
  6. 程序流程
    • 客户端流程:建立套接字-连接服务器-进行通讯-关闭套接字
    • 服务端流程:建立套接字-监听-接收连接请求-进行通讯-接收客户端关闭套接字信息-关闭套接字
  7. 函数接口
    • socket()创建一个新的套接字并分配系统资源
    • bind()一般用于服务端,将套接字与套接字地址(例如本地端口以及IP地址)绑定
    • listen() 一般用于服务端,将绑定的TCP置于监听状态
    • connect() 一般用于客户端,分配一个本地的空闲端口,并且与远程地址建立连接
    • accept() 一般用于服务端,接受一个新的连接请求,并创建一个与该链接绑定的套接字
    • send() 与 recv(), 或 write() 与read(), 或sendto() 与recvfrom()用于发送和接收数据
    • close() 关闭一个打开的套接字并释放资源
    • gethostbyname() 与gethostbyaddr() 在IPv4协议中解析域名和地址
    • select() 用于等待一个或多个指定套接字的下一个读写事件
    • poll()用于测试一个或多个套接字的读写状态
    • getsockopt() 得到指定套接字的参数
    • setsockopt() 配置指定套接字的参数
  8. 典型服务端
      1. int main(void)
      2. {
      3. //套接字地址
      4. struct sockaddr_instSockAddr;
      5. //建立套接字
      6. intSocketFD= socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
      7. //判断套接字是否成功
      8. if(-1==SocketFD)
      9. {
      10. perror("can not create socket");
      11. exit(EXIT_FAILURE);
      12. }
      13. //重置套接字地址信息
      14. memset(&stSockAddr,0,sizeof(stSockAddr));
      15. stSockAddr.sin_family= AF_INET;
      16. stSockAddr.sin_port= htons(1100);
      17. stSockAddr.sin_addr.s_addr= htonl(INADDR_ANY);
      18. //绑定端口
      19. if(-1== bind(SocketFD,(structsockaddr*)&stSockAddr,
      20. sizeof(stSockAddr)))
      21. {
      22. perror("error bind failed");
      23. close(SocketFD);
      24. exit(EXIT_FAILURE);
      25. }
      26. //监听端口
      27. if(-1== listen(SocketFD,10))
      28. {
      29. perror("error listen failed");
      30. close(SocketFD);
      31. exit(EXIT_FAILURE);
      32. }
      33. //循环
      34. for(;;)
      35. {
      36. //监听连接
      37. intConnectFD= accept(SocketFD, NULL, NULL);
      38. if(0>ConnectFD)
      39. {
      40. perror("error accept failed");
      41. close(SocketFD);
      42. exit(EXIT_FAILURE);
      43. }
      44. /* perform read write operations ...
      45. read(ConnectFD,buff,size)*/
      46. if(-1== shutdown(ConnectFD, SHUT_RDWR))
      47. {
      48. perror("can not shutdown socket");
      49. close(ConnectFD);
      50. close(SocketFD);
      51. exit(EXIT_FAILURE);
      52. }
      53. close(ConnectFD);
      54. }
      55. close(SocketFD);
      56. return EXIT_SUCCESS;
      57. }
  9. 典型客户端
      1. int main(void)
      2. {
      3. struct sockaddr_instSockAddr;
      4. intRes;
      5. intSocketFD= socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
      6. if(-1==SocketFD)
      7. {
      8. perror("cannot create socket");
      9. exit(EXIT_FAILURE);
      10. }
      11. memset(&stSockAddr,0,sizeof(stSockAddr));
      12. stSockAddr.sin_family= AF_INET;
      13. stSockAddr.sin_port= htons(1100);
      14. Res= inet_pton(AF_INET,"192.168.1.3",&stSockAddr.sin_addr);
      15. }
      16. if(0>Res)
      17. {
      18. perror("error: first parameter is not a valid address family");
      19. close(SocketFD);
      20. exit(EXIT_FAILURE);
      21. }
      22. elseif(0==Res)
      23. {
      24. perror("char string (second parameter does not contain valid
      25. ipaddress)");
      26. close(SocketFD);
      27. exit(EXIT_FAILURE);
      28. }
      29. if(-1== connect(SocketFD,(struct sockaddr*)&stSockAddr,
      30. sizeof(stSockAddr)))
      31. {
      32. perror("connect failed");
      33. close(SocketFD);
      34. exit(EXIT_FAILURE);
      35. }
      36. /* perform read write operations ... */
      37. (void) shutdown(SocketFD, SHUT_RDWR);
      38. close(SocketFD);
      39. return EXIT_SUCCESS;
      40. }

2.简化:

  1. 计算机网络是一种允许计算机通讯的工具。
  2. OSI模型是一种标准化的字面模型,没有真正的广泛运用,其包括:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
  3. IP网络互联协议是一种被广泛运用的互联网协议,主要包括:链路层、连接层、传输层、应用层。
  4. TCP基于IP协议,提供了可靠,有序,错误校验的数据流,是广泛运用与程序中间的。
  5. 套接字是一种一般由系统提供的应用程序开发接口。

3.背诵:

4.思考:

  1. 网络编程的难度到底在哪里,这里一直是我薄弱网络编程水平所无法真正理解的地方。作为一个java程序员,了解过c,api不难用,netty也关注过,似乎打造一个稳定的网络服务是一件非常麻烦的事情,作为程序员,其实在本质上很难理解对错之外的事情。这个似乎可以说得上是缺陷。能力上的缺陷。

5.复习:

  1. 总结
  1. 数据库调优里面有这么句话,80%的数据库问题,与数据库本身无关,这些无关问题里面,又以网络问题为重中之重,Oracle的监听配置也是非常容易出现问题。
  2. 在分布式数据库时代,成本的开销主要集中在网络IO之上,所以说,网络对于数据库的重要性不言而喻。
  3. 我们这里网路暂时需要的是建立一个客户端与服务端的通讯

时间: 2024-10-12 08:19:56

数据库引擎开发以及常见数据库内部原理学习(3):网络编程基础的相关文章

数据库引擎开发以及常见数据库内部原理学习(1)

数据库引擎开发 学习王涛老师的数据库引擎课程已经是很久之前的事情了,限于当时自身的能力,特别是对数据库的理解方面的欠缺,当时可以说是囫囵吞般的学习,尽管如此,当时学习的收获依旧非常之大,而时至今日,自认为自身对数据库的理解更上一层楼,也因为相对复杂多变的现代数据库,这个数据库模型相对于其他数据库来说简单得多,所以重新翻出来,再次学习,试图在源码层面理清楚各种数据库的架构! 因为是笔记类型的博文,所以会不断更新. 线索 数据库发展 关系型数据库理论 NoSQL数据库的介绍 1.记录: 谈谈数据库的

SqlServer 数据库引擎优化顾问优化数据库

现在一直在做的项目,数据量相对也不小,开始的时候没有觉得,因为是刚开始,数据量还很小,在程序使用过程中速度还挺快,但是随着数据量的不停的增长,发现程序越来越慢,甚至出现了超时的问题,因此要对程序和数据库进行优化,前期项目比较紧,没有针对大数据量业务进行分析设计,所以索引等相关优化没有做到位,通过后期的大数据量导致的错误使用了下面的方法. 这里简单的讲一下:如何使用数据库引擎优化顾问优化数据库 简单的优化一下数据库. 一.启动 microsoft sql server management stu

用Netty开发中间件:网络编程基础

用Netty开发中间件:网络编程基础 <Netty权威指南>在网上的评价不是非常高,尤其是第一版,第二版能稍好些?入手后高速翻看了大半本,不免还是想对<Netty权威指南(第二版)>吐槽一下: 前半本的代码排版太糟糕了,简直就是直接打印Word的版式似的. 源代码解析部分的条理性和代码排版好多了,感觉比其它部分的质量高多了. 假设你是刚開始学习的人可能会感觉非常具体,差点儿每部分都会来一套client和服务端的Demo.假设你不是入门者的话可能会感觉水分比較多. 最后一部分高级特性

iOS开发网络篇—网络编程基础

iOS开发网络篇—网络编程基础 一.为什么要学习网络编程 1.简单说明 在移动互联网时代,移动应用的特征有: (1)几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图 (2)只有通过网络跟外界进行数据交互.数据更新,应用才能保持新鲜.活力 (3)如果没有了网络,也就缺少了数据变化,无论外观多么华丽,终将变成一潭死水 移动网络应用 = 良好的UI + 良好的用户体验 + 实时更新的数据 新闻:网易新闻.新浪新闻.搜狐新闻.腾讯新闻 视频:优酷.百度视频.搜狐视频.爱奇艺视频 音乐

python全栈开发从入门到放弃之socket网络编程基础

网络编程基础 一 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网中处处是C/S架构 如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种) 腾讯作为服务端为你提供视频,你得下个腾讯视频客户端才能看它的视频) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发 为何学习socket一定要先学习互联网协议: 1.首先:本节课程的目标就是教会你如何基于socket编程,来开发一款自己的C/S架构软件 2.其次:C/S架构的

iOS网络编程开发—网络编程基础

iOS网络编程开发—网络编程基础 一.网络编程 1.简单说明 在移动互联网时代,移动应用的特征有: (1)几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图 (2)只有通过网络跟外界进行数据交互.数据更新,应用才能保持新鲜.活力 (3)如果没有了网络,也就缺少了数据变化,无论外观多么华丽,终将变成一潭死水 移动网络应用 = 良好的UI + 良好的用户体验 + 实时更新的数据 新闻:网易新闻.新浪新闻.搜狐新闻.腾讯新闻 视频:优酷.百度视频.搜狐视频.爱奇艺视频 音乐:QQ音乐

Storm集群上的开发 ,Storm的内部原理,storm集群间的通信机制(九)

storm间的worker会互相通信,上一个worker的结果会交给下一个worker进行计算.看图

Storm集群上的开发 ,Storm的内部原理,storm提交任务的过程 (八)

storm提交任务的过程: 1.客户端通过storm提交topology 2.nimbus主节点创建本地topology任务目录.tmp 3.nimbus监控zookeeper心跳,计算工作量. 4.nimbus向zookeeper分配任务. 5.从节点监控zk的数据,一旦有新任务分配,启动任务topology.. 6.从zk上获取分配给自己的task任务,启动对应的worker进程.

Storm集群上的开发 ,Storm的内部原理(七)

1.Storm在zookeeper保存的数据结构 2.storm提交任务的过程