1.网络编程中的TCP--传输控制协议

网络编程中,TCP(传输控制协议)是一种面向连接基于字节流的传输层通信协议,它提供了可靠的数据传输。

1.1TCP(传输控制协议)

TCP是一种面向连接的协议,他的特性功能如下:

①可靠性:TCP确保数据可靠的传输到目标,通过使用序号和确认应答机制来确认数据包的状态。如果数据包丢失或损坏,TCP会重传数据,以确保数据的安全和完整性。

②有序传输:TCP保证数据包按照发送顺序到达目标,即使数据包在传输过程中被重新排序,TCP也会将它们持续排序以确保按照正确的顺序传递给对方。

③流控制:TCP使用窗口机制来控数据的传输速率,以防止过多的数据阻塞网络。发送方根据接收方的接受能力来调整发送速度。

④全双工通信:TCP允许双方同时发送数据和接收数据,实现了全双工通信,其中服务器和客户端可以同时进行数据的交换。

⑤连接建立和断开:TCP连接是通过三次握手建立的,三次握手是为了确保可靠的通信。断开连接是通过四次挥手完成,四次挥手是为了让服务器和客户端保证断开连接释放连接资源。

⑥面向字节流:TCP是面向字节流的协议,它并不关心应用程序发送的消息的边界。应用程序必须使用自己的消息边界标志。

1.2TCP连接的建立和断开

TCP连接通过三次握手来确认连接,四次挥手来保证断开连接。

(1)三次握手:

连接建立时,客户端首先向服务器发送一个SYN(同步)标志的数据包,表示请求建立连接

服务器接收到请求后,回应一个ACK(确认)标志和一个SYN标志的数据包,表示接受连接请求。

客户端再次发送一个ACK标志的数据包,连接就建立了。

Linux网络编程中的TCP Socket建立连接过程_服务器

(2)四次挥手:

连接断开时,客户端发送一个FIN=1(结束)标志的数据包,表示不再发送数据

服务端回应一个ACK标志的数据包,表示已收到结束请求。

③服务端发送一个FIN标志的数据包

客户端回应一个ACK标志的数据包,连接断开。

1.3TCP编程

在编写TCP网络应用程序时,通常涉及以下步骤:

①创建套接字:使用socket()函数创建一个TCP套接字。

②绑定地址和端口:使用bind()函数将套接字绑定到一个本地地址和端口,通常是服务器的地址和端口。

③监听连接请求:对于服务器,使用listen()函数开始监听传入的连接请求。

④接受连接:服务器使用accept()函数接收客户端的连接请求,创建一个新的套接字用于与客户端的通信。

⑤数据传输:通过新创建的套接字进行数据传输,使用send()函数和recv()函数。

⑥关闭连接:使用close()函数关闭套接字以终止连接。


2.基于TCP的socket

服务端程序:

①创建一个socket,使用函数socket()。

②绑定IP地址、端口等信息到socket上,用函数bind()。

③设置允许的最大连接数,用listern()。

④接收客户端上来的连接,用函数accept()。

⑤收发数据,用函数send()和recv(),或者read()和write()。

⑥关闭网络连接close()函数。

客户端程序:

①创建一个socket,使用函数socket()。

②设置需要连接的对方的IP地址和端口属性。

③连接服务器,用函数connect()函数。

④收发数据,用函数send()和recv(),或read()和write()。

⑤关闭网络连接close()。

3.服务端和客户端建立TCP连接流程图

下面是一个简单的流程图,用于说明如何开发一个基本的Socket服务器和客户端,并使用对应的API。这个流程包括了创建、绑定、监听服务器套接字,以及客户端创建套接字、连接服务器,服务器接受连接和进行数据交换的步骤。

Linux网络编程中的TCP Socket建立连接过程_服务器_02

这个流程图显示了Socket服务器和客户端的基本步骤。服务器首先创建、绑定和监听套接字,然后等待客户端连接。一旦连接建立,服务器和客户端之间可以进行数据交换。在客户端方面,它创建一个套接字,连接到服务器,然后进行数据交换。最后,连接在双方都使用close()函数来关闭。

请注意,这只是一个简单的示例,真实的Socket编程可能会更复杂,涉及到错误处理、多线程或多进程处理、非阻塞套接字等方面。


4.建立TCP连接过程步骤的API函数

以下是一个以表格形式整理的Socket服务器和客户端开发步骤以及对应的API使用:

Socket 服务器(Socket Server)

Linux网络编程中的TCP Socket建立连接过程_客户端_03

Socket 客户端(Socket Client)

Linux网络编程中的TCP Socket建立连接过程_客户端_04