计算机网络 | 应用层(6) -- 套接字编程
💓个人主页:mooridy
💓专栏地址:《计算机网络:自顶向下方法》 大纲式阅读笔记_mooridy的博客-CSDN博客💓本博客内容为《计算机网络:自顶向下方法》第二章应用层第七节知识梳理
关注我🌹,和我一起学习更多计算机的知识~
🔝🔝🔝
目录
套接字编程:生成网络应用
基本概念
套接字(Socket)
工作原理
UDP 套接字编程
UDP(用户数据报协议)特点
流程
服务器端流程
客户端流程
TCP 套接字编程
TCP 特点
流程
服务器端流程
客户端流程
套接字编程:生成网络应用
基本概念
套接字(Socket)
就像是不同计算机之间进行通信的 “端点”。每个套接字都有一个对应的 IP 地址和端口号,IP 地址用于标识网络中的计算机,而端口号则用于标识计算机上的特定应用程序。通过 IP 地址和端口号,数据可以准确地从一个套接字传输到另一个套接字。
工作原理
- 创建套接字:在通信的双方,首先需要创建一个套接字对象。这个套接字对象将作为数据传输的接口。
- 绑定地址:服务器端需要将套接字绑定到一个特定的 IP 地址和端口号上,以便客户端能够找到它。
- 监听连接:服务器端套接字开始监听指定端口,等待客户端的连接请求。
- 建立连接:客户端套接字尝试连接到服务器端的指定地址和端口。服务器端接受连接后,双方就建立了一个通信通道。
- 数据传输:连接建立后,双方可以通过套接字发送和接收数据。
- 关闭连接:通信结束后,双方关闭套接字,释放系统资源。
UDP 套接字编程
UDP(用户数据报协议)特点
- 客户端与服务器之间没有 “连接”,在发送数据之前没有握手过程。
- 发送方会明确地将目标 IP 地址和端口号附加到每个数据包上。
- 接收方会从接收到的数据包中提取发送方的 IP 地址和端口号。
- UDP 传输的数据可能会丢失,或者接收到的数据可能是乱序的。
- 从应用程序的角度来看,UDP 在客户端和服务器之间提供不可靠的字节组(“数据报”)传输。
流程
服务器端流程
- 创建套接字:使用
socket(AF_INET, SOCK_DGRAM)
创建一个 UDP 套接字,AF_INET
表明采用 IPv4 地址族,SOCK_DGRAM
表示这是数据报套接字 。同时指定一个端口号x
,用于监听客户端发来的数据报。 - 读取数据报:服务器通过
serverSocket
等待接收来自客户端的数据报。UDP 数据报是独立的消息单元,服务器从该套接字接收这些单元。 - 回复数据报:当服务器接收到客户端的数据报并处理后,要向客户端发送回复。回复时需要指定客户端的地址和端口号,以便客户端能正确接收,回复通过
serverSocket
发送出去。
客户端流程
- 创建套接字:同样使用
socket(AF_INET, SOCK_DGRAM)
创建 UDP 套接字,客户端套接字用于与服务器通信。 - 发送数据报:客户端创建一个包含目标服务器 IP 地址和端口号
x
的数据报,然后通过clientSocket
将数据报发送给服务器。在发送数据报时,客户端不需要与服务器提前建立连接。 - 读取数据报:客户端从
clientSocket
接收服务器发回的回复数据报。 - 关闭套接字:通信完成后,客户端关闭
clientSocket
,释放相关资源。
TCP 套接字编程
TCP 特点
- 客户端必须与服务器建立联系,服务器进程必须首先处于运行状态,且服务器必须创建一个用于接收客户端连接的套接字(好比一扇 “门”)。
- 客户端通过创建一个 TCP 套接字,并指定服务器进程的 IP 地址和端口号与服务器建立联系。当客户端创建套接字时,客户端的 TCP 会与服务器的 TCP 建立连接。
- 当服务器收到客户端的连接请求时,服务器的 TCP 会创建一个新的套接字,供服务器进程与该特定客户端进行通信。这使得服务器能够与多个客户端进行通信,源端口号用于区分不同的客户端。
- 从应用程序的角度来看,TCP 在客户端和服务器之间提供可靠的、按序的字节流传输(就像一个 “管道”)。
流程
服务器端流程
- 创建监听套接字:服务器使用
socket()
创建一个 TCP 套接字,并绑定到特定端口号x
,这个套接字用于监听客户端的连接请求,就像在门口站岗,等待有人敲门。 - 等待连接请求:通过
serverSocket.accept()
方法,服务器进入阻塞状态,一直等待客户端的连接请求。一旦有客户端请求连接,就会创建一个新的套接字connectionSocket
,专门用于和这个客户端进行通信。这就好比门卫接待访客后,给访客安排一个单独的房间进行交流。 - 读取请求与回复:使用
connectionSocket
读取客户端发送过来的请求信息,然后根据请求进行处理,并向connectionSocket
写入回复信息发送给客户端。 - 关闭连接套接字:通信结束后,关闭
connectionSocket
,释放相关资源。不过要注意,serverSocket
一般不会关闭,而是继续监听新的客户端连接请求。
客户端流程
- 创建套接字并连接:客户端使用
socket()
创建一个 TCP 套接字,然后通过这个套接字向服务器的指定主机 ID 和端口号x
发起连接请求,尝试与服务器建立连接。 - 发送请求与接收回复:连接建立成功后,客户端通过
clientSocket
向服务器发送请求信息,然后等待并从clientSocket
读取服务器返回的回复信息。 - 关闭套接字:通信完成后,客户端关闭
clientSocket
,释放占用的资源。
编辑
分享
用Python语言编写一个简单的UDP套接字通信程序
详细解释一下在网络编程中IP地址和端口号是如何协同工作的
套接字编程和其他网络编程模型相比有哪些优势和劣势