当前位置: 首页 > news >正文

自己网站上做淘宝搜索引擎网站seo主要是做什么的

自己网站上做淘宝搜索引擎,网站seo主要是做什么的,通辽市城乡建设局网站,文字生成网页链接一、协议简介 虽然对于网络的正式介绍一般都参考了 OSI#xff08;Open Systems Interconnection#xff09;模型#xff0c;但是本文对 Linux 中基本网络栈的介绍分为四层的 Internet 模型#xff08;如图 1 所示#xff09;。 图 1. 网络栈的 Internet 模型 这个栈的最底… 一、协议简介 虽然对于网络的正式介绍一般都参考了 OSIOpen Systems Interconnection模型但是本文对 Linux 中基本网络栈的介绍分为四层的 Internet 模型如图 1 所示。 图 1. 网络栈的 Internet 模型 这个栈的最底部是链路层。链路层是指提供对物理层访问的设备驱动程序这可以是各种介质例如串口链路或以太网设备。链路层上面是网络层它负责将报文定向到目标位置。再上一层称为传输层负责端到端的通信例如在一台主机内部。尽管网络层负责管理主机之间的通信但是传输层需要负责管理主机内部各端之间的通信。最后一层是应用层它通常是一个语义层能够理解要传输的数据。例如超文本传输协议HTTP就负责传输服务器和客户机之间对 Web 内容的请求与响应。 实际来说网络栈的各个层次有一些更为人所熟知的名字。在链路层上可以找到以太网这是最常用的一种高速介质。更早的链路层协议包括一些串口协议例如 SLIPSerial Line Internet Protocol、CSLIPCompressed SLIP和PPPPoint-to-Point Protocol。最常见的网络层协议是 IPInternet Protocol但是网络层中还存在一些满足其他需求的协议例如 ICMPInternet Control Message Protocol和ARP Address Resolution Protocol。在传输层上是 TCPTransmission Control Protocol和 UDPUser Datagram Protocol。最后应用层中包含很多大家都非常熟悉的协议包括标准的 Web 协议 HTTP 和电子邮件协议 SMTPSimple Mail Transfer Protocol。 二、核心网络架构 现在继续了解 Linux 网络栈的架构以及如何实现这种 Internet 模型。图 2 提供了 Linux 网络栈的高级视图。最上面是用户空间层或称为应用层其中定义了网络栈的用户。底部是物理设备提供了对网络的连接能力串口或诸如以太网之类的高速网络。中间是内核空间即网络子系统也是本文介绍的重点。流经网络栈内部的是 socket 缓冲区sk_buffs它负责在源和汇点之间传递报文数据。您很快就将看到sk_buff 的结构。 图 2. Linux 高级网络栈架构 首先让我们来快速浏览一下 Linux 网络子系统的核心元素后续章节中会更详细进行介绍。顶部请参阅图 2是系统调用接口。它简单地为用户空间的应用程序提供了一种访问内核网络子系统的方法。位于其下面的是一个协议无关层它提供了一种通用方法来使用底层传输层协议。然后是实际协议在 Linux 中包括内嵌的协议 TCP、UDP当然还有 IP。然后是另外一个协议无关层提供了与各个设备驱动程序通信的通用接口最下面是设备驱动程序本身。 三、系统调用接口 系统调用接口可以从两个角度进行描述。用户发起网络调用时通过系统调用接口进入内核的过程应该是多路的。最后调用 ./net/socket.c 中的sys_socketcall 结束该过程然后进一步将调用分路发送到指定目标。系统调用接口的另一种描述是使用普通文件操作作为网络 I/O。例如典型的读写操作可以在网络 socket 上执行socket 使用一个文件描述符表示与一个普通文件一样。因此尽管有很多操作是网络专用的使用 socket 调用创建一个 socket使用 connect 调用连接一个收信方等等但是也有一些标准的文件操作可以应用于网络对象就像操作普通文件一样。最后系统调用接口提供了在用户空间应用程序和内核之间转移控制的方法。 四、协议无关接口 socket 层是一个协议无关接口它提供了一组通用函数来支持各种不同协议。socket 层不但可以支持典型的 TCP 和 UDP 协议而且还可以支持 IP、裸以太网和其他传输协议例如 SCTPStream Control Transmission Protocol。 通过网络栈进行的通信都需要对 socket 进行操作。Linux 中的 socket 结构是 struct sock这个结构是在 linux/include/net/sock.h 中定义的。这个巨大的结构中包含了特定 socket 所需要的所有状态信息其中包括 socket 所使用的特定协议和在 socket 上可以执行的一些操作。 网络子系统可以通过一个定义了自己功能的特殊结构来了解可用协议。每个协议都维护了一个名为 proto 的结构可以在 linux/include/net/sock.h 中找到。这个结构定义了可以在从 socket 层到传输层中执行特定的 socket 操作例如如何创建一个 socket如何使用 socket 建立一个连接如何关闭一个 socket 等等。 五、网络协议 网络协议这一节对一些可用的特定网络协议作出了定义例如 TCP、UDP 等。它们都是在 linux/net/ipv4/af_inet.c 文件中一个名为inet_init 的函数中进行初始化的因为 TCP 和 UDP 都是 inet 簇协议的一部分。 inet_init 函数使用 proto_register 函数来注册每个内嵌协议。这个函数是在 linux/net/core/sock.c 中定义的除了可以将这个协议添加到活动协议列表中之外如果需要该函数还可以选择分配一到多个 slab 缓存。 通过 linux/net/ipv4/ 目录中 udp.c 和 raw.c 文件中的 proto 接口您可以了解各个协议是如何标识自己的。这些协议接口每个都按照类型和协议映射到 inetsw_array该数组将内嵌协议与操作映射到一起。inetsw_array 结构及其关系如图 3 所示。最初会调用 inet_init 中的inet_register_protosw 将这个数组中的每个协议都初始化为 inetsw。函数 inet_init 也会对各个 inet 模块进行初始化例如 ARP、ICMP 和 IP 模块以及 TCP 和 UDP 模块。 图 3. Internet 协议数组结构 Socket 协议的相互关系 回想以下在创建 socket 时需要指定类型和协议例如my_sock socket( AF_INET, SOCK_STREAM, 0 )。AF_INET 表示一个 Internet 地址簇它使用的是一个流 socket定义为 SOCK_STREAM如此处的inetsw_array 所示。 注意在 图 3 中proto 结构定义了传输特有的方法而 proto_ops 结构则定义了通用的 socket 方法。可以通过调用inet_register_protosw 将其他协议加入到 inetsw 协议中。例如SCTP 就是通过调用 linux/net/sctp/protocol.c 中的 sctp_init 加入其中的。有关 SCTP 的更多信息请参阅 参考资料 一节的内容。 socket 中的数据移动是使用一个所谓的 socket 缓冲区sk_buff的核心结构实现的。sk_buff 中包含了报文数据以及涉及协议栈中多个层次的状态数据。所发送或接收的每个报文都是使用一个 sk_buff 表示的。sk_buff 结构是在 linux/include/linux/skbuff.h 中定义的如图 4 所示。 图 4. Socket 缓冲区及其与其他结构的关系 如图所示多个 sk_buff 可以针对某个给定连接链接在一起。每个 sk_buff 都在设备结构net_device中标识报文发送的目的地或者接收报文的来源地。由于每个报文都是使用一个 sk_buff 表示的因此报文头都可以通过一组指针th、iph 和 mac[用于 Media Access Control 或者 MAC 头]方便地进行定位。由于 sk_buff 是 socket 数据管理的中心因此创建了很多支持函数来对它们进行管理。其中有些函数用于创建和销毁 sk_buff 结构或对它进行克隆或排队管理。 针对给定的 socketSocket 缓冲区可以链接在一起这样可以包含众多信息包括到协议头的链接、时间戳报文是何时发送或接收的以及与这个报文相关的设备。 六、设备无关接口 协议层下面是另外一个无关接口层它将协议与具有很多各种不同功能的硬件设备连接在一起。这一层提供了一组通用函数供底层网络设备驱动程序使用让它们可以对高层协议栈进行操作。 首先设备驱动程序可能会通过调用 register_netdevice 或 unregister_netdevice 在内核中进行注册或注销。调用者首先填写net_device 结构然后传递这个结构进行注册。内核调用它的 init 函数如果定义了这种函数然后执行一组健全性检查并创建一个sysfs 条目然后将新设备添加到设备列表中内核中的活动设备链表。在 linux/include/linux/netdevice.h 中可以找到这个 net_device 结构。这些函数都是在 linux/net/core/dev.c 中实现的。 要从协议层向设备中发送 sk_buff就需要使用 dev_queue_xmit 函数。这个函数可以对 sk_buff 进行排队从而由底层设备驱动程序进行最终传输使用 sk_buff 中引用的 net_device 或 sk_buff-dev 所定义的网络设备。dev 结构中包含了一个名为hard_start_xmit 的方法其中保存有发起 sk_buff 传输所使用的驱动程序函数。 报文的接收通常是使用 netif_rx 执行的。当底层设备驱动程序接收一个报文包含在所分配的 sk_buff 中时就会通过调用 netif_rx将 sk_buff 上传至网络层。然后这个函数通过 netif_rx_schedule 将 sk_buff 在上层协议队列中进行排队供以后进行处理。可以在 linux/net/core/dev.c 中找到 dev_queue_xmit 和 netif_rx 函数。 最近内核中引入了一种新的应用程序编程接口NAPI该接口允许驱动程序与设备无关层dev进行交互。有些驱动程序使用的是 NAPI但是大多数驱动程序仍然在使用老式的帧接收接口比例大约是 6 比 1。NAPI 在高负载的情况下可以产生更好的性能它避免了为每个传入的帧都产生中断。 七、设备驱动程序 网络栈底部是负责管理物理网络设备的设备驱动程序。例如包串口使用的 SLIP 驱动程序以及以太网设备使用的以太网驱动程序都是这一层的设备。 在进行初始化时设备驱动程序会分配一个 net_device 结构然后使用必须的程序对其进行初始化。这些程序中有一个是 dev-hard_start_xmit它定义了上层应该如何对 sk_buff 排队进行传输。这个程序的参数为 sk_buff。这个函数的操作取决于底层硬件但是通常 sk_buff 所描述的报文都会被移动到硬件环或队列中。就像是设备无关层中所描述的一样对于 NAPI 兼容的网络驱动程序来说帧的接收使用了 netif_rx 和 netif_receive_skb 接口。NAPI 驱动程序会对底层硬件的能力进行一些限制。 设备驱动程序在 dev 结构中配置好自己的接口之后调用 register_netdevice 便可以使用该配置。在 linux/drivers/net 中可以找出网络设备专用的驱动程序。
http://www.zqtcl.cn/news/268256/

