TCP协议

小王学习录

  • 共勉
  • 前言
  • TCP协议
    • TCP报文结构
    • TCP核心机制
      • 1. 确认应答
      • 2. 超时重传
      • 3. 连接管理
        • (1)三次握手
          • 1>三次握手的过程
          • 2>为什么要进行三次握手
        • (2)四次挥手
      • 4. 滑动窗口
        • (1)滑动窗口的滑动过程
        • (2)滑动窗口的丢包问题
      • 5. 流量控制
      • 6. 拥塞控制
      • 7. 延迟应答
      • 8. 捎带应答
      • 9. 面向直接流
      • 10. 异常处理
    • 总结

共勉

真正的勇士,能够在认清生活的本来面目之后仍然热爱生活
TCP协议_第1张图片

前言

TCP协议是一个很复杂的协议,本篇文章有万余字,各位看官可以根据目录跳转到自己想要的模块。

TCP协议

上篇文章中简单介绍了一下TCP协议的特点是:有连接可靠传输面向字节流全双工

TCP报文结构

TCP协议_第2张图片
先简单介绍一下报头,16位源端口号目的端口号校验和在UDP中已经聊过,这里就不多介绍了,看其他字段:

  • 4位首部长度:描述TCP报文的首部长度,单位为32位,也就是说TCP首部长度最多为60个字节。而固定长度为20字节,所以选项字段的长度最大为40个字节
  • 选项:选项字段用于在TCP首部中添加一些可选的信息和配置,如报文段最大长度、窗口大小因子、时间戳等。选项字段的长度是可变的,可以根据需求包含一个或多个选项。
  • 6位保留位:给报头保留点空间,以便于日后TCP协议升级, 添加报头字段,减小升级成本,提高可扩展性。(C语言中的保留字同理值得学习
  • 剩下的字段结合TCP核心机制进行介绍:

TCP核心机制

在TCP中有很多机制,在这里我们关注其中最核心的十个机制。通过这十个机制同时介绍一下报文结构中的字段。

1. 确认应答

确认应答机制是保证可靠传输的最核心机制确认应答超时重传共同保证了可靠传输,这里先介绍确认应答,稍后介绍超时重传。

首先需要注意的是,可靠传输并不代表数据一定会被传输过去,而是发送者能够知道当前报文是否发送成功,这就需要借助确认应答

所谓确认应答就是接收方收到发送方的报文之后会给接受方发送一个应答报文,用于告知发送方当前报文已经收到,可以发送下一个报文。此时ACK字段序号确认序号字段便开始发挥作用了。

ACK:用于标识当前报文是否为应答报文,值为1时表示是应答报文,值为2则不是应答报文。
序号:对于普通报文,用于标识此报文开始时的内容的字节序列。对于应答报文,用于标识收到的报文开始时的内容的字节序列。很显然,这两个值为同一值
确认序号:对于普通报文,确认序号字段没有任何意义。对于应答报文,用于标识下一个字节序列号。意思是此序列号之前的数据已经收到。其值是期待下一次传输的字节序列,也就是已经接受的字节序列号+1。

以A要向B发送2000字节的数据,一次发送1000字节为例
TCP协议_第3张图片>1. 小王在画图的时候犯了两个个错误,第一序号并不一定会从1开始,而是在三次握手时随机生成的(三次握手下面介绍)。第二应答报文的序号和请求报文的序号实际上并不相同。这也是小王后知后觉的,请各位看官见谅
2. 在建立连接时会进行三次握手(三次握手下面介绍),在三次握手的过程中A和B会各自生成一个初始的序号,这个序号是随机的。各自生成序号之后再互相告知对方自己的序号(互相认识,建立认同)。
3. 双方的初始序号不一样是为了防止恶意方(网络攻击方)容易预测或劫持连接,增加了连接的安全性,因为攻击者难以预测下一个序号。此外,使用随机的序号可以防止重放攻击,其中攻击者试图重新发送以前捕获的数据包。

我们知道一条报文从A端发送到B端有多条网络路径,每条路径上的路由设备,交换机设备的转发速度都不同。而先后两次报文传输的网络路径并不一定相同,这就有可能造成先发后至的情况,即第二次发送的应答报文先到达A端而被错认为是第一次报文的应答报文,使用序号和确认序号就解决了这个问题。每条普通报文的序号和此报文的应答报文的应答序号一 一对应。

综上所诉,TCP的可靠传输最主要就是通过确认应答机制来实现的。通过应答报文,发送方就可以知道数据是否传输成功。进一步引入序号和确认序号,就可以对多组数据进行详细区分

2. 超时重传

在上面讨论确认应答时,我们默认每次传输都是顺利的,并没有考虑丢包的情况。

丢包有两种情况,第一是发送方发的数据丢了,第二是应答报文丢了(也有可能是应答报文传输太慢了),总之最后的结果就是在规定的时间阈值内发送方没有收到应答报文(发送方发送报文之后会开始计时,到达规定的时间后没有收到应答报文则视为丢包)。

当到达规定的时间发送方仍没有收到应答报文时,

你可能感兴趣的:(计算机网络,tcp/ip,网络,网络协议,java,计算机网络,三次握手,四次挥手)