> 一份2021年03月16日的信息流提炼 ### 每天学点网络 #### 网络基础知识 原文:Hack The Box | [INTRODUCTION TO NETWORKING](https://academy.hackthebox.eu/module/34) 网络使两台计算机能够相互通信。 - 拓扑结构`topologies `(网状/树状/星状) - 介质`mediums` (以太网/光纤/同轴/无线) - 协议`protocols` (TCP/UDP/IPX) ```mermaid graph TD; A[Client] --> B["Router(Domain)"] B --> C["ISP(DNS:Domain→IP)"] C --> D["Web Server"] ``` 工作站应该在自己的网络上,完美的环境是,每个工作站都应该有一个基于主机的防火墙规则,防止它与其他工作站通信。 交换机和路由器应该在一个 "管理网络 "上。 如果工作站,服务器,交换机和路由器等在同一个网络上,中间人攻击可能非常严重。 ##### 网络类型 - **WAN**: 广域网。Wide Area Network - **LAN / WLAN**: 局域网/无线局域网。Local Area Network / Wireless Local Area Network - 本地使用的ip地址: RFC 1918, 10.0.0.0/8, 176.16.10.0/10, 192.168.0.0/16 - **VPN** - Site-To-Site VPN: 客户端和服务器都是网络设备,通常是路由器或防火墙,共享整个网络范围。这种方式最常用于通过互联网将公司网络连接在一起 - Remote Access VPN: 这涉及到客户端的计算机创建一个虚拟接口,其行为就像它在客户端的网络上一样。Hack The Box利用了OpenVPN,它使TUN适配器让我们访问实验室。在分析这些VPN时,需要考虑的一个重要环节是加入VPN时创建的路由表。如果VPN只为特定的网络创建路由(例如:10.10.10.0/24),这被称为Split-Tunnel VPN,这意味着互联网连接不会从VPN中出去。 - SSL VPN - **GAN**: 全球区域网。Global Area Network, Global network(the internet) - **MAN**: 城域网。Metropolitan Area Network, Regional network (multiple LANs) - **WPAN**: 个人网络。Wireless Personal Area Network, Personal network (Bluetooth) ##### 网络拓扑 ###### 连接 | 有线 | 无线 | | ----------------------------------- | ------------------ | | 同轴电缆(Coaxial cabling) | Wi-Fi | | 玻璃纤维布线(Glass fiber cabling) | 蜂窝式(Cellular) | | 双绞线布线(Twisted-pair cabling) | 卫星(Satellite) | ###### 节点----网络接口控制器(NICs) | 中继器(Repeaters) | 集线器(Hubs) | 网桥(Bridges) | 交换机(Switches) | | ------------------------------- | -------------- | ----------------- | ---------------- | | 路由器/调制解调器(Router/Modem) | 网关(Gateways) | 防火墙(Firewalls) | | ###### 分类(Network Types) 网络拓扑结构分为以下八种基本类型。 | 类型 | 介绍 | | :--------------------- | ------------------------------------------------------------ | | 点对点(Point-to-Point) | 两台主机之间有专用连接的最简单的网络拓扑结构是点对点拓扑结构。在这种拓扑结构中,只有两台主机之间存在着直接和直接的物理连接。这两个设备可以利用这些连接进行相互通信。点对点拓扑是传统电话的基本模式,不能与P2P(点对点架构)相混淆。 | | 总线(Bus) | 在总线拓扑结构中,所有的主机都通过传输介质连接。每个主机都可以访问传输介质和通过它传输的信号。没有一个中央网络组件来控制其上的进程。由于介质是与其他所有主机共享的,所以只能由一台主机发送,其他主机只能接收和评估数据,看数据是否是为自己准备的。 | | 星(Star) | 星型拓扑结构是一个网络组件,它与所有主机保持连接。每台主机通过单独的链路连接到中央网络组件。这通常是一个路由器、一个集线器或一个交换机。 | | 环(Ring) | 每个主机或节点都用两条电缆连接到环上。 | | 网(Mesh) | 在网状网络中,许多节点在物理层面决定连接,在逻辑层面决定路由。因此,meshed结构没有固定的拓扑结构。从基本概念上看有两种基本结构:完全网状结构和部分网状结构。每台主机都与网络中的其他每台主机以完全网状结构连接。这意味着主机之间是相互meshed的。这种技术主要用于WAN或MAN中,以确保高可靠性和带宽。 | | 树(Tree) | 树型拓扑是一种扩展的星型拓扑,更广泛的LAN有这种结构中。树形拓扑结构也用于宽带网和MAN。 | | 混合型(Hybrid) | 混合网络结合了两种或更多的拓扑结构。 | | 菊花链(Daisy Chain) | 在一个节点与另一个节点之间放置一条电缆来连接多台主机。由于这样就形成了一条连接链,所以也被称为菊花链配置,在菊花链配置中,多个硬件组件串联在一起。这种类型的网络经常出现在自动化技术(CAN)中。 | ###### 代理(Proxies) 代理是指一个设备或服务在连接的中间。调解器是关键的信息,因为它意味着中间的设备必须能够检查流量的内容。如果不具备做中介的能力,从技术上讲,设备就是一个网关,而不是代理。 - 专用代理/正向代理: 过滤传出请求,e.g.公司内网通过代理服务器访问外网 - 反向代理: 过滤传入请求。e.g.使用CloudFlare过滤以便防止DDOS攻击(WAF)。 - 透明代理: 客户端不知道它的存在。透明代理拦截客户端对互联网的通信请求,并作为一个替代实例。 ###### 网络模型(Networking Models) - ISO/OSI模型 : OSI一词是国际电信联盟(ITU)和国际标准化组织(ISO)发布的开放系统互连模型的缩写。 - Open Systems Interconnection(OSI), International Organization for Standardization (ISO) - TCP/IP模型:传输控制协议/互联网协议是许多网络协议的总称。这些协议负责互联网上数据包的交换和传输。 - Transmission Control Protocol / Internet Protocol ###### 数据包传输(Packet Transfers) 在分层系统中,每层的设备以不同的格式交换数据,称为协议数据单元(PDU)。在传输过程中,每一层都会在上层的PDU中增加一个头,对数据包进行控制和标识。这个过程称为封装。头和数据一起构成下一层的PDU。这个过程继续到物理层或网络层,在那里数据被传送到接收器。接收器将这一过程反过来,将各层的数据与头信息解包。之后,应用程序最终使用这些数据。这个过程一直持续到所有数据发送和接收完毕。 ###### TCP/IP - 逻辑寻址(IP) - 路由(IP) - 错误与控制流(TCP) - 应用支持(TCP&UDP) - 域名解析(DNS) ###### CIDR 无类域间路由(`Classless Inter-Domain Routing` CIDR)是一种表示方法,它取代了IPv4地址和网络类(A、B、C、D、E)之间的固定分配。这种划分是基于子网掩码或所谓的CIDR后缀,它允许将IPv4地址空间按位划分,从而划分成任意大小的子网。**CIDR后缀表示从IPv4地址开头的多少位属于网络**。它是通过指定子网掩码中1位的数量来表示子网掩码的一种符号。 e.g. CIDIR=`10.200.20.0/27` 1. 计算子网掩码(subnet mask): 27: 1111 1111 1111 1111 1111 1111 1110 0000 IP数:2^5 -1 = 31 255 - 31 = 224 子网掩码: `255.255.255.224` 2. 计算广播地址:`10.200.20.31` 3. 计算网络地址:`10.200.20.0` 4. 将网络分成4个子网,并计算第2个子网的广播地址: 2^5 / 4 = 8 第2个子网: `10.200.20.8`~`10.200.20.15` 第2个子网的广播地址: `10.200.20.15` 自动计算小工具:https://www.ipconvertertools.com/cidr2ipranges ###### MAC地址 网络中的每台主机都有自己的48位(6个八位)媒体访问控制(MAC)地址,用十六进制格式表示。MAC是我们网络接口的物理地址。MAC地址有几种不同的标准。 当一个IP数据包被传送时,必须在第2层寻址到目的主机的物理地址或负责路由选择的路由器/NAT。每个数据包都有一个发送地址和一个目的地址。 - Ethernet (IEEE 802.3) - Bluetooth (IEEE 802.15) - WLAN (IEEE 802.11) ### 其他值得阅读 #### REST vs. GraphQL vs. gRPC 原文:[REST vs. GraphQL vs. gRPC](https://news.ycombinator.com/item?id=26466592) ##### REST - 特点 - 描述数据的HTTP路径,例如/users是用户的集合。 - 容易被发现的数据,例如用户ID 3将在/users/3处。 - HTTP中的CRUD操作有创建的POST/PUT、读取的GET、更新的POST/PUT、删除的DELETE等操作 - 路径中带有ID的POST表示更新现有实体,没有ID的POST表示创建。 - 带ID的PUT是指创建一个实体,并覆盖已经存在的实体。 - 优点 - 简单易学 - 广泛使用,大多数工程师都很熟悉。 - 使用常见的HTTP动词,这些动词在RFC 2616中得到了很好的描述。 - 易于使用Chrome开发者工具或Wireshark拦截调试,无需额外的特殊工具就能轻松读取有效载荷。 - 缺点 - 效率低下。必须为每个用例重写API,以防止过度或不足的获取。 - JSON对象大,字段名重复。 ##### GraphQL - 特点 - 对所有的操作都使用POST,使用单一的HTTP路径,例如/graphql。 - 查询和突变2种操作,在JSON请求体中指定 - 查询是用来读取数据的 - 突变用于创建、更新和删除数据。 - 客户端传递给服务器的查询声明了HTTP请求的字段。 - 解析器是在服务器上实现的,返回特定字段的值。 - 数据结构是在GraphQL模式中预先定义的。 - 优点 - 解决了困扰REST和gRPC的获取不足和获取过度的问题。 - 只发送响应中调用者在查询中要求的字段。 - 缺点 - 错误可能包含在状态为200的响应体中,导致更复杂的客户端逻辑来解析它们,如果如果库没有 - 默认使用JSON对象,这些对象很大,而且字段名是重复的。 ##### gRPC - 特点 - 舆论推动微服务架构 - 一般由Protobuf对象生成 - 在Protobuf中声明一个服务,并在服务器代码中实现它。 - 客户端库由每种语言的Protobuf代码生成。 - 优点 - Polyglot: 为最流行的编程语言生成调用服务的代码 - 为了提高效率,默认使用Protobuf进行传输。 - 自动解决重试、网络问题等。 - 用你的编程语言生成客户端和服务器代码。这可以节省编写服务调用代码的工程时间。 - 缺点 - Protobufs更难通过网络拦截并解析成人类可读的格式。 > HN评论 > > 没有提到我认为GraphQL最大的缺点。你必须建立大量的速率限制和安全逻辑 否则你的API很容易被滥用。 > > GraphQL给客户提供了很大的灵活性,这很好,但它也给服务器带来了很大的责任。使用GraphQL,客户可以获得很大的自由度,可以按照自己的意愿来构造查询,而构造查询的人不会知道服务器准备有效处理哪种查询模式。 > > 我想对于那些还没有尝试过GRPC的人来说,这是我最喜欢的功能。"用你的编程语言生成客户端和服务器的代码。这可以节省写服务调用代码的工程时间"。在有大量API调用的功能上,可以节省30%左右的开发时间。 > > REST也可以返回protobufs,内容类型为application/x-protobuf。Heck,它可以返回任何Content-Type。它不一定要局限于JSON。 薪酬分享网站 https://duibiao.info/ ### 今日收获 - **如果你真的想知道你的命运在哪里,看看你把时间用在哪里。**不要追随你的激情,要追随你的努力。[Dont Follow Your Passion, Follow Your Effort](https://blogmaverick.com/2012/03/18/dont-follow-your-passion-follow-your-effort/)