TCP协议

概念

TCP协议是一种面向连接的、可靠的、基于IP的传输层协议。每条TCP连接只能有两个端口,TCP连接是点对点的。全双工,面向数据流。
TCP 根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP 发送的报文长度是应用进程给出的)。

TCP报文头部格式

TCP报文头部

  • 序列号(SYN):表示报文所发送的数据的第一个字节的序号
  • 确认号(ACK):期望收到对方的下一个报文段数据的第一个字节的序号
  • 数据偏移:4位,该TCP包所传输的数据部分从哪一位开始计算。TCP首部为20字节,那么偏移设置为5
  • 保留:6位
  • 控制位:
    • URG:紧急数据,不进行缓存,直接交付应用层
    • ACK:为1时,确认应答字段有效(TCP规定除了最初建立连接的SYN包外必须设置为1)
    • PSH:为1时,需要将受到的数据立刻传给上层应用协议;为0时,可以先进行缓存
    • RST:当 RST = 1 时,表明出现异常必须强制断开连接。一般是TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接
    • SYN:同步 SYN = 1 表示这是一个连接请求或连接接受报文。并在其序列号字段进行序列号初始值设定
    • FIN:用来释放一个连接。FIN = 1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
  • 窗口大小:2字节,用来让对方设置发送窗口的依据,单位为字节。
  • 检验和: 占 2 字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。
  • 紧急指针: 占 16 位,指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。
  • 选项字段:长度可变。TCP 最初只规定了一种选项,即最大报文段长度 MSS。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。”

三次握手与四次挥手

三次握手

在建立连接时可以确定MSS大小

四次挥手

停止等待协议、连续ARQ协议、 滑动窗口、流量控制、拥塞控制(慢开始、拥塞避免、快重传、快恢复)

滑动窗口协议

由于每发送一个段就进行确认的通信性能较差,所以引入了窗口的概念。窗口大小是无需等待确认应答而可以继续发送数据的最大值。

  • 缓冲区:
    发送端和接收端同时维护一个独立的发送缓冲区和接收缓冲区
  • 发送窗口中的四种情况:
    • 已发送并收到确认的数据(不再发送窗口和发送缓冲区之内)
    • 已发送但未收到确认的数据(位于发送窗口之中)
    • 允许发送但尚未发送的数据
    • 发送窗口外发送缓冲区内暂时不允许发送的数据
  • 每次发送成功后,发送窗口就会在发送缓冲区按顺序移动,将新的数据包含到窗口中准备发送



停止等待协议:
每发送一个分组,等待接受到ACK后才继续发送下一个分组
缺点:信道利用率太低

连续ARQ协议
发送方采用流水线传输。流水线传输就是发送方可以连续发送多个分组(约定大小),不必每发完一个分组就停下来等待对方确认。
缺点:没有缓存,当某个数据包丢失后所有后续的数据包都抛弃

窗口控制和重发控制

  • 采用累积确认的方式,对于按序到达的最后一个分组发送确认。
  • 当某一段报文丢失,发送端如果连续3次收到了同一确认应答,就会将对应的数据重发

流量控制

流量控制方面主要有两个要点需要掌握。一是TCP利用滑动窗口实现流量控制的机制;二是如何考虑流量控制中的传输效率。

  • 流量控制
    所谓流量控制,主要是接收方传递信息给发送方,使其不要发送数据太快,是一种端到端的控制。主要的方式就是返回的ACK中会包含自己的接收窗口的大小,并且利用大小来控制发送方的数据发送:
    流量控制

  • 传递效率
    Nagle算法????
    该算法指发送端即使还有应该发送的数据,如果这部分数据很少的话,就延迟发送的一种处理机制。只有在满足下列任意条件时才发送数据

    • 已发送的数据都收到了确认应答
    • 可以发送最大段长度MSS的数据时

拥塞控制

网络中的链路容量和交换结点中的缓存和处理机都有着工作的极限,当网络的需求超过它们的工作极限时,就出现了拥塞。拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。常用的方法就是:慢开始和快重传

  1. 慢开始、拥塞控制
    • 当主机开始发送数据时,避免一下子将大量字节注入到网络,造成或者增加拥塞,选择发送一个1字节的试探报文
    • 随着包的每次往返,拥塞窗口以1、2、4等指数函数增长
    • 到达预设的“慢开始门限”时:
      • cwnd < ssthresh, 继续使用慢开始算法
      • cwnd > ssthresh,停止使用慢开始算法,改用拥塞避免算法
      • cwnd = ssthresh,既可以使用慢开始算法,也可以使用拥塞避免算法
    • 拥塞避免算法:即每次经过一个往返RTT就把拥塞窗口+1,使拥塞窗口线性缓慢增长
    • 当出现拥塞时,将慢开始门限设置为原先的一般,然后将cwnd设为1,执行慢开始算法(较低的起点,指数级增长)
      慢开始
  2. 快重传、快恢复
    当出现拥塞时,将cwnd设置为慢开始门限减半后的数值,执行拥塞避免算法
    快重传

参考:
TCP/IP网络知识点总结
tcp窗口滑动以及拥塞控制
TCP协议总结–停止等待协议,连续ARQ协议,滑动窗口协议

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值