一、TCP
1.1特点
为了通过IP数据报实现可靠传输,需要考虑很多事情,例如数据的破坏、丢包、重复以及分片顺序混乱等问题。如果不解决这些问题,也就无从谈起可靠传输。所以TCP作为面向连接的可靠传输协议,就有以下特点:面向连接、可靠传输、面向字节流、流量控制、拥塞控制。
1.1.1 面向连接
TCP是面向连接的协议,建立和断开连接需要经过7步,三次握手建立连接,四次挥手断开连接。关于建立连接和断开连接的在之前的文章HTTP协议已经学习过了。另外两个问题,
为什么是三次握手不是两次?
为了解决超时导致重复建立的问题。如果是两次握手会出现的问题。客户端发送SYN请求建立连接时,如果网络发生延迟超时后客户端会重复发送SYN消息,服务器接收到第二次发送的建立连接请求,返回确认信息,连接建立完成。第一次发送SYN建立连接请求经过一段时间后到达服务器,服务器会认为客户端要建立新的连接,会重新发送应答响应。这就导致了重复建立连接的情况。
为什么是四次挥手?
关闭连接,需要双向关闭才算真正的关闭。客户端发送FIN请求切断连接,服务器端发送ACK应答切断,当前连接处于半关闭状态。服务器端向客户端发送FIN请求切断连接,客户端返回ACK应答请求,此时连接才真正的关闭。
1.1.2 可靠传输
- 通过序列号和确认应答提高可靠性。
当客户端发送数据之后需等待对端的确认信息。如果收到确认应答,表示数据成功发送到对端。如果在一定时间内没有收到确认应答,则认为数据已丢失,需要重新发送。未收到应答消息,两种情况数据丢失,另一种是应答消息丢失。应答信号丢失,重新发送对端就会重复接收相同的数据,为了解决目标端重复接收相同数据,可以通过为发送数据的每个字节标上序号,接收端收到数据根据首部序号和长度,将下一次应该的接收的序号作为应答返回出去。这样就可以通过序列号和确认应答,实现可靠传输。
- 重发超时如何确定
上面提到客户端在超过一定时间没有接收到应答消息会进行数据重发。那么这个超时时长是多少呢?理想状态下,找到一个小的时间,确保应答消息在该时间段中可以返回,但是不同的网络环境下这个时间会发生变化。TCP为了在不同网络环境下都能提供高性能通信,为此每次发送数据都会计算往返时间及其偏差。超时时间比这个往返时间与偏差的和稍大一点的时间。
1.1.3 面向字节流
TCP在建立连接时,会确认一次数据包传输的单位。称之为“最大消息长度(MSS)”。建立连接客户端SYN消息中携带一个MSS值,服务器的返回的SYN中也会携带一个MSS值,最终会选择两者中较小的按个作为数据包的传输单位。
1.1.4 滑动窗口流量控制
TCP以一个MSS大小传输数据,往返时间越长,网络的吞吐量也差。为了解决这个问题,引入了窗口的概念。发送端在发送一个段后不需要等待应答信息进行发送数据。窗口大小是指无需等待应答消息继续发送数据的最大值。窗口提供了缓存机制,实现对多个段同时应答的功能。
1.1.5 拥塞控制
为了解决大量数据对网络的影响,通过慢启动算法得出的值,对发送数据量进行控制。
TCP 慢启动流程?
参考:TCP 拥塞控制问题
二、UDP
UDP面向无连接的通信服务协议。只提供了传输层协议的基本功能。
小结
本节重点学习了TCP的特点,梳理各特点的知识点。深入学习可以参考《图解TCP/IP》。
网友评论