跳转至

Network Basic

计算机网络基本概念和知识

20世纪50年代末,正值美苏冷战时期的美国军方设计了军用网络"阿帕网ARPANET", 当时的还只支持同构设备间的连接,TCP/IP的提出标志着万物互联的到来。

多层网络模型

计算机网络体系结构分为3种:OSI体系结构(七层),TCP/IP体系结构(四层),五层体系结构。

  • OSI模型(开放式系统互联模型Open System Interconnection Model)
  • 也称开放系统互连参考模型,简称OSI/RM(Open System Internetwork Reference Model)
  • 概念清楚,理论也比较完整,但是它既复杂又不实用
  • 由国际标准化组织(ISO)于1985年提出,并试图成为计算机在世界范围内互连为网络的标准框架,它具有七层网络结构。
  • TCP/IP模型
  • 互联网协议套件(Internet Protocol Suite,IPS)是多个网络传输协议的集合,它为网际网络的基础通信提供架构支撑。
  • 由于该协议族中最核心的两个协议分别为 TCP(传输控制协议)和 IP(网际协议),因此它也被称为 TCP/IP 协议族(TCP/IP Protocol Suite 或 TCP/IP Protocols),简称 TCP/IP。
  • 1974年,卡恩和瑟夫(Internet 之父)发表的《关于分组交换的网络通信协议》的论文正式提出TCP/IP。
  • 五层体系结构:为了方便学习,折中OSI体系结构和TCP/IP体系结构,综合二者的优点,这样既简洁,又能将概念讲清楚。

五层网络模型各层功能:

  • 应用层:应用层是网络协议的最高层,主要任务通过进程间的交互完成特定网络应用。应用层协议定义的是应用程序(进程)间通信和交互的规则。
  • 对于不同的网络应用需要有不同的应用层协议,在互联网中的应用层协议很多,如域名系统DNS,支持万维网应用的HTTP协议,支持电子邮件的SMTP协议,等等。
  • 应用层交互的数据单元称为报文
  • 运输层:有时也译为传输层,它负责为两台主机中的进程提供通信服务,通过端口号进行区分。该层主要有以下两种协议:
  • 传输控制协议 (Transmission Control Protocol,TCP):提供面向连接的、可靠的数据传输服务,
    • 为了提供这种可靠的服务,TCP采用了超时重传、发送和接收端到端的确认分组等机制
    • 数据传输的基本单位是报文段(segment)
  • 用户数据报协议 (User Datagram Protocol,UDP):提供无连接的、尽最大努力的数据传输服务,但不保证数据传输的可靠性,
    • 数据传输的基本单位是用户数据报
  • 网络层:网络层负责为分组网络中的不同主机提供通信服务,并通过选择合适的路由将数据传递到目标主机。
  • 把运输层产生的报文段或用户数据封装成分组进行传送。
  • 网络层IP提供的是一种不可靠的服务。只是尽可能快地把分组从源结点送到目的结点,但是并不提供任何可靠性保证。
  • IP层有一个数据报要传,而且数据的长度比链路层的最大传输单元MTU还大,那么IP层就需要进行分片(fragmentation),把数据报分成若干片,这样每一片都小于MTU。
    • 减小MTU会降低通讯延迟(通讯一次的数据变少),但是每帧里的有效数据占比会变少。
  • 在TCP/IP体系中,由于网络层使用IP协议,因此分组也叫IP数据报
  • 数据链路层:数据链路层通常简称为链路层。数据链路层在两个相邻节点传输数据时,
  • 将网络层交下来的IP数据报组装成,在两个相邻节点之间的链路上传送帧。
    • 以太网数据帧的物理特性是其长度必须在46~1500字节之间
  • 数据链路层将待发送的数据分为多组,并采用循环冗余校验(CRC,Cyclic Redundancy Check)技术为每组数据生成冗余校验码,之后将每组数据和其校验码共同构成一帧后再发送出去。
  • 数据链路层分为上层LLC(逻辑链路控制),和下层的MAC(介质访问控制)
  • 物理层:保数据可以在各种物理媒介(缆线,微波)上进行传输,为数据的传输提供可靠的环境。
  • 考虑信号传输(物理线材,线材接口,电压,频率)以及信道复用,和全双工信道实现等问题。
  • 物理层设备:网卡、光纤、CAT-5网线、RJ-45网线水晶接头、串口、并口

