网络编程的基础知识
文章目录
- 客户端程序和服务端程序
- IP地址与端口
- IP地址
- 端口
- TCP与UDP协议
- 传输控制协议(TCP)
- 用户数据报协议(UDP)
- TCP vs. UDP
- 套接字(Socket)
- 套接字的类型
客户端程序和服务端程序
网络程序和普通的程序的最大区别在于,网络程序由两个部分组成:客户端程序和服务器程序
- 客户端程序:主动发起连接请求
- 服务器程序:监听端口,等待并响应客户端的连接请求(被动监听并响应)
所以要先有服务器程序启动,等待客户端程序运行并向服务器端口发起连接
客户端和服务器建立连接后,双方通过数据通道进行通信
【拓展】客户端与服务端可以位于同一台主机上,也可以分别部署在不同的设备甚至不同地区
IP地址与端口
IP地址
网络上的每台计算机都必须有一个唯一的IP地址作为标识符(如IPv4格式192.168.1.1
,IPv6格式2001:0db8::1
)
端口
网络通信中,它不是物理意义上的端口,而是特指TCP/IP协议中的端口,是逻辑意义上的端口,通过端口号可以找到一台设备上唯一的一个程序
端口号范围: 0 - 65535
分类:
-
公共端口(0-1023):系统或知名服务占用
常见端口:ftp:23,smtp:25,http:80,https:443
-
动态端口(1024-65535):临时分配给应用程序,进程结束后释放
当需要和某台计算机建立连接,知道IP地址或域名即可
当需要和该计算机上的某个程序通信时,还必须知道该程序使用的端口号
TCP与UDP协议
传输控制协议(TCP)
TCP提供的是面向连接、可靠的字节流服务
当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据
TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端
用户数据报协议(UDP)
UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不保证它们能到达目的地
由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快
TCP vs. UDP
特性 | TCP | UDP |
---|---|---|
连接方式 | 面向连接(需三次握手建立连接) | 无连接 |
可靠性 | 可靠(重传、校验、流量控制) | 不可靠(可能丢包、无序) |
速度 | 较慢(因可靠性机制) | 较快(无额外控制开销) |
适用场景 | 文件传输、网页浏览、电子邮件 | 视频流、实时游戏、DNS查询 |
套接字(Socket)
定义:在TCP/IP通信协议中,套接字就是IP地址与端口号的组合,是网络通信的编程接口
对于网络应用程序而言,Socket是进程间(远程)通信的一种机制
套接字的类型
int s = socket(PF_INET, Socket type, Protocol);
类型 | 基于 | 用法 |
---|---|---|
字节流套接字(Stream Socket) | TCP,提供可靠字节流传输 | socket(PF_INET, SOCK_STREAM, 0) |
数据报套接字(Datagram Socket) | UDP,提供不可靠的报文传输 | socket(PF_INET, SOCK_DGRAM, 0) |
原始套接字(Raw Socket) | IP,允许用户直接对IP操作 | socket(PF_INET, SOCK_RAW, protocol) |
【补充】
PF_INET
表示 IPv4 协议族SOCK_STREAM
、SOCK_DGRAM
分别用于 TCP 和 UDP- 原始套接字通常需要管理员权限,用于协议分析、安全检测等领域