Network

基础知识 #

IP #

IP地址可唯一标识 IP 网络中的每台设备 每台主机(计算机、网络设备、外围设备)必须具有唯一的地址 网络地址 + 主机地址

子网掩码 #

区分主机ID和网络ID 举例:当子网掩码=255.255.255.0时: 192.168.100.168(IP地址) = 192.168.1.0 (网络地址) + 0.0.0.168(主机地址) 用网线直接连接 或 通过 HUB(集线器)、普通交换机链接的计算机必须处于同一网络(网络地址) 并且主机地址必须不一样 才能通信。

如何判断两个主机在同一网段 #

假设有两个主机A和B,它们的IP地址和子网掩码如下:

主机A的IP地址:192.168.1.2

主机A的子网掩码:255.255.255.0

主机B的IP地址:192.168.1.5

主机B的子网掩码:255.255.255.0

步骤1:应用子网掩码 对于主机A:

IP地址:192.168.1.2 转换为二进制是 11000000.10101000.00000001.00000010 子网掩码:255.255.255.0 转换为二进制是 11111111.11111111.11111111.00000000 进行AND运算:

11000000.10101000.00000001.00000010 (IP地址) 11111111.11111111.11111111.00000000 (子网掩码) 11000000.10101000.00000001.00000000 (网络地址) 转换回十进制,网络地址为:192.168.1.0

对于主机B:

IP地址:192.168.1.5 转换为二进制是 11000000.10101000.00000001.00000101 子网掩码:255.255.255.0 转换为二进制是 11111111.11111111.11111111.00000000 进行AND运算:

11000000.10101000.00000001.00000101 (IP地址) 11111111.11111111.11111111.00000000 (子网掩码) 11000000.10101000.00000001.00000000 (网络地址) 转换回十进制,网络地址为:192.168.1.0

步骤2:比较网络地址 由于两个主机的网络地址都是192.168.1.0,因此它们在同一网段。

结论 通过上述步骤,我们可以判断两个主机是否在同一网段。在这个例子中,主机A和主机B都在192.168.1.0/24这个网段中。

##网关 连接两个不同的网络的设备都可以叫网关设备;网关的作用就是实现两个网络之间进行通讯与控制。 网关设备可以是 交互机(三层及以上才能跨网络)、路由器、启用了路由协议的服务器、代理服务器、防火墙等 网关地址就是网关设备的IP地址

如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关 只有设置好网关的IP地址,TCP/IP协议才能实现不同网络之间的相互通信 一台主机可以有多个网关。默认网关的意思是一台主机如果找不到可用的网关,就把数据包发给默认指定的网关,由这个网关来处理数据包。现在主机使用的网关,一般指的是默认网关。

DHCP #

Dynamic Host Configuration Protocol, 动态主机配置协议 自动设置就是利用DHCP(Dynamic Host Configuration Protocol, 动态主机配置协议)服务器来自动给网络中的计算机分配IP地址、子网掩码和默认网关 。 一旦网络的默认网关发生了变化时,只要更改了DHCP服务器中默认网关的设置,那么网络中所有的计算机均获得了新的默认网关的IP地址。这种方法适用于网络规模较大、TCP/IP参数有可能变动的网络。 另外一种自动获得网关的办法是通过安装代理服务器软件的客户端程序来自动获得,其原理和方法和DHCP有相似之处。

两个主机通信 #

条件: #

  • 知道对方ip
  • 是否双方在同一网段下
  • 在同一网段:arp广播
  • 不同网段:找网关,若未配置,则无法通行
  • 通信时是用自己的子网掩码与对方ip相与,因为通信时不知道对方子网掩码

举例: A的IP地址: 192.168.38.100 A的子网掩码: 255.255.255.128 B的IP地址: 192.168.38.200 B的子网掩码: 255.255.255.0 ① A –> B 以A的子网掩码为基准 192.168.38.0110 0100 & 255.255.255.1000 0000=192.168.38.0 192.168.38.1100 1000 & 255.255.255.1000 0000=192.168.38.128 ip-A 与 ip-B分别与A主机子网掩码相与,不相同,则不在同一网段 ② B –> A(以B的子网掩码为基准)  192.168.38.0110 0100 & 255.255.255.0000 0000=192.168.38.0  192.168.38.1100 1000 & 255.255.255.0000 0000=192.168.38.0  ip-A 与 ip-B分别与B主机子网掩码相与,相同,则在同一网段 ##DNS 我们访问一个网站的时候,往往使用的是域名(相对IP来说更加语义清晰、更加容易记忆,例如 www.baidu.com)。 然而计算机之间的通信网络通信是通过IP进行的, 因此需要将域名解析为对应的IP,DNS就是进行域名解析的服务器。 DNS 维护着 域名(domain name)和IP地址 (IP address)的对照表表,以解析消息的域名

