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

ui设计网站设计与网页制作视频教程移动网站开发工具

ui设计网站设计与网页制作视频教程,移动网站开发工具,网站开发的付款方式,常州网站公司网站文章目录 浏览器输入URL后发生了什么#xff1f;Linux 系统是如何收发网络包的#xff1f;Linux 网络协议栈Linux 接收网络包的流程Linux 发送网络包的流程 浏览器输入URL后发生了什么#xff1f; URL解析 当在浏览器中输入URL后#xff0c;浏览器首先对拿到的URL进行识别… 文章目录 浏览器输入URL后发生了什么Linux 系统是如何收发网络包的Linux 网络协议栈Linux 接收网络包的流程Linux 发送网络包的流程 浏览器输入URL后发生了什么 URL解析 当在浏览器中输入URL后浏览器首先对拿到的URL进行识别抽取出域名字段。 DNS查询 1.查询浏览器缓存(浏览器会缓存之前拿到的DNS 2-30分钟时间)如果没有找到那么-2.检查系统缓存检査hosts文件这个文件保存了一些以前访问过的网站的域名和IP的数据。它就像是一个本地的数据库。如果找到就可以直接获取目标主机的IP地址了。没有找到的话那么-3.检查路由器缓存路由器有自己的DNS缓存可能就包括了这在査询的内容;如果没有那么-4.查询ISP DNS 缓存: ISP服务商DNS缓存(本地服务器缓存)那里可能有相关的内容如果还不行的话那么-5.递归查询:从根域名服务器到顶级域名服务器再到权威域名服务器依次搜索对应目标域名的IP. 通过以上的查找就可以获取到域名对应的IP了。接下来就是向该IP地址定位的HTTP服务器发起TCP连接。 TCP连接 三次握手四次挥手 请求和传输数据 发起HTTP请求建立TCP连接后浏览器会向服务器发送HTTP请求。这个请求包括请求方法如GET、POST、请求头包含一些额外的信息如用户代理、Cookie等以及可能的请求体对于POST请求。服务器处理请求服务器接收到浏览器发送的请求后根据请求的路径和其他信息处理请求并生成响应。接收响应浏览器接收到服务器发送的响应响应包括状态码表示请求成功、失败或其他状态、响应头包含一些元数据如内容类型、缓存控制等和响应体实际的响应数据。渲染页面如果响应的内容是HTML浏览器会解析HTML、构建DOM树和CSSOM树然后将它们合并为渲染树最终绘制到屏幕上。 关闭连接页面渲染完成后浏览器会关闭与服务器的TCP连接释放资源。 Linux 系统是如何收发网络包的 Linux 网络协议栈 Linux 网络协议栈的样子其实就类似于 TCP/IP 的四层结构 Linux 接收网络包的流程 网卡是计算机里的一个硬件专门负责接收和发送网络包当网卡接收到一个网络包后会通过 DMA 技术将网络包写入到指定的内存地址也就是写入到 Ring Buffer 这个是一个环形缓冲区接着就会告诉操作系统这个网络包已经到达。 那应该怎么告诉操作系统这个网络包已经到达了呢 最简单的一种方式就是触发中断也就是每当网卡收到一个网络包就触发一个中断告诉操作系统。 但是这存在一个问题在高性能网络场景下网络包的数量会非常多那么就会触发非常多的中断要知道当 CPU 收到了中断就会停下手里的事情而去处理这些网络包处理完毕后才会回去继续其他事情那么频繁地触发中断则会导致 CPU 一直没完没了的处理中断而导致其他任务可能无法继续前进从而影响系统的整体效率。 所以为了解决频繁中断带来的性能开销Linux 内核在 2.6 版本中引入了 NAPI 机制它是混合「中断和轮询」的方式来接收网络包它的核心概念就是不采用中断的方式读取数据而是首先采用中断唤醒数据接收的服务程序然后 poll 的方法来轮询数据。 因此当有网络包到达时会通过 DMA 技术将网络包写入到指定的内存地址接着网卡向 CPU 发起硬件中断当 CPU 收到硬件中断请求后根据中断表调用已经注册的中断处理函数。 硬件中断处理函数会做如下的事情 需要先**「暂时屏蔽中断」**表示已经知道内存中有数据了告诉网卡下次再收到数据包直接写内存就可以了不要再通知 CPU 了这样可以提高效率避免 CPU 不停的被中断。接着发起**「软中断」**然后恢复刚才屏蔽的中断。 至此硬件中断处理函数的工作就已经完成。 硬件中断处理函数做的事情很少主要耗时的工作都交给软中断处理函数了。 :::info 软中断的处理 ::: 内核中的 ksoftirqd 线程专门负责软中断的处理当 ksoftirqd 内核线程收到软中断后就会来轮询处理数据。 ksoftirqd 线程会从** Ring Buffer** 中获取一个数据帧用 sk_buff 表示从而可以作为一个网络包交给网络协议栈进行逐层处理。 :::info 网络协议栈 ::: 首先会先进入到网络接口层在这一层会检查报文的合法性如果不合法则丢弃合法则会找出该网络包的上层协议的类型比如是 IPv4还是 IPv6接着再去掉帧头和帧尾然后交给网络层。 到了网络层则取出 IP 包判断网络包下一步的走向比如是交给上层处理还是转发出去。当确认这个网络包要发送给本机后就会从 IP 头里看看上一层协议的类型是 TCP 还是 UDP接着去掉 IP 头然后交给传输层。 传输层取出 TCP 头或 UDP 头根据四元组「源 IP、源端口、目的 IP、目的端口」 作为标识找出对应的 Socket并把数据放到 Socket 的接收缓冲区。 最后应用层程序调用 Socket 接口将内核的 Socket 接收缓冲区的数据「拷贝」到应用层的缓冲区然后唤醒用户进程。 至此一个网络包的接收过程就已经结束了你也可以从下图左边部分看到网络包接收的流程右边部分刚好反过来它是网络包发送的流程。 Linux 发送网络包的流程 如上图的右半部分发送网络包的流程正好和接收流程相反。 首先应用程序会调用 Socket 发送数据包的接口由于这个是系统调用所以会从用户态陷入到内核态中的 Socket 层内核会申请一个内核态的 sk_buff 内存将用户待发送的数据拷贝到 sk_buff 内存并将其加入到发送缓冲区。 接下来网络协议栈从 Socket 发送缓冲区中取出 sk_buff并按照 TCP/IP 协议栈从上到下逐层处理。 如果使用的是 TCP 传输协议发送数据那么先拷贝一个新的 sk_buff 副本 这是因为 sk_buff 后续在调用网络层最后到达网卡发送完成的时候这个 sk_buff 会被释放掉。而** TCP 协议是支持丢失重传的在收到对方的 ACK 之前这个 sk_buff 不能被删除。所以内核的做法就是每次调用网卡发送的时候实际上传递出去的是 sk_buff 的一个拷贝等收到 ACK 再真正删除。** 接着对 sk_buff 填充 TCP 头。这里提一下sk_buff 可以表示各个层的数据包在应用层数据包叫 data在 TCP 层我们称为 segment在 IP 层我们叫 packet在数据链路层称为 frame。 你可能会好奇为什么全部数据包只用一个结构体来描述呢协议栈采用的是分层结构上层向下层传递数据时需要增加包头下层向上层数据时又需要去掉包头如果每一层都用一个结构体那在层之间传递数据的时候就要发生多次拷贝这将大大降低 CPU 效率。 于是为了在层级之间传递数据时不发生拷贝只用 sk_buff 一个结构体来描述所有的网络包那它是如何做到的呢是通过调整 sk_buff 中 data 的指针比如 当接收报文时从网卡驱动开始通过协议栈层层往上传送数据报通过增加 skb-data 的值来逐步剥离协议首部。当要发送报文时创建 sk_buff 结构体数据缓存区的头部预留足够的空间用来填充各层首部在经过各下层协议时通过减少 skb-data 的值来增加协议首部。 你可以从下面这张图看到当发送报文时data 指针的移动过程。 至此传输层的工作也就都完成了。 然后交给网络层在网络层里会做这些工作选取路由确认下一跳的 IP、填充 IP 头、netfilter 过滤、对超过 MTU 大小的数据包进行分片。处理完这些工作后会交给网络接口层处理。 网络接口层会通过** ARP 协议获得下一跳的 MAC 地址**然后对 sk_buff 填充帧头和帧尾接着将 sk_buff 放到网卡的发送队列中。 这一些工作准备好后**会触发「软中断」告诉网卡驱动程序这里有新的网络包需要发送**驱动程序会从发送队列中读取 sk_buff将这个 sk_buff 挂到 RingBuffer 中接着将 sk_buff 数据RingBuffer映射到网卡可访问的内存 DMA 区域最后触发真实的发送。 当数据发送完成以后其实工作并没有结束因为内存还没有清理。当发送完成的时候网卡设备会触发一个硬中断来释放内存主要是释放 sk_buff 内存和清理 RingBuffer 内存。 最后当收到这个 TCP 报文的 ACK 应答时传输层就会释放原始的 sk_buff 。 发送网络数据的时候涉及几次内存拷贝操作 第一次调用发送数据的系统调用的时候内核会申请一个内核态的 sk_buff 内存将用户待发送的数据拷贝到 sk_buff 内存并将其加入到发送缓冲区。 第二次在使用 TCP 传输协议的情况下从传输层进入网络层的时候每一个 sk_buff 都会被克隆一个新的副本出来。副本 sk_buff 会被送往网络层等它发送完的时候就会释放掉然后原始的 sk_buff 还保留在传输层目的是为了实现 TCP 的可靠传输等收到这个数据包的 ACK 时才会释放原始的 sk_buff 。 第三次当 IP 层发现 sk_buff 大于 MTU 时才需要进行。会再申请额外的 sk_buff并将原来的 sk_buff 拷贝为多个小的 sk_buff。
http://www.dnsts.com.cn/news/232075.html

