前言
以太网TCP通信是上位机开发的核心技术,广泛应用于工业自动化领域(如西门子S7通信、三菱MC通信)和物联网场景(MQTT、OPCUA、ModbusTCP)。
在技术面试中,TCP通信相关问题(如三次握手、TCP与Socket关系)的考察频率极高。本文通过10个关键问题,系统梳理TCP通信的核心概念与实现机制,为开发者提供完整的知识图谱。
正文
一、OSI参考模型与TCP/IP参考模型
当前主流的分层模型有两种:
-
OSI参考模型:7层架构(应用层→表示层→会话层→传输层→网络层→数据链路层→物理层)
-
TCP/IP模型:4层架构(应用层→传输层→网络层→网络接口层)
两者均采用分层通信机制,但TCP/IP通过简化层次提升了实现效率,成为互联网通信的事实标准。
二、TCP通信位于网络模型的哪一层?
TCP(Transmission Control Protocol)是面向连接的传输层协议,其核心功能包括:
-
在不可靠的IP网络上提供可靠字节流传输
-
通过序列号、确认应答、超时重传机制保障数据完整性
-
无论OSI还是TCP/IP模型,TCP始终定位于传输层
三、TCP/IP协议与Socket的关系
TCP/IP是协议栈,Socket是编程接口:
-
协议栈:定义数据传输规则(如TCP的三次握手)
-
Socket接口:封装协议操作,提供
Connect()/Send()/Receive()等API -
定位:Socket位于应用层与传输层之间,不属于任何标准网络分层
四、TCP与UDP的核心区别
| 特性 | TCP | UDP |
|---|---|---|
| 连接机制 | 面向连接(三次握手) | 无连接 |
| 服务对象 | 一对一 | 一对多/多对多 |
| 可靠性 | 保证数据顺序与完整性 | 尽最大努力交付 |
| 流量控制 | 支持拥塞控制与滑动窗口 | 无 |
五、TCP三次握手过程
1、客户端:发送SYN=1, Seq=client_isn(SYN_SENT状态)
2、服务端:回复SYN=1, ACK=1, Ack=client_isn+1(SYN_RCVD状态)
3、客户端:发送ACK=1, Ack=server_isn+1(ESTABLISHED状态)
4、服务端:进入ESTABLISHED状态,通信建立
六、TCP四次挥手过程
1、客户端:发送FIN=1(FIN_WAIT_1状态)
2、服务端:回复ACK=1(CLOSE_WAIT状态)
3、客户端:进入FIN_WAIT_2状态
4、服务端:发送FIN=1(LAST_ACK状态)
5、客户端:回复ACK=1(TIME_WAIT状态,持续2MSL)
6、服务端:立即进入CLOSE状态
七、三次握手必要性分析
-
防止历史连接:通过序列号同步避免旧连接干扰
-
资源优化:两次握手无法可靠同步双方初始序列号
-
理论最优:三次握手是建立可靠连接的最小通信次数
八、四次挥手必要性分析
1、客户端停止发送:首先发送FIN表示数据发送完毕
2、服务端延迟关闭:需处理完剩余数据后再发送FIN
3、状态同步:ACK与FIN分开发送确保数据完整性
九、Socket编程实现步骤
服务器端
Socket serverSocket = new Socket(...);
serverSocket.Bind(new IPEndPoint(ip, port));
serverSocket.Listen();
Socket clientSocket = serverSocket.Accept();
clientSocket.Send(data);
byte[] buffer = new byte[1024];
clientSocket.Receive(buffer);
客户端
Socket clientSocket = new Socket(...);
clientSocket.Connect(new IPEndPoint(ip, port));
clientSocket.Send(data);
byte[] buffer = new byte[1024];
clientSocket.Receive(buffer);
十、ModbusTCP免校验机制
ModbusTCP无需应用层校验的原因:
-
TCP校验和:覆盖整个报文段(含Modbus ADU)
-
可靠性保障:通过序列号、确认应答、重传机制确保数据完整
-
效率优化:避免在应用层重复校验
总结
1、分层模型:理解OSI与TCP/IP的对应关系是掌握网络通信的基础
2、核心协议:TCP通过三次握手/四次挥手实现可靠连接管理
3、编程接口:Socket抽象了底层协议细节,提供统一编程范式
4、工业应用:ModbusTCP等协议依赖传输层可靠性,简化应用层设计
在实际开发中,开发者应重点关注应用层协议(如S7、MQTT)的规范实现,而将传输可靠性交给TCP协议栈处理。
关键词
TCP通信、Socket编程、三次握手、四次挥手、OSI模型、ModbusTCP、传输层协议、网络编程、工业通信、协议栈
最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。
也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!
优秀是一种习惯,欢迎大家留言学习!
作者:上位机付工
出处:mp.weixin.qq.com/s/7dTcsABY8vpoCAmy2L7HQQ
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!