TCP 的概念
之前我们学习了 IP 地址和端口号,网络应用程序之间进行通信时,通过 IP 地址能够找到对应的设备,然后再通过端口号找到对应的端口,再通过端口把数据传输给应用程序,这里要注意,数据不能随便发送,在发送之前还需要选择一个对应的传输协议,保证程序之间按照指定的传输规则进行数据的通信, 而这个传输协议就是我们今天学习的 TCP。
TCP 的英文全拼(Transmission Control Protocol)简称传输控制协议,它是一种面向连接的、可靠的、基于字节流的传输层通信协议。
TCP通信需要经过创建连接、数据传送、终止连接三个步骤。
TCP通信模型中,在通信开始之前,一定要先建立相关的链接,才能发送数据,类似于生活中,打电话
TCP特点
面向连接
通信双方必须先建立连接才能进行数据的传输,双方都必须为该连接分配必要的系统内核资源,以管理连接的状态和连接上的传输。
双方间的数据传输都可以通过这一个连接进行。完成数据交换后,双方必须断开此连接,以释放系统资源。
这种连接是一对一的,因此TCP不适用于广播的应用程序,基于广播的应用程序请使用UDP协议。
可靠传输
- TCP采用发送应答机制:TCP发送的每个报文段都必须得到接收方的应答才认为这个TCP报文段传输成功
- 超时重传:发送端发出一个报文段之后就启动定时器,如果在定时时间内没有收到应答就重新发送这个报文段。
- 错误校验:TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。
- 流量控制和阻塞管理:流量控制用来避免主机发送得过快而使接收方来不及完全收下。
总而言之:TCP 是一个稳定、可靠的传输协议,常用于对数据进行准确无误的传输,比如: 文件下载,浏览器上网。
TCP拓展知识
TCP的三次握手
所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发
整个流程如下图所示:
(1)第一次握手:客户端将数据包发送给Server,等待Server确认。
(2)第二次握手:Server收到数据包后知道Client请求建立连接,发送数据包发送给Client以确认连接请求。
(3)第三次握手:Client收到确认后,发送数据包发送给Server,Server检查数据包,如果正确则连接建立成功,完成三次握手,随后Client与Server之间可以开始传输数据了。
TCP的四次挥手
TCP的4次挥手,主要是说TCP断开链接的时候需要经过4次确认.
第一次挥手: 主机1(可以是客户端,也可以是服务器端)向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了;
第二次挥手: 主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段告诉主机1,我也没有数据要发送了,可以进行关闭连接了;
第三次挥手: 主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入CLOSE_WAIT状态;
第四次挥手: 主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL(Maximum Segment Lifetime 报文最大生存时间)后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。
TCP网络程序开发流程
TCP 网络应用程序开发分为:
- TCP 客户端程序开发:指运行在用户设备上的程序
- TCP 服务端程序开发:指运行在服务器设备上的程序,为客户端提供数据服务。
TCP客户端开发流程
- TCP 网络应用程序开发分为客户端程序开发和服务端程序开发。
- 主动发起建立连接请求的是客户端程序
- 等待接受连接请求的是服务端程序