TCP协议详解

TCP段结构

在这里插入图片描述

注:

  • SYN表示建立连接,FIN表示关闭连接,ACK表示响应,RST表示连接重置。
  • 序列号: 序列号指的是segment中第一个字节的编号,而不是segment的编号。 建立TCP连接时,双方随机选择序列号
  • ACKs: 希望接收到的下一个字节的序列号
    累计确认:该序列号之前的所有字节均已被正确接收到

TCP可靠数据传输概述

  • TCP采用了累积确认的方式,这类似于GBN,即如果TCP发送了对某个序号N的确认,则表明在N之前的所有字节流都已经被正确接收。但是另一方面,TCP又不会像GBN协议那样简单丢弃失序到达的报文段,而是会将它们缓存起来,但是这些被缓存的报文段不会逐个被确认。当发生超时时,TCP只会重传发生超时的那一个报文段。

  • TCP还允许接收方选择性的确认失序到达的分组,而不是累积的对最后一个确认最后一个正确到达的分组,将它与TCP所采取的选择重传结合起来看就很想选择重传协议的工作机制。因此说TCP的差错恢复结合了GBN和选择重传。

TCP重传示例

在这里插入图片描述

TCP流量控制

  • 接收方为TCP连接分配buffer
  • 上层应用可能处理 buffer中数据的速度较慢,引入流量控制,使上层tcp中的buffer不会溢出
  • Receiver通过在Segment 的头部字段将RcvWindow 告诉Sender
  • Sender限制自己已经发送的但还未收到ACK的数据不超过接收方的空闲 RcvWindow尺寸

TCP连接管理

Three way handshake:(建立连接)

  • Step 1: client host sends TCP SYN segment to server
    specifies initial seq #
    no data

  • Step 2: server host receives SYN, replies with SYNACK segment
    server allocates buffers
    specifies server initial seq. #

  • Step 3: client receives SYNACK, replies with ACK segment, which may contain data
    在这里插入图片描述

Closing a connection:

client closes socket: clientSocket.close();

  • Step 1: client向server发送TCP FIN 控制segment

  • Step 2: server 收到FIN, 回复ACK. 关闭连接, 发送FIN.

  • Step 3: client 收到FIN, 回复ACK.
    进入“等待” –如果收到FIN,会重新发送ACK

  • Step 4: server收到ACK. 连接关闭.
    在这里插入图片描述

TCP client lifecycle&TCP server lifecycle
在这里插入图片描述

在这里插入图片描述

TCP拥塞控制

当网络拥塞时数据报不能及时被转,在分组转发网络中,数据报就会被排队,甚至出现丢包因此说网络拥塞会带来网络销:

  • 引入大的排队时延
  • 当数据报被丢失时发送方必须重传,因此引入了重传开销
  • 当数据报被丢失时,丢失路由器的上游路由器做的工作都变成了无用功


慢启动

原理:当连接开始时,指数性增长

加性增—乘性减: AIMD

原理:逐渐增加发送速率,谨慎探测可用带宽,直到发生loss

  • Additive Increase: 每个RTT将CongWin增大一个MSS——拥塞避免
  • Multiplicative Decrease: 发生loss后将CongWin减半
    在这里插入图片描述
    注:MSS(Maximum Segment Size)(最大报文段长度)

Q:何时应该指数性增长切换为线性增长(拥塞避免)?
A:当CongWin达到Loss事件前值的1/2时



Threshold变量

Loss事件发生时, Threshold 被设为Loss事件前CongWin 值的1/2。
在这里插入图片描述
Loss事件的处理:

  • 3个重复ACKs:
    CongWin切到一半
    然后线性增长
  • Timeout事件:
    CongWin直接设为1个 MSS然后指数增长
    达到threshold后, 再线性增长

注:3个重复ACKs表示网络还能够传输一些 segments,timeout事件表明拥塞更为严重。

TCP拥塞控制总结

  • When CongWin is below Threshold, sender in slow-start phase, window grows exponentially.
  • When CongWin is above Threshold, sender is in congestion-avoidance phase, window grows linearly.
  • When a triple duplicate ACK occurs, Threshold set to CongWin/2 and CongWin set to Threshold.
  • When timeout occurs, Threshold set to CongWin/2 and CongWin is set to 1 MSS.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值