网络基础(三)

目录

网络层

IP协议

IP协议头格式

认识MTU和分配以及分片组装

查看硬件地址和MTU

网段划分

特殊的IP地址

IP地址的数量限制

私有IP地址和公网IP地址

路由

route指令

数据链路层

以太网

以太网(MAC)帧格式

对比理解MAC地址和IP地址

ARP协议

ARP协议的作用

ARP数据报的格式

[DNS(Domain Name System)(了解)](#DNS(Domain Name System)(了解))

DNS背景

域名简介

域名解析过程(略.自行了解)

[使用dig工具分析DNS 过程](#使用dig工具分析DNS 过程)

浏览器中输入url后,发生的事情(面试题)

ICMP协议

ICMP功能

ICMP的报文格式 (了解)

ping命令

traceroute命令

[NAT(Network Address Translation,网络地址转换)技术](#NAT(Network Address Translation,网络地址转换)技术)

NAT技术背景

[NAT IP转换过程](#NAT IP转换过程)

NAPT

NAT技术的缺陷

NAT穿越(了解)

NAT和代理服务器

网络层

IP协议

网络层和 IP 层通常是用来指代同一个概念,尤其是在TCP/IP网络协议套件中。网络层是 OSI 模型和 TCP/IP 模型类比中的同一层,而IP(Internet Protocol)是网络层中最为重要的协议之一。

TCP层所谓的"发送",是什么意义?TCP是真的发送了吗?其实只是把数据向下交付,交付给IP层,数据在网络中最终是通过 IP 层进行发送的。IP(Internet Protocol)是互联网上的网络层协议,负责在不同的计算机和网络设备之间路由数据包。IP协议是一种面向无连接的协议,它为每个数据包分配一个源地址和目标地址,并通过路由器将数据包从源地址传递到目标地址。

在 OSI 模型中,IP层位于网络层,负责提供主机之间的逻辑通信。当应用层产生数据时,数据会经过多个层次的封装,最终被封装为一个 IP 数据包。这个 IP 数据包包含了目标主机的 IP 地址,这样网络中的路由器就能够根据目标地址将数据包正确地传递到目标主机。

基本概念:

主机:配有IP地址,但是不进行路由控制的设备;

路由器:即配有IP地址,又能进行路由控制;

节点:主机和路由器的统称;

IP协议的定位和作用:

IP协议的主要功能之一就是实现主机之间的通信,其中包括确定数据从一个主机(比如主机A)传递到另一个主机(比如主机B)的路由路径。

具体来说,IP协议提供了一种将数据包从源地址传递到目标地址的机制。这个机制涉及到路由的过程,即确定数据包在网络中的传递路径。下面是IP协议在这方面的主要能力:

  1. 封装数据包: IP协议负责将来自上层的数据封装为IP数据包。这个数据包包含源和目标的IP地址,以及其他必要的信息。
  2. 路由选择: IP协议通过使用路由表来选择传输数据包的最佳路径。路由表包含了网络拓扑结构和与之相关的路由信息。
  3. 数据包转发: 一旦选择了路由路径,IP协议将数据包从源地址传递到目标地址。这涉及到在网络中的各个路由器之间的数据包转发。
  4. 解封装数据包: 到达目标主机后,IP协议负责解封装数据包,将原始数据传递给目标主机上层的协议(如TCP或UDP)。

总体而言,IP协议的路由能力使得数据能够跨越多个网络设备,从源主机到达目标主机。这是互联网中实现端到端通信的关键。

IP协议有百分比的概率将数据从主机A发送到主机B吗?没有可能,所以要通过上层的TCP协议提供传输策略(如:超时重传和快重传等),所以TCP负责传输控制,而IP负责发送数据。

IP协议负责提供了一种基本的数据传输机制,但它本身并没有提供传输控制的机制。因此,TCP协议通常与IP协议一起使用,以提供更可靠和有序的数据传输。

IP协议是一种无连接的协议,它不保证数据的可靠性、有序性或传递成功。它主要负责在网络中路由数据包。而TCP协议位于IP协议的上层,它提供了一系列的传输控制机制,确保数据的可靠性和有序性。

IP协议头格式

  1. **4位版本号(version):**指定IP协议的版本,对于IPv4来说,就是4。
  2. **4位头部长度(header length):**IP头部的长度是多少个32bit(指图中一行的长度),而4bit表示最大的数字是15,也就是 length * 4 的字节数,因此IP头部最大长度是60字节.
  3. **8位服务类型(Type Of Service):**3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0),4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本,这四者相互冲突,只能选择一个,对于 ssh/telnet 这样的应用程序,最小延时比较重要;对于ftp这样的程序,最大吞吐量比较重要。
  4. **16位总长度(total length):**IP数据报整体占多少个字节。所以,数据长度 = 总长度 - 协议报头长度。
  5. **16位标识(id):**唯一的标识主机发送的IP报文,用来标识每一个IP报文,如果IP报文在IP层被执行分片了,那么每一个片里面的这个标识(id)都是相同的。
  6. **3位标志字段:**第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到),第二位如果设置为1,表示数据报不允许进行分片。,这时候如果报文长度超过MTU,IP层就会丢弃该报文,第三位表示"更多分片",如果分片了的话,最后一个分片置为0,其他是1,类似于一个结束标记。
  • **第一位(Bit 0):**保留位,必须设置为0.
  • **第二位(Bit 1):**Don't Fragment (DF),不分片。如果设置为1,表示数据报不允许进行分片。
  • **第三位(Bit 2):**More Fragments (MF),表示更多的分片。如果设置为1,表示数据报是一个多分片的报文,还有更多的分片。
  1. **13位分片偏移(framegament offset):**是分片相对于原始IP报文开始处的偏移,其实就是在表示当前分片在原报文中处在哪个位置,实际偏移的字节数是这个值 * 8 得到的,因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)。
  2. **8位生存时间(Time To Live, TTL):**数据报到达目的地的最大报文跳数,一般是64,每次经过一个路由TTL -= 1,一直减到0还没到达,那么就丢弃了,这个字段主要是用来防止出现路由循环。

设置TTL字段的原因如下:

  • **防止路由循环:**在网络中,数据包通过路由器进行转发,可能会遇到复杂的路由路径。如果路由表配置不正确或网络出现问题,数据包可能会陷入无限循环的路由路径中。通过设置TTL字段,每个路由器都可以减少TTL的值,当TTL减为0时,数据包将被丢弃,从而避免了无限循环。
  • **优化网络性能:**TTL的设置还可以优化网络性能。通过限制数据包在网络中传播的跳数,可以减少网络拥塞和数据包的冗余传输。当TTL的值达到一定阈值时,数据包可能会被丢弃,这样可以有效控制网络中的数据包数量。

虽然TTL字段最初用于防止路由循环,但现在它更多地用于网络性能的优化和保护。通过适当设置TTL的值,可以确保数据报能够在网络中正常传输,同时减少不必要的网络负荷。

  1. **8位协议:**表示上层协议的类型。
  2. **16位头部校验和:**使用CRC进行校验,来鉴别头部是否损坏。
  3. **32位源IP地址和32位目的IP地址:**表示发送端和接收端。(这就是我们在应用层写套接字的时候,要把点分十进制字符串风格的IP地址转化成4字节整形IP地址的原因就在这,因为IP协议需要,那为什么是32个bit位呢?因为操作系统内部使用4字节,32位源IP和32位目的IP,所以你给我传参就必须给我传四字节,所以我们对应的TCP/IP协议,TCP协议对应的是端口号的问题,而IP协议对应的是我们bing的IP的问题)
  4. **选项字段(不定长,最多40字节):**略
认识MTU和分配以及分片组装
  • 以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位;
  • 最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;
  • 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation);
  • 不同的数据链路层标准的MTU是不同的;