相关文章:

  • 软装设计公司名称怎样给网站做优化
  • 如何判断网站是用什么程序做的云南网站建设公司
  • 清远市建设局官方网站软件开发工程师发展前景
  • 韩国做hh网站图片转链接生成器在线
  • 有凡客模版怎么建设网站百度网盘在线观看资源
  • 网站关键字统计龙岩龙硿洞
  • 成都哪个网站建设比较好建设工程交易服务中心
  • 怎么做好网站推广小笨鸟跨境电商平台
  • 建立一个网站需要多少钱?制作ppt模板的软件
  • 百度 手机网站 友好性青岛谷歌优化
  • 免费的200m网站空间谷歌建站哪家好
  • 哪些平台可以建立网站2345浏览器网页版入口中文版
  • 网站设计与网页制作培训页面设计实训报告
  • 网站建设团队精神深圳福田最新消息今天
  • 网站制作主要公司哪个软件购物便宜又好
  • 如何取一个大气的名字的做网站263企业邮箱登录登录入口电脑版
  • 最好的做法是百度站长seo
  • 网站建设的基础常识dw个人简历网页制作
  • 网站建设怎么样做账义乌市住房和城乡建设局网站
  • 做网站友情链接的步骤wordpress文库主题
  • 网站模板用什么软件做泉州网站建设轩奇网讯
  • 网站开发必备人员网页设计图片居中代码
  • 网站列表页怎么做的百度seo优
  • 做网站销售好不好企业seo培训
  • 网站制作排版越南网站建设
  • 满城建设局网站我要买房网
  • 长沙百度提升排名南宁网站seo公司
  • 凡科网做网站怎样东莞寮步汽车城
  • 做百度网站费用多少基于html5的移动端网站开发
  • 专业做网站设计哪家好大型网站技术方案