小言_互联网的博客

计算机网络笔记No.13

237人阅读  评论(0)

TCP概述

TCP的特点:

  1. TCP是 点对点的传输方式:一个发送方,一个接收方
  2. TCP是可靠的、按序的字节流;
  3. TCP使用流水线机制;
  4. TCP发送方/接收方都有缓存;
  5. TCP是全双工(full-duplex)模式;
  6. TCP是面向连接的协议:
    通信双方在发送数据之前必须建立连接
    连接状态只在连接的两端中维护,在沿途节点中并不维护状态。
    TCP连接包括:两台主机上的缓存、连接状态变量、socket等
  7. TCP有流量控制机制;

TCP段的结构:

TCP的序列号和ACK格式:

  • 序列号:

    • 序列号指的是segment中第一个字节的编号,而不是segment的编号
    • 建立TCP连接时,双方随机选择序列号
  • ACKs:

    • 希望接收到的下一个字节的序列号
    • 累计确认:该序列号之前的所有字节均已被正确接收到

接收方如何处理乱序到达的Segment?——TCP规范中没有规定,由TCP的实现者做出决策

TCP可靠数据传输

概述

  1. TCP在IP层提供的不可靠服务基础上实现可靠数据传输服务;
  2. TCP可靠数据传输使用流水线机制;
  3. TCP可靠数据传输使用累积确认机制;
  4. TCP使用单一重传定时器
  5. 触发重传的事件
    • 超时
    • 收到重复ACK

TCP的RTT和超时设置

  • 超时时间应大于 RTT,但是RTT是变化的;过短导致不必要的重传,过长导致对段丢失时间反应慢

估算RTT:测量从段发出去到收到ACK的时间(忽略重传)

  • 测量多个SampleRTT,求平均值,形成RTT的估计值 EstimatedRTT

TCP发送方事件

  1. 从应用层收到数据
    • 创建Segment
    • 序列号是Segment第一个字节的编号
    • 开启计时器
    • 设置超时时间:TimeOutInterval
  2. 超时事件
    • 重传引起超时的Segment
    • 重启定时器
  3. 收到ACK:如果确认此前未确认的Segment
    • 更新SendBase;
    • 如果窗口中还有未被确认的分组,重新启动定时器

TCP重传示例:

快速重传机制

  • TCP的实现中,如果发生超时,超时时间间隔将重新设置,即将超时时间间隔加倍,导致其很大
    通过重复ACK检测分组丢失:Sender会背靠背地发送多个分组;如果某个分组丢失,可能会引发多个重复的ACK如果sender收到对同一数据的3个ACK,则假定该数据之后的段已经丢失
    快速重传:在定时器超时之前即进行重传

TCP流量控制

在TCP传输中,接收方为TCP连接分配 buffer

上层应用可能处理buffer中数据的速度较慢,发送方如果发送过快会导致溢出

流量控制
Receiver通过在Segment 的头部字段将 RcvWindow 告诉Sender
Sender限制自己已经发送的但还未收到ACK的数据不超过接收方的空闲RcvWindow尺寸

即使Receiver告知Sender RcvWindow=0;为了让后续的传输仍能进行,发送方仍然会发送一个小段

TCP连接管理

TCP sender和receiver在传输数据前需要建立连接:初始化TCP变量:Seq. #、Buffe、r和流量控制信息
建立连接三步握手:


关闭TCP连接管理:

  1. Step 1: client向server发送TCP FIN 控制segment
  2. Step 2: server 收到FIN, 回复ACK. 关闭连接, 发送FIN
  3. Step 3: client 收到FIN, 回复ACK(进入“等待” –如果收到FIN,会重新发送ACK)
  4. Step 4: server收到ACK. 连接关闭.

————————————————————————————————————————————————————————

由于水平有限及时间仓促或疏忽大意以及其他的一些原因,文中难免会存在一些错误,如若有发现不正确的地方,还请大佬们评论或私信告之于我,以便及时纠错


转载:https://blog.csdn.net/weixin_43154583/article/details/105659425
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场