实例分析

网络报文构建并传输

一个HTTP网络请求,如何被多层协议包装,变成网络链路上的二进制,然后又被解析。

  • 交换机解析链路层的MAC地址(局域网通过MAC地址通讯),查看插在交换机端口上的线路的MAC地址并转发
  • 路由器由于需要根据IP来路由,所以会解析到网络层
  • GFW(长城防火墙)不仅会查看网络层的ip是否在黑名单,还会对未加密的应用层内容判断(是不是对黑名单网址的DNS或者http请求),对加密的内容还会对目标ip进行重放攻击来判断是不是VPN服务器。只有伪装成443端口的https请求才能逃过检测(翻墙)。但是此伪装会降低性能。

在Linux系统中,网络请求除了DNS解析、NAT和匹配路由规则之外,还会经过其他处理。例如,当一个网络请求到达时,它会被传递给网络协议栈,然后经过以下处理:

  • 网络请求到达物理网络适配器,触发中断并通过DMA传送到位于Linux内核内存中的rx_ring。
  • 网卡发出中断,通知CPU有个网络请求需要处理。
  • 网络请求被传递给网络协议栈,经过各个层的处理(链路层、网络层、传输层和应用层)。
  • 网络请求被传递给应用程序进行处理。

网络请求实例

网络请求通常会经过多个部件,包括浏览器、DNS服务器、代理服务器、负载均衡器、Web服务器等等。下面是一些可能的步骤:

  • 浏览器解析URL,获取主机名和端口号。
  • 浏览器向DNS服务器发送请求,获取主机名对应的IP地址。
  • 浏览器向Web服务器发送TCP连接请求,进行三次握手。
  • Web服务器接受TCP连接请求,进行三次握手。
  • 浏览器向Web服务器发送HTTP请求报文。
  • Web服务器接受HTTP请求报文,处理请求并返回HTTP响应报文。
  • 浏览器接受HTTP响应报文,解析响应并显示页面。

各种各层协议关系

TCP/IP网络通讯协议关系图

  • TCP/IP 实际包括几十个 Internet 协议,但只有少数是核心协议,其中有两个通常被认为是最重要的,就是我们上面提到的 TCP 和 IP。
  • IP 属于 OSI 网络层(第三层),在互联网网络中提供寻址、数据报路由等功能;
  • TCP 属于 OSI 传输层(第四层),负责设备上软件进程之间的连接建立和管理以及可靠的数据传输。
  • IP协议为每一台联网的设备分配一个地址,TCP则负责传输问题。

网络通讯协议关系图

  • 中英文对照:
    • 每一个协议缩写用英文,全称用中文,这样非常容易理解。简洁明了,如TCP协议,协议图上标注的是TCP 传输控制协议。
  • 同时遵循OSI和TCP/IP:
    • 左边是TCP/IP标准,右边是OSI标准,便于使用者理解协议在两种层次标准中的承载关系。
  • 内容全面:
    • 包括八个协议簇(TCP/IP、ISO、MICROSOFT、AppleTalk、VOIP、Novell、IBM、SUN/HP/UNIX)和三个大的协议分类(LAN、MAN、WAN)。
  • 合理的协议分组:
    • 每个协议簇都是按照应用类型进行了分组调整,让读者更容易理解
  • 清晰的协议关系:
    • 每个协议都可以通过流程线找到其上层协议或下层协议,非常便于了解协议之间的关系情况。
  • 英文版矢量图

