TCP/IP通信协议(小白_马)

时间:2024-05-18 12:10:54

TCP/IP协议介绍

TCP/IP协议分为五层,从上到下,层层包装。最上层为应用层,处于该层的协议有HTTP和FTP协议等,该层传输的基本单位为数据。第二层为传输层,该层包含的协议有TCP和UDP协议等,该层传输的基本单位为数据段。第三层为网络层,该层包含的协议有IP协议,该层传输的基本单位为数据包。第四层为数据链路层,该层包含的协议有MAC协议,该层传输的基本单位为数据帧。第五层为物理层,该层传输的基本单位为比特。下图为TCP/IP协议各层在传输数据单位、设备、协议和表达地址上的对比。

TCP/IP通信协议(小白_马)

图表 1  TCP/IP五层协议

 

两台电脑TCP/IP通信的实现原理:

发送端的进程向接收端的进程发送数据,会使用到TCP/IP通信。首先作为发送端的客户端在应用层发送数据。为了传输方便,传输层把从应用层处收到的数据进行分割,并在各个分块上打上序号和端口号后转发给网络层。网络层将接收端的IP添加到数据中,组装成数据包,并转发给数据链路层。数据链路层获取传输层的数据段中的IP,通过ARP地址解析协议,得到接收端的MAC地址,将其添加到数据包中,为了便于数据进出介质,数据链路层在一段数据的前后添加首部和尾部变为数据帧,并将数据帧转发给物理层。物理层将数据帧转化为比特通过物理层设备传输给接收端。接收端通过相反的顺序解析数据,并发送给数据端口号对应的进程。下图为两台电脑TCP/IP通信时数据传输过程。

TCP/IP通信协议(小白_马)

图表 2 两台电脑TCP/IP数据传输过程

 

传输层的TCP和UDP协议:

传输层有两个重要的高级协议,分别是UDP和TCP,其中UDP是User Datagram Protocol的简称,称为用户数据报协议,TCP是Transmission Control Protocol的简称,称为传输控制协议。TCP和UDP是传输层的两个不同协议,拥有各自不同的传输方式。

TCP通信:

TCP协议是面向连接的通信协议,即在传输数据前先在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。在TCP连接中必须要明确客户端与服务器端,由客户端向服务端发出连接请求,每次连接的创建都需要经过“三次握手”。第一次握手,客户端向服务器端发出连接请求,等待服务器确认,第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求,第三次握手,客户端再次向服务器端发送确认信息,确认连接。下图为客户端与服务器进程进行TCP通信的状态转移过程。

TCP/IP通信协议(小白_马)

图表 3 客服端和服务器TCP通信状态转移过程

 

TCP协议客户端与服务器端一般的通信过程分为三个步骤:

1、建立连接的过程——三次握手

第一次:调用connect函数发出SYN段向服务器发起连接请求,并阻塞等待服务器应答。

第二次:服务器收到客户端的SYN段后,会应答一个SYN-ACK段表示“同一建立连接”。

第三次:服务器端收到SYN-ACK后会从connect函数中返回,同时应答一个ACK段。

TCP/IP通信协议(小白_马)

图表 4  TCP连接三次握手

 

2、数据传输的过程

建立连接后,TCP协议提供全双工的通信服务。所谓全双工,意思是:在同一条链路中的同一时刻,通信双方可以同时写数据。相对的概念叫做半双工,即:在同一条链路中的同一时刻,只能由一方来写数据。

(1)服务器从accept函数返回后立刻调用read函数读socket里的数据。读socket就像读管道一样,如果没有数据到达就阻塞等待。

(2)客户端调用write函数发送请求给服务器,服务器收到后就向客户端回复ACK,并从read函数中返回,对客户端的请求进行处理。在此期间客户端调用read函数阻塞等待服务器的应答。

(3)服务器调用write函数将处理结果发回客户端,客户端收到后就回复ACK。服务器再次调用read函数阻塞等待下一条请求,。

(4)客户端从read函数中返回,并发送下一条请求,如此循环下去。

3、断开连接的过程——四次挥手

第一次:如果客户端没有更多的请求就调用close函数关闭连接,客户端会向服务器端发送FIN端。

第二次:服务器收到FIN后会回应一个ACK,同时read返回0。

第三次:客户端收到FIN后,再返回一个ACK给服务器。

TCP/IP通信协议(小白_马)

图表 5  TCP断开连接四次挥手

 

UDP通信:

UDP是无连接通信协议,即在数据传输(数据大小在64kb以内)时,数据的发送端和接收端不建立逻辑连接。简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。

由于使用UDP协议消耗资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输例如视频会议都使用UDP协议,因为这种情况即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。

但是在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议。UDP的交换过程如下图所示。