计算机网络 -面向连接的运输:TCP(下) -运输层

计算机网络 -面向连接的运输:TCP(下) -运输层

  • 一、可靠数据传输
    • 1.1 可靠数据传输小知识
    • 1.2 快速重传
    • 1.3 TCP差错恢复机制
  • 二、流量控制
  • 三、TCP连接管理
    • 3.1 TCP连接的建立
    • 3.2 TCP连接的拆除
    • 3.3 最后的一点注意

一、可靠数据传输

1.1 可靠数据传输小知识

  1. 我们仍然要强调,IP是不能提供可靠的数据传输
  2. TCP是只使用单一的定时器,当报文传送到IP层的时候就启动定时器。
  3. TCP发送方需要做的只有3件事,①接收上一级应用层的发送请求②超时重传③接收接收方的ACK
  4. 我需要强调的是,在发送方接收到接收方返回的报文时,报文中的确认号一定是最小的没有被接收到的报文序号所以发送方发现确认号大于SendBase的时候就默认确认号之前就是已经全都接收到的了。

1.2 快速重传

冗余ACK指的是多次返回已经确定确认的确认ACK。快速重传的机制指的是发送方发现有n个相同的冗余ACK发送到本端,**即使现在的定时器还没有倒计时结束,**发送方还是会将从这个ACK确认号的下一个开始重新发送其后的n个分组。

1.3 TCP差错恢复机制

TCP仅仅维持已发送的但未被确认的最小序号。从这个方面来看TCP的差错恢复机制有点像GBN(向后回退N步),但从另外一个角度看,TCP只会要求选择确认重新发送接收失败或者乱序的分组,而不是要求其后分组全部重新发送。所以TCP又结合了选择重传的优点。

二、流量控制

TCP中应用层不会每时每刻都在读取数据,他只会隔一个时间段读取一次,所以会使用流量控制防止接收方缓存溢出跟不上发送方发送的速度。需要注意的是流量控制不是拥塞机制。两者需要大家区分。
==接收窗口:==接收方还剩余多少内存可以供缓存。而且TCP是全双工的连接,所以发送方和接收方都会有接收窗口。

  1. 在我们通俗意义上的接收方上的接收窗口(RcvBuffer)的限制是
    R e c B b u f f e r < = L a s t B y t e R c v d ( 当 前 已 接 收 进 入 缓 存 的 最 后 一 个 字 节 编 号 ) − L a s t B y t e R e a d ( 当 前 应 用 已 经 读 取 的 最 后 一 个 字 节 编 号 ) RecBbuffer<= LastByteRcvd(当前已接收进入缓存的最后一个字节编号) - LastByteRead(当前应用已经读取的最后一个字节编号) RecBbuffer<=LastByteRcvd()LastByteRead
    而还剩多少可用空间(rwnd)的计算公式是:
    r w n d = R e c B u f f e r − [ L a s t B y t e R c v d − L a s t B y t e R e a d ] rwnd = RecBuffer - [LastByteRcvd - LastByteRead] rwnd=RecBuffer[LastByteRcvdLastByteRead]
  2. 而发送方需要保证的是接收方窗口不会溢出:
    r w n d = L a s t B y t e S e n t ( 最 后 一 个 被 接 收 方 接 收 的 字 节 ) − L a s t B y t e A c k e d ( 最 后 一 个 被 接 收 方 确 认 的 字 节 ) rwnd = LastByteSent(最后一个被接收方接收的字节) - LastByteAcked(最后一个被接收方确认的字节) rwnd=LastByteSent()LastByteAcked()

需要注意的是:UDP不会保证接收方的缓存溢出。

三、TCP连接管理

3.1 TCP连接的建立

在之前我们也说过TCP的连接需要3次握手,我们再来明确一下每一次握手,发送方和接收方分别往报文里面添加了什么信息。

  1. 第一次握手,发送方需要将SYN置为1.(SYN在报文中的意思是指敲门连接,没有带任何的数据),而且客户会随机选择一个初始序号将自己的序号放到序号字段中。
  2. 第二次握手,接收方为其分配TCP缓存和变量,并将SYN字段置为1.将随机的一个序号放到序号字段中。并将发送方的序号加1.这一次握手可以翻译为:“我收到了你发起建立连接的SYN分组,该分组带有发送方的初始序号。我同意建立该连接,我自己的序号为xxx。”
  3. 第三次握手,客户给连接分配缓存和变量。并将接收方的序号加1.该报文可以携带信息。因为连接已经建立所以SYN将会被置为0。

3.2 TCP连接的拆除

连接的拆除一般都是由客户发起的。客户会发送一个特殊的FIN报文(FIN位被置为1),然后等待接收方返回ACK报文,等待一段时间后发送FIN报文。客户接到FIN报文之后发送一个ACK给接收方,并等待一个时间段后正式释放所有资源。在这一步中如果有任何信息收不到都会重传上一个信息。

3.3 最后的一点注意

当发送的报文中端口号和源IP不匹配时,接收方会回复RST报文对客户说明请求的端口号不对。

你可能感兴趣的:(计算机网络)