最近复习了下tcp/ip的东西,作点记录吧。算法
1、交互数据流缓存
一、经受时延的确认网络
tcp在接收到数据包的时候一般并不当即发送ack,而是等待一个时延,在此期间若是有数据要发送就将ack与要发送的数据一块儿发送,若是没有,就单独发送ack。在第一次接收到数据包时设立一个定时器,超时时延通常为200ms,这样有助于减小线路上的ack数量。
tcp
二、Nagle算法ide
在交互环境中,小数据包会有不少,在一个网络环境不是很好的状况下,会阻塞网络。Nagle算法能够减小网络上的小数据包的数量。算法规定,在一个tcp链接中未经确认的小数据包只能有一个,即第一个数据包发送出去以后,必须等它的确认到达以后才能继续发送数据包,在此期间,待发送的小数据包组成一个大的数据包,等ack到达以后发送出去。进程
三、通告窗口ip
通告窗口是指接收方通告的窗口大小,表示发送方最大可发送的数据量,在tcp/ip中多指tcp接收缓存的大小,书中所说的到达指的是到达接收方的ip缓冲区,并不是指到达接收方tcp缓存。it
2、成块数据流class
一、滑动窗口定时器
滑动窗口是由发送方维护的,接收方通告的窗口总大小减去未经确认的字节数即为可发送的数据字节数。见《tcp/ip详解》P212。
二、PUSH标志
tcp报文中有一个标志字段是PUSH,当接受方接收到这样报文时,会将缓存中的全部数据提交上层进程。
三、慢启动
若是没有慢启动设置,发送方一开始便向网络发送多个报文段,直至达到接收方通告的敞口大小为止,但这种方式会严重下降tcp链接的吞吐量。慢启动为发送方增长了另外一个窗口:拥塞窗口(cwnd)。拥塞窗口被初始化为一个最大报文段(MSS),此后,每收到一个ACK,拥塞窗口就增长一个报文段,发送方取拥塞窗口与通告窗口中的最小值为发送上限。拥塞窗口是发送方使用的流量控制,通告窗口是接收方使用的流量控制。(通告窗口决定滑动窗口大小,和拥塞窗口一块儿进行流量控制)。
四、带宽时延的乘积
通道容量计算方法:
通道容量(bit)= 带宽(b/s) * RTT(s)
例题:a、b两地之间有一个128ms时延,速率为256000b/s的链路吞吐量为120000b/s,问此时的窗口大小为多少?此线路的带宽时延乘积为0.128*256000 = 32768bit,也就是说,在第一个报文的ack到达以前,发送方能够发送4096byte的报文,可是如今只发送了0.128*120000 = 1920byte的报文,因此接收方窗口大小是1920byte。