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****协议 有两个版本,IPv4IPv6,我们之后提到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);
相关推荐
violet-lz2 小时前
Linux文件系统调用:文件调用函数与exec系统函数详解与应用
linux·运维·服务器
袁泽斌的学习记录3 小时前
ubuntu22.04安装cuda11.4版本
linux·运维·服务器
用户31187945592184 小时前
CentOS 7 安装 net-tools.rpm 包步骤详解(附 rpm 命令和 yum 方法)附安装包
linux
我叫黑大帅4 小时前
什么是 mmap?
linux·c++·操作系统
chuxinweihui4 小时前
Socket编程UDP
linux·网络·网络协议·udp·通信
Ronin3054 小时前
【Linux网络】Socket编程:UDP网络编程实现Echo Server
linux·网络·udp·网络通信·socket编程
霖.244 小时前
service的两种代理实现
linux·服务器·容器·kubernetes
Lin_Aries_04214 小时前
基于 GitLab 的自动化镜像构建
linux·运维·docker·容器·自动化·gitlab
hkhkhkhkh1235 小时前
Git push 失败(remote unpack failed: Missing tree)解决方案
linux·git