物理层

  • IEEE802.11 WLAN协议是物理层协议吗?
    • IEEE802.11 WLAN协议是无线局域网(WLAN)的介质访问控制协议及物理层技术规范1。因此,IEEE802.11 WLAN协议不仅是物理层协议,还是介质访问控制协议。
  • 以太网(Ethernet)也是OSI模型第一二层
    • 在物理层上,以太网采用 RJ45 接口和双铰线,光纤,电磁波等方式来传递信号。
    • 在数据链路层上,每个通信节点(主机的网络接口)都有 48 位(bit)全局唯一的 MAC 地址。通信数据流被切分并打包成帧(Frame)来发送,每帧都包含来源节点和目的节点的 MAC 地址。
    • 链路层以太网封装,后续的IEEE 802.3需要兼容老版本RFC894
    • 最大传输单元MTU:以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492字节。链路层的这个特性称作MTU ,最大传输单元。不同类型的网络大 多数都有一个上限。
    • 如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就需要进行分片(fragmentation),把数据报分成若干片,这样每一片都小于MTU。

交换机局域网

  • 由于交换机使用链路层地址(MAC地址)来转发数据,因此交换机只能工作在局域网中,不能跨越路由器转发数据。
  • 自然会想到为什么需要链路层地址,只有网络层地址来标识设备不行吗?
  • 目的mac地址如何获得?google的mac地址?

数据链路层

MAC地址

  • 每个网络适配器(物理网卡,网络接口)有链路层地址(手机也有)。与IP地址不同,这个地址是IEEE分配的全球唯一的(除非软件层次修改)。
  • 交换机却不需要MAC地址,因为交换机不需要发送数据,只需要转发数据,转发数据的时候,只需要知道目的地址就可以了。
  • 信包的目的MAC地址可以填写广播MAC地址,来让局域网设备都接受到。

PPP 协议

点到点协议(PPP,Point to Point Protocol)是目前使用最为广泛的数据链路层协议,主要用于建立点对点的连接来传输数据单元。

注意与BitTorrent协议使用的用户群对用户群(peer-to-peer, 或简写为 P2P) 传输协议不同,后者基于HTTP协议,属于TCP/IP应用层。

地址解析协议(ARP, Address Resolution Protocol)

arp协议什么时候用
  1. 在局域网ip(包括网关ip)的mac地址,非局域网ip的请求会发给网关,由路由器交到其他的局域网。
  2. 一般是PC和路由器用,交换机不需要
  3. 获得局域网的mAC地址后,就由交换机来单播处理,但是局域网地址又可以通过VLAN隔离。
  • ARP 用于在网络层地址(IPv4 地址)和链路层地址(以太网中就是 MAC 地址)间进行翻译。
  • 它工作在二层和三层之间,如果一定要安排到七层之中的话,ARP 只能算二层协议。

具体来说:

  • 以太网中两个节点通信需要知道对方的 MAC 地址。为使用 IP 协议,每个节点会缓存一个 ARP 表,记录已知的 MAC 地址和 IP 地址的对应关系。
  • 与内网IP通信时,如果缓存表中无法找到对应的 MAC 地址,节点就会发出一条 ARP 请求,广播到网络中所有的节点。该 IP 对应的节点会进行回复,原节点根据回复提供的 MAC 地址继续通信,同时将信息记入缓存表。
  • 除了这样的请求应答方式以外,每个节点也可以主动发送广播,声明自己的 IP 和 MAC 地址,以更新其它节点的缓存表。

ARP 不对各个节点进行身份验证,因此可能产生 ARP 欺骗问题,即某节点假装自己是其它节点,进行信息窃取或欺骗;或实施拒绝服务攻击。对应的解决方案可以是静态配置 MAC/IP 对应关系,或者缩小网络的范围(如划分成子网)等。

IPv6 中,邻居发现协议(NDP, Neighbor Discovery Protocol)取代了 ARP。NDP 中区分了路由器和普通节点。它不仅能在 IP 地址和链路层地址间进行翻译,还可以为节点配置网络参数如IP地址,网络ID,DNS 等(SLAAC, Stateless address autoconfiguration)。

ARP表

  • 向目的IP(局域网或者外网)发送信包,其对应的目的MAC地址如何获得?
  • 每台机器在自己的内存里维护 ARP 表,存储了 IP 地址和 MAC 地址的对应关系(寿命值TTL)。
    • 当需要发送数据时,先查看 ARP 表,如果有对应的 MAC 地址,就直接发送数据,
    • 否则就先发送 ARP 请求,将它广播到局域网,然后等待目的机器的 ARP 响应,最后再发送数据。

