怎么样建设网站,正规的高端网站制作公司,莱芜金点子招工小时工,全球搜官网衔接上文#xff1a;网络原理必知会_念君思宁的博客-CSDN博客 流量控制#xff1a;
流量控制也是保证可靠性的机制
对于滑动窗口#xff0c;批量发送数据而言#xff0c;窗口越大#xff0c;相当于批量发送的数据越多#xff0c;整体的速度也就越快了#xff0c;但是网络原理必知会_念君思宁的博客-CSDN博客 流量控制
流量控制也是保证可靠性的机制
对于滑动窗口批量发送数据而言窗口越大相当于批量发送的数据越多整体的速度也就越快了但是速度越快越好吗不一定哟
如果你发送的太快了瞬间就把接收方缓冲区给打满了当接下来继续发送此时数据就会丢包这种情况下得不偿失还不如发的慢点了通过流量控制本质上就是让接收方来限制一下发送方的速度让发送方慢点甚至阻塞一下
拥塞控制
滑动窗口的大小取决于流量控制和拥塞控制
流量控制衡量了接收方的处理能力拥塞控制衡量了传输路径的处理能力 其中的中间节点是一系列的交换机和路由器《——》木桶效率 很明显再传输路径上任何一个设备处理能力如果遇到瓶颈都会对整体的传输速率产生明显影响 拥塞控制就是要衡量中间节点的传输能力
拥塞控制要衡量中间路径但是中间路径上有多少节点路由器交换机每个节点的当前情况甚至每次传输走的路径这些都是不一样的因此可以通过实验的方式找到一个合适的发送速率 开始的时候按照一个小的速率发送如果不丢包就可以提高一下速率扩大窗口的大小如果出现丢包则立即把速率调小重复上述的过程一直到动态平衡状态 另外网络的拥堵情况也不是一成不变的处在时刻变化中此时处于拥塞控制这样的策略也就能很好的适应变化的网络环境 因此拥塞窗口《——》拥塞控制实验出来的窗口则实际发送方的窗口大小为拥塞窗口和流量窗口的最小值 延时应答 提高传输效率 TCP可靠性的核心是确认应答
ACK要发但不是立即发而是稍微磨蹭一会再发 延时应答的效果就是通过这个延时该接收方应用程序趁机多消费点数据此时反馈的窗口大小就会更大一丢丢此时发送方的发送速率也就能更快一些同时也能满足让接收方能够处理过来当然也不是所有的包都延迟也得看情况
数量限制每隔N个包就应答一次时间限制超过最大延迟时间就应答一次
捎带应答 捎带应答基于延时应答 补充客户端服务器的通信模型 一问一答绝大部分服务器都是这样的多问一答上传大文件一问多答下载大文件多问多答游戏串流 当然客户端服务器之间的通信模型通常是“一问一答”这种模式的 面向字节流 暗藏杀机——》粘包问题 所谓的“一句话”就相当于一个“应用层数据报”
当A给B连接发了多个应用层数据之后这些数据都积累到B的接收缓冲区紧紧挨在一起此时B的应用程序在读数据的收获就难以区分从哪到哪是一个完整的应用层数据报很容易读成半个包/一个半包…… 如好啊好啊好个P不给拉倒如何进行分开 那么疑问就来了如何解决粘包问题
定义分隔符粘包问题的有效解决方案约定以“ . ”点号结尾约定长度约定数据的前4个字节表示整个数据报的长度
这两点都是自定义应用层协议的注意事项 异常情况
进程关闭/进程崩溃 进程没了socket是文件也随之被关闭 虽然进程没了但是连接还在仍然可以继续四次挥手 主机关机正常流程关机 先杀死所有的用户进程进程没了socket是文件也随之被关闭虽然进程没了但是连接还在仍然可以继续四次挥手如果挥完更好如果没有挥完比如对方发来fin咱们还没来得及ack就关机了此时对端就会重传fin重传几次之后发现都没有ack就尝试重置连接如果还不行就直接释放连接 主机掉电拔电源很快的啪的一下就了《——台式机不考虑笔记本 瞬间机器就关了来不及进行任何挥手操作 1.对端是发送方 对端就会收不到ack——》超时重传——》重置连接——》释放连接 2.对端是接收方 对端没有方法立即知道你这边是没来得及发送数据还是直接就没了其实TCP内置了“心跳包”保活机制心跳包具有周期性当心跳没了那就挂了 虽然对端是接收方对端会定期给咱们发送一个心跳包ping咱们返回一个pong如果每个ping都有及时的pong这个时候说明当前对端的状态良好如果ping过去之后没有pong说明心跳没了怕是这边挂了 心跳包是周期性的没有那么的及时而发送方发过去的数据没ack反馈的更快 网线断开 同上主机掉电
TCP小结
小结一下瞬间开心
确认应答超时重传连接管理三次握手四次挥手滑动窗口批量传输流量控制接收方根据自己的处理能力反向约束发送方传输速度接收方缓冲区剩余空间的大小——》ack应答报文窗口的大小拥塞控制延时应答捎带应答面向字节流粘包问题异常处理心跳包 TCP可靠传输效率没那么高绝大部分场景下都可以使用TCP UDP不可靠传输效率高对于效率要求较高且可靠性要求不高的情况下可使用 TCP是直接和咱们的代码打交道的咱们就不得不多了解一些了IP是在更深层的地方很难直接解除到