MTU对IP协议的影响:

由于数据链路层MTU的限制,对于较大的IP数据包要进行分包。

将较大的IP包分成多个小包,并给每个小包打上标签,每个小包IP协议头的16位标识(id)都是相同的,每个小包的IP协议头的3位标志字段中,第2位置为,表示允许分片,第3位来表示结束标记(当前是否是最后一个小包,是的话置为0,否则置为1);

到达对端时再将这些小包,会按顺序重组,拼装到一起返回给传输层;

一旦这些小包中任意一个小包丢失,接收端的重组就会失败,但是IP层不会负责重新传输数据;

MTU对UDP协议的影响:

一旦UDP携带的数据超过1472(1500- 20(IP首部)-8(UDP首部)那么就会在网络层分成多个IP数据报,这多个IP数据报有任意一个丢失,都会引起接收端网络层重组失败,那么这就意味着,如果UDP数据报在网络层被分片,整个数据被丢失的概率就大大增加了。

MTU对于TCP协议的影响

TCP的一个数据报也不能无限大,还是受制于MTU,TCP的单个数据报的最大消息长度,称为MSS(Max Segment Size),TCP在建立连接的过程中,通信双方会进行MSS协商。

最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU),双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值,然后双方得知对方的MSS值之后,选择较小的作为最终MSS,MSS的值就是在TCP首部的40字节变长选项中(kind=2);

查看硬件地址和MTU

使用ifconfig命令,即可查看ip地址, mac地址,和MTU;

网段划分

IP地址通常由网络地址和主机地址组成。

IP地址是一个32位的数字,用于标识网络中的设备。它被分为两部分:网络地址和主机地址。

网络地址指示了设备所在的网络。它的长度可以根据IP地址的类别来确定。在IP地址的前几位中,用于标识网络,后面的位数则用于标识主机。主机地址是指在给定的网络中所标识的主机或设备。它是在网络中唯一的标识一个具体的设备。

所以IP地址的构成等于网络地址+主机地址。网络地址表示设备所在的网络标识,主机地址表示设备在该网络上的具体标识。

  • 网络号(网络标识):保证相互连接的两个网段具有不同的标识:

  • 主机号(主机标识):同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号;

  • 不同的子网其实就是把网络号相同的主机放到一起。

  • 如果在子网中新增一台主机,则这台主机的网络号和这个子网的网络号一致,但是主机号必须不能和子网中的其他主机重复。

通过合理设置主机号和网络号,就可以保证在相互连接的网络中,每台主机的IP地址都不相同。

那么问题来了,手动管理子网内的IP,是一个相当麻烦的事情。

有一种技术叫做DHCP,能够自动的给子网内新增主机节点分配IP地址,避免了手动管理IP的不便。一般的路由器都带有DHCP功能,因此路由器也可以看做一个DHCP服务器。

过去曾经提出一种划分网络号和主机号的方案,把所有IP地址分为五类,如下图所示(该图出自[TCPIP])。

在IPv4地址分类中,根据地址的前几位二进制数(即第一个八位字节)的不同,IP地址被分为五类:A类、B类、C类、D类和E类。每种类别的前几位二进制数具有特定的含义:

  • A类地址: 第一位为"0",接下来的7位是网络号,剩余的24位是主机号。A类地址的范围是从1.0.0.0到126.255.255.255。
  • B类地址: 前两位为"10",接下来的14位是网络号,剩余的16位是主机号。B类地址的范围是从128.1.0.0到191.255.255.255。
  • C类地址: 前三位为"110",接下来的21位是网络号,剩余的8位是主机号。C类地址的范围是从192.0.0.0到223.255.255.255。
  • D类地址: 前四位为"1110",不属于IP地址分类的一部分,而是用于多播的地址空间。D类地址的范围是从224.0.0.0到239.255.255.255。
  • E类地址: 前四位为"1111",这些地址保留用于实验和未来使用,并不用于公共网络。E类地址的范围是从240.0.0.0到255.255.255.255。

这些分类标准允许网络设备和协议根据IP地址的前缀来确定网络号和主机号,从而实现有效的路由选择和地址分配。随着技术的发展和对IP地址的需求变化,传统的分类方法已经逐渐被灵活的CIDR(无类别域间路由)所取代,后者允许更细致的子网划分和更高效的IP地址分配。

随着Internet的飞速发展,这种划分方案的局限性很快显现出来,大多数组织都申请B类网络地址,导致B类地址很快就分配完了,而A类却浪费了大量地址;

例如,申请了一个B类地址,理论上一个子网内能允许6万5千多个主机,A类地址的子网内的主机数更多,然而实际网络架设中,不会存在一个子网内有这么多的情况,因此大量的IP地址都被浪费掉了。

针对这种情况提出了新的划分方案,称为CIDR(Classless Interdomain Routing):

  • 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;
  • 子网掩码也是一个32位的正整数.通常用一串"0"来结尾;
  • 将IP地址和子网掩码进行"按位与"操作,得到的结果就是网络号;
  • 网络号和主机号的划分与上面IP地址是A类到E类全部无关;

可见,lP地址与子网掩码做与运算可以得到网络号,主机号从全0到全1就是子网的地址范围;

IP地址和子网掩码还有一种更简洁的表示方法,例如140.252.20.68/24,表示IP地址为140.252.20.68,子网掩码的高24位是全1,也就是255.255.255.0

子网掩码有什么用?

用来标识网络号和主机号范围,大白话就是用子网掩码标识网络号使用多少个比特位,主机号使用多少个比特位,列如:11111111 11111111 11111111 00000000

**前面连续的1,**表示网络号使用多少比特位,也就是网络号最大的范围,即一个局域网内存在的子网数量