其余层协议

ICMP协议

知乎

SOCKS协议

SOCKS是一种网络传输协议,主要用于客户端与外网服务器之间通讯的中间传递。SOCKS是"SOCKet Secure"的缩写。

当防火墙后的客户端要访问外部的服务器时,就跟SOCKS代理服务器连接。这个代理服务器控制客户端访问外网的资格,允许的话,就将客户端的请求发往外部的服务器。

最新协议是SOCKS5,与前一版本相比,增加支持UDP、验证,以及IPv6。

根据OSI模型,SOCKS是会话层的协议,位于表示层与传输层之间。

SOCKS协议不提供加密

各种端口

  1. HTTP协议
  2. 代理服务器常用端口号:80/8080/3128/8081/9080
  3. HTTPS(securely transferring web pages)服务器,
  4. 默认的端口号为443/tcp 443/udp;
  5. SOCKS代理协议
  6. 服务器常用端口号:1080
  7. FTP(文件传输)协议代理服务器常用端口号:21
  8. Telnet(远程登录)协议代理服务器常用端口:23
  9. TFTP(Trivial File Transfer Protocol),默认的端口号为69/udp;
  10. SSH(安全登录)、SCP(文件传输)、端口重定向,默认的端口号为22/tcp;

各种概念

网络套接字

Internet socket / Network socket

套接字地址是传输协议、IP地址和端口号的三元组。

局域网(Local Area Network)

局域网(LAN)的结构主要有三种类型:

  • 以太网(Ethernet)、
  • 目前最广泛的局域网技术,家用局域网使用。
  • 一种基于总线的网络,采用CSMA/CD访问控制协议。
  • 以太网的运行速率有10Mbps,100Mbps,1Gbps,10Gbps
  • 令牌环(Token Ring)、
  • IBM公司在20世纪70年代提出的一种局域网技术,它采用令牌传递的方式来控制网络中的数据传输。
  • 令牌总线(Token Bus)
  • 一种基于总线的局域网技术,它采用令牌传递的方式来控制网络中的数据传输。
  • 以及作为这三种网的骨干网的光纤分布数据接口(FDDI)
  • 光纤的局域网技术,它采用双环结构,支持高速数据传输。

它们所遵循的都是IEEE(美国电子电气工程师协会)制定的以802开头的标准,目前共有11个与局域网有关的标准,它们分别是:

  • IEEE 802.1── 通用网络概念及网桥等
  • IEEE 802.2── 逻辑链路控制等(LLC,约束了后三者)
  • IEEE 802.3──CSMA/CD访问方法及物理层规定(以太网开始基础)
  • IEEE 802.4──ARCnet总线结构及访问方法,物理层规定(针对令牌总线网络)
  • IEEE 802.5──Token Ring访问方法及物理层规定等(针对令牌环网络)
  • IEEE 802.6── 城域网的访问方法及物理层规定
  • IEEE 802.7── 宽带局域网
  • IEEE 802.8── 光纤局域网(FDDI)
  • IEEE 802.9── ISDN局域网
  • IEEE 802.10── 网络的安全
  • IEEE 802.11── 无线局域网WLAN

广域网(Wide Area Network)

可以看成是很多个局域网通过路由器等相互连接起来。

互联网

internet这个词第一个字母是否大写决定了它具有不同的含义。

  • internet意思是用一个共同的协议族把多个网络连接在一起。
  • 而Internet指的是世界范围内通过TCP/IP互相通信的所有主机集合(超过100万台)。
  • Internet是一个internet,但internet不等于Internet。
  • 由两个网络组成的互联网internet——一个以太网和一个令牌环网

SSL检测

服务器重定向

代理

局域网共享科学上网

  • 代理共享模式:clash允许局域网连接,其他设备的代理软件设置其ip端口即可
  • 网关共享模式:将clash机器设置为局域网网关(透明代理?)
  • 路由共享模式:在clash机器上又开辟一个局域网B,B下的网络都会被代理。

