1.TCP三次握手建立连接
一对终端同时初始化一个它们之间的连接是可能的。但通常是由一端打开一个套接字(socket)然后监听来自另一方的连接,这就是通常所指的被动打开(passive open)。服务器端被被动打开以后,用户端就能开始创建主动打开(active open)。
三次握手流程第一次握手:
Client将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认
第二次握手:
Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
第三次握手:
Client收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并将该数据包发送给Server,Server检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
解释为什么连接的时候A要发送一次确认:
为了防止已失效的连接请求报文段突然又传送到了B,由于A并未发出建立连接的请求,因此不会理睬B的确认,也不会向B发送数据。但B却以为新的运输连接已经建立了,并一直等待A发来数据,因此白白浪费了许多资源
2.TCP四次断开
TCP连接终止使用了四次握手过程(four-wayhandshake),在这个过程中每个终端的连接都能独立地被终止。因此,一个典型的拆接过程需要每个终端都提供一对FIN和ACK、
四次断开第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手
解释为啥会有2MLS的TIME-WAIT的时间等待:
1)为了保证A发送的最后一个ACK报文段能够到达B。即最后这个确认报文段很有可能丢失,那么B会超时重传,然后A再一次确认,同时启动2MSL计时器,如此下去。如果没有等待时间,发送完确认报文段就立即释放连接的话,B就无法重传了(连接已被释放,任何数据都不能出传了),因而也就收不到确认,就无法按照步骤进入CLOSE状态,即必须收到确认才能close。
2)防止“已失效的连接请求报文段”出现在连接中。经过2MSL,那些在这个连接持续的时间内,产生的所有报文段就可以都从网络中消失。即在这个连接释放的过程中会有一些无效的报文段滞留在楼阁结点,但是呢,经过2MSL这些无效报文段就肯定可以发送到目的地,不会滞留在网络中。这样的话,在下一个连接中就不会出现上一个连接遗留下来的请求报文段了。
3.简单理解流量控制和拥塞控制
A、流量控制:
1)作用:控制发送方的窗口大小,让接收方来得及接收
2)实现原理:通过滑动窗口就可以实现,接收方告知发送方自己的窗口大小,发送方立刻更改即可实现流量控制。
B、拥塞控制
1)作用:避免给整体的网络造成较大的堵塞
当我们每个人都在高速上网时,可能因为并发量太大,数据太多,导致链路压力太大,最后大家网速都不咋地,类似于过节开车上高速堵住一样。
拥塞控制就是防止这种现象的发生,或者缓解拥堵问题。
2)实现原理:四种算法(慢开始,拥塞避免、快重传、快恢复)
发送方会维持一个拥塞窗口(动态变化),拥塞窗口的大小代表着网络的拥塞程度。发送方的滑动窗口小于等于该拥塞窗口。
a、慢开始
发送方先探测一下网络的拥塞程度,并不是一开始就发送大量的数据,然后根据拥塞程度慢慢的增大或减小拥塞窗口
b、拥塞避免
该算法用来控制拥塞窗口的增长速率,每一次 RTT (往返时延,是指数据从网络一端传到另一端所需的时间)往返之后,拥塞窗口 + 1 而不是翻倍,这样的话拥塞窗口以线性速率增长,流量可控
c、快重传
当发送方没有在超时期限内收到确认信号的话就认为网络阻塞了,此时拥塞窗口变为 1 ,同时把慢开始门限值 ssthresh 减半。
接收方收到一个失序的报文段后就立刻发出重复确认,如下图,M3丢失,会重复确认 M2
快重传示意图一旦接收方连续 3 次收到同一个重复确认就会立马启动快重传算法,即立马重传 M3,而不会等待 M3 的超时时间到期
d、快恢复
快恢复是配合快重传使用的。
上图所示的 M3 丢失,可能是因为 M3 在某个节点因为网络波动等非网络拥挤情况阻塞住了。
也就是网络其实并没有拥塞,快恢复就是在此情况下避免直接重传会真正导致网络阻塞,其原理就是先将拥塞窗口设置成 ssthresh 的大小,然后执行拥塞避免算法
从连续收到三个重复的确认转入拥塞避免
网友评论