**1后面连续的0,**表示主机号使用多少比特位,也就是主机号最大的范围,即一个子网内主机连接的数量。

只要把IP地址和子网掩码按位与即可得到网络号,例如上图中两个子网划分的例子。

特殊的IP地址

将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网;

将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包;

127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1。

  1. 网络号: 将IP地址中的主机地址全部设为0,形成的地址用于表示整个网络。例如,对于IP地址 192.168.1.0,这里的"0"部分就表示整个网络。通常,这个地址不分配给具体的设备,而是用于表示网络本身。
    例如,如果有一个子网的IP地址范围是192.168.1.0到192.168.1.255,并且子网掩码是255.255.255.0(或者表示为/24),那么这个子网的网络地址就是192.168.1.0。这表明任何以192.168.1.x开头的IP地址(其中x是0到255之间的任意数值)都属于这个子网。网络地址通常用于路由决策,帮助确定数据包应该在内部网络中转发还是需要被发送到外部网络。
  2. 广播地址: 将IP地址中的主机地址全部设为1,形成的地址用于向同一网络中的所有主机发送数据包。例如,对于IP地址 192.168.1.255,这里的"255"部分就表示广播地址。广播通常用于向网络中的所有设备传递信息,如DHCP请求。
  3. 回环地址: 127.0.0.1 是回环地址,用于本机环回测试。回环地址通常用于在本地主机上测试网络服务或应用程序,而不涉及实际网络通信。在IPv4中,整个127.0.0.0/8地址块都被保留为回环地址。

这些地址的使用是根据IP地址的规范和标准来定义的,确保网络通信的正常运作。网络号、广播地址和回环地址都有其特定的目的,而且在实际配置和使用网络时,这些概念是非常重要的。

IP地址的数量限制

我们知道,IP地址(IPv4)是一个4字节32位的正整数,那么一共只有2的32次方个IP地址,大概是43亿左右,而TCP/IP协议规定,每个主机都需要有一个IP地址,这意味着,一共只有43亿台主机能接入网络么?

实际上,由于一些特殊的IP地址的存在,数量远不足43亿;另外IP地址并非是按照主机台数来配置的,而是每一个网卡都需要配置一个或多个IP地址,原因有几个:

  1. 特殊地址: 一些地址是特殊用途的,比如保留地址、广播地址和回环地址等。这些地址不用于主机分配。
  2. 网络设备: 不仅主机需要IP地址,还有路由器、交换机等网络设备,它们也需要配置IP地址。
  3. 地址浪费: 在传统的地址分配中,通常为每个网络分配一个固定大小的地址块,而不管实际上网络中有多少主机。这导致了地址浪费。

CIDR在一定程度上缓解了IP地址不够用的问题(提高了利用率,减少了浪费,但是IP地址的绝对上限并没有增加),仍然不是很够用,这时候有三种方式来解决:

  • **动态分配IP地址:**只给接入网络的设备分配IP地址,因此同一个MAC地址的设备,每次接入互联网中,得到的IP地址不一定是相同的;
  • NAT技术: 用于在私有网络和公有网络之间转换IP地址。其主要目的是允许多个设备共享一个或一组公有IP地址,从而有效地利用IP地址资源,并提供更好的网络安全性。
  • **IPv6:**IPv6并不是IPv4的简单升级版,这是互不相干的两个协议,彼此并不兼容;IPv6用16字节128位来表示一个IP地址;但是目前IPv6还没有普及,IPv6采用128位地址,大大扩展了地址空间,理论上提供了2^128(约3.4 x 10^38)个唯一地址。IPv6的推广可以解决IPv4地址短缺的问题。

虽然IPv6目前尚未完全普及,但它被认为是解决IPv4地址枯竭问题的长期解决方案。随着时间的推移,IPv6的采用可能会逐渐增加。

举个例子来说明NAT技术的工作原理:

假设你有一个家庭网络,其中包括多个设备,比如电脑、手机和智能家居设备。你的路由器有一个连接到互联网的WAN口,以及一个连接到内部设备的LAN口。

  1. 内部设备请求访问互联网: 当内部设备(比如电脑)想要访问互联网上的服务器时,它会向路由器发送请求。由于不能将私网IP发送到公网上进行通信,所以要使用NAT转换技术。为什么不能把私网IP发送到公网上进行通信?因为子网内的主机IP地址不能重复,但是子网之间的IP地址就可以重复了,当对方使用这个私网IP进行通信时,就无法通过原路径返回,在多个不同的子网下,有着大量重复的私网IP地址,所以才要使用NAT技术。
  2. 路由器使用NAT转换:
    • 路由器接收到内部设备的请求后,会使用NAT技术将内部设备的私有IP地址转换为路由器WAN口的公有IP地址。
    • 这样,从外部网络的角度看,所有的请求都似乎来自于路由器的公有IP地址,而不是内部设备的私有IP地址。
  1. 互联网服务器响应:
    • 互联网服务器将响应发送回路由器的公有IP地址。
  1. 路由器再次使用NAT转换:
    • 路由器收到响应后,使用NAT再次将公有IP地址转换为发起请求的内部设备的私有IP地址。

这样,NAT技术允许多个设备在内部共享一个公有IP地址,而互联网上的服务器只能看到路由器的公有IP地址。这有助于提高网络安全性,减少对公有IP地址的需求,并简化内部网络管理。

私有IP地址和公网IP地址

私有IP地址和公网IP地址 如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不能直接连到Internet上,理论上 使用任意的IP地址都 可以,但是RFC 1918规定了用于组建局域网的私有IP地址有:

  • 10.0.0.0到10.255.255.255,共有16,777,216个地址可用,前8位是网络号,即10。
  • 172.16.0.0到172.31.255.255,共有1,048,576个地址可用,前12位是网络号,即172.16 到 172.31。
  • 192.168.0.0到192.168.255.255,共有65,536个地址可用,前16位是网络号,即192.168。

包含在这个上述范围内的所有IP地址都是私有IP地址,用于在私有网络中使用,其余的则称为全局IP(或公网IP);

私有IP地址主要在局域网内部使用,不直接连接到互联网上。在局域网中,设备可以使用这些私有IP地址进行通信,但当它们需要与外部互联网进行通信时,需要通过网络地址转换(NAT)的方式将私有IP地址转换为公网IP地址。

公网IP地址是指在互联网上全局唯一的IP地址,用于标识设备在全球互联网中的位置。这些地址是由互联网服务提供商(ISP)分配给用户,并可以直接访问互联网。公网IP地址的范围除了私有IP地址的范围之外的其他所有IP地址。

总结起来,私有IP地址用于组建局域网内的通信,而公网IP地址则用于设备在互联网上的通信。私有IP地址范围受RFC 1918规定,而公网IP地址则是由ISP分配。

