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

北海建设厅网站网页设计与制作教程第三版课后答案

北海建设厅网站,网页设计与制作教程第三版课后答案,html视频教程全集,百度销售平台怎样联系目录 协议栈何时发送数据#xff5e; 数据长度 IP模块的分片功能 发送频率 网络包序号#xff5e;利用syn拼接网络包ack确认网络包完整 确定偏移量 服务器ack确定收到数据总长度 序号作用 双端告知各自序号 协议栈自动重发机制 大致流程 ack等待时间如何调整 是…目录 协议栈何时发送数据 数据长度 IP模块的分片功能 发送频率 网络包序号利用syn拼接网络包ack确认网络包完整 确定偏移量 服务器ack确定收到数据总长度 序号作用 双端告知各自序号 协议栈自动重发机制 大致流程 ack等待时间如何调整 是否需要等待收到ack号后在发送数据滑动窗口 合并ack号和窗口大小 总结 1.发送方协议栈根据DNS提供的服务器ip端口确定和服务器通信使用的socket套接字 填充tcp头部信息发送接受方ip端口信息将syn设置为1,修改当前socket状态为正在连接 2.发送方委托ip模块发送给服务器的ip模块。服务器的ip模块再给到服务器的tcp模块根据头部信息找到发送发要连接的socket并填入对应的客户端ip端口,接着创建tcp头部信息发送和接收方ip端口此时的发送方是服务器并填充syn报文值为1代表链接成功和一个ack等于1的报文代表网络包和序号都收到委托服务器ip模块发送建立连接的确认过程文末讲解 3.客户端收到后完善socket中的服务端ip地址端口信息判断服务端返回的syn是否为1来确定是否链接成功 接着设置socket状态为连接完毕最后 向服务端模块在发送一个ack报文1确认网络包收到tcp头部信息还是必须要填写的 协议栈何时发送数据 建立连接后应用就可以和服务端进行通信了应用发的数据会缓存到协议栈中但是何时发送呢有两种情况下面介绍 数据长度 应用可以指定发送数据的大小如果协议栈收到发送指令就进行发送的话不可控而且效率低因此协议栈内部会指定一个长度当达到长度后在进行发送此前发送的数据保存到缓冲区中。 这个长度就是mtu包含了tcpip头部控制信息除去网络包的头部信息后叫做真实数据的最大传输单元叫做mss。 MTU:Maximum Transmission Unit最大传输单元 头部信息是固定长度MTU长度又是固定的因此mss可知。 图中列出的是TCP头部同理UDP也是一样将TCP头部换为UDP头部也一样 MTU以太网中传输的一个网络包的最大数据长度一般为1500字节。 MSS除去TCP/UDP模块的头部控制信息之后一个网络包所能容纳的数据的最大长度。 报头起始分界符FCS是协议栈下层的网卡模块添加的网卡模块介绍。 IP模块的分片功能 我们来回顾下协议栈的TCP和UDP模块填充各自模块的头部控制信息后交给IP模块去发送数据最后一层是IP模块因此IP模块发送的数据长度也就是协议栈发出的数据长度。 TCP/UDP模块发送的数据肯定超过了以太网和通信线路的最大传输长度也就是MTU这个时候IP模块就会对来自TCP/UDP模块的数据进行分片在这篇文章中的分片重组进行了介绍。 接下来举个例子看下UDP模块可以发送的最大数据长度和协议栈最终发出去的数据长度也即IP模块发出去的数据长度 是如何变化的TCP也一样 UDP模块可发送的最大传输数据长度是IP包的最大长度减去IP头部和UDP头部。IP包的最大长度为16比特2的16次方-1也就是65535字节不考虑其他可选字段的话 IP头部最大长度为20字节UDP头部是8字节也就是UDP可传输最大长度为65507字节超过了协议栈所规定的最大传输长度MTU 1500字节因此需要使用IP模块的分片功能进行切割。关于切割分片和重组分片请查看上面提到的文章有详细介绍。 可以看到TCP模块和UDP模块所规定的最大数据长度和协议栈最终发出的数据长度之间经过了IP模块的分片功能处理。也很好理解越往底层传输的数据量越小总不能让上层传输的是0101或者数据长度特别小的数据吧使用者也不方便越往下每一层都进行切割最后切割到可以在网线中传输的0101信号。 发送频率 除了考虑数据长度外还有一个因素要考虑就是应用发送数据的频率。 应用程序发送数据的频率不高的时候如果每次都等到长度接近MSS时再发送可能会因为等待时间太长而造成发送延迟这种情况下即便缓冲区中的数据长度没有达到MSS也应该果断发送出去。为此协议栈的内部有一个计时器当经过一定时间之后就会把网络包发送出去。 大致流程 因此上层应用程序发送的数据会放到协议栈的缓冲区中当满足上面两个因素条件之一时应用程序也可以指定是否立即发送数据还是按照协议栈的规则判断时机就可以发送数据了首先切割mss为单位的数据块在每个数据库开头都加上头部控制信息 拆分示意图协议栈的TCP模块负责添加tcp头部信息接着委托协议栈的ip模块检查是否需要切片然后发送消息ip模块会再分片后的包中添加ip头部和mac头部信息 网络包序号利用syn拼接网络包ack确认网络包完整 上面说过网络包会拆分那么服务器是怎么知道该怎么拼接这些网络包还原成最初的数据呢答案是通过序号 确定偏移量 当拆分数据拼接成网络包的时候会将这块数据相对于起始数据的偏移字节算出来携带到tcp头部除此之外还会携带数据包的总长度 网络包的数据长度不是放到tcp头部中 因为用整个网络包的长度固定的mss减去头部的长度就可以得到数据的长度所以接收方可以用这种方法来进行计算。有了上面两个数值我们就可以知道发送的数据是从第几个字节开始长度是多少了。 服务器ack确定收到数据总长度 接收方会将到目前为止接收到的数据长度加起来计算出一共已经收到了多少个字节然后将这个数值写入TCP头部的ACK号中发送给发送方。 序号作用 序号的作用上面的偏移量是携带到tcp头部中很容易就会拿到自行还原数据破解的因此在传递过程中每个包的数据长度都要进行基于某个值偏移也就是将原来的偏移量要加上序号。 如第一个包默认的偏移量本来是0序号值是666那么现在添加序号之后第一个网络包的偏移量就是666 这样对方就搞不清楚偏移量到底是从多少开始计算的。 实现这种方式需要在开始收发数据之前将初始值告知通信对象。同样服务端也需要告知序号值这样客户端就知道该如何拆分。这个偏移量就是序号值 双端告知各自序号 那么什么时候把这个初始序号值发送给对方呢 在发送连接的阶段中会将syn设置为1 在将SYN设为1的同时还需要同时设置序号字段的值而这里的值就代表序号的初始值。这个syn就是通过告知序号值用于后面通信步调一致知道每个网络包头部的偏移量是基于序号值当前网络包相对于数据头部的偏移量同样第二个阶段服务器返回syn1也是告知客户端之后发送包的序号值同时发送ack数值告知客户端数据是否发送完整需要利用客户端传过来的序号值偏移量减去序号就是真正的偏移量了客户端收到后同样也需要向服务端发送ack来确认服务端发过来的数据是否完整服务端发送syn1的时候将服务端的序号也发送了过来也是用的这个序号来拼接服务端发送过来的数据 这个就是大致的网络包拼接流程 协议栈自动重发机制 自动重发机制协议栈会在收到ack号确认之前中会存放发送的数据如果某一个ack号没有发送过来就会重发这个数据。 大致流程 这样一来无论网络中发生任何错误协议栈都可以发现并采取补救措施重传网络包 。反过来说有了这一机制就不需要在其他地方对错误进行补救了。 因此网卡、集线器、路由器都没有错误补偿机制一旦检测到错误就直接丢弃相应的包。应用程序也是一样因为采用TCP传输即便发生一些错误对方最终也能够收到正确的数据所以应用程序只管自顾自地发送这些数据就好了。不过如果发生网络中断、服务器宕机等问题那么无论TCP怎样重传都不管用。这种情况下无论如何尝试都是徒劳因此TCP会在尝试几次重传无效之后强制结束通信并向应用程序报错 ack等待时间如何调整 ack等待时间也叫超时时间如果协议栈发送数据等待ack的返回这段时间超过了超时时间就会重新发送这个网络包。 但是网络信号是可以改变的所以超时时间也应该和网络信号的好坏动态调整并且网络信号差的时候不仅仅只是重发一个包这么简单后面的所有网络包都会收到影响这个和安卓的anr排查差不多 这个等待时间是根据ACK号返回所需的时间来判断的。具体来说TCP会在发送数据的过程中持续测量ACK号的返回时间如果ACK号返回变慢则相应延长等待时间相对地如果ACK号马上就能返回则相应缩短等待时间。 是否需要等待收到ack号后在发送数据滑动窗口 现在的链路是 客户端服务端确认好端口ip后就开始通信了客户端每次发送数据包携带数据长度信息 服务端返回ack信息确认是否完整收到反过来也是一样的流程 但是有个缺点 就是接收方必须等到发送方返回ack才能继续传输这会增加延时降低通信效率 所以采用滑动窗口的方式。客户端只管发送 不管是否收到ack报文 。 所谓滑动窗口就是在发送一个包之后不等待ACK号返回而是直接发送后续的一系列包。这样一来等待ACK号的这段时间就被有效利用起来了。 这样虽说提高了效率但是如果不等返回ACK号就连续发送包 服务端的处理缓冲区会造成背压问题 发送包的频率超过接收方处理能力的情况。 发送的数据会存储在接收方的缓冲区中之后取出来处理拼接ack号如果什么都不管一直发送缓冲区的数据会溢出某些数据就会被放弃这个肯定不是想要的结果。因此需要出一种机制能够知道对方缓冲区可以接受多少数据根据这个值来判断是否继续发送当服务器的缓冲区数据处理后也需要告知客户端通过tcp头部中的窗口字段 图示 合并ack号和窗口大小 如果接收方可以告知发送方当前可以容纳多少数据呢发送方自己判断已发送的数据是不是到达极限从而暂停 当接收方处理数据时再通知客户端当前缓冲区容纳数据客户端在发送这样是不是完美了 并不是如何确定ack和发送缓冲区数量的包呢是分开发送吗还是合并 如果每次都携带缓冲区数量是不必要的 发送方知道后自己就可以判断是否达到缓冲区处理极限决定是否发送之后数据那分开呢又会降低效率 增加包的数量无疑会导致延迟效率下降 因此 这两个得合并但是不能每次都发所以加了个延时的操作。 分为以下这几种情况 假如我等待发送ack数据时正好服务器处理了数据缓冲区容量更新需要通知到客户端这时候合并 就可以了。再比如我处理完数据了 等待一段时间如果ack也要发送也用合并发送并且如果需要连续发送缓冲区的数量时说明处理速度很快只要同步最后一次的缓冲区可用数量即可比如200---400--600等待一段时间发生减少包数量需要连续发送ack时也是一样 说明客户端连续发送数据 接收方这边等待一段时间之后直接把刚收到的数据总和返回给客户端就行 通过延时解决合并不必要和独立数量多的缺点 具体延时根据实际情况判断很多时候服务器处理速度很快几乎发送完数据就能立马处理完不需要缓冲区数量这个信息 总结 协议栈会检查收到的数据块和TCP头部的内容判断是否有数据丢失如果没有问题则返回ACK号。然后协议栈将数据块暂存到接收缓冲区中并将数据块按顺序连接起来还原出原始的数据最后将数据交给应用程序。具体来说协议栈会将接收到的数据复制到应用程序指定的内存地址中然后将控制流程交回应用程序。将数据交给应用程序之后协议栈还需要找到合适的时机向发送方发送窗口更新。 原文链接协议栈——收发数据拼接网络包自动重发滑动窗口机制 - 掘金 (juejin.cn)
http://www.hkea.cn/news/14260446/

