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

肃宁网站建设公司企业培训课程体系

肃宁网站建设公司,企业培训课程体系,企业网站建设合同范本,域名注册在那个网站好TCP 会保证每一个报文都能够抵达对方#xff0c;它的机制是这样#xff1a;报文发出去后#xff0c;必须接收到对方返回的确认报文 ACK#xff0c;如果迟迟未收到#xff0c;就会超时重发该报文#xff0c;直到收到对方的 ACK 为止 所以#xff0c;TCP 报文发出去后它的机制是这样报文发出去后必须接收到对方返回的确认报文 ACK如果迟迟未收到就会超时重发该报文直到收到对方的 ACK 为止 所以TCP 报文发出去后并不会立马从内存中删除因为重传时还需要用到它 由于 TCP 是内核维护的所以报文存放在内核缓冲区。如果连接非常多我们可以通过 free 命令观察到 buff/cache 内存是会增大 如果 TCP 是每发送一个数据都要进行一次确认应答。当上一个数据包收到了应答了 再发送下一个。这个模式就有点像我和你面对面聊天你一句我一句但这种方式的缺点是效率比较低的所以这样的传输方式有一个缺点数据包的往返时间越长通信的效率就越低 要解决这一问题不难并行批量发送报文再批量确认报文即可然而这引出了另一个问题发送方可以随心所欲的发送报文吗当然这不现实我们还得考虑接收方的处理能力 当接收方硬件不如发送方或者系统繁忙、资源紧张时是无法瞬间处理这么多报文的。于是这些报文只能被丢掉使得网络效率非常低 为了解决这种现象发生TCP 提供一种机制可以让「发送方」根据「接收方」的实际接收能力控制发送的数据量这就是滑动窗口的由来 接收方根据它的缓冲区可以计算出后续能够接收多少字节的报文这个数字叫做接收窗口。当内核接收到报文时必须用缓冲区存放它们这样剩余缓冲区空间变小接收窗口也就变小了当进程调用read 函数后数据被读入了用户空间内核缓冲区就被清空这意味着主机可以接收更多的报文接收窗口就会变大 因此接收窗口并不是恒定不变的接收方会把当前可接收的大小放在 TCP 报文头部中的窗口字段这样就可以起到窗口大小通知的作用 发送方的窗口等价于接收方的窗口吗如果不考虑拥塞控制发送方的窗口大小「约等于」接收方的窗口大小因为窗口通知报文在网络传输是存在时延的所以是约等于的关系从上图中可以看到窗口字段只有 2 个字节因此它最多能表达65535 字节大小的窗口也就是 64KB 大小 这个窗口大小最大值在当今高速网络下很明显是不够用的。所以后续有了扩充窗口的方法在 TCP 选项字段定义了窗口扩大因子用于扩大 TCP 通告窗口其值大小是 2^14这样就使 TCP 的窗口大小从16 位扩大为 30 位2^16 * 2^ 14 2^30所以此时窗口的最大值可以达到 1GBLinux 中打开这一功能需要把 tcp_window_scaling 配置设为 1默认打开要使用窗口扩大选项通讯双方必须在各自的 SYN 报文中发送这个选项 主动建立连接的一方在 SYN 报文中发送这个选项而被动建立连接的一方只有在收到带窗口扩大选项的 SYN 报文之后才能发送这个选项 这样看来只要进程能及时地调用 read 函数读取数据并且接收缓冲区配置得足够大那么接收窗口就可以无限地放大发送方也就无限地提升发送速度 这是不可能的因为网络的传输能力是有限的当发送方依据发送窗口发送超过网络处理能力的报文时路由器会直接丢弃这些报文。因此缓冲区的内存并不是越大越好 如何确定最大传输速度 在前面我们知道了 TCP 的传输速度受制于发送窗口与接收窗口以及网络设备传输能力。其中窗口大小由内核缓冲区大小决定。如果缓冲区与网络传输能力匹配那么缓冲区的利用率就达到了最大化 问题来了如何计算网络的传输能力呢 相信大家都知道网络是有「带宽」限制的带宽描述的是网络传输能力它与内核缓冲区的计量单位不同 带宽是单位时间内的流量表达是「速度」比如常见的带宽 100 MB/s缓冲区单位是字节当网络速度乘以时间才能得到字节数 这里需要说一个概念就是带宽时延积它决定网络中飞行报文的大小它的计算方式比如最大带宽是 100 MB/s网络时延RTT是 10ms 时意味着客户端到服务端的网络一共可以存放 100MB/s * 0.01s 1MB 的字节 这个 1MB 是带宽和时延的乘积所以它就叫「带宽时延积」缩写为BDPBandwidth Delay Product。同时这 1MB 也表示「飞行中」的TCP 报文大小它们就在网络线路、路由器等网络设备上。如果飞行报文超过了 1 MB就会导致网络过载容易丢包 由于发送缓冲区大小决定了发送窗口的上限而发送窗口又决定了「已发送未确认」的飞行报文的上限。因此发送缓冲区不能超过「带宽时延积」 发送缓冲区与带宽时延积的关系 如果发送缓冲区「超过」带宽时延积超出的部分就没办法有效的网络传输同时导致网络过载容易丢包如果发送缓冲区「小于」带宽时延积就不能很好的发挥出网络的传输效率 所以发送缓冲区的大小最好是往带宽时延积靠近 怎样调整缓冲区大小 在 Linux 中发送缓冲区和接收缓冲都是可以用参数调节的。设置完后Linux 会根据你设置的缓冲区进行动态调节 1、调节发送缓冲区范围 先来看看发送缓冲区它的范围通过 tcp_wmem 参数配置上面三个数字单位都是字节它们分别表示 第一个数值是动态范围的最小值4096 byte 4K第二个数值是初始默认值16384 byte ≈ 16K第三个数值是动态范围的最大值4194304 byte 4096K4M 发送缓冲区是自行调节的当发送方发送的数据被确认后并且没有新的数据要发送就会把发送缓冲区的内存释放掉 2、调节接收缓冲区范围 而接收缓冲区的调整就比较复杂一些先来看看设置接收缓冲区范围的 tcp_rmem 参数上面三个数字单位都是字节它们分别表示 第一个数值是动态范围的最小值表示即使在内存压力下也可以保证的最小接收缓冲区大小4096 byte 4K第二个数值是初始默认值87380 byte ≈ 86K第三个数值是动态范围的最大值6291456 byte 6144K6M 接收缓冲区可以根据系统空闲内存的大小来调节接收窗口 如果系统的空闲内存很多就可以自动把缓冲区增大一些这样传给对方的接收窗口也会变大因而提升发送方发送的传输数据数量反之如果系统的内存很紧张就会减少缓冲区这虽然会降低传输效率可以保证更多的并发连接正常工作 发送缓冲区的调节功能是自动开启的而接收缓冲区则需要配置 tcp_moderate_rcvbuf 为 1 来开启调节功能3、调节 TCP 内存范围 接收缓冲区调节时怎么知道当前内存是否紧张或充分呢这是通过tcp_mem 配置完成的上面三个数字单位不是字节而是「页面大小」1 页表示 4KB它们分别表示 当 TCP 内存小于第 1 个值时不需要进行自动调节在第 1 和第 2 个值之间时内核开始调节接收缓冲区的大小大于第 3 个值时内核不再为 TCP 分配新内存此时新连接是无法建立的 一般情况下这些值是在系统启动时根据系统内存数量计算得到的。根据当前 tcp_mem 最大内存页面数是 177120当内存为 (177120 * 4) /1024K ≈ 692M 时系统将无法为新的 TCP 连接分配内存即 TCP 连接将被拒绝 4、根据实际场景调节的策略 在高并发服务器中为了兼顾网速与大量的并发连接我们应当保证缓冲区的动态调整的最大值达到带宽时延积而最小值保持默认的 4K不变即可。而对于内存紧张的服务而言调低默认值是提高并发的有效手段 同时如果这是网络 IO 型服务器那么调大 tcp_mem 的上限可以让 TCP 连接使用更多的系统内存这有利于提升并发能力。需要注意的是tcp_wmem 和 tcp_rmem 的单位是字节而 tcp_mem 的单位是页面大小。而且千万不要在 socket 上直接设置 SO_SNDBUF 或者SO_RCVBUF这样会关闭缓冲区的动态调整功能
http://www.zqtcl.cn/news/606041/

