网络编程的基础知识

文章目录

客户端程序和服务端程序

网络程序和普通的程序的最大区别在于,网络程序由两个部分组成:客户端程序服务器程序

  • 客户端程序:主动发起连接请求
  • 服务器程序:监听端口,等待并响应客户端的连接请求(被动监听并响应)

所以要先有服务器程序启动,等待客户端程序运行并向服务器端口发起连接

客户端和服务器建立连接后,双方通过数据通道进行通信

【拓展】客户端与服务端可以位于同一台主机上,也可以分别部署在不同的设备甚至不同地区

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是进程间(远程)通信的一种机制

套接字的类型

c 复制代码
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_STREAMSOCK_DGRAM 分别用于 TCP 和 UDP
  • 原始套接字通常需要管理员权限,用于协议分析、安全检测等领域
相关推荐
mzhan017几秒前
Linux: config: CRYPTO_USER_API_AEAD
linux·安全·module
wangjialelele6 分钟前
【SystemV】基于建造者模式的信号量
linux·c语言·c++·算法·建造者模式
土星碎冰机21 分钟前
ai自学笔记(3.安卓篇,制作app
android·笔记·ai
源远流长jerry1 小时前
Linux 网络虚拟化深度解析:从 veth 设备对到容器网络实战
linux·运维·服务器·网络·性能优化·php
|_⊙1 小时前
Linux 深入理解文件(Ext2文件系统:上)
linux·运维·数据库
土星碎冰机1 小时前
ai自学笔记 (2.prompt 踩坑与优化)
笔记·ai·prompt·claude
kidwjb1 小时前
Linux共享内存
linux·服务器·进程间通信
红茶要加冰1 小时前
七、正则表达式
linux·运维·正则表达式·shell
ALINX技术博客1 小时前
【黑金云课堂】FPGA技术教程Linux开发:串行通信接口与实时时钟模块
linux·fpga开发
pluviophile_s1 小时前
数据结构:第1讲:算法分析
数据结构·笔记