IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 为什么SSH能向多个用户提供连接而TCP、UDP连接只能对一个用户提供? -> 正文阅读

[网络协议]为什么SSH能向多个用户提供连接而TCP、UDP连接只能对一个用户提供?

SSH如何向多个用户提供服务?

0x00 SSH协议的组成

ssh协议作为提供服务的协议,与平常我们对端口的监听与连接存在一定的不同,ssh协议由以下三部分组成。

1.传输层协议 [SSH-TRANS] 提供了服务器认证,保密性及完整性。此外它有时还提供压缩功能。 SSH-TRANS 通常运行在 TCP/IP连接上,也可能用于其它可靠数据流上。 SSH-TRANS 提供了强力的加密技术、密码主机认证及完整性保护。该协议中的认证基于主机,并且该协议不执行用户认证。更高层的用户认证协议可以设计为在此协议之上。

2.用户认证协议 [SSH-USERAUTH] 用于向服务器提供客户端用户鉴别功能。它运行在传输层协议 SSH-TRANS 上面。当 SSH-USERAUTH 开始后,它从低层协议那里接收会话标识符(从第一次密钥交换中的交换哈希 H )。会话标识符唯一标识此会话并且适用于标记以证明私钥的所有权。 SSH-USERAUTH 也需要知道低层协议是否提供保密性保护。

3.连接协议 [SSH-CONNECT] 将多个加密隧道分成逻辑通道。它运行在用户认证协议上。它提供了交互式登录话路、远程命令执行、转发 TCP/IP 连接和转发 X11 连接。

0x01 结论

由此可见每一个被连接的用户都是通过22端口进行转发的,而不是直接与22端口进行通信。那么与用户通信的是哪个进程?

用户登录linux的本质是开启一个shell进程,例如bash进程,且每个bash进程的ID随机分配。因此只要PID不会重复,结合连接转发技术就可以为多个用户提供服务。

而SSH本身就是一种特殊的协议,通过隧道转发和TCP连接转发来处理多个请求,当请求到来的时候SSH守护进程会产生一个子进程,该子进程进行这次的连接处理,因此看似ssh监听的22端口能够同时为多个用户同时提供服务,但其实只是通过总服务进程管理转发多个子进程。

0x02 实验验证

这里搭建一个小的实验环境,用来验证每一次用户登录都会重新创建一个bash进程。
实验环境为:

终端系统IP备注
虚拟机1kali_2018192.168.40.130提供SSH服务
虚拟机2Ubuntu192.168.40.128连接SSH服务
物理机Win_10192.168.40.1连接SSH服务

首先在kali中开启ssh服务:

/etc/init.d/sshd start

使用命令ps -e | grep ssh查看是否成功开启。
在这里插入图片描述
并将/etc/ssh/sshd_config文件中的PermitRootLogin值改为yes后去掉注释,允许root用户通过远程访问ssh。
首先在kali中查看目前bash的进程情况,可以看到只有当前打开的bashgrep两个进程,终端只有pts/1.

ps -aux | grep bash

在这里插入图片描述

分别用物理机和Ubuntu连接kali 的ssh服务。

ssh root@192.168.40.130

连接后使用netstat -an | grep :22分别查看对应的端口与连接。
可以看到此时除了一开始的63806476又多出了两个bash,分别为64946510,两个虚拟终端分别为pts/0pts/2,这里grep是新开的,因此与上一次的PID也不同。
在这里插入图片描述
使用who命令查看当前连接的SSH用户,pts/0pts/2就是上面我们远程开启的两个bash进程,由此可见每一个ssh用户都占用了一个bash进程。
在这里插入图片描述

普通连接能否创建多个?

0x00 验证两个TCP连接

上面提到ssh是使用连接转发技术每一次都创建新的连接,而TCP是实打实的互相连接,且通过三次握手之后建立的连接两个端口之间有且仅有一条连接在活动。
我们使用上面的环境进行测试。
在kali中监听一个tcp连接nc -lp 8888
在这里插入图片描述
首先在Ubuntu中连接他,发送一条hell消息,此时连接建立。
在这里插入图片描述
在这里插入图片描述在win_10中继续连接这个端口。
在这里插入图片描述
所以同一个监听的端口无法连接两个TCP连接。

0x01 验证两个udp连接

使用命令nc -lup 8888监听kali上的udp端口,分别用两台电脑使用udp协议前后连接8888端口,可以发现只会接受先连接的那个终端,另一个终端发送消息也不会被接受。

nc -u 192.168.40.130

在这里插入图片描述

0x02 验证一个TCP连接一个UDP连接

在kali中分别监听两个协议类型的8888端口。

nc -lp 8888
nc -lup 8888

分别使用两台终端连接这两个端口。
在这里插入图片描述
都连接成功.

0x03 结论

端口是一个逻辑上的产物,因此一个端口无法对TCP开启两条连接。 但对每一个不同协议的连接来讲都是相互独立的,因此可以对同一个端口建立两个不同协议的连接。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-02-28 15:59:55  更:2022-02-28 16:00:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/5 13:29:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码