1、在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。

2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。

3、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/ip参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。

4、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。

5、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www.qq.com主机。

6、如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机

##路由器

##防火墙 防火墙是一个网络安全产品,它是由软件和硬件设备组合而成,在内网和外网之间、专用网与公共网之间的一种保护屏障

软件防火墙和硬件防火墙 #

作用 #

  • 虽然防火墙本身不充当防病毒软件,但它们通过确保只有授权的数据流经网络,确实有助于防止病毒的安装。
  • 防止未经授权访问危险的网站。防火墙还可以阻止访问已知会在访问者的计算机上安装恶意软件和病毒的恶意站点。
  • 阻止未经授权的访问

网关 #

客户端数据发出的,在同一网段没找到目标ip,那么就给网关找

代理 #

Clash #

特色功能 #

  • 入站代理:支持 HTTP、HTTPS、SOCKS5 服务器、TUN 设备等。
  • 出站代理:支持 Shadowsocks(R)VMessTrojan、Snell、SOCKS5、HTTP(S)、Wireguard 等。
  • 基于规则的路由:可以根据动态脚本、域名、IP 地址、进程名称等规则进行路由。
  • 虚假 IP DNS:可以减少对 DNS 污染的影响,提高网络性能。
  • 透明代理:可以重定向 TCP 流量以及自动管理路由表和规则。
  • 代理组:可以自动切换代理、负载均衡或测试延迟。
  • 远程提供者:可以动态加载远程代理列表。
  • RESTful API:可以通过全面的 API 更新配置。

桥接和NAT #

桥接(Network Address Translation)

SSH #

SSH包含三个组件ssh,sftp,scp

Unix、Linux 和 macOS 设备内置SSH客户端,允许从终端直接启动SSH连接,还可以使用SSH客户端(如PuTTY)启动连接。

Windows 设备启动 SSH 连接,则必须使用 OpenSSH 或 PuTTY 等 SSH 客户端来启动连接

在服务器端,需要安装 SSH 服务器包,并且需要安装并运行称为 SSH守护进程的服务器端组件,SSH 守护进程通过侦听 TCP 端口 22 上的所有连接来检查任何 SSH 连接请求

如果使用的是 Linux/macOS设备或Windows设备上的SSH客户端,可以输入以下命令从设备终端启动到远程服务器的SSHl连接:ssh <user_name>@<host_name>

通信步骤 #

  1. 从 SSH 客户端尝试 SSH 会话。
  2. SSH 客户端会连接到目标服务器。
  3. SSH 客户端从 SSH 服务器获取公钥,特别是从 .ssh/authorized_keys 文件中获取公钥。
  4. 客户端和服务器协商参数和加密方法,然后使用合适的密钥交换算法制定加密的会话密钥。
  5. 然后,用户使用适当的凭据进行身份验证并登录到目标服务器。
  6. 现在已建立安全连接,用户可以在服务器上执行操作。

认证方式 #

密码 #

密码身份验证是建立SSH连接时更广泛使用的身份验证方法,共享密钥和加密协商完成后,服务器会提示用户输入客户端正在尝试登录的用户账号的密码。

密钥 #

使用SSH密钥的身份验证涉及公私非对称SSH密钥对,在对称加密之后,客户端生成密钥对 ID,服务器通过查找用户的.ssh/authorized_keys文件来验证这个ID,如果ID匹配,则使用公钥生成并加密随机数,然后客户端使用其私钥对其解密。

然后,客户端在对称加密期间使用解密的号码和已建立的共享密钥对号码进行散列处理,并以 MD5 哈希值的形式将其发送回服务器,一旦服务器使用相同的共享密钥和数字自行计算 MD5 哈希值并确定其匹配项,身份验证就完成了。

多层密钥的身份验证成为一种更安全的加密形式,因为不传输服务器的私钥,并且还需要共享密钥来篡改身份验证。

OpenSSH #

提供ssh连接服务

常用命令 #

sudo apt-get install openssh-client#客户端
sudo apt-get install openssh-server#服务器
ssh [OPTION] [hostname]@[IP] #连接远程服务器

#可以增加-v打印详细星系
 # 链接123.45.67.89这个IP的服务器,然后输入链接密码,验证成功后就可以登陆到服务器了。
 $ ssh root@123.45.67.89
 # 链接到github.com这个服务器,并且打印链接的详细信息。
 $ ssh -v git@github.com
 
 
