建云 2025-7-18 17:12:58 | 显示全部楼层 | 阅读模式

『7x24小时有问必答』

前言

以太网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协议栈处理。
关键词

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。也可以加入微信公众号[DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!

作者:上位机付工

出处:mp.weixin.qq.com/s/7dTcsABY8vpoCAmy2L7HQQ

声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!

END

方便大家交流、资源共享和共同成长

纯技术交流群,需要加入的小伙伴请扫码,并备注加群

推荐阅读

WinForm 跨线程操作 UI 控件封装实践

WPF + Halcon 开发的机器视觉算法平台

WinForm 开发的智能停车场管理系统(岗亭端)

C# 自定义特性实现 DataGridView 全自动列生成

C# 工业开发必备:精选 4 个最强 Modbus 通信库

WPF 工业大数据采集维保平台:工业4.0时代的智能运维中枢

.NET 7.0 + Vue 3 开源跨平台图形化工作流引擎,适配多终端

告别重复造轮子!WPF 通用上位机开发框架,快速搭建工业监控系统

.NET 9 可视化工作流引擎!纯血开源,支持数十种数据库,开箱即用

基于 WinForm 的智能温控系统,运用 Modbus协议实现高效上位机控制

惊艳!这个开源框架用 HTML5/CSS3/JavaScript 轻松开发 WinForm 炫酷界面

觉得有收获?不妨分享让更多人受益
关注「DotNet技术匠」,共同提升技术实力

收藏

点赞

分享

在看


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码