一、TCP的概述
1、TCP是传输控制协议,连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务
2、TCP是一个可靠的、全双工的协议,并且提供排序、确认等机制,双方会相互确认
3、TCP和UDP的比较
| TCP | UDP | |
| 是否连接 | 面向连接 | 无连接 |
| 是否可靠 | 可靠传输,使用流量控制和拥塞控制 | 不可靠传输 |
| 连接对象个数 | 只能一对一通信 | 支持一对一,一对多,多对一,多对多交互通信 |
| 传输方式 | 面向字节流 | 面向报文 |
| 首部开销 | 首部开销最小20字节,最大60字节 | 首部开销小,仅8字节 |
| 传输速度 | 传输慢 | 传输快 |
| 适用场景 | 适用于要求可靠传输的应用,例如文件传输 | 适用于实时应用,ip电话、视频会议、直播等 |
二、TCP的三次握手

1、三次握手过程
①第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认
②第二次握手:服务器收到syn包,必须确认客户端的syn(ack=x+1),同时自己也发送一个syn包(seq=y),即syn+ack包,此时服务器进入SYN_RECV状态
③第三次握手:客户端收到服务器的syn+ack包,向服务器发送确认包ack(ack=y+1),此包发送完毕,客户端和服务器端进入Established状态,完成三次握手建立连接
2、TCP握手为什么是三次,而不是二次或四次呢?
①二次握手会导致失效的连接请求报文段被服务器端接收,从而产生错误
②四次握手是可以的,但发送四次是资源的浪费
三、TCP的四次挥手

1、四次挥手过程
①第一次挥手:客户端发送FIN(seq=u),发送完毕后,客户端进入FIN_WAIT_1状态
②第二次挥手:服务器端发送ACK确认报文(ack=u+1,seq=v),发送完毕后服务器端进入CLOSE_WAIT状态,客户端收到这个确认包后进入FIN_WAIT_2状态
③第三次挥手:服务器端发送FIN包(seq=w),发送完毕后,服务器端进入LAST_ACK状态,等待来自客户端的最后一个ACK
④第四次挥手:客户端发送ACK包(seq=u+1,ack=w+1),并进入TIME_WAIT状态,等待了某个固定时间(两个最大段生命周期,2MSL)之后,没有收到服务器的ACK,认为服务器已经正常关闭连接,于是自己也关闭连接,进入CLOSED状态。而服务器接收到这个确认包之后,关闭连接,进入CLOSED状态。此时,四次挥手完成并关闭连接
2、TCP四次挥手为什么需要四次呢?
其实是客户端和服务器端的两次挥手,也就是客户端和服务器端分别释放连接的过程。在四次挥手中双方发FIN的过程,
①关闭连接时,客户端向服务器端发送FIN时,仅仅表示客户端不再发送数据了,但是还能接收数据
②服务器端收到客户端的FIN报文时,先回一个ACK应答报文,而服务器端可能还有数据需要处理和发送,等服务器端不再发送数据时,才发送FIN报文给客户端来表示同意现在关闭连接
3、TCP四次挥手过程中,为什么需要等待2MSL,才进入CLOSED关闭状态?
①为了保证客户端发送的最后一个ACK报文段能够到达服务器端,从而让服务器端能够按照正常的步骤进入CLOSED状态
②防止已失效的连接请求报文段出现在本连接中
四、TCP的粘包和拆包
1、一个完整的包可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送
2、粘包产生的情况
①要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包
②接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包
3、拆包产生的情况
①要发送的数据大于TCP发送缓冲区剩余空间大小,将会发生拆包
②待发送数据大于MSS(最大报文长度),TCP在传输前将进行拆包
3、解决方案
发送端将每个数据包封装为固定长度,在数据尾部增加特殊字符将数据分为两部分,一部分为头部,一部分为内容体;其中头部结构大小固定,且有一个字段声明内容体的大小
五、TCP的流量控制
1、TCP通过滑动窗口机制来控制流量
2、TCP头部有一个字段为win(窗口大小),它告诉对方本端的TCP接收缓冲区还能容纳多少字节的数据,这样对方就可以控制发送数据的速度,从而达到流量控制的效果
3、TCP的窗口机制有两种,一个是固定窗口,一个是滑动窗口。数据在传输时,TCP会给所有数据进行编号,发送方在发送过程中始终保持着一个窗口,只有落在发送窗口的数据帧才允许被发送;同时接收方也始终保持着一个接收窗口,只有落在窗口内的数据才会被接收。这样通过改变发送窗口和接收窗口的大小就可以实现流量控制
六、TCP的拥塞控制
tcp的拥塞控制有这几种算法:慢启动、拥塞避免、快重传、快恢复
本文详细介绍了TCP协议的基础知识,包括TCP的三次握手和四次挥手过程,解释了为何需要三次握手和四次挥手的原因。此外,还探讨了TCP的粘包和拆包问题及其解决方案。同时,文章阐述了TCP的流量控制机制,通过滑动窗口实现,以及拥塞控制策略,如慢启动、拥塞避免、快重传和快恢复。这些内容揭示了TCP如何确保可靠传输和网络效率。
943

被折叠的 条评论
为什么被折叠?