相关文章:

  • 网站目录权限 user网站设计培训班老师
  • asp.net 网站安装包小企业想做网站推广找哪家强
  • 塘沽建设网站公司网站管理建设工作
  • 网站百度快照wordpress关闭错误提示
  • 网站建设数据的保密性河南制作网站公司
  • 免费推广预期效果济南seo推广
  • 空调公司网站建设code snippets wordpress
  • 内蒙古做网站公司模板建站费用
  • 南昌做企业网站门户网站建设内
  • 网站建设制作博走湘西北京网站建设
  • 百度上怎么做网站网站开发费用包括美工费吗
  • 网站开发部门的规章制度网站开发软件要求
  • 什么网站能接工地做网站建设与网页设计美食
  • 2018网站开发跨境电商开店平台
  • 网站页面怎么做导航南宁软件公司
  • 那个网站平台可以做兼职哪些网站可以做兼职
  • 小程序可以做网站吗站长工具app
  • 佛山论坛建站模板网站建设 官
  • 白云区建材网站建设做国外网站建设
  • 大岭山网站仿做关键词排行优化网站
  • 电商网站设计流程沙河网络推广
  • 蓝色网站模板wordpress搬到谷歌服务器
  • 我的世界皮肤做壁纸的网站信息门户系统
  • 海淀区社区建设网站cms框架
  • 网站版权问题做外贸网站案例
  • 做网站 seops做简洁大气网站
  • 网站微信认证费用多少钱可以营销的十大产品
  • 企业应该找什么样的网站建设公司哪些客户需要做网站
  • 贵德县建设局网站西安网站公司排名
  • 四川建设人员数据网站鹤岗市城乡建设局网站