TCP编程

发布时间 2023-10-06 09:27:03作者: sTruth

一、端口号

  用于在网络通信中标识特定应用程序或服务的数字,在网络通信时发送方和接收方都需要使用相同的端口号,以便彼此识别和连接,计算机将传入的数据包转发到正确的应用程序或服务,实现精确的网络通信。

  在TCP/IP协议中是一个16位的无符号整数,范围从0到65535。

  端口号分为三个范围:

    熟知端口(Well-known Ports):一般由标准化组织(如IANA)指定,端口号范围从0到1023,被预留用于一些通用或广泛使用的服务,如HTTP使用的端口号是80,HTTPS使用的端口号是443,SMTP使用的端口号是25等。

    注册端口(Registered Ports):通常经过IANA注册避免冲突,可由开发者或组织自行分配,用于一些特定的应用程序或服务,端口号范围从1024到49151。

    动态/私有端口(Dynamic/Private Ports):在应用程序或服务启动时从操作系统的可用端口号池中动态分配,以避免与其他应用程序的端口号冲突,用于临时分配给客户端应用程序或其他服务,端口号范围从49152到65535。

   在网络通信中,同一个IP地址下的不同端口号可以同时使用,但不同IP地址之间的端口号是互不相关的。每个端口号在特定的IP地址上是唯一的,用于标识不同的应用程序或服务。当一个应用程序或服务使用了特定的IP地址和端口号,其他应用程序或服务就不能再使用相同的IP地址和端口号。

二、Socket(套接字)

  一种在计算机网络中进行通信的编程接口,在应用层和传输层之间建立一个接口,使得应用程序可以通过传输层协议(如TCP或UDP)进行网络发送和接收数据,本质是实现不同计算机上的两个进程之间的数据传输。

  使用Socket进行网络通信的基本步骤如下:

    1. 创建Socket:在服务端的应用程序中创建一个Socket对象,指定协议类型(如TCP或UDP)和端口号。

    2. 绑定地址:将Socket对象绑定到本地的IP地址和端口号上,以便监听来自客户端的其他计算机的连接请求。

    3. 监听连接:开始监听指定的端口,等待客户端的连接请求。

    4. 接受连接:当有客户端的连接请求到达时,服务端接受连接并创建一个新的Socket对象,用于与客户端进行通信,这里是TCP的第一次握手,服务端收到了客户端的SYN报文段后,会发送一个SYN-ACK报文段给客户端,表示接收到了连接请求并且准备建立连接。
    5. 发送和接收数据:

      客户端收到服务端的SYN-ACK报文段后,通过Socket对象发送一个确认报文段(ACK)告知服务端,客户端已经收到了服务端的确认,并且准备好建立连接,这里是TCP的第二次握手。

      服务端收到客户端的确认ACK报文段后,发送的ACK报文段告知客户端,连接建立成功,这是TCP的第三次握手,然后双方可以开始进行数据的传输和通信。

    6. 关闭连接:当通信结束后,关闭Socket连接,释放资源。