`
eric_weitm
  • 浏览: 235055 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

linux 网络模型

阅读更多
linux 网络模型
一、基本概念:
1、多路复用: 一根网线可同时传递多个信号(时分或频分复用)
2、linux内核的作用:管理、调度进程,管理内存,管理外设(文件描述符)、驱动程序、网络(先管理再分发)
3、linux中所有外设都是fd(文件描述符),socket也是一种文件
4、非阻塞IO:机器中只有一个网卡,在多路复用环境下,应用程序需要进行网络IO,这时如果网卡还没准备好,应用程序有2个选择:
   1》等着网卡可用, 如read时网卡上有数据,write时输出缓冲有空间;这时进程会停下来,所以叫阻塞IO
   2》先问一下网卡是否可用,不能用就先处理后面的事情,(非阻塞IO)
5、数据缓存:物理设备转动一下很慢,所以可以在内存中组织一大块数据,在需要时一次性转动设备,之后一次性写出,这样比每次都转动、写出要快。
6、网络缓存:一个socket代表一个网络对端,server会同时处理多个socket,每个socket上有自己的数据;另外,一个OS上多个程序共享一个网卡,这时
  就需要网络缓存。
  1》网卡在内存中的缓冲区(这个和其他块设备是一样的),对于应用程序而言,将报文复制到此缓冲区就完成了写操作
  2》socket内缓存一个报文,用于读、写、处理等操作(复制到socket内就完成了读的操作)
  3》对于应用程序而言, 写到缓冲区就意味着写成功,读到缓存区就意味着读成功(网络双方是异步的关系)

二、select实现原理:
  1、遍历每个fd(socket)调用驱动的poll函数
  2、poll将此进程挂在等待队列,并返回此资源是否可用,
  3、遍历结束时如果没有可用fd,(且未超时、无中断信号)阻塞进程,一直到timeout或者有资源可用
  4、当任何一个fd可用时,唤醒此进程



  while(true)
  {
    select();
    ret = select(maxsock + 1, &fdsr, NULL, NULL, &tv);
  }

三、epoll实现原理
  1、将需要监听的fd放进来
  2、有状态变化或有数据可用时通知应用程序(内核使用回调函数而不是轮询每个fd,这样是空间换时间(设置函数指针是要用空间的))

四、select、epoll区别
  内核在监听状态时的处理方式不同,select是依次轮询每个fd,epoll是每个fd自己在适当的时候回调一下。

五、网络程序基本逻辑

  while(true)
  {
    poll_event();   // 内核检查网络状态变化的事件
    process_event();// 依次处理事件
  }

六、如何选择网络模型?
  1、短连接、开关频繁: 多线程, 长连接时会消耗太多内存(线程的执行栈)
  2、长连接、开关频繁:epoll(有效取event) + 线程队列(有效利用cpu), 但是这时要维护连接状态(断线?重连?),而且要注意异步时的报文解析
分享到:
评论

相关推荐

    Linux网络编程

    《Linux网络编程》内容简介:Linux是目前最流行的开源操作系统,网络功能在Linux下占有核心的地位。《Linux网络编程》循序渐进地从应用层到Linux内核、从基本知识点到综合案例,向读者介绍如何在Linux下进行网络程序...

    select网络模型-Linux

    linux网络模型源码实例,希望对大家有所帮助,共同进步

    Linux网络编程c++百度云.txt

    Linux网络编程之TCP/IP基础篇 Linux网络编程之socket编程篇 Linux网络编程之进程间通信篇 Linux网络编程之线程篇 Linux网络编程之TCP/IP基础篇 01TCPIP基础(一) ISO/OSI参考模型 TCP/IP四层模型 基本概念(对等...

    linux下epoll网络模型介绍

    linux下epoll网络模型介绍 简单讲解如何使用epoll模型, linux下epoll网络模型介绍 简单讲解如何使用epoll模型

    Linux网络通信epoll模型

    本程序以简单的例子介绍了Linux中epoll的用法

    Linux网络通信select模型

    本程序以简单的例子介绍了select模型。

    Linux网络编程.pdf

    Linux网络编程.pdf 第1章 Linux网络编程概述 第2章 TCP/IP协议 第3章 套接字基本函数 第4章 TCP客户机-服务器程序示例 第5章 UDP套接字 第6章 进程和信号 第7章 高级套接字函数 第8章 套接字选项 第9章 进程间通信 ...

    linux网络编程

    《Linux网络编程》内容简介:Linux是目前最流行的开源操作系统,网络功能在Linux下占有核心的地位。《Linux网络编程》循序渐进地从应用层到Linux内核、从基本知识点到综合案例,向读者介绍如何在Linux下进行网络程序...

    linux网络编程基础

    Linux网络编程基础练习代码,包含udp和tcp通信模型。基础练习,大牛请闪

    Linux网络编程 视频 教程

    Linux网络编程(总共41集) 讲解Linux网络编程知识,分以下四个篇章。 Linux网络编程之TCP/IP基础篇 Linux网络编程之socket编程篇 Linux网络编程之进程间通信篇 Linux网络编程之线程篇 Linux网络编程之TCP/IP...

    基于Linux的网络通信模型的设计与实现

    为了提高多用户下服务器的通信效率,本文采用多进程并发模型,并使用 socket 套接字来实现网络通信,同时通过对防火墙的设计在 Linux 下实现全程动态包过滤,提高 网络传输安全性,更好地发挥了 Linux 的实时性,并且保障...

    LinuxSocket网络编程系列文档合集

    教程名称:Linux Socket网络编程系列文档合集课程目录:【】Linux 网络编程入门教程 clown【】linux系统分析与高级编程技术【】Linux网络编程(10)-- 原始套接字【】Linux网络编程(7)--7TCPIP协议【】Linux网络编程--...

    Linux网络编程 part2

    内容包含linux系统概述、linux编程环境、linux文件系统简介、linux下的进程和线程、tcp/ip协议族、应用层网络服务程序、tcp编程、主机信息获取、...模型、ipv6、linux 内核网络部分结构及分布、netfilter框架内报文处理...

    linux网络编程.pdf

    【ChinaByte 教程】如果你想迚入 LINUX 神奇的网络编程世界,请跟我来,在学习乊前,我只需要你 拥有一定的C 语言编程知识,就足够了。我会讱述编写网络程序需要的基本知识。好,今天,让我们 一起来看看,网络编程...

    Linux网络编程超级详细笔记

    Linux网络编程指的是在Linux操作系统下进行网络编程的过程。Linux是一个开放源代码的操作系统,因此,它提供了丰富的网络编程接口和库函数,可以方便地实现网络通信。 Linux网络编程主要涉及以下内容: Socket编程...

    Linux网络编程5种模型实现源代码

    linux下网络编程5种模型Select,Poll,Epoll,多线程,多进程,实现源代码,注释较为详细,方便初学者学习

    Linux网络编程视频视频教程系列一

    Linux网络编程视频视频教程, 01-复习-Linux网络编程mp40 2-信号量生产者复习mp40 3-协议.mp4 4-7层模型和4层模型及代表协议mp4 AV 5-网络传输数据封装流程avi A 06-以太网帧和ARP请求avi AV 07-IP协议.avi 08-端口...

    Linux Socket网络编程

    通俗易懂的Linux网络编程。网络编程所用函数都用表格详细说明,提供网络编程常见编程模型及其代码实现。

Global site tag (gtag.js) - Google Analytics