网络基础(二)

认识IP地址

IP 协议有两个版本, IPv4 和 IPv6.

IP 地址是在 IP 协议中, 用来标识网络中不同主机的地址;

对于 IPv4 来说, IP 地址是一个 4 字节, 32 位的整数;

我们通常也使用 "点分十进制" 的字符串表示 IP 地址, 例如 192.168.0.1 ; 用点 分割的每一个数字表示一个字节, 范围是 0 - 255;

跨网段的主机的数据传输. 数据从一台计算机到另一台计算机传输过程中要经过一个或 多个路由器.

在局域网通信的过程中 主要依靠的是MAC地址 并且源MAC和目的MAC地址它是会不断变化的

Mac 地址一直在变

IP 地址在整个路由过程中,一直不变目的

IP 是一种长远目标,Mac 是下一阶段目标,目的 IP 是路径选择的重要依 据,mac 地址是局域网转发的重要依据

也就是设备发送的信息会有两套地址IP和MAC地址

以太网为什么会叫以太网 这里的以太是物理学上推测失败的概念 借用它来形象地描述网络中数据传播的特性,即数据信号通过一种共享的、无形的介质进行传输。

避免碰撞检测都是以太网

令牌环中时只有持有令牌的设备才能够发送信息 其它设备只能接受和匹配信息

将路由器看做主机 这样就相当于在局域网中间接通信了 工作在网络层以及以上的设备也具有路由的功能 路由器要有两套接口赫尔两套程序

在发送的设备中 网络层也有自己的IP地址 也具有自己的路由功能 而在同一个子网中 大家IP地址的前缀是相同的 所以通过目的IP地址的前缀与自己的前缀进行判断 就能区分 如果是相同IP地址 那么说明这个数据是在当前1局域网传播的 如果前缀不同 说明要进行垮局域网传播

为什么能找到路由器 ? 在上网时路由器就已经连接好了

封装 MAC帧 src MAC A dst MACleft

解包(路由器) 找B 封装 src MACright dst MACB B设备收到后进行MAC地址匹配 匹配成功后接受解包分用 在这整个过程中IP不变 网络层全网统一 拿到的报文一样

局域网的标准多样化 解决通过网络层屏蔽差异化 (软件解决) 同时IP MAC是历史发展的产物

IP网络层的意义: 提供网络虚拟层,让世界的所有网络都是 IP 网络,屏蔽 最底层网络的差异

socket编程

理解IP地址和目的IP地址

1.IP地址唯一 2.IP地址分类

但是系统中,同时会存在非常多的进程,当数据到达目标主机之后,怎么转发给目标 进程?这就要在网络的背景下,在系统中,标识主机的唯一性。

总结 (用户)进程 +网络(os)-> 网络(对方主机的os)+进程(对端用户)

端口号port

• 端口号是一个 2 字节 16 位的整数;

• 端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来 处理;

• IP 地址 + 端口号能够标识网络上的某一台主机的某一个进程;

• 一个端口号只能被一个进程占用.

端口号范围划分

• 0 - 1023: 知名端口号, HTTP, FTP, SSH 等这些广为使用的应用层协议, 他们的 端口号都是固定的.

• 1024 - 65535: 操作系统动态分配的端口号. 客户端程序的端口号, 就是由操作 系统从这个范围分配的.

网络通信的本质 进程间通信 IP+端口=socket

端口号 与 pid

这里为什么不统一使用pid 这里是为了 网络与操作系统之间进行解耦合

如何识别端口号

操作系统通过哈希表存储端口号与进程的映射关系

如果出现来不及拿走数据导致数据挤压 那么os管理就需要通过struct对其进行描述管理 操作系统接受数据放入管理队列 进程从队列中拿数据 这里是典型的消费者 生产者模型

理解源端口号和目的端口号

传输层协议(TCP 和 UDP)的数据段中有两个端口号, 分别叫做源端口号和目的端口号. 就是在描述 "数据是谁发的, 要发给谁"

ip+port 叫做套接字 socket

认识 TCP 协议

• 传输层协议 • 有连接 • 可靠传输 • 面向字节流

认识 UDP 协议

• 传输层协议 • 无连接 • 不可靠传输 • 面向数据报

这里的可靠不可靠传输是特征 不是优缺点

字节流 (水流) 数据报(快递) 读与发有无关系做区分

网络字节序

内存中的多字节数据相对于内存地址有大端和小端之分, 磁盘文件中的 多字节数据相对于文件中的偏移地址也有大端小端之分, 网络数据流同样有大端小端之 分.

网络字节序:采用大端字节序,确保网络通信的一致性。

hton接口

h 表示 host,n 表示 network,l 表示 32 位长整数,s 表示 16 位 短整数。

点分十进制格式的IP地址 "192.168.34.45",

P地址在网络通信中通常以4个字节(即4个char类型)的形式表示,这4个字节分别对应IP地址的四个部分(192, 168, 34, 45)。

struct ip 的结构体,用于存储IP地址的四个字节。结构体包含四个字符型变量 p1, p2, p3, p4,分别对应IP地址的四个部分。指向 struct ip 类型的指针 struct ip * addr,用于操作和访问IP地址数据。

socket 编程接口

cpp 复制代码
C
// 创建 socket 文件描述符 (TCP/UDP, 客户端 + 服务器)
int socket(int domain, int type, int protocol);
// 绑定端口号 (TCP/UDP, 服务器)
int bind(int socket, const struct sockaddr *address,
socklen_t address_len);
// 开始监听 socket (TCP, 服务器)
int listen(int socket, int backlog);
// 接收请求 (TCP, 服务器)
int accept(int socket, struct sockaddr* address,
socklen_t* address_len);
// 建立连接 (TCP, 客户端)
int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);

sockaddr 结构

在网络编程中套接字种类非常多

常见的有网络socket (网络+本地) 和 本地socket 统一socket接口 设计了struc socketaddr

当需要调用具体种类的结构体 时 通过强制类型转换就可以实现 那么如何区分不同种类的socket

通过结构体中的16位端口号进行区分

相关推荐
梅见十柒3 分钟前
UNIX网络编程笔记:TCP、UDP、SCTP编程的区别
服务器·网络·c++·笔记·tcp/ip·udp·unix
JZC_xiaozhong11 分钟前
单一主数据系统 vs. 统一主数据中心,哪种更优?
大数据·运维·企业数据管理·主数据管理·mdm管理·数据孤岛解决方案·数据集成与应用集成
一直走下去-明17 分钟前
docker简单使用
运维·docker·容器
三块钱079421 分钟前
ubuntu22.04 安装Jitsi meet 开源会议系统,代替腾讯会议
linux·运维·服务器·腾讯会议·会议系统·jitis meet
m0_7401546732 分钟前
SpringMVC 请求和响应
java·服务器·前端
多多*1 小时前
JavaEE企业级开发 延迟双删+版本号机制(乐观锁) 事务保证redis和mysql的数据一致性 示例
java·运维·数据库·redis·mysql·java-ee·wpf
浩特-ht1 小时前
Linux 下 FTP 工具的安装和使用方式详解:附服务器文件备份实战
linux·运维·服务器
kcarly1 小时前
超融合服务器与普通服务器的具体区别
运维·服务器·超融合
玩电脑的辣条哥1 小时前
AI-Sphere-Butler之Ubuntu服务器如何部署Nginx代理,并将HTTP升级成HTTPS,用于移动设备访问
服务器·nginx·ubuntu·http·https·aispherebutler
Zack No Bug1 小时前
Linux CentOS7 安装emqx详细教程
linux·运维·服务器·mqtt