本文来源:
原文:https://blog.csdn.net/qq_50156012/article/details/123391854
一、TCP协议
TCP,即Transmission Control Protocol,传输控制协议。人如其名,要对数据的传输进行一个详细的 控制。TCP协议段格式源/目的端口号:
表示数据是从哪个进程来,到哪个进程去;序列号:
在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一 次数据,就「累加」一次该「数据字节数」的大小。用来解决网络包乱序问题。确认应答号:
指下一次「期望」收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。用来解决不丢包的问题。6位标志位:
URG:
紧急指针是否有效ACK:
确认号是否有效,该位为 1 时,「确认应答」的字段变为有效,TCP 规定除了最初建立连接时的 SYN 包之外该位必须设置为 1 。PSH:
提示接收端应用程序立刻从TCP缓冲区把数据读走RST:
对方要求重新建立连接;我们把携带RST标识的称为复位报文段,该位为 1 时,表示 TCP 连接中出现异常必须强制断开连接。SYN:
请求建立连接;我们把携带SYN标识的称为同步报文段,该位为 1 时,表示希望建立连接,并在其「序列号」的字段进行序列号初始值的设定。FIN:
通知对方,本端要关闭了,我们称携带FIN标识的为结束报文段,该位为 1 时,表示今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时, 通信双方的主机之间就可以相互交换 FIN 位为 1 的 TCP 段。
二、TCP原理
TCP对数据传输提供的管控机制,主要体现在两个方面:安全和效率。这些机制和多线程的设计原则类似:保证数据传输安全的前提下,尽可能的提高传输效率。1,确认应答机制
2,超时重传机制
3,连接管理机制
服务端状态转化:
[CLOSED -> LISTEN] 服务器端调用listen后进入LISTEN状态,等待客户端连接;[LISTEN -> SYN_RCVD] 一旦监听到连接请求(同步报文段),就将该连接放入内核等待队 列中,并向客户端发送SYN确认报文。[SYN_RCVD -> ESTABLISHED] 服务端一旦收到客户端的确认报文,就进入ESTABLISHED状 态,可以进行读写数据了。[ESTABLISHED -> CLOSE_WAIT] 当客户端主动关闭连接(调用close),服务器会收到结束 报文段,服务器返回确认报文段并进入CLOSE_WAIT;[CLOSE_WAIT -> LAST_ACK] 进入CLOSE_WAIT后说明服务器准备关闭连接(需要处理完之 前的数据);当服务器真正调用close关闭连接时,会向客户端发送FIN,此时服务器进入 LAST_ACK状态,等待最后一个ACK到来(这个ACK是客户端确认收到了FIN)[LAST_ACK -> CLOSED] 服务器收到了对FIN的ACK,彻底关闭连接。客户端状态转化
[CLOSED -> SYN_SENT] 客户端调用connect,发送同步报文段;[SYN_SENT -> ESTABLISHED] connect调用成功,则进入ESTABLISHED状态,开始读写数据;[ESTABLISHED -> FIN_WAIT_1] 客户端主动调用close时,向服务器发送结束报文段,同时 进入FIN_WAIT_1;[FIN_WAIT_1 -> FIN_WAIT_2] 客户端收到服务器对结束报文段的确认,则进入 FIN_WAIT_2,开始等待服务器的结束报文段;[FIN_WAIT_2 -> TIME_WAIT] 客户端收到服务器发来的结束报文段,进入TIME_WAIT,并发 出LAST_ACK;[TIME_WAIT -> CLOSED] 客户端要等待一个2MSL(Max Segment Life,报文最大生存时 间)的时间,才会进入CLOSED状态。重要的转状态
- 1:LISTEN:服务器启动完毕,随时可以有客户端来连接
- 2:ESTABLISHED:建立连接成功,随时传输消息
- 3:CLOSE_WAIT:四次挥手挥手一半剩下的两次就不挥手了(接收方没调用close方法,就会导致四次挥手只挥手两次,从而没有正确关闭连接)。
- 4:TIME_WAIT:谁主动断开连接,谁进入TIME_WAIT状态,此时主机已经完成四次挥手过程,但是仍然不能立即释放,要等TIME_WAIT状态保持一定时间之后释放
4,滑动窗口
5,流量控制
接收端处理数据的速度是有限的。如果发送端发的太快,导致接收端的缓冲区被打满,这个时候如果发送端继续发送,就会造成丢包,继而引起丢包重传等等一系列连锁反应。因此TCP支持根据接收端的处理能力,来决定发送端的发送速度。这个机制就叫做流量控制
(Flow Control);6,拥塞控制
虽然TCP有了滑动窗口这个大杀器,能够高效可靠的发送大量的数据。但是如果在刚开始阶段就发送大 量的数据,仍然可能引发问题。因为网络上有很多的计算机,可能当前的网络状态就已经比较拥堵。在不清楚当前网络状态下,贸然发送大量的数据,是很有可能引起雪上加霜的。TCP引入 慢启动机制,先发少量的数据,探探路,摸清当前的网络拥堵状态,再决定按照多大的速度传 输数据;- 1:通过一个较小的窗口大小开始试探
- 2:如果没有发生拥堵(没有丢包)就指数方式扩大拥塞窗口
- 3:达到一定阈值后,线性增加窗口大小
- 4:一直到出现丢包,窗口回到初始值,调整阈值为出现丢包的窗口大小的一半
7,延迟应答
8,捎带应答
在延时应答的基础上,进一步提高程序运行效率而引入的机制9,粘包问题
转载请注明来自网盾网络安全培训,本文标题:《TCP原理(三次握手四次挥手)》
- 关于我们