注:LAN口IP通常是指私有IP地址,而WAN口IP是指公共IP地址,而公共IP地址是在公共互联网上全球唯一标识的IP地址,可以直接访问和路由。公共IP地址由互联网服务提供商(ISP)分配给用户或组织。

在典型的网络设置中,路由器的LAN口连接到局域网中的设备,使用私有IP地址,用于内部通信。而WAN口连接到公共互联网,获取ISP提供的公共IP地址,用于与外部网络通信。

  1. 路由器配置: 一个家用路由器通常有两个关键的IP地址,一个是WAN口IP,即连接到互联网(公网)的接口的IP地址,另一个是LAN口IP,即连接内部(家用)设备的接口的IP地址。LAN口连接的主机都从属于这个路由器的子网,而不同的路由器的LAN口IP通常相同,所以路由器通常的私有IP地址是:192.168.1.1,所以路由器自身的192.168.1.1 IP属于LAN口IP。
  2. 子网IP和主机IP: 同一子网内的主机IP地址不能重复,但是不同子网之间的IP地址可以重复。这允许在不同子网中使用相同的私有IP地址。
  3. 运营商路由器层级: 家用路由器作为运营商路由器的子节点,构建了网络的层级结构。最外层的运营商路由器通常有一个公网IP作为其WAN口IP。
  4. NAT技术: 当子网内的主机需要与外部网络通信时,路由器使用NAT技术将内部主机的私有IP地址替换为路由器的WAN口IP。逐级替换的过程最终将数据包中的IP地址转换为一个公网IP地址,使得数据包能够在公共互联网上正确传递。
  5. 部署服务器: 如果希望自己实现的服务器程序能够在公网上被访问,需要将该程序部署在具有外网IP的服务器上。云服务提供商如阿里云、腾讯云等提供了这样的外网IP,可以通过购买云服务器实现在公网上部署应用程序。

注:我们在使用私有IP进行通信时,会先把数据发送给路由器,然后路由器把私有IP替换成自身的另外一个WAN口IP,然后在通过路由器的LAN口IP向上交付或者发送都公网上。如果继续向上交付,之前替换的WAN口IP就会被替换成运营商的WAN口IP,直到数据已经处于公网上。(简单来说就是我们有两个IP地址,一个是源IP地址,即一开始我们所使用的IP地址,另一个是目的IP地址,而NAT技术一直替换的是源IP地址,要替换成当前接收方的WAN口IP地址)

路由

路由:在复杂的网络结构中,找出一条通往终点的路线,举个例子:

当你想要找到学校的位置时,可以将这个过程类比为计算机网络中的路由过程:

  1. 目的地: 学校的位置对应于你想要访问的目标服务器的IP地址。
  2. 你的位置: 你当前的位置是你的计算机或设备的IP地址。
  3. 地图: 想象一下你手上有一张地图,上面标有街道和学校的位置。这张地图就相当于路由表,其中记录了不同网络和如何到达它们的信息。
  4. 问路人: 考虑路人是网络中的路由器,它们了解如何到达不同的学校(服务器)。你向路人询问如何到达学校,这就相当于你的计算机发送一个数据包(请求)到目标IP地址。
  5. 路人的回答: 路人检查他们的知识(路由表或地图),然后告诉你应该走哪条街道,经过哪个路口,最终到达学校。在网络中,路由器查找路由表,决定应该将数据包通过哪个接口传送。
  6. 你的移动: 你按照路人的指示开始移动,沿着指定的路径到达学校。在网络中,数据包也按照路由器的指示沿着正确的路径传输到目标服务器。
  7. **到达目的:**当你到达学校门口之后和保安确认就是这里之后,接下来你就要问保安老师的办公室在那栋那楼,然后保安就会告诉你怎么走。(根据目标端口号,将数据包交付到正确的服务或进程。)

路由的过程,就是这样一跳---跳(Hop by Hop)"问路"的过程。

所谓"一跳"就是数据链路层中的一个区间.具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间。

IP数据包的传输过程也和问路一样,当IP数据包,到达路由器时,路由器会先查看目的IP,路由器决定这个数据包是能直接发送给目标主机,还是需要发送给下一个路由器,依次反复,一直到达目标lIP地址,然后通过目标端口号把数据交付对应的进程。

那么如何判定当前这个数据包该发送到哪里呢?这个就依靠每个节点内部维护一个路由表。

  • 路由表可以使用route命令查看
  • 如果目的IP命中了路由表,就直接把数据向上转发即可;
  • 路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下---跳地址。(缺省路由也被称为默认路由。当目的地址与路由表中的其他行都不匹配时,系统将使用默认路由。这条路由包含下一跳地址和发送接口信息,告诉系统将数据包发送到默认的下一跳地址。)

假设某主机上的网络接口配置和路由表如下:

  • 这台主机有两个网络接口,一个网络接口连到 192.168.10.0/24 网络,另一个网络接口连到192.168.56.0/24 网络;
  • 路由表的Destination是目的网络地址,Genmask是子网掩码,Gateway是下一跳地址,lface是发送接口,Flags中的U标志表示此条目有效(可以禁用某些条目),G标志表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发;

转发过程例1:如果要发送的数据包的目的地址是192.168.56.3

  • 跟第一行的子网掩码做按位与运算得到192.168.56.0,与第一行的目的网络号不符,即192.168.10.*不符。
  • 再跟第二行的子网掩码做按位与运算得到192.168.56.0,正是第二行的目的网络号,因此从eth1接口发送出去。

由于192.168.56.0/24正是与eth1接口直接相连的网络,因此可以直接发到目的主机,不需要经路由器转发;

转发过程例2:如果要发送的数据包的目的地址是202.10.1.2

  • 依次和路由表前几项进行对比,发现都不匹配;
  • 按缺省路由条目,从eth0接口发出去,发往 192.168.10.1 路由器;
  • 由192.168.10.1路由器根据它的路由表决定下一跳地址;

路由表生成算法(略)

路由表可以由网络管理员手动维护(静态路由),也可以通过一些算法自动生成(动态路由)。

可以自己调研一些相关的生成算法,例如距离向量算法,LS算法,Dijkstra算法等。

route指令

route 是 Linux 操作系统中用于查看和配置 IP 路由表的命令。这个命令可以用于显示、添加、删除和修改路由表的条目。以下是一些常用的 route 命令选项:

  1. 查看路由表:

    route -n
    注:也可以不携带-n,不过有一定的差别

这会显示详细的路由表信息,包括目标网络、网关、接口和其他相关信息。

  1. 添加静态路由:

    route add -net 目标网络 netmask 子网掩码 gw 网关地址

这会将指定的目标网络添加到路由表中。

  1. 删除静态路由:

    route del -net 目标网络 netmask 子网掩码

  2. 查看详细信息:

