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), 但是这时要维护连接状态(断线?重连?),而且要注意异步时的报文解析
分享到:
相关推荐
1. **Linux网络模型**:Linux遵循了通用的网络模型——OSI七层模型或TCP/IP四层模型。理解这些模型对于理解网络数据包的处理至关重要。书中会详细介绍每一层的主要功能和作用,例如链路层的物理传输、网络层的IP寻址...
- Linux网络模型:包括用户空间和内核空间的交互,以及网络I/O模型(如中断驱动、轮询模式等)。 - 网络设备驱动开发:如何编写和注册`net_device`,以及如何处理硬件中断和数据包收发。 - 数据包的生命周期:从物理...
- Linux网络模型分为五层:数据链路层、网络层、传输层、会话层和应用层,这与OSI七层模型相对应。 - 内核网络子系统的核心是网络协议栈,它负责数据包的接收、处理和发送。 2. **数据链路层**: - Linux内核...
《Linux网络体系结构:Linux内核中网络协议的设计与实现》这本书深入探讨了Linux操作系统内核中的网络架构和协议栈的实现。Linux网络体系结构是理解操作系统如何处理网络通信的关键,它涉及到网络协议的各个层次,...
- 网络模型:Linux遵循OSI七层网络模型(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层)和TCP/IP四层模型(网络接口层、网络层、传输层、应用层)。 - 网络配置:包括IP地址设置(ifconfig命令)...
#### 一、网络模型与协议概述 - **OSI七层模型**:从物理层到应用层,详述了数据在网络中的传输过程。 - **Internet模型**:简化了OSI模型,将网络分为四层:应用层、传输层、互联网层、网络接口层,更侧重于实际...
《深入理解Linux网络技术内幕》是一本专注于Linux操作系统网络技术的专业书籍,对于想要深入学习Linux内核网络模块的开发者来说,是一份极具价值的参考资料。这本书涵盖了从底层网络设备驱动到高层网络协议处理的全...
首先,"Linux网络内幕"部分涵盖了网络基础知识,包括TCP/IP协议族、网络层次模型以及各个层的主要功能。它将帮助读者建立起对网络通信的基本认知,理解网络数据如何在不同层次进行封装和解封装,以及如何通过网络...
Linux网络栈的层次结构可以参照四层Internet模型进行划分,具体如下: 1. **链路层**:负责提供对物理层的访问,常见设备如以太网卡、串口等。 2. **网络层**:负责数据包的路由选择和转发,主要协议包括IP、ICMP、...
下面将详细探讨Linux网络通信中的select模型。 首先,`select`函数是Linux系统调用之一,它的主要作用是监控一组文件描述符,等待它们变为可读、可写或出现错误状态。这使得开发者可以构建高效的并发服务器,避免了...
《Linux网络编程》一书深入探讨了在网络环境中利用Linux操作系统进行高效编程的技术和理论,尤其适合于希望深入了解网络编程原理及实践的读者。本书不仅涵盖了网络编程的基础理论,还提供了丰富的示例代码,帮助读者...
Linux网络编程是操作系统领域中的一个重要话题,特别是在服务器端软件开发中。这门技术涉及如何在Linux环境下编写程序,实现网络通信,包括TCP/IP协议栈、套接字编程、并发服务处理等多个方面。以下是对这个主题的...
### Linux网络编程详解知识点 #### 一、网络基础与历史 - **网络的历史**:介绍计算机网络的发展历程,包括早期的计算机网络是如何形成的,以及它们如何逐渐演变为现代互联网。 - **OSI模型**:详细解释开放系统...
Python网络编程在Linux环境下是一个强大的工具,用于构建服务器端应用程序和服务。这个主题涵盖了多个关键知识点,包括基础概念、Python的网络库、套接字编程、并发处理以及在Linux系统中的应用。 1. **网络编程...
### Linux 下 epoll 网络模型介绍 在深入探讨 Linux 下的 epoll 模型之前,我们先了解一下 epoll 的背景以及它为何成为 Linux 内核中 I/O 多路复用的关键技术之一。 #### 1. epoll 的背景与优势 早期 Linux 内核...
《Linux网络编程》内容简介:Linux是目前最流行的开源操作系统,网络功能在Linux下占有核心的地位。《Linux网络编程》循序渐进地从应用层到Linux内核、从基本知识点到综合案例,向读者介绍如何在Linux下进行网络程序...
2. **协议栈层次结构**:Linux网络协议栈遵循OSI模型,但简化为四层:链路层、网络层、传输层和应用层。链路层处理MAC地址和帧的封装;网络层主要由IP协议实现,处理路由和分组;传输层则包含TCP和UDP,负责端到端的...
以下是关于Linux网络编程的一些核心知识点,从OSI模型、进程间通信、套接字编程、到安全性和高级网络编程的主题。 1. Linux进程间通信(IPC) 进程间通信是指在Linux操作系统中,一个进程与另一个进程之间传递信息...