网络编程的基础知识

文章目录

客户端程序和服务端程序

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

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

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

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

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

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
  • 原始套接字通常需要管理员权限,用于协议分析、安全检测等领域
相关推荐
m0_689618283 小时前
突破亚微米光电子器件制造瓶颈!配体交换辅助打印技术实现全打印红外探测器
笔记·制造
Siren_dream3 小时前
在VMware上运行Linux(我选择的是Ubuntu)
linux·运维·ubuntu
☆璇3 小时前
【Linux】Socket编程UDP
linux·网络·udp
嵌入式小能手4 小时前
飞凌嵌入式ElfBoard-Vim编辑器之Vim常用操作命令
linux·编辑器·vim
迷路爸爸1804 小时前
源码编译安装最新 tmux 教程(含 Debian/Ubuntu/CentOS/Arch/macOS 等系统)
linux·ubuntu·macos·centos·debian·tmux·archlinux
励志不掉头发的内向程序员4 小时前
【Linux系列】掌控 Linux 的脉搏:深入理解进程控制
linux·运维·服务器·开发语言·学习
東雪蓮☆4 小时前
K8s Ingress 详解与部署实战
linux·运维·kubernetes
望获linux4 小时前
【实时Linux实战系列】实时 Linux 在边缘计算网关中的应用
java·linux·服务器·前端·数据库·操作系统
聆风吟º5 小时前
无需 VNC / 公网 IP!用 Docker-Webtop+cpolar,在手机浏览器远程操控 Linux
linux·运维·docker