TCP(Transmission Control Protocol)
面向连接的,可靠的,基于字节流的传输层通信协议
特点
基于连接的:数据传输之前需要建立连接
全双工的:双向传输
字节流:不限制数据大小,打包成报文段,保证有序接收,重复报文自动丢弃
流量缓冲:解决双方处理能力的不匹配
可靠的传输服务:保证可达,丢包时通过重发机制实现可靠性
拥塞控制:防止网络出现恶性拥塞
报文格式
源端口:是发送端随机生成的一个端口号
目的端口:接受端的端口号 默认情况是80
序列号: 用于3次握手4次挥手
应答编号: 用于3次握手4次挥手
报文标识:
1)URG:紧急指针标志,为1时表示紧急指针有效,为0则忽略紧急指针。
2)ACK:确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。
3)PSH:push标志,为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。
4)RST:重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求。
5)SYN:同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1。
6)FIN:finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流。
receive window:缓存窗口大小
urgent data pointer:紧急处理的指针
options:可选参数
data:业务数据 比如http的报文数据
TCP三次握手
1、客户端发送SYN类型的报文请求,并且携带序列号为X,客户端状态由关闭变成发送状态;
2、服务端收到SYN的报文请求,返回一个ACK应答的报文,序列号为客户端报文的序列号X+1;并且发送了一个SYN的连接请求,报文序列号为Y;
3、客户端收到ACK应答并且拿到序列号-1知道自己是哪次的请求,并且收到了服务端SYN的请求,拿到序列号Y后,对服务端进行ACK的应答请求,序列号为Y+1;
4、服务端拿到ACK请求序列号-1;得到自己是哪次请求;
5、双方建立了连接;并且入accept队列;后续传递数据可以通过accept队列传输;
TCP四次挥手
A: 发送FIN数据包,代表A不在发送数据
B: 收到请求,开始应答 ,避免了A重新发送FIN重试(应答机制)
B: 处理完数据之后关闭,关闭连接,及发送FIN请求
A: 收到请求后发送ACK应答,B服务可以释放连接
图示
https://www.processon.com/view/link/607fb0f4e401fd2d66ae3b76