服务和监听为什么守相同的断口?

解决方案 »

  1.   

    楼主,您的问题可以反映您的认真。但是问题有错。我来一一解释:
    先说说什么是软件领域的端口:
    软件领域的端口一般指网络中面向连接服务和无连接服务的通信协议端口,是一种抽象的软件结构,包括一些数据结构和I/O(基本输入输出)缓冲区。
    这种抽象的软件结构难理解。我来举个例子。不烦我们把端口理解为一套标准。拿插座来说事。当然这个插座可不是硬件的端口,举个例子。插座就是一套标准,它要有电压电流的范围,它还要满足用户(client)的电器的插头的标准。
    “服务和监听为什么守相同的断口?”这话是有错误的。OracleOraDb10g_home1TNSListener此服务一旦启动,就开始扫描监听客户端有没有连接请求,SQL请求,和断连请求。比如说目前端口为1521,那么OracleOraDb10g_home1TNSListener就扫描监听这个端口,比如说现在有一个SQL请求,SQL请求被送入 程序全局区内存(PGA) ,在PGA创建用户进程,用户进程将SQL请求存放到系统全局区内存(SGA)的共享池,共享池做的第一件事就是检查SQL语法是否正确,再者执行PL/SQL批处理计划。去DBWR(数据读写进程)看看有没有client所需要的数据,如果没有将请求给数据缓冲区,由数据缓冲区到物理硬盘去拿。
    楼主会纳闷,为什么不直接给数据缓冲区,让它去物理硬盘去拿,而先要到DBWR去找呢?我来说说,这是个I/O开销的问题,假如有个表的信息就在DBWR里等待数据持久化,而内存与硬盘之间的数据读写速度要比内存与内存的数据读写速度慢1.5万倍,当然这个数字不官方。这就使查询等操作效率大幅提升了。这只是我得看法,但是这只是冰山一角。
    继续,当拿到数据后,数据缓冲区将结果给PGA的服务进程,服务进程会把结果给client。此时注意了,伟大的OracleOraDb10g_home1TNSListener将做一件惊天地,泣鬼神的事,它将要销毁服务进程,以免有死锁发生。好了 说的我头晕眼花...楼主不明白再问吧。一句话,监听端口关荣而艰巨的任务是由OracleOraDb10g_home1TNSListener它来做的。这是它的职责。端口只有一个,没有什么守不守的事,都是必须的。
      

  2.   

    端口一样才能监听啊,就像客户端使用的网络地址就是服务器本身的网络地址,只有使用服务器开的端口,才能连上服务器,比如百度的网址为 http://baidu.com:80 (80是http默认端口,可省略),你输入http://baidu.com:81 就无法访问。