TCP/IP详解_ip tcp
以太网TCP通信是上位机开发的核心技术,广泛应用于工业自动化领域(如西门子S7通信、三菱MC通信)和物联网场景(MQTT、OPCUA、ModbusTCP)。
在技术面试中,TCP通信相关问题(如三次握手、TCP与Socket关系)的考察频率极高。本文通过10个关键问题,系统梳理TCP通信的核心概念与实现机制,为开发者提供完整的知识图谱。
要说起TCP/IP协议,就不得不提到网络体系结构。网络体系结构即指网络的层次结构和每层所使用协议的集合,网络采用分而治之的方法设计,将网络的功能划分为不同的模块,以分层的形式有机组合在一起。 每层实现不同的功能,其内部实现方法对外部其他层次来说是透明的。每层向上层提供服务,同时使用下层提供的服务。
两类非常重要的体系结构:OSI与TCP/IP
-
OSI参考模型:7层架构(应用层→表示层→会话层→传输层→网络层→数据链路层→物理层)
-
TCP/IP模型:4层架构(应用层→传输层→网络层→网络接口层)
一、OSI参考模型与TCP/IP参考模型
OSI模型是一个理想化的模型,尚未有完整的实现
标准OSI模型共有七层
TCP/IP协议是Internet事实上的工业标准。
TCP/IP协议共有四层
TCP/IP协议通信模型
两者均采用分层通信机制,但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(User Datagram Protocol)用户数据报协议,是不可靠的无连接的协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。
适用情况:
TCP适合于对传输质量要求较高,以及传输大量数据的通信。 在需要可靠数据传输的场合,通常使用TCP协议 MSN/QQ等即时通讯软件的用户登录账户管理相关的功能通常采用TCP协议。
UDP适用于网络中发送小尺寸数据(如对DNS服务器进行IP地址查询时) 在接收到数据,给出应答较困难的情况。(如:无线网络) 适合于广播/组播式通信中、 MSN/QQ/Skype等即时通讯软件的点对点文本通讯以及音视频通讯通常采用UDP协议 流媒体、VOD、VoIP、IPTV等网络多媒体服务中通常采用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状态,通信建立。
四次挥手
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状态
六、Socket编程
socket介绍
- 是一个编程接口
- 是一种特殊的文件描述符 (everything in Unix is a file)
- 并不仅限于TCP/IP协议
- 面向连接 (Transmission Control Protocol - TCP/IP)
- 无连接 (User Datagram Protocol -UDP 和 Inter-network Packet Exchange - IPX)
socket类型
流式套接字(SOCK_STREAM) 提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。
数据报套接字(SOCK_DGRAM) 提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。
原始套接字(SOCK_RAW) 可以对较低层次协议如IP、ICMP直接访问
socke的位置
TCP/IP与Socket编程
TCP循环服务器模型:
socket(...);
bind(...);
listen(...);
while(1){
accept(...);
process(...);
close(...);
}
TCP服务器一般很少用
TCP多进程并发服务器:
socket(...);
bind(...);
listen(...);
while(1){
accpet(...);
if(fork(...) == 0) {
process(...);
close(...);
exit(...);}
close(...);
}
TCP并发服务器的思想是每一个客户机的请求并不由服务器直接处理,而是由服务器创建一个子进程来处理。
TCP多线程服务器:
socket(...);
bind(...);
listen(...);
while(1){
accpet(...);
if((pthread_create(...))!==-1){
process(...);
close(...);
exit(...); }close(...);
}
多线程服务器是对多进程的服务器的改进
最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。与其他热爱技术的同行一起交流心得,共同成长!