#ssh-keygen命令用于生成、管理密钥。
Usage: ssh-keygen [-t rsa|ed25519] [-b bits] [-C comment] [-f output_keyfile] 生成新的密钥。
Or: ssh-keygen -c [-C comment] 修改密钥的备注信息。
  • -t rsa|ed25519 选择加密方式。有很多种,这里列举两种最常用的方法。更详细的加密方法件官方SSH手册。
  • -b bits指定密钥长度。对于 RSA密钥,最小要求768位,默认是2048位。DSA密钥必须恰好是1024位(FIPS 186-2 标准的要求)。
  • -C comment 给密钥添加备注。
  • -c 要求修改密钥的注释。输入选项后,程序会提示输入私钥文件名、密语(如果存在)、新注释。
  • -f output_keyfile 指定输出的文件。
#ssh-add 命令用于管理密钥。
Usage:ssh-add [key_file] 添加密钥到密钥管理器中。
or:ssh-add [OPTION]...

eg:
# 将下面三个文件传输到目标主机的home目录中。
$ scp a.cpp b.java c.py root@123.45.67.89:/home
  • -l 展示出所有已经添加到密钥管理器其中的密钥对。
  • -d [key]指定密钥对从密钥管理器中移除。
  • -D 移除密钥管理其中的全部密钥对。
#scp命令
#全称为“OpenSSH secure file copy”——基于OpenSSH的安全文件复制服务。主要用于终端设备之间的文件传输。
Usage:scp [FILE]... [HOST]:[DIR]

配置文件 #

  • Windows系统:c:/ProgramData/ssh/sshd_config
  • Linux系统:/etc/ssh/sshd_config

sshd_config 中文手册 金步国

应用 #

免密登录 #

client:

ssh-keygen -t rsa -b 4096 -C "xxx" #生成一对密钥#请使用密钥的默认名字:id_rsa,即按三次回车即可
$ scp %homepath%/.ssh/id_rsa.pub root@123.45.67.89:~/.ssh
 #将上面生成的密钥中的==公钥==传输到你的Linux云服务器上

server:

vim /etc/ssh/sshd_config#修改sshd_config
#在该配置文件中,主要修改下面两个配置
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
sudo /etc/init.d/ssh restart#重启OpenSSH服务端

#修改公钥文件名称
cd /root/.ssh
mv id_rsa.pub authorized_keys

client

ssh root@123.45.67.89

与Git的远程仓库连接 #

client:

ssh-keygen -t rsa -b 4096 -C "GithubKey"#请使用密钥的默认名字:id_rsa,即按三次回车即可

git:

登陆你的Github,然后依次点击:Setting -> SSH and GPG keys -> New SSH Key

点击 New SSH key 后,将 Step 1 中生成的公钥复制到文字框中,最后点击 Add SSH key 即可添加成功。

client:

ssh git@github.com

你在此时开着加速器,例如Steam++,运行命令后,你可能会收到如下的报错信息:

kex_exchange_identification: read: Software caused connection abort banner exchange: Connection to 127.0.0.1 port 22: Software caused connection abort

此时,只需要退出加速器即可恢复正常。

sftp #

它使用SSH身份验证和加密功能来确保文件在传输过程中的安全

telnet #

也是同来远程登录服务器的,默认端口 23,一种不加密的明文传输协议,现在用的很少

FTP #

进行文件传输时使用的协议,文件传输协议【明文传输不加密】默认端口21

SFTP和FTP非常相似,都支持批量传输,文件移动,文件夹/目录创建,文件删除等. FTP 不提供任何安全通道来在主机之间传输文件;而SFTP协议提供了一个安全通道,用于在网络上的主机之间传输文件。

X11 #

X11(X Window System)是一种位图显示的视窗系统,X表示X协议,11是协议版本号。X 协议主要由 X server 和 X client 组成

术语客户端-服务器——你的终端是"服务器",而应用程序是 “客户端”——这一概念经常困扰X的新用户。本地的X显示程序提供显示服务,所以它扮演了服务器;远端应用程序使用了该服务,所以它是客户端。

例如我通过ssh-X来启动X11 forwarding:连接到远程服务器,远程服务器有python程序调用 matplotlib绘制图形,那这个时候服务器端的程序就是X应用程序,他通过X协议告诉我们本地的 Xserver如何在我们本地的电脑上显示图形(如果我们本地安装有相应的X11实现的话)。

SSL #