Linux内核网络部分分析.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第8章 Linux内核网络部分实现分析 本章将以面向对象的思想为核心,分别对网络部分的4个主要对象:协议、套接字、套接字缓冲区及网络设备接口进行分析。 概述 网络部分的设计思想 (1)Linux的网络部分沿用了传统的层次结构 (2)Linux对以上网络层次的实现采用了面向对象的设计方法,层次模型中的各个层次被抽象为对象。 网络协议(protocol):是一种语言,它规定了通信双方之间交换信息的一种规范,是网络传输的基础。 套接字(Socket):一个套接字就是网络中的一个连接,它向用户提供了文件的I/O,并和网络协议紧密地联系在一起,体现了网络和文件系统、进程管理之间的关系,它是网络传输的入口。 设备接口(deviceandinterface):网络设备接口控制着网络数据由软件—硬件—软件的过程,体现了网络和设备的关系,它是网络传输的桥梁。 套接字缓冲区(sh_buff):网络中的缓冲器叫做套接字缓冲区,它是一块保存网络数据的内存区域,体现了网络和内存管理之间的关系,它是网络传输的灵魂。 4个对象之间的关系: 网络协议 网络参考模型 OSI参考模型和TCP/IP参考模型 TCP/IP工作原理及数据流 TCP/IP协议集 Internet协议(IP) IP定义了一个协议,而不是连接。 IP主要负责数据报在计算机之间的寻址问题,并管理这些数据报的分段过程。 IP负责数据报的路由,决定数据报发送到哪里以及出现问题时更换路由。 IP数据报头 TCP 是传输层使用最为广泛的一协议,它可以向上层提供面向连接的协议,使上层启动应用程序,以确保网络上所发送的数据报被完整接收。 TCP必须与低层的IP(使用IP定义好的方法)和高层的应用程序进行通信 套接字(Socket) 套接字在网络中的作用和地位 Socket在所有的网络操作系统中都是必不可少的,而且在所有的网络应用程序中也是必不可少的。 套接字接口的种类 Linux所支持套接字地址族如下: UNIX Unix域套接字 INET 使用TCP/IP的因特网地址族 AX25 业余无线X25 IPX IPX APPLETALK APPLETALK X25 X25 Linux BSD支持的套接字类型: ? Stream 提供可靠的面向连接传输的数据流,保证数据传输过程中无丢失、无损坏和无冗余。I N E T地址族中的T C P协议支持该套接字。 ? Datagram 提供数据的双向传输,但不保证消息 ( message )的准确到达,即使消息能够到达,也无法保证其顺序性,并可能有冗余或损坏。I N E T地址族中的U D P协议支持该套接字。 ? Raw 是低于传输层的低级协议或物理网络提供的套接字类型,比如通过分析为以太网设备所创建的R a w套接字,可看到裸I P数据流。 ? Reliable Delivered Messages 类似于Datagram套接字,但它可以保证数据的正确到达。 ? Sequenced Packets 类似于Stream套接字,但它的报文大小是可变的。 ? Packet 这是Linux对标准BSD套接字类型的扩展,它允许应用程序在设备层直接访问报文数据。 套接字的工作原理 INET和BSD套接字之间的接口通过Internet地址族套接字操作集实现,这些操作集实际是一组协议的操作例程,在include/linux/net.h中定义为proto_ops: struct proto_ops{ int family; int (*release) (struct socket *sock ) int (*bind) (struct socket *sock , struct sockaddr *umyaddr, int sockaddr_len) int(*connect) (….) . . . int (*accept) (….) int (*listen) (…) } BSD套接字层通过调用proto_ops结构中的相应函数执行任务 BSD套接字层向INET套接字层传递socket数据结构来代表一个BSD套接字,socket数据机构在include/linux/net.h中定义如下: struct socket { socket_state

文档评论(0)

iris + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档