去评论
dz插件网

泛站群软件浅谈网络传输层中的TCP协议

逝水年华
2023/04/06 14:36:45
泛站群软件浅谈网络传输层中的TCP协议

详细看图解
TCP的全称是Transmission Control Protocol,即传输控制协议,TCP工作在网络传输层上
其职责是:实现主机间进程到进程的通信,其次还需要保证可靠性


特点:
基于连接的:数据传输之前需要建立连接
全双工的:可以双向传输
字节流:不限制数据大小,打包成报文段,保证有序接收,重复报文自动丢弃
流量缓冲:解决双方处理能力的不匹配
可靠的传输服务:保证可达,丢包时通过重发机制实现可靠性
拥塞控制:防止网络出现恶性拥塞
TCP协议是面向连接的,在任何数据实施交换之前,首先要在两台计算机之间建立连接进程。
由于使用了序列号和返回通知,TCP协议使用户确信传输的可靠性。
TCP协议使用字节流通信号,这意味着数据被当做没有信息的字节序列来对待。
TCP连接管理
TCP连接:四元组[源地址,源端口,目的地址,目的端口]
确立连接:TCP三次握手a.同步通信双方初始序列号(ISN,initial sequence number)b.协商TCP通信参数(MSS,窗口信息,指定校验和算法)
客户端拿到IP地址后,开始三次握手:
刚开始服务器端首先会进入Listen的状态,比如Nginx监听某一个端口80,客户端发送一个请求之前会先创建一个数据结构create tcb(Transmission Control Block),存储发送的端口号以及其他信息,客户端向服务器端发送SYN同步序列号报文后,客户端进入SYN-SENT状态,当服务器端收到SYN报文的时候,进入SYN-RECEIVED状态,服务器端在本地创建数据结构create tcb(Transmission Control Block),存储连接信息,回送一个ACK的确认报文,表示同步序列号的报文我收到了,并且同时会发送一个SYN的报文给客户端,客户端在收到服务器端回送的ACK确认报文后,就进入了ESTABLISHED状态,说明客户端连接已经建立了,客户端在收到服务器端发送的SYN报文后,会向服务器端发送一个ACK确认报文,通知服务器端,我已经收到SYN报文了,当服务器端收到ACK报文后,进入ESTABLISHED状态,建立连接。
客户端和服务器端发送SYN报文时会携带随机生成的seq序列号,发送ACK报文时,会携带对应的SYN报文携带的序列号加一的序列号,表示确认的是这个SYN
四次挥手:
客户端执行CLOSE命令,发送一个FIN报文到服务器端,客户端变为FIN_WAIT_1状态,服务器端收到报文之后,立刻回传一个响应报文,服务器端进入CLOSE_WAIT状态,这时服务器端开始收尾工作,把还需要传给客户端的数据传过去,当客户端收到服务器端发送的ACK报文,客户端状态变为FIN_WAIT_2,接收服务器端传过来的数据,当服务器端收尾完成,执行CLOSE命令,向客户端发送一个FIN报文,状态变为LAST_ACK,当客户端收到FIN报文后立刻回传ACK报文,当服务器端收到ACK报文,则释放连接,客户端在发送完ACK报文后,变为TIME_WAIT(2MSL),客户端等待两个MSL的时间,即一个报文来回的时间,然后再释放资源