目录
1、TCP
- 数据不能随便发送,在发送之前还需要选择一个对应的传输协议,保证程序之间按照指定的传输规则进行数据的通信
- TCP (Transmission Control Protocol)简称传输控制协议 ,是一种面向连接的、可靠的、基于字节流的传输层通信协议 。TCP通信需要经过创建连接 、数据传送 、终止连接三个步骤
TCP特点
- 面向连接 :通信双方必须先建立连接才能进行数据的传输,完成数据交换后,双方必须断开此连接,以释放系统资源。这种连接是一对一的,因此TCP不适用于广播的应用程序,基于广播的应用程序请使用UDP协议
- 可靠传输:
- **TCP采用发送应答机制:**TCP发送的每个报文段都必须得到接收方的应答才认为这个TCP报文段传输成功
- 超时重传: 发送端发出一个报文段之后就启动定时器,如果在定时时间内没有收到应答就++重新发送++这个报文段。
- **错误校验:**TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。
- **流量控制和阻塞管理:**流量控制用来避免主机发送得过快而使接收方来不及完全收下。
TCP三次握手(建立TCP连接):
建立一个TCP连接时,需要客户端和服务端总共++发送3个包++以确认连接的建立。

①第一次握手:客户端将数据包发送给服务端,等待服务端确认【SYN=1,seq=J】
②第二次握手:服务端收到客户端的连接请求,发送数据包给客户端确认连接请求【SYN=1,ACK=1,ack=J+1,seq=K】
③第三次握手:客户端收到确认,将数据包发送给服务端,服务端检查数据包正确连接后开始传输数据【ACK=1,ack=K+1】
TCP四次握手【TCP断开链接的时候需要经过4次确认】:

①主机1向主机2发起FIN报文后进入FIN_WAIT_1状态【FIN=1,seq=u】
②主机2收到FIN报文,向主机1回ASK报文确认此时可以关闭连接【ACK=1,seq=v,ack=u+1】
③主机2向主机1发送FIN报文,请求关闭同时主机2进入CLOSE_WAIT状态【FIN=1,ACK=1,seq=w,ack=u+1】
④主机1收到主机2FIN报文,向主机2发送ASK报文,主机2收到后关闭连接【ACK=1,seq=u+1,ack=w+1】
此时,主机1等待2MSL(Maximum Segment Lifetime 报文最大生存时间)后依然没有收到回复,则证明Server端已正常关闭,主机1也可以关闭连接。
TCP网络程序开发流程
客户端开发:用户设备上的程序
- 创建客户端套接字对象
- 和服务端套接字建立连接
- 发送数据
- 接收数据
- 关闭客户端套接字
服务器开发:服务器设备上的程序
- 创建服务端端套接字对象
- 绑定端口号
- 设置监听
- 等待接受客户端的连接请求
- 接收数据
- 发送数据
- 关闭套接字
2、UDP
- 无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。
- 发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据
为什么使用UDP?
使用UDP协议消耗资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输例如视频会议都使用UDP协议,因为这种情况偶尔丢失一两个数据包,也不会对接收结果产生太大影响。
UDP常用再哪些方面?
- 包总量较少的通信(DNS).
- 视频、音频等多媒体通信(即时通信).
- 限定于 LAN 等特定网络中的应用通信.
- 广播通信(广播、多播)
UDP特点
- 需要资源少
- 不保证接收
- 无连接
- 快
UDP接收和发送流程

UDP实现步骤
- 导入模块socket
- 创建socket套接字
- 绑定IP&端口(可选)
- 发送数据
- 关闭套接字
TCP和UPD对比
|-------------------|-----------------------|
| UDP | TCP |
| 面向无连接 | 有连接 |
| 支持一对一、一对多、多对一、多对多 | 两个端点的一对一通信 |
| 不保证数据传输的可靠性 | 传输数据无差错、不丢失、不重复、按时序到达 |
| 占用资源少 | 占用资源多 |