网络编程的基础知识

文章目录

客户端程序和服务端程序

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

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

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

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

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

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
  • 原始套接字通常需要管理员权限,用于协议分析、安全检测等领域
相关推荐
叶之香28 分钟前
CentOS/RHEL 7、8安装exfat和ntfs文件系统
linux·运维·centos
一世琉璃白_Y34 分钟前
pg配置国内数据源安装
linux·python·postgresql·centos
不过普通话一乙不改名35 分钟前
Linux 内核开发入门:从环境配置到 Hello World 实战
linux·运维
乖乖是干饭王39 分钟前
Linux 内核 Kbuild 中的 ld 调用机制
linux·c·makefile
Trouvaille ~1 小时前
【Linux】理解“一切皆文件“与缓冲区机制:Linux文件系统的设计哲学
linux·运维·服务器·操作系统·进程·文件·缓冲区
ITKEY_1 小时前
archlinux 通过wpa_supplicant 连接wifi固定ip设置方法
linux·固定ip
hssfscv1 小时前
Javaweb 学习笔记——html+css
前端·笔记·学习
幸存者letp2 小时前
Python 常用方法分类大全
linux·服务器·python
知识分享小能手2 小时前
Ubuntu入门学习教程,从入门到精通,Linux操作系统概述(1)
linux·学习·ubuntu