TCP的数据发送和接收

来源:互联网 发布:python绝技pdf 百度云 编辑:程序博客网 时间:2024/05/21 19:50

        TCP通信的单位是一个报文,TCP报文包括头部和数据部分,头部最少占用20个字节。运用TCP协议进行通信前需要建立连接(三次握手),数据传输完成后,最后需要断开连接(4次握手)。

         TCP发送缓存和接收缓存,TCP发送窗口和接收窗口,以及拥塞窗口。

         TCP的可靠传输是通过滑动窗口来实现的。TCP的滑动窗口的单位是字节的。

可靠传输 

        发送窗口中是TCP能够发送的数据和没有已经发送但没有收到确认的数据。发送窗口后沿表示已经发送且已经收到确认的数据,发送窗口前沿表示要发送的数据。发送窗口的越大,表示当接到确认后,能够连续发送的数据越多。发送窗口的大小收到对方接收窗口和拥塞窗口的共同影响。

 TCP发送缓冲区有两个作用:

         A)用于存储已经发送的,但没收到确认的数据。

         B)用于保存应用程序传送给TCP发送缓存的准备发送的数据

 

接收窗口用于表示现在能够接收的数据。接收窗口后沿表示应用程序能够取走的数据。

TCP接收缓冲区有两个作用:

        A)用于存储按序到达,还没有被应用程序取走的数据。

       B)用于表示未按序到达的数据。

sd

几个注意:

       1)发送窗口的大小根据对方接收窗口和拥塞窗口大小来决定。

       2)TCP能够累计确认。

       3)TCP没有规定没按序到达的数据的处理方式(是丢掉还是保持在缓冲区中)。

       4)在发送端为每一个发送的报文都设有一个计时器,当在计时器时间内没有收到该报文的确认,就重新传送该报文。

       5)发送窗口的大小不能超过接收窗口的大小。

 

流量控制

        通过流量控制,可以让发送窗口的发送速率不要太快,流量控制是通过滑动窗口来实现的,其需要用来TCP报文中的窗口字段,该字段会用于标识接收端接收窗口的接收能力,用于设定发送窗口的大小。

sd

解决发送时机的三个机制:

1)  设置一个变量,它等于最大报文段长度,这要缓存的数据达到MSS字节时,就发送出去。

2)  由发送方的应用程序指明要求发送报文段,通过报文的PUH字段来实现。

3)  给发送方设计一个计时器,达到该事件,就将数据发送出去(不能超过MSS)。

        Nagle算法:若应用程序将数据逐个字节传送给TCP发送缓冲区,则TCP将第一个字节数据组装成一个报文发送出去。只有当收到该确认报文后,才将缓冲区的所有数据组装成一个报文发送出去。只有收到前一个报文确认才发送下一个报文。Nage算法还规定:当缓冲区的数据已达到发送缓冲区一般或超过报文最大长度时,就立即发送一个报文段。

        为了解决糊涂窗口综合症,可以让接受端等待一段时间、或者让接受缓存已有足够空间容纳一个最长报文段,或者等到接收缓冲已有一半空闲的空间,满足其一,就发送确认报文。

 

拥塞控制

发送方会有一个拥塞窗口,用于和接收窗口一起控制发送窗口的大小。发送窗口的大小取拥塞窗口和接收窗口中值较小的一个。

门阀值

慢开始算法:拥塞窗口的大小从1开始逐渐增加增加到一倍。

拥塞避免算法:当执行慢开始算法时,拥塞窗口大于门阀值时,拥塞窗口的大小每次加一。

不管是慢开始算法还是拥塞避免算法,当出现拥塞时(即没有按时收到确认),就将门阀值减半,拥塞窗口在变为1执行慢开始算法。

快重传算法:是指接收方每收到一个失序的报文时,就发送一次重复确认(确认值为前面按序到达的报文最后一个数据值加1)。当发送方累计收到3次重复确认时,就立即再次发送未被确认的报文,而不必等待计时器到期在发送。

快恢复算法:是指到收到上次重复确认时,就立即将门阀值减半,并执行拥塞避免算法,起始值为门阀值或门阀值+3*MSS 

sd

原创粉丝点击