一、TCP协议概念。
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的传输层协议。它主要用于在计算机网络中,通过建立可靠的通信连接来进行数据传输。
TCP协议的特点如下:
- 可靠性:TCP使用确认、重传和超时等机制,确保数据可靠地传输到目标主机,并且按照正确的顺序组装。
- 面向连接:数据传输之前需要在发送端和接收端建立连接,传输完成后再释放连接。
- 全双工通信:TCP允许同时进行双向的数据传输,即发送方和接收方可以同时发送和接收数据。
- 流量控制:TCP通过滑动窗口机制进行流量控制,控制发送速率,以适应接收方的处理能力。
- 拥塞控制:TCP通过拥塞窗口机制和慢启动算法来进行拥塞控制,防止网络拥塞。
- 高效性:TCP使用各种优化算法,如快速重传、快速恢复等,提高数据传输的效率。
- 适用性广泛:TCP被广泛应用于互联网和局域网等各种计算机网络中,支持各种应用程序的可靠数据传输。
二、TCP工作流程。
通过NDS获取IP地址之后,就会把HTTP的传输工作交给TCP协议完成。
三、TCP报文格式。
四、三次握手和四次挥手。
- 为什么需要四次挥手?
把ACK和FIN分开发送的原因是因为当主动方在数据传送结束后发出连接释放的通知,由于被动方可能还有必要的数据要处理,所以会先返回 ACK 确认收到报文。当被动方也没有数据再发送的时候,则发出FIN通知,对方确认后才完全关闭TCP连接。 - 为什么TIME_WAIT等待时间是2MSL?
MSL是报文的最大生存时间,超过这个时间,报文就将丢弃。
确保对方能够收到最后一个ack报文,如果服务端没有收到最后的ACK报文,就会触发超时重传FIN报文,从客户端发送ACK报文到接到到服务端重传的FIN报文,一去一来,最多就需要2MSL。
五、TCP协议特点。
1.流量控制
产生原因:TCP协议是需要接收方回复给发送方ACK之后才算一次连接的建立,而在等待回复的时间就是浪费的,于是就一次性发送了多条数据,就算遇到丢包的问题,就会在重发最后一次接收到ACK的序列号的后面的封包,这样发送方就需要缓存已经发出但是还没有接收到ACK的封包,接收方把已接收但是没有交给用户进程之前的封包也要保留着,但是缓存是有大小限制的,就需要一种机制来确定这个大小,所以就出现了滑动窗口和拥塞窗口。
TCP把应用交付的数据仅仅看成一串无结构的字节流,TCP不关心应用程序一次将多大的报文发送到TCP的缓存中,而是根据窗口值和当前网络情况来调整当前一个报文应该包含多少个字节。TCP协议通过TCP报文中的窗口大小的信息,因为所有的报文都有这个信息,不论发送方还是接受方都会接收,就会保证实时获取。
获得窗口大小后,换算成流量大小的方法:
接收窗口大致 = 接收缓冲区大小 - 已用大小(接收的数据,暂时没被应用层读走)
最大发送量 = 对方的接收窗口
控制方式:
1.滑动窗口(RWND)
接收方会把AdvertisedWindows这个值回给发送方,发送方就会把这个值当作WindowsSize就会放到TCP头部里面。所以,在TCP协议中,滑动窗口的值是由接收方控制的。
2.拥塞窗口
拥塞窗口的值是由发送方定义的,又名CWND(congestion window)。
拥塞控制是用来处理网络拥堵的情况。
具体做法是:发送端的发送范围是拥塞窗口和滑动窗口中较小的一个,min[rwnd,cwnd]。
拥塞窗口的大小会根据网络情况动态调整。
大体的策略是无拥塞扩大窗口大小,反之减小。
网络不好造成丢包的原因?
拥塞窗口因为网络造成丢包的原因是由发送方引起的。拥塞窗口是TCP协议中用于实现拥塞控制的一个重要参数。它表示在一个往返时间(RTT)内,发送方可以发送的最大字节数量。拥塞窗口的大小会随着网络的拥塞程度进行动态调整。当网络出现拥塞时,网络设备的缓存可能会被填满,导致数据包丢失。此时,TCP发送方会通过观察网络传输过程中是否发生了丢包来确定网络的拥塞程度。当发送方检测到丢失的数据包时,它会认为这是由于网络拥塞引起的。为了降低发送速率以缓解拥塞,发送方会减小拥塞窗口的大小,从而减少每个RTT内发送的数据量。这种减小拥塞窗口的行为就是发送方对网络拥塞的响应。
慢启动
拥塞避免
在这个过程中,出现了丢包,就会马上降低CWND,以便网路可以缓过来。
两者对比
2.超时重传机制
超时重传是为了保证可靠性传输而采取的一种机制。当发送方发送数据后,会启动计时器来等待接收方的确认(ACK)。
如果在规定的时间内(超时时间)未收到接收方的确认,发送方就会认为数据包丢失,并进行超时重传。发送方会重新发送相同的数据包,以确保接收方正确收到数据。
超时重传的目的是保证数据的可靠性,即使在网络中发生了丢包或延迟等问题,通过重传机制可以尽可能保障数据的传输成功。
六、与UDP的对比。
TCP(传输控制协议)和UDP(用户数据报协议)是两种常见的传输层协议,它们在功能和特点上有以下几个主要区别:
- 连接性:TCP是面向连接的协议,而UDP是面向无连接的协议。TCP在通信之前需要先建立连接,确认双方的身份和通信参数,然后才能进行数据传输;而UDP直接发送数据,无需先建立连接。
- 可靠性:TCP提供可靠的数据传输,它通过序列号、确认应答、超时重传等机制来确保数据的完整性和顺序性;而UDP不保证可靠性,它只负责将数据包发送到目标地址,但不能保证是否成功送达。
- 建立和断开连接:TCP使用三次握手来建立连接,即发送方发送连接请求,接收方回复连接确认,最后发送方再回复一个确认;而UDP不需要建立和断开连接,可以直接发送数据。
- 传输效率:由于TCP提供了可靠性保证和数据流控制机制,它的传输效率相对较低,通信过程中会有较多的开销;而UDP没有这些机制,传输效率较高,但也容易受到网络条件的影响。
- 应用场景:TCP适合于对数据可靠性要求较高的应用场景,如文件传输、Web浏览器访问等;而UDP适用于实时性要求较高且对数据可靠性要求相对较低的应用场景,如音频、视频流传输、在线游戏等。