网络编程的基础知识

文章目录

客户端程序和服务端程序

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

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

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

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

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

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
  • 原始套接字通常需要管理员权限,用于协议分析、安全检测等领域
相关推荐
wdfk_prog5 小时前
[Linux]学习笔记系列 -- [drivers][input]input
linux·笔记·学习
ouliten5 小时前
cuda编程笔记(36)-- 应用Tensor Core加速矩阵乘法
笔记·cuda
盟接之桥5 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
忆~遂愿5 小时前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能
湘-枫叶情缘5 小时前
1990:种下那棵不落叶的树-第6集 圆明园的对话
linux·系统架构
孞㐑¥6 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法
Fcy6486 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满6 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠7 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Gary Studio7 小时前
rk芯片驱动编写
linux·学习