这会从路由表中删除指定的目标网络。

route -n -e
  1. 删除默认网关:

这会显示详细信息,包括扩展信息,如使用的接口、路由标志等。

route del default

这会删除默认网关的路由表项。

请注意,route 命令在一些 Linux 发行版中已经被废弃,而推荐使用 ip route 命令来进行路由管理。ip route 提供更丰富的功能,并更好地适应现代网络配置的需求。例如:

ip route show

这会显示当前的路由表。使用 man route 或 man ip-route 可以查看更详细的帮助文档。

数据链路层

用于两个设备(同一种数据链路节点)之间进行传递。

以太网

以太网(Ethernet)是一种计算机网络技术,它定义了在局域网(LAN)中进行数据通信的标准。以太网起源于20世纪70年代,并在之后的几十年中逐渐演变和发展成为最为广泛应用的局域网技术之一。

  1. 数据链路层: 以太网位于计算机网络体系结构的数据链路层。它主要负责将数据划分成小的数据帧,并在局域网中传递这些数据帧。
  2. 帧格式: 以太网定义了数据帧的格式,其中包括了目标MAC地址、源MAC地址、数据字段以及帧校验序列等。这有助于确保数据的正确传输和接收。
  3. MAC地址: 每个连接到以太网的设备都有一个唯一的MAC地址,用于在局域网中标识和定位设备。MAC地址是数据链路层中的重要概念。
  4. 拓扑结构: 以太网支持不同的拓扑结构,包括总线型、星型和环型等。这使得以太网可以适应不同的网络布局需求。
  5. 传输介质: 以太网规定了一些物理层的内容,例如使用双绞线作为标准的传输介质。不同的速率,如10Mbps、100Mbps、1Gbps等,也是以太网标准中规定的。
  6. CSMA/CD协议: 以太网使用载波监听多路访问/冲突检测(Carrier Sense Multiple Access with Collision Detection,CSMA/CD)协议来协调共享网络媒体上的访问,确保多个设备不会同时发送数据导致冲突。
  7. 广泛应用: 以太网是当前应用最广泛的局域网技术。它被广泛用于企业、学校、家庭等各种场景中,连接着计算机、打印机、路由器等网络设备。
  8. 其他局域网技术: 除了以太网之外,还有其他局域网技术,例如令牌环网和无线LAN。每种技术都有其独特的特点和适用场景,但以太网的广泛应用使其成为最为普及的选择。

以太网和MAC地址是密切相关的,它们在局域网中发挥着重要的作用。

以太网是一种计算机网络技术,用于在局域网中进行高速的数据传输。它定义了物理层和数据链路层的规范和协议,包括电信号的传输、帧的格式、帧的传输方式等。

MAC地址(Media Access Control address)是以太网中用于唯一标识网络设备的地址。它是一个由48位二进制数组成的地址,通常以十六进制表示。每个以太网设备都有一个唯一的MAC地址,由设备制造商在制造时分配并写入设备的网络适配器中。

MAC地址在以太网中起着重要的作用。它用于在数据链路层进行设备间的寻址和通信。每个以太网数据帧的头部都包含了源MAC地址和目标MAC地址。发送方将数据帧发送到目标MAC地址,接收方根据自身MAC地址与目标MAC地址进行比对,确定是否接收该数据帧。

MAC地址的独一无二性以及在物理层上的唯一性,使得网络设备可以准确地识别和寻址其他设备,并确保数据的正确传输。

总结来说,以太网是一种局域网技术,而MAC地址是在以太网中用于唯一标识设备的地址,用于设备的寻址和通信。

以太网(MAC)帧格式

源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的;帧协议类型字段有三种值,分别对应IP、ARP、 RARP,帧末尾是CRC校验码。

对比理解MAC地址和IP地址

例如:网上购买东西,可以看到发货地址和收货地址,这两个地址就比如,发货地址就是源IP地址,而收货地址就是目的IP地址,快递在发货的过程,从当前中转站站到下一站,中转站就类似于路由器或交换机,它们有各自的MAC地址,所以在经过每一个中转站时,当前源MAC地址都会改成对应的路由器或者交换机的MAC地址,然后并告诉你下一站的MAC地址(目的MAC地址),即下一个路由器或者交换机的MAC地址,所以源MAC地址和目标MAC地址会一直改变,直到快递已经发送到驿站。

  1. IP地址:
    • 发货地址和收货地址分别对应源IP地址和目的IP地址。
    • 源IP地址是购物平台或您个人设备的地址,而目的IP地址是商家服务器的地址。
  1. MAC地址和中转站(路由器/交换机):
    • 中转站在这个比喻中就像是路由器或者交换机,它们有各自的MAC地址。
    • 当数据从您的设备传送到商家服务器时,经过的路由器或交换机有各自的MAC地址,这些设备帮助数据从一个网络节点传输到下一个网络节点。
  1. MAC地址的变化:
    • 当数据经过每一个中转站时,当前源MAC地址会被改成对应路由器或者交换机的MAC地址。
    • 同时,当前中转站告诉下一个中转站的MAC地址(目的MAC地址),即下一个路由器或者交换机的MAC地址。
    • 这样,源MAC地址和目标MAC地址在数据传输的过程中会一直改变,直到数据最终到达目的地。

一台主机给另一台主机发送数据时,需要封装MAC帧,那就需要知道对方的MAC地址,但是现在最多只能知道对方的IP地址,如何根据对方的IP转化成对方的MAC地址?因为我需要根据对方的MAC地址,重新封装MAC帧。所以 在一个IP网络中,当一台主机知道对方的IP地址但不知道对方的MAC地址时,它可以使用ARP(地址解析协议)来获取目标主机的MAC地址。

ARP协议

虽然我们在这里介绍ARP协议,但是需要强调,ARP不是一个单纯的数据链路层的协议,而是一个介于数据链路层和网络层(IP)之间的协议;

ARP协议的作用

ARP协议建立了主机lP地址和MAC地址的映射关系。

  • 在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址;
  • 数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃
  • 因此在通讯前必须获得目的主机的硬件地址;