代理模式

  • 系统代理:将数据交给本地http/socks服务
  • TUN/TAP:使用虚拟网卡接管全局流量,从网络层接管所有数据包
    • 无法封装网络层数据包,无法代理ping, fake-ip还会返回假ip
    • TUN与TAP是操作系统内核中的虚拟网络设备:
      • TAP等同于一个以太网设备,它操作第二层数据包如以太网数据帧。
      • TUN模拟了网络层设备,操作第三层数据包比如IP数据包。
  • 真VPN:封装网络层数据包
    • 可以代理网络层,可以代理ping

DNS分流

UDP穿透

wget

GNU Wget(常简称为Wget)是一个在网络上进行下载的简单而强大的自由软件,其本身也是GNU计划的一部分。它的名字是“World Wide Web”和“Get”的结合,同时也隐含了软件的主要功能。目前它支持通过 HTTP、HTTPS,以及 FTP这三个最常见的TCP/IP协议协议下载。

缺陷与改进wget2

wget相对于curl垃圾太多。

支持的协议较少,特别是cURL相比。流行的流媒体协议mms和rtsp没有得到支持,还有广泛使用各种的P2P协议也没有涉及。

支持协议过老。目前HTTP还是使用1.0版本,而HTML中通过JavaScript和CSS引用的文件不能下载。

灵活性不强,扩展性不高。

GNU Wget2通过多线程、正确支持HTTP2连接、处理HTTP压缩特性、处理并行连接、考虑到If-Modified-Since HTTP标头和其他特性,提供了更快的性能。Wget2的下载速度比Wget1.x快得多。

sudo apt-get install wget2

curl

https://www.ruanyifeng.com/blog/2019/09/curl-reference.html

支持的网络协议

常见功能

通过httpAPI/cookie登陆网站

下载,上传。很明显是通过http实现的

1 # -x 指定代理主机和端口
2 curl -v -x https://10.20.80.158:22 http://192.168.26.219/a.php

https://blog.csdn.net/gufenchen/article/details/103983440?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164620543916780357252807%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164620543916780357252807&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-1-103983440.pc_search_result_cache&utm_term=curl&spm=1018.2226.3001.4187

ping

ping用来检查网络是否通畅或者网络连接速度的命令 ,是TCP/IP协议的一部分。

很多人可能想当然的认为Ping命令使用的ICMP协议应该是基于传输层的TCP或UDP协议的吧。

正如上图所示,ICMP协议既不是基于TCP,也不是基于UDP,而是直接基于网络层的IP协议,在整个网络协议栈中属于相当底层的协议了。这也从侧面证明了它的重要性,因为根据ICMP的RFC手册规定:ICMP协议是任何支持IP协议的系统必须实现的,没有余地。而IP协议是整个互联网的基石,ICMP协议虽简单,但重要性不言而喻。

ping命令本身处于应用层,相当于一个应用程序,它直接使用网络层的ICMP协议Ping(Packet Internet Groper),因特网包探索器。

原理:利用网络上机器IP地址的唯一性,给目标IP地址发送一个ICMP数据包,再要求对方返回一个同样大小的ICMP数据包来确定两台网络机器是否连接相通,时延是多少。

ping指的是端对端连通,通常用来作为可用性的检查,但是某些病毒木马会强行大量远程执行ping命令抢占你的网络资源,导致系统变慢,网速变慢。严禁ping入侵作为大多数防火墙的一个基本功能提供给用户进行选择。

ping选项详解

https://mp.weixin.qq.com/s/yXMKZv-VdMyyeQLDiQfSAQ

端口

Ping程序使用的是ICMP协议,ICMP不像http,FTP应用层有传输层的端口号,(它们使用TCP的端口号80和20/21)。

ICMP使用IP协议的基本支持,就像它是一个更高级别的协议,但是,ICMP实际上是IP的一个组成部分,必须由每个IP模块实现。

不能代理ping