相关文章:

  • 营销型网站建设报价vue本地访问服务器跨域
  • 支持api网站开发大疆网站建设
  • 国家排污许可网站台账怎么做进销存永久免费
  • 做游戏脚本的网站精品国内网站建设
  • 好的网站建站公司门户网站栏目维护建设方案
  • 如何在电脑上建立网站企业百度网站怎么做的
  • 34线城市做网站推广网站页面如何设计图
  • 成都网站建设前十广州开发网站设计
  • qq人脸解冻自助网站加工平台推荐
  • 中国室内设计联盟网官网网站专题页优化
  • 设计模板图热狗网站关键词优化
  • 无锡网站开发公司重庆网站有哪些
  • 做网站找什么公司工作网站开发思维导图内容
  • 有人知道做网站吗?wordpress多站点cdn
  • 网站风格特点大型外包公司有哪些
  • 如何网站seo用asp做网站有哪控件
  • 网站建设需要哪些成本wordpress商城建站教程
  • 做网络的网站很重要吗网站认证费用
  • flash网站项目背景网页截图快捷键可拉动
  • 郑州企业建设网站北京企业网站模板建站开发
  • 宣传旅游网站建设的观点是什么公众号怎么推广和引流
  • 企业网站制作多少钱山西网络营销方案
  • 焦作住房和城乡建设局网站旅行网站模板
  • 男做基视频网站国家重点高新技术企业名单
  • 公司官方网站开发网站建设电子商务
  • seo网站优化系统搜索引擎优化排名案例
  • 郑州网站建设工作室网站建设全流程 知乎
  • 如何利用源码做网站外贸网站制作推广
  • 国内做网站哪家公司好免费查找资料的网站
  • 自己做的网站百度搜不到搭建网站seo