Linux的网络基础

目录

1、计算机的网络背景

2、协议

[2.1 OSI七层模型和TCP/IP五层模型](#2.1 OSI七层模型和TCP/IP五层模型)

[2.2. TCP/IP协议与OS](#2.2. TCP/IP协议与OS)

3、网络通信

[3.1 局域网通信](#3.1 局域网通信)

[3.1.1 MAC地址 && Port端口号](#3.1.1 MAC地址 && Port端口号)

[3.1.2 以太网通信](#3.1.2 以太网通信)

[3.1.3 同一个网段内的两台主机的通信](#3.1.3 同一个网段内的两台主机的通信)

[3.2 跨网络通信](#3.2 跨网络通信)

[3.2.1 IP地址](#3.2.1 IP地址)

[3.2.2 跨网络通信](#3.2.2 跨网络通信)

4、Socket编程预备

[4.1 理解Socket](#4.1 理解Socket)

[4.2 TCP && UDP](#4.2 TCP && UDP)

[4.3 网络字节序](#4.3 网络字节序)

[4.4 Socket编程接口](#4.4 Socket编程接口)


1、计算机的网络背景

  • 计算机是人类的工具,人之间需要协作,所以计算机之间需要协作 ,需要网络传输数据。
  • 网络的产生 :局部 -> 整体。局域网->广域网。

2、协议

  • 协议 :一种约定 ,方便快速形成共识 ,减少通信的成本。从软件到硬件,都有各自的协议。
  • 协议分层 ,在设计上为了更好的进行模块化 ,解耦合 ,使维护成本更低。

2.1 OSI七层模型和TCP/IP五层模型

  • ISO(国际标准化组织)提出OSI七层模型 (理论 标准/参考模型),而现实世界广泛应用 TCP/IP五层模型 (事实上的工业标准)。
  • 每层 都有多种协议。
  • 作者自此以TCP/IP的四层模型(不涉及物理层(硬件))的TCP/IP协议开始讲解。为什么叫TCP/IP协议?是因为TCP协议和IP协议是核心。

2.2. TCP/IP协议与OS

  • 网络是OS的一部分。OS的分层,注定了网络协议的分层。
  • 操作系统可以不同,但是网络协议必须相同 (每层遵循相同的网络协议)。
  • 网络通信 的本质 是进程间通信 。因为主机上运行的是进程,是进程间收发数据,实现这一过程的核心链路就是"进程->OS->网络"。

3、网络通信

3.1 局域网通信

3.1.1 MAC地址 && Port端口号
  • 之前我们说了,网络通信 的本质 是进程间通信,那么怎么定位进程?

  • MAC地址 (全球唯一的硬件标识 ),负责链路层相邻硬件 的识别;长度为48位,即6个字节,一般用16进制数字加上冒号的形式来表示,例如: 08:00:27:03:fb:19。

  • Port(端口号 ,主机内唯一的进程标识 ),负责跨主机定位进程。0-1023:知名端口号,HTTP,FTP,SSH等这些广为使用的应用层协议,他们的端口号都是固定的。1024-65535:操作系统动态分配的端口号,客户端程序的端口号,就是由操作系统从这个范围分配的。

3.1.2 以太网通信
  • 因为网络的发展是从局部->整体的,现在留下来的局域网主要有:以太网,令牌环网,无线LAN。以下以 以太网 为例进行讲解。
  • 在局域网 中,主机之间可以直接通信。

  • 以太网 中,任何时刻 ,只允许一台机器 向网络中发送数据 ,且在该以太网中的任何主机都能收到,只有目标主机会处理,其他主机会丢弃。

  • 如果有多台同时发送,会发生数据干扰,我们称之为数据碰撞。

  • 所有发送数据的主机要进行碰撞检测(自己能收到,进行检测)和碰撞避免。

  • 没有交换机的情况下,一个以太网就是一个碰撞域。

  • 局域网通信 的过程中,主机对收到的报文确认是否是发给自己的 ,是通过目标 MAC 地址判定。

3.1.3 同一个网段内的两台主机的通信
  • 所以,称网络协议栈。
  • 每一层的报文 = 该层报头 + 有效载荷。
  • 入栈 是对数据进行封装 (添加报头 ),出栈 是对数据进行解包 (分开报头 和有效载荷 )+分用 (报头 与有效载荷 分别使用对应的协议)。

3.2 跨网络通信

3.2.1 IP地址
  • IP****协议 有两个版本,IPv4和IPv6,我们之后提到IP协议,默认 都是指IPv4。
  • IP****地址 是在IP****协议 中,用来标识网络中不同主机的地址。
  • 对于IPv4来说,IP地址是一个4字节,32位的整数。我们通常也使用"点分十进制"的字符串表示IP地址,例如192.168.0.1,用点分割的每一个数字表示一个字节,范围是0-255。
3.2.2 跨网络通信
  • 跨网段的主机的数据传输 ,数据从一台计算机到另一台计算机传输过程中要经过 一个或多个路由器。
  • IP地址 在整个路由过程中,一直不变 (目前这样理解,后面再修正)。MAC地址一直在变。
  • 目的IP地址 是一种长远目标 ,MAC地址 是下一阶段目标 ,目的IP地址 是路径选择的重要依据 ,MAC地址 是局域网转发的重要依据。
  • 提供网络虚拟层 ,让世界的所有网络都是IP网络,屏蔽最底层网络的差异。

4、Socket编程预备

4.1 理解Socket

  • Socket = IP (主机标识 )+Port (进程标识 )+ 操作系统通信接口,是进程实现跨主机通信的工具。

  • Socket的目标是 "定位进程",IP+Port 已经能实现;MAC 是 "定位硬件",属于更低层的逻辑,不需要放进 Socket。

4.2 TCP && UDP

  • TCP,UDP都是传输层协议,这里先进行了解。
特性 TCP(可靠,简单) UDP(不可靠,简单)
连接 有连接(先握手) 无连接(直接发)
可靠性 可靠(保证数据不丢、不错、顺序正确) 不可靠(不保证送达,可能丢失或乱序)
速度 慢(因为要保证可靠) 快(因为不管那么多)
常用场景 网页、邮件、文件传输 视频通话、在线游戏、直播

4.3 网络字节序

  • 有大端机和小端机之分,小端 :低位字节 放低地址 。"低低小端"。大端:低位字节放高地址。
  • 规定:网络中的数据 都是按大端存储。

4.4 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);
相关推荐
云中双月6 分钟前
瑞芯微rv1106进入Loader模式转储emmc数据
linux·嵌入式·uboot·u-boot·emmc·rockchip·烧录·rv1106·瑞芯微
yunwei376 分钟前
eBPF 入门实践教程:BPF Token,安全的委托式权限与程序加载
linux·后端·性能优化
不知语冰9 分钟前
达妙 Orin NX V2:JetPack 安装中文拼音输入法
linux
水饺编程18 分钟前
第2章:Linux 基础,echo 命令
linux·c语言·汇编
Lsetea30 分钟前
curl设置SSL_CERT_FILE仍报60:CURL_CA_BUNDLE与CA路径优先级排查
linux·https·ssl证书·openssl·curl
隐擎fox44 分钟前
Linux eBPF 与 XDP 高性能网络出口架构:动态连接追踪、丢包诊断与住宅网关 QoS 调优实战
linux·网络·网络协议·tcp/ip·架构
xiaoliuliu123451 小时前
Linux 手动装毕昇 bisheng-jdk-8u432-linux-aarch64.tar.gz
linux
狂奔的sherry2 小时前
JRuby 多线程反引号偶发 127:GC 提前释放了 posix_spawn 的 argv
java·linux·ruby·gc·jruby
广州灵眸科技有限公司2 小时前
瑞芯微(EASY EAI)RV1126B DeepSeek R1部署教程
linux·数据库·yolo
沙老师2 小时前
linux比windows死板的地方
linux·运维·windows