In general you can't. ping needs a direct network connection on the IP level to do its work. A proxy works on a higher layer of the TCP/IP network model, where there is no direct access to the IP protocol.

You would need to somehow circumvent the proxy (change firewall settings, use a VPN, ...). Whether this is possible (and allowed) depends on your network configuration, but it's probably not possible.

As a workaround, there are many web-based ping services available (search for "web-based ping"). These will work.

telnet

telnet是用来探测指定ip是否开放指定端口。

telnet协议是TCP/IP协议族的其中之一,是Internet远端登录服务的标准协议和主要方式,常用于网页服务器的远端控制,可供使用者在本地主机执行远端主机上的工作。使用者首先在电脑执行telnet程序,连线至目的地服务器,然后输入帐号和密码以验证身份。使用者可以在本地主机输入命令,然后让已连接的远端主机执行,就像直接在对方的控制台上输入一样。传统telnet会话所传输的资料并未加密,帐号和密码等敏感资料容易会被窃听,因此很多服务器都会封锁telnet服务,改用更安全的ssh。

一般的telnet指令为:

telnet www.baidu.com 80

简单的说,ping命令是用来检测网络是否畅通的,而telnet命令则用来远程登陆。 但telnet不通并不一定代表网络不通。ping是基于ICMP协议的命令,就是你发出去一个数据包,对方收到后返给你一个!就好比声纳。这个协议是可以禁止的!禁止后,如果你ping对方,对方收到后就不回馈给你,这样你就显示无法ping通,但实际你们还是连着的!telnet是登陆服务器的!服务没禁止就能登陆。

ssh

Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境[1]。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。

SSH以非对称加密实现身份验证

端口

服务器:默认情况下,ssh服务器,会在 TCP 端口 22 进行监听;

基本架构

是建立在应用层 SSH协议框架中最主要的部分是三个协议:

  1. 传输层协议(The Transport Layer Protocol):传输层协议提供服务器认证,数据机密性,信息完整性等的支持。
  2. 用户认证协议(The User Authentication Protocol):用户认证协议为服务器提供客户端的身份鉴别。
  3. 连接协议(The Connection Protocol):连接协议将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用。 同时还有为许多高层的网络安全应用协议提供扩展的支持。

ssh 子程序

ssh分为两部分:服务器端和客户端

服务器端是一个守护进程,用于处理客户端的连接请求,一般为 sshd

客户端包括ssh程序以及 scp,slogin,sftp等其他应用程序

他们之间最大的不同是ssh对传输加密,安全性高,telnet使用明文传输,较为不安全。

需要进一步的研究学习

https://toutyrater.github.io/app/reverse.html

http://blog.neargle.com/SecNewsBak/drops/%E7%BF%BB%E5%A2%99%E8%B7%AF%E7%94%B1%E5%99%A8%E7%9A%84%E5%8E%9F%E7%90%86%E4%B8%8E%E5%AE%9E%E7%8E%B0%20.html

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

最近被服务器没网搞得很烦,所以准备研究一下

  1. 网络服务模型
    1. 用户或者客户端通过发送各种请求到服务器对应的IP或者域名来获取服务功能,包括html的网站,下载服务,服务器的访问
  2. 请求有哪些?
    1. curl,ping wget ssh sockes5 ,git clone, apt-get的区别和走代理的关系
  3. 常见协议有哪些?有什么作用
  4. 网站服务如何实现的
  5. 下载服务怎么实现的,比如git
  6. 如何在一台机器上连上网络
  7. 如何知道当前网络供应商是谁?可以知道账号密码吗?
  8. 本地转发代理与局域网内机器转发代理怎么实现?树莓派转发怎么样?袁福焱,docker代理
    1. 树莓派买哪一个
  9. 寝室要不要路由器,能用来转发吗?

参考文献

https://blog.csdn.net/zyhmz/article/details/81586632

网络协议图来自:http://www.52im.net/thread-180-1-1.html

https://blog.csdn.net/m0_37809146/article/details/104017921

http://www.52im.net/topic-tcpipvol1.html


  1. https://openwrt.org/toh/start?dataflt%5BModel*%7E%5D=Redmi