1.定义
- TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它在网络通信中起着至关重要的作用,确保数据能够准确、有序地从源端传输到目的端。
2.建立连接(三次握手)
- 第一次握手:客户端向服务器发送一个 SYN(同步)包,请求建立连接。这个包中包含一个随机生成的序列号(sequence number),记为 seq = x。
- 第二次握手:服务器收到客户端的 SYN 包后,向客户端发送一个 SYN/ACK(同步确认)包。这个包中包含服务器自己的序列号 seq = y,以及对客户端序列号的确认号 ack = x + 1。
- 第三次握手:客户端收到服务器的 SYN/ACK 包后,向服务器发送一个 ACK(确认)包。这个包中的确认号 ack = y + 1,表示客户端已经收到了服务器的 SYN 包,并确认了服务器的序列号。此时,连接建立成功。
3.数据传输
- TCP 采用字节流的方式进行数据传输。发送方将数据分割成适当大小的报文段(segment),并为每个报文段编号。接收方根据编号接收报文段,并将其组装成完整的数据。
- 在数据传输过程中,TCP 采用了滑动窗口机制来控制数据的发送和接收速度。发送方根据接收方的窗口大小来确定可以发送的数据量,避免发送过多的数据导致接收方无法处理。
- TCP 还采用了确认机制和超时重传机制来确保数据的可靠传输。接收方收到报文段后,会向发送方发送一个确认(ACK)包,表示已经成功接收了该报文段。如果发送方在一定时间内没有收到接收方的确认包,就会认为该报文段丢失,并重新发送该报文段。
4.断开连接(四次挥手)
- 第一次挥手:客户端向服务器发送一个 FIN(结束)包,表示客户端已经没有数据要发送了,请求关闭连接。
- 第二次挥手:服务器收到客户端的 FIN 包后,向客户端发送一个 ACK 包,表示已经收到了客户端的关闭请求。此时,服务器可能还有数据要发送给客户端,所以连接还没有完全关闭。
- 第三次挥手:服务器发送完所有数据后,向客户端发送一个 FIN 包,表示服务器也没有数据要发送了,请求关闭连接。
- 第四次挥手:客户端收到服务器的 FIN 包后,向服务器发送一个 ACK 包,表示已经收到了服务器的关闭请求。此时,连接完全关闭。
5.特点
-
面向连接
TCP 是一种面向连接的协议,在数据传输之前,需要先建立连接。连接建立成功后,才能进行数据传输。这种方式可以确保数据的可靠传输,避免数据丢失和乱序。 -
可靠传输
TCP 采用了多种机制来确保数据的可靠传输,如确认机制、超时重传机制、滑动窗口机制等。这些机制可以保证数据能够准确、有序地从源端传输到目的端。 -
基于字节流
TCP 采用字节流的方式进行数据传输,发送方和接收方之间没有明确的报文边界。这种方式可以提高数据传输的效率,但也需要接收方进行适当的处理,以确定报文的边界。 -
全双工通信
TCP 支持全双工通信,即发送方和接收方可以同时进行数据的发送和接收。这种方式可以提高通信的效率,但也需要双方进行适当的协调和管理。
四、应用场景
-
文件传输
TCP 协议的可靠传输特性使其非常适合用于文件传输。 -
电子邮件
TCP 可以确保邮件能够准确地从发送方传输到接收方的邮件服务器,并且在传输过程中不会出现数据丢失或损坏的情况。 -
网页浏览
TCP 的可靠传输和全双工通信特性可以确保网页能够快速、准确地加载到你的浏览器中。 -
远程登录
TCP 可以确保你在远程登录过程中输入的命令和接收的响应能够准确地传输,不会出现数据丢失或损坏的情况。