TCP 的概念

之前我们学习了 IP 地址和端口号,网络应用程序之间进行通信时,通过 IP 地址能够找到对应的设备,然后再通过端口号找到对应的端口,再通过端口把数据传输给应用程序,这里要注意,数据不能随便发送,在发送之前还需要选择一个对应的传输协议,保证程序之间按照指定的传输规则进行数据的通信, 而这个传输协议就是我们今天学习的 TCP。

TCP 的英文全拼(Transmission Control Protocol)简称传输控制协议,它是一种面向连接的、可靠的、基于字节流的传输层通信协议

TCP通信需要经过创建连接数据传送终止连接三个步骤。
面向连接的效果图

TCP通信模型中,在通信开始之前,一定要先建立相关的链接,才能发送数据,类似于生活中,打电话
无标题49-1.png
无标题888-1.png

TCP特点

面向连接

通信双方必须先建立连接才能进行数据的传输,双方都必须为该连接分配必要的系统内核资源,以管理连接的状态和连接上的传输。
双方间的数据传输都可以通过这一个连接进行。完成数据交换后,双方必须断开此连接,以释放系统资源。
这种连接是一对一的,因此TCP不适用于广播的应用程序,基于广播的应用程序请使用UDP协议。

可靠传输

  1. TCP采用发送应答机制:TCP发送的每个报文段都必须得到接收方的应答才认为这个TCP报文段传输成功
  2. 超时重传:发送端发出一个报文段之后就启动定时器,如果在定时时间内没有收到应答就重新发送这个报文段。
  3. 错误校验:TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。
  4. 流量控制和阻塞管理:流量控制用来避免主机发送得过快而使接收方来不及完全收下。

总而言之:TCP 是一个稳定、可靠的传输协议,常用于对数据进行准确无误的传输,比如: 文件下载,浏览器上网

TCP拓展知识

TCP的三次握手

所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发
TCP介绍 - 图4
整个流程如下图所示:
TCP三次握手流程
(1)第一次握手:客户端将数据包发送给Server,等待Server确认
(2)第二次握手:Server收到数据包后知道Client请求建立连接,发送数据包发送给Client以确认连接请求
(3)第三次握手:Client收到确认后发送数据包发送给Server,Server检查数据包,如果正确则连接建立成功,完成三次握手,随后Client与Server之间可以开始传输数据了。

TCP的四次挥手

TCP的4次挥手,主要是说TCP断开链接的时候需要经过4次确认.
TCP介绍 - 图6
第一次挥手: 主机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 网络应用程序开发分为:

  1. TCP 客户端程序开发:指运行在用户设备上的程序
  2. TCP 服务端程序开发:指运行在服务器设备上的程序,为客户端提供数据服务。

TCP通信模型

TCP客户端开发流程

  1. 创建客户端套接字对象
  2. 和服务端套接字建立连接
  3. 发送数据
  4. 接收数据
  5. 关闭客户端套接字

    TCP服务端开发流程

  6. 创建服务端端套接字对象

  7. 绑定端口号
  8. 设置监听
  9. 等待接受客户端的连接请求
  10. 接收数据
  11. 发送数据
  12. 关闭套接字

    小结

  • TCP 网络应用程序开发分为客户端程序开发服务端程序开发
  • 主动发起建立连接请求的是客户端程序
  • 等待接受连接请求的是服务端程序