ARP数据报的格式

  1. 硬件类型(Hardware Type): 2个字节。指定网络硬件的类型,例如以太网是1。
  2. 协议类型(Protocol Type): 2个字节。指定网络层协议的类型,例如IPv4是0x0800。
  3. 硬件地址长度(Hardware Address Length): 1个字节。指定硬件地址的长度,通常为MAC地址的长度(以太网是6字节)。
  4. 协议地址长度(Protocol Address Length): 1个字节。指定网络地址的长度,通常为IPv4地址的长度(4字节)。
  5. op(Opcode): 2个字节。指定ARP消息的类型,例如:字段为1表示ARP请求,为2表示ARP响应。
  6. 发送端以太网地址(Sender Hardware Address): 由硬件地址长度指定的字节数。发送ARP请求的主机的硬件地址(MAC地址)。
  7. 发送端IP地址(Sender Protocol Address): 由协议地址长度指定的字节数。发送ARP请求的主机的协议地址(IPv4地址)。
  8. 目的以太网地址(Target Hardware Address): 由硬件地址长度指定的字节数。在ARP请求中通常为全F,因为这时候目标的MAC地址未知,因此将目的以太网地址设置为广播地址,以确保所有网络中的设备都能收到这个请求。在ARP响应中为目标主机的硬件地址(MAC地址)。
  9. 目的IP地址(Target Protocol Address): 由协议地址长度指定的字节数。目标主机的协议地址(IPv4地址)。

ARP数据报的长度通常为28字节。ARP协议允许在网络上动态获取硬件地址和协议地址之间的映射关系。这对于在发送数据前解析目标主机的MAC地址是至关重要

问题:那么是每一次都要发送arp请求吗?并不是每一次都要进行arp请求,一次arp之后会把你曾经arp所带的mac地址和IP地址之间的映射关系,会在系统之间缓存起来,每一台主机都会缓存自己高频访问请求下来的mac地址和IP地址。

每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址。

为什么要有时间限制?

因为网络当中的设备他其实可能会变换的,当我退出把IP地址归还路由器的时候,下一次重新登录的时候,路由器会给我们分配新的IP,或者,在我们退出之后,其他设备在申请的时候又分配了我们刚才归还的IP地址,所以同一个IP就可以给大家共享,如果你arp一直是持久有效的,这个新设备你也缓存转发不过来了,所以要定时的保证这个arp是过期的,然后让别人映射arp,所以就在这样的情况缓存数据,每次都要更新缓存最新的数据。

成为中间人原理:

DNS(Domain Name System)(了解)

DNS是一整套从域名映射到IP的系统

DNS背景

TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序,但是IP地址不方便记忆,于是人们发明了一种叫主机名的东西,是一个字符串,并且使用hosts文件来描述主机名和IP地址的关系。

最初,通过互连网信息中心(SRI-NIC)来管理这个hosts文件的。

如果一个新计算机要接入网络,或者某个计算机IP变更,都需要到信息中心申请变更hosts文件,其他计算机也需要定期下载更新新版本的hosts文件才能正确上网。

但是这样就太麻烦了,于是产生了DNS系统:

一个组织的系统管理机构,维护系统内的每个主机的IP和主机名的对应关系,如果新计算机接入网络,将这个信息注册到数据库中,用户输入域名的时候,会自动查询DNS服务器,由DNS服务器检索数据库,得到对应的IP地址,至今,我们的计算机上仍然保留了hosts文件,在域名解析的过程中仍然会优先查找hosts文件的内容。

//查看相关文件:
cat /etc/hosts

域名简介

主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称

www.baidu.com

域名使用 . 连接

com:一级域名,表示这是一个企业域名,同级的还有"net"(网络提供商),"org"(非盈利组织)等。

baidu:二级域名,公司名。

www:只是一种习惯用法,之前人们在使用域名时,往往命名成类似于 ftp.xxx.xxx/www.xxx.xxx这样的格式,来表示主机支持的协议。

域名解析过程(略.自行了解)

可以参考 <<图解TCP/IP>> 相关章节

使用dig工具分析DNS 过程

安装 dig 工具

yum install bind-utils

之后就可以使用 dig 指令查看域名解析过程了

dig www.baidu.com

结果形如

; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41628
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 1057 IN CNAME www.a.shifen.com.
www.a.shifen.com. 40 IN A 115.239.210.27
www.a.shifen.com. 40 IN A 115.239.211.112
;; Query time: 0 msec
;; SERVER: 100.100.2.136#53(100.100.2.136)
;; WHEN: Wed Sep 26 00:05:25 CST 2018
;; MSG SIZE rcvd: 90

结果解释:

  1. 开头位置是 dig 指令的版本号。
  2. 第二部分是服务器返回的详情,重要的是 status 参数,NOERROR 表示查询成功。
  3. QUESTION SECTION 表示要查询的域名是什么。
  4. ANSWER SECTION 表示查询结果是什么,这个结果先将 www.baidu.com 查询成了 www.a.shifen.com,再将 www.a.shifen.com 查询成了两个 ip 地址。
  5. 最下面是一些结果统计, 包含查询时间和 DNS 服务器的地址等。

更多 dig 的使用方法,参见:

linux dig 命令使用方法_慕课手记

浏览器中输入url后,发生的事情(面试题)

这是一个经典的面试题,没有固定答案,越详细越好,可以参考:

当你在浏览器地址栏输入一个URL后回车,将会发生的事情?_44、填空( )是指用户进入网站后看到的第一个页面。当用户在浏览器地址栏输入网站的url地址后,-CSDN博客

ICMP协议

ICMP协议是一个网络层协议

一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通,但是IP协议并不提供可靠传输,如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因。

ICMP功能

ICMP正是提供这种功能的协议,ICMP主要功能包括:

确认IP包是否成功到达目标地址,通知在发送过程中IP包被丢弃的原因,ICMP也是基于IP协议工作的,但是它并不是传输层的功能,因此人们仍然把它归结为网络层协议,ICMP只能搭配IPv4使用,如果是IPv6的情况下需要是用ICMPv6。

ICMP的报文格式 (了解)

ICMP(Internet Control Message Protocol)报文的基本格式如下:

  1. 类型(Type): 占一个字节,指定 ICMP 报文的类型。常见的类型包括 Echo Request、Echo Reply、Destination Unreachable、Time Exceeded 等。
  2. 代码(Code): 占一个字节,提供有关 ICMP 报文类型的更多细节。不同的类型有不同的代码。
  3. 校验和(Checksum): 占两个字节,用于检测 ICMP 报文在传输过程中是否发生了错误。校验和涵盖整个 ICMP 报文。
  4. 数据(Data): 包含特定类型 ICMP 报文的附加信息。数据部分的长度和内容取决于 ICMP 报文的类型和代码。

ICMP报文主要分为两大类:

  1. 错误报文(Error Messages): 用于通知网络中的主机或路由器发生了错误。当一个网络设备遇到问题时,它可以向源设备发送 ICMP 错误报文,以通知源设备发生了问题。一些常见的 ICMP 错误报文包括目标不可达、时间超时等。
  2. 查询报文(Echo Request/Reply Messages): 用于网络诊断和测试。最典型的例子是 Ping 工具使用的 ICMP Echo Request 和 Echo Reply 报文。发送方发起 Echo Request 请求,接收方返回 Echo Reply 响应,通过测量往返时间(Round-Trip Time,RTT)可以评估网络的延迟。