相关文章:

  • 建设的网站微信小程序对接广告联盟
  • 有没有做减压的网站常用的网页制作软件有
  • 哪个网站是免费建站长沙网站seo推广公司
  • 做网站流程 优帮云wordpress自定义文章列表管理
  • 深圳自适应网站开发公司建设通网站上能查到的企业
  • 上海建设工程网站wordpress公众号接口
  • 做一个公司网站需要多少钱wordpress 用户密码
  • 晋城企业网站建设wordpress标签页面跳转
  • 阿里云心选建站优质网站建设服务
  • 体育设施建设网站有哪些好玩的网页游戏
  • 什么网站做免费广告最有效果淘大象关键词排名查询
  • 印刷厂网站模板网站建设服务费做什么分录
  • 360网站备案做彩票网站代理犯法吗6
  • 网站建设包含项目网站备案服务内容
  • 做网站教程 简书网站开发php还是jsp
  • 深圳企业做网站公导航栏网站建站
  • 海口智能建站价格asp网站只能打开首页
  • 西昌市做网站的新建的网站百度多久才会收录
  • 一个网站一年多少钱山东济南报备小程序
  • wordpress建站门户怎么才能成为wordpress高手
  • 网站答辩ppt怎么做重庆建设造价工程信息网站
  • 温州市建设工程质监站网站黄村网站建设费用
  • 漯河英文网站建设个股期权网站开发
  • 怎么做asp网站设计商标
  • 网站开发合同履约淡水网站建设哪家便宜
  • 网站建设价格对比分析flash 网站 收费
  • 东莞企业制作网站关于网站推广
  • 中国网站开发排名杭州萧山网站开发
  • 怎么看网站是否被百度惩罚手机图片制作
  • 网站要服务器吗企业系统定制开发