网络编程的基础知识

文章目录

客户端程序和服务端程序

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

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

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

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

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

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
  • 原始套接字通常需要管理员权限,用于协议分析、安全检测等领域
相关推荐
虚伪的空想家9 小时前
KVM的ubuntu虚机如何关闭安全启动
linux·安全·ubuntu
t1987512814 小时前
在Ubuntu 22.04系统上安装libimobiledevice
linux·运维·ubuntu
skywalk816314 小时前
linux安装Code Server 以便Comate IDE和CodeBuddy等都可以远程连上来
linux·运维·服务器·vscode·comate
晚风吹人醒.15 小时前
缓存中间件Redis安装及功能演示、企业案例
linux·数据库·redis·ubuntu·缓存·中间件
Yawesh_best16 小时前
告别系统壁垒!WSL+cpolar 让跨平台开发效率翻倍
运维·服务器·数据库·笔记·web安全
Hard but lovely16 小时前
linux: pthread库的使用和理解
linux
这儿有一堆花18 小时前
Kali Linux:探测存活到挖掘漏洞
linux·运维·服务器
松涛和鸣18 小时前
从零开始理解 C 语言函数指针与回调机制
linux·c语言·开发语言·嵌入式硬件·排序算法
Ccjf酷儿18 小时前
操作系统 蒋炎岩 3.硬件视角的操作系统
笔记
习习.y18 小时前
python笔记梳理以及一些题目整理
开发语言·笔记·python