仓库源文站点原文

计算机网络基础知识

关键的概念

什么是计算机网络

计算机网络连接是指连接两台或多台计算设备(如台式计算机、移动设备、路由器或应用程序)以实现信息与资源的传输和交换的流程。

计算机网络的分类

现在最常用的 以太网 是物理上使用星形拓扑(有一个路由器或集线器作为中心), 逻辑上使用总线拓扑(使用CSMA/CD的总线技术)

计算机网络的模型

数据链路层

载波侦听多路访问

路由表和路由算法

网际层

IP

ARP

IPsec

传输层

TCP

UDP

ICMP

应用层

代理 网关 隧道 的区别,还有 VPN 和 端口转发

    代理 proxy
        「代为处理」
        代理的类型和作用域
        在各种系统上的代理设置
            windows
            linux
            安卓
        正向代理/转发代理 forward proxy
        反向代理 reverse proxy
    网关 gateway
        「网络关口」「网络海关」
    隧道 tunnel
    端口转发 port forwarding
    虚拟专用网 (Virtual Private Network , VPN)
    虚拟私有云 (Virtual Private Cloud , VPC)
    透明 transparent
<!-- 一般情况下如何配置ip ip地址 子网掩码 网关 dns 两台电脑通过网线直连的情况下 ip 要怎么配置? 三台电脑只有集线器的情况下 ip 要怎么配置? 如何实现一个web服务器 拓扑结构 星型 环型 总线 以太网 ... 模型 七层模型 (由 OSI 提出的) 应用层 Application 表示层 Presentation 负责转化数据格式,并处理数据加密和数据压缩。 其实 tls 这这种协议可以归类到这一层里 会话层 Session 主要是用来管理网络设备的会话连接,建立会话,保持会话,断开会话 传输层 Transport 网际层 Internet/Network 数据链路层 Link/Data link/Network interface 物理层 Hardware/Physical 四层模型 ip/tcp 应用层 传输层 网际层 网络接口层 五层模型 应用层 -> data (数据) 传输层 -> TCP -> segment (段) UDP -> datagram (数据报文) 网际层 -> packet (包) 数据链路层 -> frame (帧) 物理层 -> bit (比特) 各层常用的协议 应用层 http 0.9 1.0 1.1 2 3 mqtt telnet rfc 97 137 153 318 854 855 856 857 859 860 861 2217 ftp dns nntp 网络新闻传输协议(Network News Transfer Protocol) USENET 和 NNTP 的关系,大概就是 网站 和 http 的关系差不多 irc xmpp ntp (Network Time Protocol) 网络时间协议 PTP (Precision Time Protocol) 精确时间协议 dhcp DHCP(Dynamic Host Configuration Protocol)动态主机配置协议 DHCP 是基于客户端-服务器模式的标准协议,由RFC 2131定义 它允许服务器集中管理IP地址池,自动为网络中的主机(如计算机、手机等)分配临时或永久的IP地址及相关配置 服务器控制一段IP地址范围(地址池),客户端接入网络时自动获取IP地址、子网掩码、网关和DNS服务器等信息 DHCP采用四步交互流程(DORA模型)完成地址分配: Discover :客户端广播请求,寻找可用的DHCP服务器。 客户端在未获得 IP 地址时,会通过 UDP 广播 (目标地址 255.255.255.255 或子网广播地址)发送 DHCP Discover 消息,寻找可用的 DHCP 服务器。 此时客户端完全不知道服务器的存在,因此使用广播确保消息能被同一链路中的所有设备(包括潜在的 DHCP 服务器)接收。 Offer :服务器响应并提供IP地址及相关配置。 Request :客户端正式请求使用提供的地址。 Acknowledge :服务器确认分配,完成绑定 DHCP客户端和服务器通过UDP端口68(客户端)和67(服务器)通信 WHOIS RDAP (Registration Data Access Protocol, 注册数据访问协议) smtp pop3 imap echo discard daytime chargen time 传输层 tcp 建立连接 三次握手 客户端 -> 服务端 syn 服务端 -> 客户端 syn+ack 客户端 -> 服务端 ack 为什么是三次握手? 如果是两次握手会有什么问题? 断开连接 四次挥手 主动关闭 -> 被动关闭 fin 被动关闭 -> 主动关闭 ack 被动关闭 -> 主动关闭 fin 主动关闭 -> 被动关闭 ack 主动关闭的那一边,在发送 ack 后还会等待 2msl 才会进入 closed 状态 被动关闭的那一边,在收到 ack 后就会立即进入 closed 状态 多数情况下都是客户端主动关闭的 为什么是四次握手? 如果少于四次握手会有什么问题? 为什么发送 ack 后还要等待 2msl 才会进入 closed 状态? 状态 LISTEN SYN-SENT SYN-RECEIVED ESTABLISHED FIN-WAIT-1 FIN-WAIT-2 CLOSE-WAIT LAST-ACK TIME-WAIT CLOSED 标志符 syn ack fin rst 发送 rest ,会立即释放连接,会丢弃发送缓冲区和接收缓冲区的数据,不需要等待对方ack确认 流量控制 滑动窗口 拥堵控制 慢启动 与 拥塞避免 TCP 慢启动 / 14KB 规则 ? 快重传 与 快恢复 三个半事件 连接建立 连接断开 消息到达 消息发送完毕(这是半个事件) 沾包 根本原因 什么情况下会发生 解决方式 为什么udp没有沾包 tcp的异常中断 程序崩溃 操作系统会代为发送四次挥手 主机宕机 没有重启 发送端在发送数据等待ack超时后,会强制关闭连接 有重启 接收端回复 rest 报文,然后重新建立连接 还要考虑 KeepAlive ? 可以参考主机宕机的情况 如果发送端一直没有发送数据,且没有keepalive,且应用层没有心跳,那么发送端的连接会一直保持,会浪费一点内存 其实只要重启的速度足够快,且 连接的socket 重新载入内存里,那么另一侧是不会感受到连接中断过的 如果客户端的ip有变化,例如 手机网络经过切换 那么,服务端会返回一个 rest ,然后重新建立连接 如果客户端访问服务端没有开放的端口 服务端可能会丢弃客户端的请求,然后客户端等待超时后自己关闭连接 服务端也可能直接返回 rest 包 这种请求也有可能被前面的防火墙挡下来了,根本到不了监听端口的服务端程序 udp udp 协议是无连接的,不需要握手建立连接,数据发送后,服务器端不会返回确认信息 udp 的数据包发出去就不管的了,没有握手,挥手,ack 也可以在应用层里实现 tcp 的那套可靠传输机制 icmp ping traceroute/tracert 网际层 ip v4 v6 ARP ARP inARP GARP RARP IPsec 数据链路层 以太网 (Ethernet) 以太网帧又分为 Ethernet II 和 IEEE 802.3 关注 Ethernet II 就可以了 帧间隙 来区分不同的 帧 各层对应的硬件 网关 (gateway) 路由器 (route) 交换器/交换机 (switch) 桥接器/网桥 (network bridge) 集线器 (ethernet hub 又或者 简称 hub) 中继器 (repeater) 调制解调器 (modem modulator-demodulator 调制器-解调器) 和安全相关的硬件 IPS (Intrusion Prevention System) 入侵检测(旁路部署) IDS (Intrusion Detection System) 入侵防御(串行部署) FW (FireWall) 防火墙 WAF (Web Application FireWall) 网页应用防火墙 UTM (Unified Threat Management) 统一威胁管理 按照规模划分的网络类型 pan lan vlan wlan can man wan 更多 ban san han ran Backbone ipx 从两个计算机直连到广域网 载波侦听多路访问 Carrier Sense Multiple Access CSMA 载波侦听多路访问/碰撞检测(CSMA/CD) CSMA with Collision Detection 载波侦听多路访问/碰撞避免(CSMA/CA) CSMA with Collision Avoidance 路由表和路由算法 静态路由 动态路由 迪达拉算法 距离向量路由协议(Distance Vector Routing Protocol): RIP(Routing Information Protocol)和IGRP(Interior Gateway Routing Protocol),它们使用跳数作为衡量指标。 链路状态路由协议(Link State Routing Protocol): OSPF(Open Shortest Path First)和IS-IS(Intermediate System to Intermediate System),它们通过交换链路状态信息来构建网络拓扑图。 tcp 和 udp 什么是socket socket 的中文翻译是套接字 network socket 网络套接字 五元组(five-element tuple): 源地址 源端口 目标地址 目标端口 传输层协议 一个五元组,优惠称为套接字对(socket pairs) SOCK_DGRAM 数据报套接字 用在UDP SOCK_STREAM 流套接字 用在TCP SOCK_RAW 原始套接字 除了UDP和TCP之外的传输层协议,例如 icmp 从socket里读写内容 一些限制 输入输出只考虑 asni ,多字节编码不好处理,这里只关注网络连接 一次通讯数据包最大的长度为 255 ,因为分包操作也挺麻烦的 基本套路 建立连接 socket setsockopt 服务端 bind listen accept 客户端 connect 发送和接收数据 read / write -> 通用的文件描述符操作函数 recv / send -> TCP recvfrom / sendto -> UDP 关闭连接 shutdown -> 一般只用于socket 可以选择关闭读 关闭写 关闭读写,调用后 socket 就会关闭 close -> 通用的文件描述符操作函数 调用后无法读写,但 socket 未必会关闭, 调用后 socket 的引用计数会减1,只有当 socket 的引用计数为0时才会关闭连接 比较保险的方式是先调用 shutdown 再调用 close io复用 select poll epoll 只输出一个 helloworld 能接收多次连接的 helloworld 能同时接收多个连接的 helloworld 实现最简单的五个协议 echo (RFC 862) 7 回显服务,把收到的数据发回客户端 discard (RFC 863) 9 丢弃所有收到的数据 chargen (RFC 864) 19 服务端 accept 连接之后,不停地发送测试数据 daytime (RFC 867) 13 务端 accept 连接之后,以字符串形式发送当前时间,然后主动断开连接 time (RFC 868) 87 服务端 accept 连接之后,以二进制形式发送当前时间的32位时间戳,然后主动断开连接 只考虑 tcp 的 用 netcat 作为客户端 然后是基于 telnet 的 echo 然后是基于 telnet 的聊天室 nc telnet http proxy http 服务器 http 协议 0.9 1.0 1.1 2 3 请求码 和 响应码 mime 缓存 基本套路 建立连接 接收数据 解释请求 请求行 请求头 请求体 处理数据 构造响应 响应行 响应头 响应体 输出响应 根据实际情况决定 关闭连接 或 保持连接 进程模型 单进程单线程 单进程多线程 多进程单线程 多进程多线程 io 多路复用 select poll epoll 水平触发 (level trigger, LT) 边缘触发 (edge trigger, ET) 具体类型 静态 动态 cgi fastcgi 代理 socket 双写 位置 反向代理 正向代理 类型 http代理 RFC 2616 7230 7231 7235 sockt代理 RFC 1928 SOCKS5 pac https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Proxy_servers_and_tunneling websocket WebSocket Secure (wss) 相关的rfc https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Resources_and_specifications 认证 和 授权 流量控制 TLS 1.2 1.3 OpenNIC OpenNIC(或称OpenNIC Project)是由用户所有和控制的[1][2]顶级域名的域名注册局,其提供类似ICANN的传统顶级域名的非国家性替代。 这里的域名往往会被用在 暗网 和 深网 tor (The Onion Router) 洋葱路由 i2p (Invisible Internet Project) 隐形的 互联网 项目 tor i2p 和 OpenNIC的域名,这三个通常会配合地使用 表网 -> 表层网络 Surface Web 深网 -> 深层网络 Deep web 暗网 -> 黑暗网络 Dark web 明网 -> Clearnet 虽然不是很严谨 能被搜索引擎收录的是 表网 不能被搜索引擎收录的是 深网 深网 包含 暗网 暗网是由深网的一小部分所构成的。 暗网一般需要特别的工具才能进入 和 暗网 相对的是明网 -->