以太网 TCP 通信是上位机开发中常用的通信方式,西门子 S7 通信、三菱 MC 通信以及 MQTT、OPC UA、Modbus TCP 等都是其典型应用。为帮助大家更好地理解 TCP 通信,我整理了一套常见问题汇总。
一、OSI参考模型与TCP/IP参考模型
基于TCP/IP的参考模型将协议分成四个层次,它们分别是链路层、网络层、传输层和应用层。下图表示TCP/IP模型与OSI模型各层的对照关系。
TCP/IP模型是在OSI参考模型的基础上做了一定的精简,形成一个4层模型。在层次关系上,两者都采用了分层体系结构,都是对等的层间通信,不同之处在于TCP/IP参考模型比OSI参考模型层次更清晰简练,在功能上,两者差别不大,都是为了实现两个或多个终端之间的通信。
那么,TCP通信位于网络模型的哪一层?TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,TCP是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议。
二、TCP/IP协议与Socket是什么关系?
TCP/IP只是一个协议栈,如果想要实现TCP通信,还需要提供对外的操作接口,就像操作系统提供Win32编程接口一样。TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。
所以,Socket跟TCP/IP并没有必然的联系,Socket不属于网络分层中的任何一层,而是位于应用层/会话层和传输层之间的抽象接口层。Socket的出现是为了将TCP/IP协议族的复杂操作封装成简单的API方法进行调用,比如Connect/Send/Receive等。
三、TCP与UDP之间的区别联系?
传输层有两种协议,分别是TCP与UDP,它们之间的主要区别在于可靠性与效率。
TCP是面向连接的协议,通过三次握手建立可靠通道,提供数据不丢、不错、不乱序的保证,并具备流量和拥塞控制,但因此开销较大、速度相对较慢,适用于要求高可靠性的场景(如文件传输、工业控制指令);
而UDP是无连接协议,直接发送数据报,不保证可靠交付,可能丢失、重复或乱序,也不进行流量控制,但正因如此开销极小、传输速度极快、延迟低,适用于实时性要求高、能容忍少量丢包的应用(如视频流、语音通话、实时状态读取)
四、如何理解TCP三次握手过程?
TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP窗口大小信息。
为什么握手必须三次?TCP 建立连接时,通过三次握手能防止历史连接的建立,能减少双方不必要的资源开销,能帮助双方同步初始化序列号。序列号能够保证数据包不重复、不丢弃和按序传输。两次握手:无法防止历史连接的建立,会造成双方资源的浪费,也无法可靠的同步双方序列号;四次握手:三次握手就已经理论上最少可靠连接建立,所以不需要使用更多的通信次数。
五、如何理解TCP四次挥手过程?
当客户端和服务器通过三次握手建立了TCP连接以后,当数据传送完毕,要断开TCP连接,那对于TCP的断开连接,这里就有了神秘的“四次分手”。
为什么挥手需要四次?
1、关闭连接时,客户端向服务端发送 FIN 时,仅仅表示客户端不再发送数据了但是还能接收数据。
2、服务器收到客户端的 FIN 报文时,先回一个 ACK 应答报文,而服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送 FIN 报文给客户端来表示同意现在关闭连接。
由于服务端通常需要等待完成数据的发送和处理,所以服务端的 ACK 和 FIN 一般都会分开发送,从而比三次握手导致多了一次。
六、无线Modbus TCP/IP协议通讯方案
本方案以WinCC和2台西门子S7-1200 PLC为例,在ModbusTCP/IP协议下实现无线以太网通信实现过程。
楼主最近还看过