tcp/ip之面试必备
2015-07-26 13:35
399 查看
一 拥塞控制
3个变量:cwnd(拥塞窗口)、ssthresh(慢启动门限)、win(滑动窗口)
1.1慢启动:tcp数据开始发送时,和ack包超时时,会执行慢启动
1)传输开始->执行慢启动,cwnd初始化为1,ssthresh=65535,每收到一个ack,cwnd就增加一个报文段cwnd 会以指数速度增大;
2)超时->执行慢启动,cwnd=1,ssthresh=min(cwnd,win)/2,直到cwnd>sshresh,转为拥塞避免算法;
1.2拥塞避免:cwnd大于ssthresh时,开始执行拥塞避免算法,每收到一个ack,cwnd更新为cwnd+1/cwnd(此处cwnd单位为报文段);
1.3快速重传和快速回复:当收到三个重复的ack时,会执行快速重传和快速恢复,过程如下:
收到三个重复的ack->sshresh设为cwnd/2,cwnd设为ssthresh+3,重传丢失的报文,每次收到另外一个重复的ack,cwnd=cwnd+1,直到收到一个新的ack,cwnd设为ssthresh,进入拥塞避免算法;
二 MSS、TIME_WAIT
MSS(最大报文长度),建立连接时,双方会在tcp选项里互发MSS,通常为MTU-IP首部-TCP首部;
TIME_WAIT状态,当tcp执行主动关闭,发回ack,必须在TIME_WAIT状态停留2MSL的时间,这样可以让tcp再次发送最后一个丢失的ack,设置SO_REUSEADDR选项可以重新使用此端口,但tcp不允许一个连接建立在相同的socket对上;
3个变量:cwnd(拥塞窗口)、ssthresh(慢启动门限)、win(滑动窗口)
1.1慢启动:tcp数据开始发送时,和ack包超时时,会执行慢启动
1)传输开始->执行慢启动,cwnd初始化为1,ssthresh=65535,每收到一个ack,cwnd就增加一个报文段cwnd 会以指数速度增大;
2)超时->执行慢启动,cwnd=1,ssthresh=min(cwnd,win)/2,直到cwnd>sshresh,转为拥塞避免算法;
1.2拥塞避免:cwnd大于ssthresh时,开始执行拥塞避免算法,每收到一个ack,cwnd更新为cwnd+1/cwnd(此处cwnd单位为报文段);
1.3快速重传和快速回复:当收到三个重复的ack时,会执行快速重传和快速恢复,过程如下:
收到三个重复的ack->sshresh设为cwnd/2,cwnd设为ssthresh+3,重传丢失的报文,每次收到另外一个重复的ack,cwnd=cwnd+1,直到收到一个新的ack,cwnd设为ssthresh,进入拥塞避免算法;
二 MSS、TIME_WAIT
MSS(最大报文长度),建立连接时,双方会在tcp选项里互发MSS,通常为MTU-IP首部-TCP首部;
TIME_WAIT状态,当tcp执行主动关闭,发回ack,必须在TIME_WAIT状态停留2MSL的时间,这样可以让tcp再次发送最后一个丢失的ack,设置SO_REUSEADDR选项可以重新使用此端口,但tcp不允许一个连接建立在相同的socket对上;
相关文章推荐
- 使用awk对TCP的状态连接数进行统计的二种方法
- Python网络编程:使用pexpect实现快速ssh连接
- HttpClient和HttpURLConnection的区别
- TCP/IP详解学习笔记--UDP协议
- Python:爬虫使用代理防封IP:HTTP Error 403: Forbidden
- 关于使用ArcMap10.0为几何网络建立流向
- HTTP Status 500 - java.lang.Long cannot be cast to java.lang.Integer
- HTTP简单的解析协议
- sprintf和printf http://blog.sina.com.cn/s/blog_44f08a12010007pi.html
- lr函数--web_get_int_property(记录HTTP响应信息)
- 【试水CAS-4.0.3】第06节_CAS服务端配置HTTPS
- LINUX C获取文件大小 http://my.oschina.net/mavericsoung/blog/138769
- poj PIGS 网络流EK
- web中的HTTP协议
- TCP编程,Socket通讯
- http代理
- http压缩
- http缓存
- http协议详解
- 虚拟机下centos6的网络IP配置