接着UDP和TCP写:
1.TCP堵塞控制
网络被称为“信息高速公路”。TCP段被封装成为IP包,在原主机和目标主机之间经过数个路由器进行传送。那么路由器有可能发生堵塞。当路由器处理不过来,很可能就会丢包。对于UDP来说,反正我也不可靠,我无所谓。对于TCP来说,我就要维持可靠,我就要重发,我只管我的可靠,不关心你的拥堵。这样很显然,本来拥堵的线路由于TCP的忠贞就更拥堵了。
当然,这只是我形象化了。而TCP也一定考虑到了这个问题。首先TCP要能检测出堵塞。上篇中只要出现TCP片段丢失,就认为是网络堵塞。
而TCP是怎样调节的呢?上节中我说了TCP发送速率受限于滑窗大小,而发送端滑窗大小受限于接收端Advertise window的大小。TCP还有一个congestion window size,取这两个值中间最小的值。
先看下图:
Slow Start是慢启动,这个慢启动在我们从网上下载电影时最明显,先从低速启动,然后稳定在一个速率左右下载文件。Congestion Avoidance就是堵塞避免。
上图只是我下面要说算法的图示。可能会有不同的算法来控制TCP的传输速率。cwnd代表congestion window size的大小,ssthresh是阈值函数。运行时,首先从slow start启动,这个初始设置为1,然后速率倍增。当cwnd到达ssthresh时,就会切换至congestion avoidance,这时速率还是会增,只不过是线性增长。如果速率增长到某一值,丢包了,那么ssthresh变为原来的0.5,同时转向slow
start。如果在slow start时丢包了,ssthresh也会变为原来的0.5,同时重新进入慢启动。
总之,先慢启动,速率启动到ssthresh时,就切换到congestion advoidance。如果中间有丢包,直接ssthresh变为原来的0.5,并转到慢启动重新启动。
2.DNS协议
DNS是域名解析系统,作用是将域名转化为IP。这样我们访问远程机只需记得容易理解的域名就可以了,DNS帮我们确定其IP。
DNS域名解析系统是部署在DNS服务器上的,多个DNS服务器组成树状结构。每一个服务器都代表着树的一个节点,如cs.berkerly.edu分段cs、berkerly、edu段。我们可以在DNS组成的这个树状关系网上最终确定cs.berkerly.edu。那么如果反复请求同一网址,DNS是怎样做到避免重复工作的?
是利用缓存。用户的计算机操作系统具有域名解析的模块。应用程序都是调用这些进行域名解析的。计算机将最近使用的域名解析结果存放在缓存中,如果短时间内再次请求某一网址,先看缓存中有没有,没有的话再去树上递归查询。
反向DNS是根据IP地址获取域名的。根据in-addr节点,不断地根据IP段来递归查询的。