计算机网络-运输层协议

1.概念

TCP:传输控制协议,是一种可靠地,面向连接的协议。
UDP:用户数据报协议,是不可靠,无连接的协议。
报文段:TCP和UDP的分组都称为报文段。

2.TCP协议

2.1 概念

发送缓存:三次握手初期设置的缓存。
最大传输单元(MTU):最大链路层帧长度。是指链路层帧的有效数据长度,不包括帧首部,以太网和PPP链路层协议都具有1500字节的MTU。
最大报文段长度(MSS):TCP从缓存中取出并放入报文段的最大长度,MSS通常根据最初确定MTU来设置。要保证MSS加上TCP首部和IP首部长度(通常40字节)小于等于最大链路层长度MTU,因此MSS典型值为1460字节。注意MSS值报文段中应用层数据的最大长度,并不包括TCP首部。

2.2 TCP报文段结构

计算机网络-运输层协议_第1张图片

  • 序号和确认号:用于实现可靠数据传输服务,是对字节进行编号的,并不是报文段。
  • 窗口大小:用于流量控制。
  • 6个标志位:ACK用于指示确认字段的值是有效的,RST、SYN、FIN用于连接的建立和拆除,剩余实际上并没有使用。
  • 首部长度:以字(4个字节)为单位,指示加上选项后的长度。
  • 选项:是可选和变长的。

2.3 可靠数据传输

  • 序号和确认号
  • 冗余数据分组
  • 倒计时定时器
  • 回退N协议(滑动窗口协议)
  • 选择重传协议
  • 窗口长度选择(小于等于序号空间的一半)
  • 超时间隔加倍(简单拥塞控制)
  • 快速重传(利用冗余ACK,3个冗余ACK就执行)

2.4 流量控制

每条TCP连接的两端主机都为该连接设置了接收缓存,当TCP连接接收到正确、按序的字节后,就将它们放入接收缓存,然后相关应用程序会从该缓存读取数据,但不是数据一到达就立即读取。如果应用程序读取速度相对缓慢,发送方发的太快、太多就会导致该连接接受缓存溢出。
流量控制就是为了消除发送方使接收方溢出的可能,要区别于拥塞控制
TCP通过让发送方维护一个接收窗口来提供流量控制。
具体见《计算机网络:自顶向下方法》p177 流量控制。

2.5连接管理

1.连接建立

连接建立分为三个步骤,称为三次握手:

  1. 客户端向服务器端发送一个特殊报文段,此报文段不含数据,并且SYN位被设置为1,一般称为SYN报文段。另外,客户端会随机选择一个初始序号client_isn,设置SYN报文段的序号字段。
  2. 一旦包含SYN报文段的IP数据报到达服务器,服务器提取出SYN报文段,然后为该TCP连接分配缓存和变量,并向客户端发送允许连接的报文段,首先设置SYN位置1,ACK位也置1,然后设置确认号字段为client_isn + 1,然后随机选择初始序号server_isn。该报文段称为SYNACK字段.。
  3. 客户端收到SYNACK报文段后,也要为该链接分配缓存和变量,然后向服务器发送另一报文段,该报文段ACK置1,SYN置0,确认号字段为server_isn +1,序号字段为client_isn + 1,可以附带数据。
2.连接拆除

连接拆除分为四步:

  1. 客户端发送FIN报文段给服务器,表示关闭连接请求
  2. 服务器收到FIN报文段后发送ACK报文段给客户端,应答请求
  3. 服务器发送FIN报文段给客户端,表示关闭连接请求
  4. 客户端收到FIN报文段后发送ACK报文段给服务器端
3.TCP状态转换图

计算机网络-运输层协议_第2张图片
计算机网络-运输层协议_第3张图片
上面图是典型情况下下客户端和服务器的状态转换图。
下图是比较全的状态转换。
计算机网络-运输层协议_第4张图片
半连接状态:当TCP连接中A发送FIN请求,另一方B收到后回复ACK给A,但还没有发送FIN时,A处于半连接状态,此时A可以接受B发送的数据,但是不可以发送数据给B。
TIME_WAIT状态:主动关闭的一方要处于TIME_WAIT状态一段时间,在这段时间中,此方默认不能再监听同样的端口。
2MSL:2MSL作用有两个,一是保证四次握手更加可靠,四次握手中最后一个ACK是由主动关闭方发出的,如果接收方没有接收到此ACK,则会再一次发送FIN,如果此时主动关闭方在等待2MSL,则更会有机会再发一个ACK。二是防止lost duplicate。

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