目录
3.0 TCP特点补充
3.1 TCP报文段首部格式
3.2 TCP连接管理
3.2.1 三报文握手
3.2.2 四报文挥手
3.3 TCP的流量控制和可靠传输
3.4 TCP拥塞控制
3.4.1 接收窗口、拥塞窗口、发送窗口关系
3.4.2 慢开始和拥塞避免
3.4.3 快重传和快恢复
3.0 TCP特点补充
- TCP提供一对一全双工可靠通信,允许通信双方的应用进程在任何时候都能发送数据,为此TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。
- TCP是面向字节流的,虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据仅视为一连串的无结构的字节流。
- UDP报文长度由发送方应用进程决定,TCP报文段的长度则根据接收方给出的窗口值和当前网络拥塞程度来决定。如果应用进程传送到TCP缓存的数据块太长,TCP就把它划分得短一些再传送;如果太短,TCP也可以等到积累足够多的字节后再构成报文段发送出去。
- IP首部的协议字段:TCP=6,UDP=17。
3.1 TCP报文段首部格式
- 源端口号和目的端口号:各占2B。端口是传输层与应用层的SAP。传输层的复用和分用功能都要通过端口才能实现。
- 序号:占4B,共2^32个序号。TCP连接传送的字节流中的每个字节都按顺序编号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
- 确认号:占4B,是期望收到对方下一个报文段的第一个数据字节的序号。若确认号=N,则表明到序号N-1为止的所有数据都已正确收到。(数据链路层的后退N帧协议的累积确认ACK是表明N及N之间的都已正确收到)
- 数据偏移(即首部长度):占4bit,指出TCP报文段的数据起始处距离TCP报文段的起始处有多远,单位是4B。TCP首部的最大长度为60B。注意不是IP数据报分片用到的那个数据偏移,而是TCP首部长度。
- 确认位ACK:仅当ACK=1时,确认号字段才有效;当ACK=0时,确认号字段无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1。
- 同步位SYN:当SYN=1时,表明这是一个连接请求报文或连接接受报文。当SYN=1,ACK=0时表明这是一个连接请求报文,对方若同意建立连接,则应在响应报文中使用SYN=1,ACK=1
- 终止位FIN(finish):当FIN=1时,表明此报文段的发送方的数据已发送完毕,并要求释放传输连接。
- 窗口:占2B.窗口值为接收方让发送方设置发送窗口的依据。例如,设确认号位701,窗口字段是1000.这表明发送此报文段的一方还有字节序号位701~1700共1000B的接收缓存空间。
- 校验和:占2B.校验和字段校验的范围包括首部和数据这两部分。在计算校验和时,要在TCP报文段的前面加上12B的伪首部。
- 填充:为了使整个首部长度是4B的整数倍而设置的字段。
- 保留位:保留为今后使用,但目前应置为0。
- 紧急位URG:当URG=1时,表明紧急指针字段有效。
- 紧急指针:占2B。它指出在本报文段中紧急数据共有多少字节(紧急数据在报文段数据最前面)。
- 推送位PSH(Push):接收方TCP收到PSH=1的报文段,就尽快地交付给接受应用进程,而不再等到整个缓存都填满了后再向上交付。
- 复位位RST(Reast):当RST=1时,表明TCP连接中出现严重差错(如主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
- 选项。长度可变。TCP最初只规定了一种选项,即最大报文段长度MSS。MSS是TCP报文段中的数据字段的最大长度。
注:报文段的序号是其数据部分第一个字节的编号 。
3.2 TCP连接管理
注:胡科大高军老师对于以下部分的视频讲解堪称完美,个人笔记只记录一些要点供以后补充。
3.2.1 三报文握手
- SYN报文段(连接请求报文或连接接受报文)不能携带数据,但要消耗一个序号。
- 普通的TCP确认报文段可以携带数据,但如果不携带数据,则不消耗序号。如果该三报文握手的第三个报文段不携带数据,则TCP客户进程要发送的下一个数据报文段的序号仍为X+1。
3.2.2 四报文挥手
参与TCP连接的两个进程中的任何一个都能提出释放连接的请求。
- TCP规定终止标志位FIN等于1的TCP报文段即使不携带数据,也要消耗一个序号。
- 终止等待1状态表明TCP客户不再发送数据,但TCP服务器可能还要发送数据。
- 服务器进入关闭等待状态后,TCP连接处于半关闭状态,TCP客户不能再发送数据,但TCP服务器可能还要发送数据。
3.3 TCP的流量控制和可靠传输
数据链路层的可靠传输机制和传输层TCP的可靠传输机制有很多相同之处。如都使用窗口机制、确认、重传(超时或冗余ACK)。
因此TCP的可靠传输适合对比记忆,其不同点如下:
- TCP使用序号,序号建立在传送的字节流之上(即字节编号),而不是建立再报文段之上。TCP的窗口大小指明了有多少序号。而GBN和SR是给窗口编号。
- TCP默认使用累积确认,这于GBN相同。但GBN需要重传出错之后的所有帧,而TCP只重传出错的序号组成的报文段(失序的报文缓存起来)。此外,TCP中提供一个SACK选择确认选项,此时TCP与SR非常相似。TCP的差错恢复机制可视为GBN和SR协议的混合体。
- TCP采取的是对报文段的确认机制,并不是每个字节都要发回确认,而是在发送一个报文段的字节后才发回一个确认。
- 数据链路层的后退N帧协议的累积确认ACK是表明N及N之间的都已正确收到。而TCP的确认N是N-1及N-1以前的已正确收到。
- TCP服务器通过累积确认报文段调整接收窗口的大小对发送方进行流量控制。
即使接收窗口值为0,也必须接受零窗口探测报文段、确认报文段以及携带有紧急数据的报文段。
3.4 TCP拥塞控制
在通信子网内,由于出现过量的数据包而引起网络性能下降的现象称为拥塞。
在网络层实现拥塞控制的方法为显式反馈。目前网际控制报文协议(ICMP)最新规定已经不再使用源点抑制报文,即显式反馈。
在TCP中,拥塞控制主要是利用隐式反馈在传输层实现的。
- 流量控制是抑制发送端发送数据的速率,以便接收端来得及接收。
- 拥塞控制是一个全局性的问题,涉及网络中所有的主机、路由器及导致网络传输能力下降的所有因素。单一地增加资源并不能解决拥塞问题。
拥塞控制的方法:
- 闭环控制指作为被控的输出量以一定方式返回到作为控制的输入端,并对输入端施加控制影响的一种控制关系。 是带有反馈信息的系统控制方式。
- 开环控制是指无反馈信息的系统控制方式。
3.4.1 接收窗口、拥塞窗口、发送窗口关系
3.4.2 慢开始和拥塞避免
3.4.3 快重传和快恢复
1990的reno版本,来改进TCP的性能。
与快重传配合使用的是快恢复算法。