[网络]——TCP协议分析

本文深入探讨TCP协议,包括其面向连接、全双工、可靠传输的特点,以及TCP报文首部格式。重点讲解了TCP的可靠传输原理,如停止等待协议、连续ARQ协议和滑动窗口协议。此外,文章还涵盖了TCP的流量控制和拥塞控制策略,如慢开始、拥塞避免、快重传和快恢复。通过对这些关键机制的理解,有助于深化对TCP协议的认识。

TCP有关的资料和书籍,网上搜索恐怕汗牛充栋,我写这篇博客也是为了学习巩固,参考了《计算机网络》和goole的很多博客,毕竟站在巨人的肩膀上才能看的更高走的更远。

1.TCP协议

TCP协议属于TCP/IP协议中的传输层协议,有以下几个特点。

  • TCP是面向连接的运输层协议。
  • 每一条TCP连接只能点对点
  • TCP提供可靠交付的服务
  • TCP提供全双工通讯
  • 面向字节流。

TCP是面向连接的传输层协议

TCP在传输数据前必须让接受方和发送方建立连接,然后才能传输数据,当传输完成后,要将该连接释放。就像打电话。

每一条TCP连接只能点对点

每一条TCP通过端口号来连接受方和发送方。

TCP提供可靠交付的服务(重点)

发送方通过TCP连接发送的数据,可靠,无差错,有序的发送到接受方。

TCP提供全双工通信

TCP运行通信双方在任何时候发送数据,TCP连接的两端都设有发送缓冲和接收缓存,用来临时存放双向通讯的数据。

TCP面向字节流

虽然应用程序使用TCP协议发送数据,一次发送一个大小不等的数据块,但是TCP只是把应用程序发送的数据块当成无结构的字节流,TCP不保证发送方的数据块和接受方接受的数据快大小对应,例如发送方发了10个数据块,但是接受方只用了4个数据块就把收到的字节流发给上层的应用程序(有的童学可能觉得这和TCP的安全可靠矛盾,这样岂不是丢了6个数据块,肯定不可能的,虽然数据块的个数不同,但是TCP发送的字节流是一样的)

1.TCP报文首部的格式

在这里插入图片描述
图片来源《计算机网络 第七版》谢希仁
首部各字段意义如下

  • 源端口和目的端口号 :各占2个字节,分别写入源端口号和目的端口号。
  • 序号:占4比特位,范围[0,2^32-1],序号最大后+1,编号又回到0,进行mod2 ^32操作。TCP是面向字节流的,对于TCP连接的字节流的每一个字节都按顺序编号。整个字节流的初始序号必须在连接时建立。首部的序号字段表示本报文段所发送的数据的第一个字节的序号。
  • 确认号:占4比特位,请问收到的对方下一个报文段的第一个数据字节的序号
    若确认号为N,则表明:到序号N-1的字节已经成功收到。
  • 数据偏移:4比特位,指出TCP报文段的数据起始到TCP报文段的起始的距离,实际上指的是首部长度,数据偏移的单位是4字节,最大能够表示的值是15,因此TCP最大的首部长度为60字节。
  • 保留:占6比特位,为以后做准备,当前置为0.
  • URG:URG=1时,表示系统有紧急数据,和紧急指针配合使用。
  • ACK: ACK=1时,确认号字段有效,TCP规定,在连接建立后的所有传输的报文段必须把ACK置为1.
  • PSH:PSH=1时,表示一端的应用进程希望在键入一个命令后立刻收到对方的响应。接受方收到PSH=1的报文,就尽快地交付交付给接收应用程序,而不是等缓存都填满后向上交付。
  • 复位RST:RST=1,表示TCP中产生了严重的差错,必须释放连接,然后重新建立运输连接。
  • SYN:SYN=1,作用建立连接时同步序号的,若对方同样连接则,返回的报文SYN和ACK置为1,具体在三次握手,四次挥手中详细讨论。
  • FIN:FIN=1,表示此报文段的发送方的数据已经发送完毕,要求释放运输连接。
  • 窗口:占2字节。值为[0,2^16-1]之间,窗口指的是发送本报文段的接收窗口,告诉对方本报文段首部的确认号算起,可以接受的最大数据量。窗口字段明确指出了允许对方发送的数据量,经常动态变化,
  • 校验和:占2字节,校验首部和数据两部分。
  • 紧急指针:占两字节,指出本报文段中的紧急数据的字节数。
  • 选项:长度可变,最长40字节,开始的选项只有MSS,最大报文段长度,表示每一个TCP报文的数据字段的最大长度。
  • MSS:和接受窗口没关系,如果选择较小的MSS会导致网络的利用率变低,如果MSS过高,在IP层传输时就有可能分解成多个短数据报片段,增大开销。MSS的默认值为536.
  • SACK:选择确认,能够传输缺少的数据而不重传已经正确达到接受方的数据,在后面我们还会讲。
  • 窗口扩大:为了扩大窗口,TCP首部的窗口字节长度为16,窗口扩大占3个字节,其中一个字节是S,新的窗口值为16+S,移位符的最大值为14,当连接的某一端不需要扩大窗口,可发送S=0的选项,使其窗口大小返回0.
  • 时间戳:占10字节主要是时间戳值字段时间戳回送回答字段。,用于计算往返时间,发送方把发送报文的当前时间放到时间戳中,接受方接受到后,把时间戳复制到确认报文的时间戳中,因此发送方可以计算出RTT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值