ping命令

  • 注意,此处ping的是域名,而不是url,一个域名可以通过DNS解析成IP地址。
  • ping命令不光能验证网络的连通性,同时也会统计响应时间和TTL(IP包中的Time To Live,生存周期)
  • ping命令会先发送一个ICMP Echo Request给对端;
  • 对端接收到之后,会返回一个ICMP Echo Reply;

ping 命令是一种常用的网络诊断工具,用于测试与目标主机之间的网络连接。它通过发送 ICMP Echo Request 报文并等待目标主机的 ICMP Echo Reply 响应来测量网络的可达性和延迟。以下是 ping 命令的基本用法和一些常见选项:

ping [options] destination

其中,options 是可选的参数,用于配置 ping 命令的行为,而 destination 是目标主机的 IP 地址或主机名。

一些常见的 ping 命令选项包括:

  • -c count: 指定发送报文的次数。
  • -i interval: 设置报文之间的时间间隔(单位为秒)。
  • -t timeout: 设置等待响应的超时时间。
  • -s size: 设置发送的数据包大小。
  • -q: 以静默模式运行,只显示摘要信息。
  • -v: 详细显示每个报文的信息。

例如,要向目标主机发送 4 个数据包并显示每个响应的详细信息,可以使用以下命令:

ping -c 4 example.com

ping 命令在不同的操作系统中可能有一些变化,但基本原理是相似的。它是网络故障排除和性能测试中常用的工具之一。

一个值得注意的坑

有些面试官可能会问:telnet是23端口,ssh是22端口,那么ping是什么端口?千万注意!这是面试官的圈套,ping命令基于ICMP,是在网络层的,而端口号,是传输层的内容,在ICMP中根本就不关注端口号这样的信息。

traceroute命令

也是基于ICMP协议实现,能够打印出可执行程序主机,一直到目标主机之前经历多少路由器。

NAT(Network Address Translation,网络地址转换)技术

NAT技术背景

之前我们讨论了,IPv4协议中,IP地址数量不充足的问题,NAT技术当前解决IP地址不够用的主要手段,是路由器的一个重要功能。

NAT能够将私有IP对外通信时转为全局IP,也就是就是一种将私有IP和全局IP相互转化的技术方法,很多学校,家庭,公司内部采用每个终端设置私有IP,而在路由器或必要的服务器上设置全局IP,全局IP要求唯一,但是私有IP不需要,在不同的局域网中出现相同的私有IP是完全不影响的。

NAT IP转换过程

  • NAT路由器将源地址从10.0.0.10替换成全局的IP 202.244.174.37;
  • NAT路由器收到外部的数据时,又会把目标IP从202.244.174.37替换回10.0.0.10;
  • 在NAT路由器内部,有一张自动生成的,用于地址转换的表;
  • 当10.0.0.10第一次向163.221.120.9发送数据时就会生成表中的映射关系。

NAPT

那么问题来了,如果局域网内,有多个主机都访问同一个外网服务器,那么对于服务器返回的数据中,目的IP都是相同的,那么NAT路由器如何判定将这个数据包转发给哪个局域网的主机?

这时候NAPT来解决这个问题了,使用IP+port来建立这个关联关系

这种关联关系也是由NAT路由器自动维护的,例如在TCP的情况下,建立连接时,就会生成这个表项,在断开连接后,就会删除这个表项。

NAT技术的缺陷

由于NAT依赖这个转换表,所以有诸多限制:

  1. 无法从NAT外部向内部服务器建立连接: NAT通常会阻止外部网络直接向内部网络的设备发起连接,因为NAT设备通常只允许内部网络的设备主动发起连接。这可能导致一些特定的网络应用无法正常工作,例如某些P2P应用或需要外部服务器主动连接内部设备的场景。
  2. 转换表的生成和销毁需要额外开销: NAT设备需要维护一个转换表,用于记录内部私有地址与外部公共地址之间的映射关系。这会引入一些额外的处理和存储开销,尤其在大规模网络中可能会对性能产生一定影响。
  3. 通信过程中NAT设备异常可能导致TCP连接断开: 如果NAT设备发生异常,例如崩溃或重启,转换表可能会丢失,这可能导致所有的TCP连接断开。即使存在热备机制,仍然需要一定的时间来恢复连接,可能会影响网络的可用性。

NAT穿越(了解)

NAT穿越(NAT traversal)是指通过各种技术手段绕过NAT设备,实现在NAT后面的内部主机与外部网络的直接通信。由于NAT的存在,内部主机具有私有IP地址,无法直接被外部主机访问。而NAT穿越技术则可以突破这个限制,使得内部主机可以直接和外部主机进行通信。

下面是几种常见的NAT穿越技术:

  1. 端口映射/端口转发:通过在NAT设备上设置端口映射或端口转发规则,将外部主机的请求转发到特定的内部主机上。这样外部主机就可以通过特定的端口与内部主机进行通信。
  2. UPnP(通用即插即用):一些NAT设备支持UPnP协议,可以动态地创建和销毁端口映射规则。通过使用UPnP协议,内部主机可以请求NAT设备创建相应的端口映射,使得外部主机可以直接访问内部主机。
  3. 中继服务器/中转服务器:通过在公共网络上架设中继服务器,内部主机与中继服务器建立连接,然后外部主机与中继服务器建立连接,实现内部主机与外部主机之间的通信。中继服务器将内部主机和外部主机之间的数据进行转发。
  4. 穿透工具/中间人服务:有一些专门的穿透工具和中间人服务,它们提供了一种方式让内部主机与外部主机进行直接通信,绕过NAT限制。这些工具通常使用特殊的协议和技术,如ICE、STUN、TURN等,来实现NAT穿越。

需要注意的是,NAT穿越技术需要根据具体的网络环境和设备情况选择合适的方法,并保证使用合法和授权的方式进行。此外,NAT穿越也可能涉及到一些安全风险,因此在使用时需要考虑网络的安全性和合规性。

NAT和代理服务器

路由器往往都具备NAT设备的功能,通过NAT设备进行中转,完成子网设备和其他子网设备的通信过程。

代理服务器看起来和NAT设备有一点像,客户端像代理服务器发送请求,代理服务器将请求转发给真正要请求的服务器,服务器返回结果后,代理服务器又把结果回传给客户端。

那么NAT和代理服务器的区别有哪些呢?

  • 从应用上讲,NAT设备是网络基础设备之一,解决的是IP不足的问题,代理服务器则是更贴近具体应用,比如通过代理服务器进行翻墙,另外像迅游这样的加速器,也是使用代理服务器。
  • 从底层实现上讲,NAT是工作在网络层,直接对IP地址进行替换,代理服务器往往工作在应用层。
  • 从使用范围上讲,NAT一般在局域网的出口部署,代理服务器可以在局域网做,也可以在广域网做,也可以跨网。
  • 从部署位置上看,NAT一般集成在防火墙,路由器等硬件设备上,代理服务器则是一个软件程序,需要部署在服务器上

