图解tcp-ip协议 – 快课网

上传人:xzh****18 文档编号:44585538 上传时间:2018-06-14 格式:PDF 页数:10 大小:1,017.47KB
返回 下载 相关 举报
图解tcp-ip协议 – 快课网_第1页
第1页 / 共10页
图解tcp-ip协议 – 快课网_第2页
第2页 / 共10页
图解tcp-ip协议 – 快课网_第3页
第3页 / 共10页
图解tcp-ip协议 – 快课网_第4页
第4页 / 共10页
图解tcp-ip协议 – 快课网_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《图解tcp-ip协议 – 快课网》由会员分享,可在线阅读,更多相关《图解tcp-ip协议 – 快课网(10页珍藏版)》请在金锄头文库上搜索。

1、9/19/2014图解TCP-IP协议 快课网http:/ 网络编程 Jay13 18小时前 1399 0评论本文通过两个图来梳理TCPIP协议相关知识。TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道。如图1所示,给出了TCP通信过程的示意图。快课网9/19/2014图解TCP-IP协议 快课网http:/ TCP 三次握手四次挥手图图1主要包括三部分:建立连接、传输数据、断开连接。主要包括三部分:建立连接、传输数据、断开连接。1)建立建立TCP连接很简单,通过三次握手便可建立连接。连接很简单,通过三次握手便可建立连接。2)建立好连接后,开始传输数据。建立好连接后

2、,开始传输数据。TCP数据传输牵涉到的概念很多:超时重传、快速重传、数据传输牵涉到的概念很多:超时重传、快速重传、流量控制、拥塞控制等等。流量控制、拥塞控制等等。3)断开连接的过程也很简单,通过四次握手完成断开连接的过程。断开连接的过程也很简单,通过四次握手完成断开连接的过程。三次握手建立连接:三次握手建立连接:第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端

3、收到服务器的SYNACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。传输数据过程:传输数据过程:a.超时重传超时重传超时重传机制用来保证TCP传输的可靠性。每次发送数据包时,发送的数据报都有seq号,接收端收到数据后,会回复ack进行确认,表示某一seq号数据已经收到。发送方在发送了某个seq包后,等待一段时间,如果没有收到对应的ac

4、k回复,就会认为报文丢失,会重传这个数据包。b.快速重传快速重传接受数据一方发现有数据包丢掉了。就会发送ack报文告诉发送端重传丢失的报文。如果发送端连续收到标号相同的ack包,则会触发客户端的快速重传。比较超时重传和快速重传,可以发现超时重传是发送端在傻等超时,然后触发重传;而快速重传则是接收端主动告诉发送端数据没收到,然后触发发送端重传。c.流量控制流量控制9/19/2014图解TCP-IP协议 快课网http:/ 滑动窗可以是提高TCP传输效率的一种机制。d.拥塞控制拥塞控制滑动窗用来做流量控制。流量控制只关注发送端和接受端自身的状况,而没有考虑整个网络的通信情况。拥塞控制,则是基于整个

5、网络来考虑的。考虑一下这样的场景:某一时刻网络上的延时突然增加,那么,TCP对这个事做出的应对只有重传数据,但是,重传会导致网络的负担更重,于是会导致更大的延迟以及更多的丢包,于是,这个情况就会进入恶性循环被不断地放大。试想一下,如果一个网络内有成千上万的TCP连接都这么行事,那么马上就会形成“网络风暴”,TCP这个协议就会拖垮整个网络。为此,TCP引入了拥塞控制策略。拥塞策略算法主要包括:慢启动,拥塞避免,拥塞发生,快速恢复。四次握手断开连接:四次握手断开连接:第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了

6、(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但此时主动关闭方还可以接受数据。第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。图图2给出了给出了TCP通信过程中的状态转移图,理解此图是我们理解通信过程中的状态转移图,

7、理解此图是我们理解TCPIP协议的关键。协议的关键。9/19/2014图解TCP-IP协议 快课网http:/ TCP状态转移图状态图详细解读:状态图详细解读:1.CLOSED:起始点,在超时或者连接关闭时候进入此状态。2.LISTEN:服务端在等待连接过来时候的状态,服务端为此要调用socket,bind,listen函数9/19/2014图解TCP-IP协议 快课网http:/ 快课网http:/ Slow Start首先,我们来看一下TCP的慢热启动。慢启动的意思是,刚刚加入网络的连接,一点一点地提速,不要一上来就像那些特权车一样霸道地把路占满。新同学上高速还是要慢一点,不要把已经在高速

8、上的秩序给搞乱了。慢启动的算法如下(cwnd全称Congestion Window):1)连接建好的开始先初始化cwnd = 1,表明可以传一个MSS大小的数据。2)每当收到一个ACK,cwnd+ 呈线性上升3)每当过了一个RTT,cwnd = cwnd*2 呈指数让升4)还有一个ssthresh(slow start threshold),是一个上限,当cwnd = ssthresh时,就会进入“拥塞避免算法”(后面会说这个算法)所以,我们可以看到,如果网速很快的话,ACK也会返回得快,RTT也会短,那么,这个慢启动就一点也不慢。拥塞避免算法拥塞避免算法 Congestion Avoidan

9、ce前面说过,还有一个ssthresh(slow start threshold),是一个上限,当cwnd = ssthresh时,就会进入“拥塞避免算法”。一般来说ssthresh的值是65535,单位是字节,当cwnd达到这个值时后,算法如下:1)收到一个ACK时,cwnd = cwnd + 1/cwnd2)当每过一个RTT时,cwnd = cwnd + 1这样就可以避免增长过快导致网络拥塞,慢慢的增加调整到网络的最佳值。很明显,是一个线性上升的算法。9/19/2014图解TCP-IP协议 快课网http:/ = cwnd /2cwnd 重置为 1进入慢启动过程2)Fast Retrans

10、mit算法,也就是在收到3个duplicate ACK时就开启重传,而不用等到RTO超时。TCP Tahoe的实现和RTO超时一样。TCP Reno的实现是:cwnd = cwnd /2sshthresh = cwnd进入快速恢复算法Fast Recovery上面我们可以看到RTO超时后,sshthresh会变成cwnd的一半,这意味着,如果cwnd=sshthresh时出现的丢包,那么TCP的sshthresh就会减了一半,然后等cwnd又很快地以指数级增涨爬到这个地方时,就会成慢慢的线性增涨。我们可以看到,TCP是怎么通过这种强烈地震荡快速而小心得找到网站流量的平衡点的。快速恢复算法快速恢

11、复算法 Fast RecoveryTCP Reno这个算法定义在RFC5681。快速重传和快速恢复算法一般同时使用。快速恢复算法是认为,你还有3个Duplicated Acks说明网络也不那么糟糕,所以没有必要像RTO超时那么强烈。 注意,正如前面所说,进入Fast Recovery之前,cwnd 和 sshthresh已被更新:cwnd = cwnd /2sshthresh = cwnd然后,真正的Fast Recovery算法如下:cwnd = sshthresh + 3 * MSS (3的意思是确认有3个数据包被收到了)重传Duplicated ACKs指定的数据包如果再收到 duplicated Ac

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号