> 技术文档 > TCP/IP详解_ip tcp

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模型是一个理想化的模型,尚未有完整的实现

TCP/IP详解_ip tcp

标准OSI模型共有七层

TCP/IP协议是Internet事实上的工业标准。

TCP/IP详解_ip tcp

TCP/IP协议共有四层

TCP/IP详解_ip tcp

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状态

TCP/IP详解_ip tcp

六、Socket编程

socket介绍

  1. 是一个编程接口
  2. 是一种特殊的文件描述符 (everything in Unix is a file)
  3. 并不仅限于TCP/IP协议
  4. 面向连接 (Transmission Control Protocol - TCP/IP)
  5. 无连接 (User Datagram Protocol -UDP 和 Inter-network Packet Exchange - IPX)

socket类型

流式套接字(SOCK_STREAM) 提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。

数据报套接字(SOCK_DGRAM) 提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。

原始套接字(SOCK_RAW) 可以对较低层次协议如IP、ICMP直接访问

socke的位置

TCP/IP详解_ip tcp

TCP/IP与Socket编程

TCP/IP详解_ip tcp

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(...);

}

 

多线程服务器是对多进程的服务器的改进

最后

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