代理服务器是一种应用比较广的技术,例如:

1.翻墙:广域网中的代理(正向代理)。

2.负载均衡:局域网中的代理。

代理服务器又分为正向代理和反向代理,正向代理和反向代理是两种不同的代理服务器配置,它们在网络中的作用和工作方式有所不同。

1.正向代理(Forward Proxy):

具体流程如下:

  1. 客户端向正向代理服务器发送请求。
  2. 正向代理服务器收到请求后,代理服务器会将客户端的请求再次发送给目标服务器。
  3. 目标服务器接收到代理服务器发送的请求,并进行处理。
  4. 目标服务器将处理结果返回给代理服务器。
  5. 代理服务器接收到目标服务器的响应后,再将响应返回给客户端。

在这个流程中,客户端并不直接与目标服务器通信,而是通过正向代理服务器进行代理。正向代理服务器负责转发请求和响应,并将目标服务器的响应返回给客户端。通过正向代理,可以实现客户端的身份隐藏和IP地址隐藏,同时也可以提供一些额外的服务,如缓存、加密等。

**作用:**正向代理充当客户端和目标服务器之间的中介。客户端通过正向代理访问目标服务器,而目标服务器通常不知道实际发起请求的客户端。

  • **用途:**常用于提供访问控制、安全性和匿名性。例如,公司内部网络可能使用正向代理以监控和过滤员工对互联网的访问,或者在某些国家/地区,人们可能使用正向代理绕过访问限制。

2.反向代理(Reverse Proxy):

具体流程如下:

  1. 客户端发送请求到反向代理服务器。
  2. 反向代理服务器接收到请求后,根据配置的负载均衡策略选择一个后端服务器。
  3. 反向代理服务器将请求转发给所选的后端服务器。
  4. 后端服务器接收到请求,并进行相应的处理,生成响应结果。
  5. 后端服务器将响应结果返回给反向代理服务器。
  6. 反向代理服务器将后端服务器的响应结果返回给客户端。
  7. 客户端通常不知道实际提供服务的是哪个后端服务器。

这种架构的优势是,通过反向代理作为中介,可以实现负载均衡、高可用性和可扩展性。反向代理可以根据负载均衡策略将请求分发给多个后端服务器,从而平衡负载,提高系统的整体性能和稳定性。

另外,反向代理还可以实现一些其他功能,如缓存静态资源、SSL加密、安全过滤等。这些功能可以优化网站性能、提供安全保护和加密传输等。

  • **用途:**常用于负载均衡、安全性、SSL终结、内容缓存等。反向代理可以帮助分担后端服务器的负载,并提供一层额外的安全性。

区别:

  • **方向不同:**正向代理代表客户端,而反向代理代表服务器。
  • **隐匿对象不同:**正向代理隐藏客户端,反向代理隐藏服务器。
  • **用途不同:**正向代理通常用于访问控制和匿名性,而反向代理通常用于负载均衡和提供额外的服务层。

总体而言,正向代理和反向代理都是中介服务器,但它们在网络中的位置和功能上有所不同。

注:翻墙不是VPN,翻墙和VPN虽然都可以用于绕过地域限制、访问被封锁的内容或服务,但它们是不同的概念和技术。

  1. 定义:
    • 翻墙:指通过各种技术手段绕过网络封锁、访问被屏蔽的内容或服务。
    • VPN(虚拟私人网络):是一种安全的网络连接技术,通过在公共网络上建立加密的隧道,实现远程用户或远程网络与目标网络的连接。
  1. 功能:
    • 翻墙:翻墙主要是为了绕过地域限制,访问被封锁的网站、服务或内容。
    • VPN:VPN提供了安全的远程访问和通信功能,用户可以在公共网络上建立一个虚拟的私有网络,安全地访问远程网络资源。
  1. 技术原理:
    • 翻墙:翻墙通常使用正向代理、中继服务器、虚拟云主机等技术手段,通过设置代理服务器或转发数据流量来实现绕过地域限制。
    • VPN:VPN通过在公共网络上建立加密的隧道,将远程用户或远程网络与目标网络连接起来,实现安全的远程访问和通信。
  1. 适用范围:
    • 翻墙:翻墙主要用于突破网络封锁,访问被屏蔽的网站或服务,通常用于个人无法访问的内容。
    • VPN:VPN不仅可以用于突破网络封锁,还可以建立安全的远程访问连接,用于远程办公、跨地域访问公司内部资源等场景。

需要注意的是,翻墙主要是绕过网络封锁,而VPN是一种技术和工具,可以在更广泛的应用场景中实现安全的网络连接。此外,在使用翻墙和VPN时,都需要遵守当地的法律法规,并确保使用合法和安全的方式。

游戏加速器原理:

游戏加速器通常也使用正向代理服务器的原理来加速游戏的网络连接。游戏加速器作为一个中间节点,客户端的网络请求先经过游戏加速器,再由游戏加速器将请求转发给游戏服务器。这样可以减少网络延迟和提高游戏的稳定性。

游戏加速器利用正向代理的方式,通过选择和优化网络路径、缓存游戏资源、加速数据传输等方式来优化网络连接,减少数据的传输时间和延迟,从而提高游戏的流畅度和响应速度。客户端与游戏服务器之间的通信经过游戏加速器进行中转,游戏服务器只能看到加速器的IP地址和请求,无法得知客户端的真实信息。这样,游戏加速器还可以帮助玩家隐藏IP地址和保护个人隐私。因此,游戏加速器的工作原理与正向代理服务器的原理是相似的。

相关推荐
hunandede1 小时前
Ubuntu网络配置(桥接模式, nat模式, host主机模式)
网络·ubuntu·桥接模式
wellnw1 小时前
[Router]路由器常用的后台判断网络ping 可靠公共 IP 地址整理
网络
廿二又1 小时前
http 请求总结get
网络·网络协议·http
Vin0sen1 小时前
xiaomiR4c openwrt
网络
亚远景aspice2 小时前
亚远景-ISO 21434标准下的汽车网络安全测试:全面要求与实施策略
网络·web安全·汽车
忘川8562 小时前
以太网帧结构
网络·物联网·网络协议
IPdodo全球网络服务2 小时前
如何通过TikTok引流到私域流量池
运维·服务器·网络
手心里的白日梦3 小时前
网络层协议--ip协议
网络·网络协议·tcp/ip
IT 古月方源3 小时前
关于高级acl的配置和讲解
运维·开发语言·网络·tcp/ip·智能路由器
开疆智能3 小时前
ModbusTCP转Profinet:工业通信的利器
linux·服务器·网络