赞
踩
目录
保证TCP可靠性的核心机制,确认序号在TCP中表示接下来想要的编号,应答报文ACK
可靠性体现,针对丢包情况进行数据重传。针对丢包情况分为以下两种
TCP 为了保证无论在任何环境下都能比较高性能的通信,因此会动态计算这个最大超时时间。例如:
本质是确认通信双方发送能力和接收能力都正常。
因此经过三次握手通信,主机 A 和 B 对自己和对方的发送接收能力进行了验证,确保了通信的进行。
三次握手可将第二次拓展为两次发送数据,成为四次握手,但是此做法会降低通信效率;不可变成两次握手,因为这样无法验证通信双方的发送和接受能力。
主机A 给主机B 发送结束报文,主机B 返回确认ACK ,主机B 返回FIN ,主机A 返回ACK ,至此通信双方都关闭了通信。
四次挥手的第二、三步不一定能合并。因为发送ACK是操作系统内核的行为,收到FIN的第一时间回复ACK;发送FIN是应用程序的行为,代码执行close()。
窗口大小指的是无需等待确认应答而可以继续发送数据的最大值,发送前几个段的时候,不需要等待任何ACK,直接发送;收到第一个ACK后,滑动窗口醒后移动,继续发送下一个段的数据。操作系统内核为了维护这个滑动窗口,需要开辟发送缓冲区来记录当前还有哪些数据没有应答,只有却应答过的数据,才能从缓冲区删掉,窗口越大,网络吞吐率越高。
丢包进行重传的情况:
此方法是接收方根据自己的处理能力,反向控制发送方的发送速率。
发送方采取动态变化的过程,试探窗口的大小。
慢开始:发送方在初始情况下,设置比较小的窗口大小,尝试更大窗口,直至丢包缩小窗口,循环反复。
当主机B收到主机A的数据后,并不是立刻返回ACK,而是等待500ms,则ACK返回更大窗口(可能应用程序从缓冲区取走了数据)
应用程序返回响应时,顺带携带ACK数据,减少了传输的数据包的个数,降低了通信成本,提高了效应。
面向字节流的问题
应用层在缓冲区中无法区分完整的数据报
解决:设计应用层协议时,能够显示的区分出来数据报的边界
1.显示的指定包的长度
2.显示的指定包和包之间的分隔符(结束标记)
(1)主机B 是发送方:对方没有ACK,触发 “超时重传” 达到一定次数会重置连接(复位报文段RST)
(2)主机B 是接收方:TCP协议中内置了 “保活机制” ==> “心跳包”.每隔一段时间,B会给A发送一个很短的报文(PING),期待 对方返回一个回应(PONG)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。