type
status
date
slug
summary
tags
category
icon
password
TCP协议
TCP即传输控制协议(Transmission Control Protocol)是一种面向连接的、可靠的、有序的、基于字节流的传输层通讯协议。
TCP协议是为了在不可靠的互联网上提供可靠的端到端字节流而专门设计的一个传输协议。
面向连接的TCP协议
TCP是面向连接的,此意味着双方需要先建立连接才能开始进行数据传输
TCP是怎么建立连接的呢
TCP是通过三次握手来建立连接(请求连接端这里用客户端举例,接收端用服务端举例)。
客户端向服务端发起一包("Synchronize")SYN包(TCP报文段中SYN标志位设置为1)来请求连接,由此完成第一步握手。
服务端收到客户端发来的SYN包之后,它会回复一个带有 SYN 和 ACK(Acknowledgment,确认)标志位的数据包,表示接收并同意建立连接,完成第二步握手。
客户端收到服务端发来的带有SYN和ACK的数据包后,会向服务器发送一个带有 ACK 标志位的数据包作为确认,这个 ACK 报文段中,确认号(Acknowledgment Number)被设置为服务器发送的 SYN 报文段的序列号值加一,表示客户端已经正确接收了服务器的确认,并准备好进行数据传输,当服务器收到客户端发送的ACK报文后,连接则正式建立起来。
TCP是怎么断开连接的呢
TCP是通过四次挥手来断开连接的(这里同样请求断开连接端这里用客户端举例,接收断开连接端用服务端举例)
客户端发送一个带有 FIN 标志位的数据包给服务端,进入FIN_WAIT_1状态请求关闭连接,此为第一次挥手。
服务端收到请求后向客户端发送ACK包,服务端进入CLOSE_WAIT状态,客户端进入FIN_WAIT_2状态,此为第二次挥手。
服务端向客户端客户端发送FIN包,服务端进入LAST_ACK状态,此为第三次挥手。
最后客户端向服务端发起ACK包,自身进入TIME_WAIT状态,再需要等待2MSL后断开连接,服务端在接收ACK包后断开连接。
TCP报文结构
主要字段解释
源端口号和目的端口号:用于标识通信的两个端点。
序号:用于标识数据段的顺序。
确认号:用于确认已接收到的数据。
数据偏移:指示数据部分在报文中的起始位置。
控制位:包括SYN、ACK、FIN等,用于控制连接状态。
窗口大小:用于流量控制,指示接收方可以接收的数据量。
校验和:用于检测数据传输中的错误。
紧急指针:指示紧急数据的位置。
选项:可选字段,用于扩展TCP功能。
四次挥手,三次挥手可不可以?
可以,当服务器将FIN和ACK在同一报文中发送,即同时发送FIN和ACK(图中第2条线和第3条线合并)也是可以的。
四次挥手是因为TCP是全双工的通信方式,即一方断开连接后,不能向另一方发送数据,但是此时另一方可以向自己发送数据,双方断开连接是独立的。服务器端在收到客户端的FIN报文后会立即发送确认ACK报文,再通知应用层来决定Server端到Client端的单向连接是否要关闭,如果应用层没数据要发则服务端此时再发一个FIN,这就导致比TCP建立多了一步,此时FIN和ACK不是在同一报文中发送。
四次挥手中,为什么在TIME-WAIT状态时主动断开方必须等待2MSL的时间?
(1)为了保证A发送的最后一个ACK确认报文段能够到达B。
这个ACK报文段有可能会丢失,因而是处在LAST-ACK状态的B收不到连接关闭的确认报文段,B会超时重传这个FIN+ACK报文段,而A就能在2MSL时间内收到这个重传的FIN+ACK。接着A重传一次确认ACK,重新启动2MSL计时器,最后A和B都正常进入了CLOSED状态。如果A在TIME-WAIT状态不等待一段时间,而是在发送完ACK后立即释放链接,那么就无法收到B重传的FIN+ACK,因而不会再重新发送一次ACK,这样,B就无法按照正常步骤进入CLOSED状态。
(2)防止上面提到的“已失效的连接请求报文段”出现在本连接中。
A发送完最后一个确认报文段ACK后,在经过2MSL时间(MSL:最长报文段寿命),就可以使本连接持续的时间内所产生的所有报文段都从网络中消失,这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。
B只要收到了A发出的确认,就进入CLOSED状态。同样B在撤销相应的传输控制块TCB后,就结束了这次的TCP连接。可以注意到,B(被动断开方)比A(主动断开方)更早进入CLOSED状态。
- Author:Albert1x
- URL:https://albert-1x.top//article/%E4%BA%86%E8%A7%A3TCP
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!