目录

网络层

引子与前置知识

一、协议格式

二、网段划分(重要)

三、特殊的IP地址 

四、IP地址的数量限制 

五、私有IP地址和公网IP地址

六、理解运营商和全球网络

七、路由 

八、协议格式补充

数据链路层 

 一、以太网帧格式

二、局域网的通信原理

三、认识MTU 

 四、MTU对IP协议的影响

五、MTU对于TCP协议的影响 

六、ARP协议的作用

1. 先说原理

2.谈arp报头 并模拟一次arp过程

3.arp周边问题

其它重要协议或技术

1.DNS

​编辑

 2.ICMP协议

icmp功能

当你在浏览器地址栏输入一个URL后回车,将会发生的事情?

3.NAT技术

NAT技术背景

NAT IP转换过程 

NAPT 

NAT技术的缺陷

4.代理服务器 


网络层

引子与前置知识

ip协议的本质工作是提供一种能力,将数据跨网络从A主机送到B主机

但是用户需要的是将数据可靠的跨网络从A主机送到B主机

那么如何保证可靠呢?通过tcp协议提供的可靠性策略!如超时重传等等.. 

(图中大圆圈是一个个子网,较大的矩形标识路由器转发,较小的矩形标识子网内的一台台主机) 

在网络中,我们要对所有的主机进行表示,通信时即用源ip和目的ip标识主机和目的主机

网络通信和现实通信其实是一样的,我们现实通信,都会确认城市,地点,人。层层递进。

                                     相类似,我们可以借其理解目标网络 目标主机 进程的关系

进程我们前面知道了,可以用端口号确定

那么理所当然,ip地址承担的是确认目标网络和目标主机的任务 

        我们再举一个生活中的例子,即我们的学号,它也是有自己的格式的,我们此时将其简化为学院编号+自己的学院内编号 。

        此时我是计算机学院的123009学生,我见到了一张学生证,是432008同学的。

        由于每个学院的学生只清楚自己学院的编号,因此如果123009学生想要找这个432008学生,就需要一个一个人去确认,不断排除。但是线性遍历效率太低!

        此时123009想到了自己学院有一个大群,由本学院的学生会长管理,我告知了学生会长这件事。而学生会长也同样有一个自己的每个学院的学生会长群,此时计算机学院的学生会长将此消息递给了电气学院的会长,电气学院本身也有群,此时消息就很快速地传给了432008学生。为什么快?因为排除的效率变高了!

        那么其实我们每个学院都是一个子网,每个人都是一台主机,而我们的学生会会长则是每个子网的路由器,每个路由器天然“认识”网络中的其它路由器。

        而如果我们想要再扩大,每个学校有一个总的学校学生会主席,那么不同学校的学生会主席是不是也能建立一个群?网络也是通过这样层层扩展的。

一、协议格式

 

报头和有效载荷如何分离? 固定长度+自描述字段(首部长度+总长度) 

如何将有效载荷交给上层? 8位协议

1.4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4 

2.4位头部长度(header length): IP头部的长度是多少个32bit,。也就是 length * 4 的字节数. 4bit表示最大的数字是15, 因此IP头部最大长度是60字节

3.8位服务类型(Type Of Service): 3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0). 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要.ip协议不保证可靠性,但是它可以选择一个相对更可靠的网络通道。

4.16位总长度(total length): IP数据报整体占多少个字节

5.8位生存时间(Time To Live, TTL): 数据报到达目的地的最大报文跳数. 一般是64. 每次经过一个路由, TTL-= 1, 一直减到0还没到达, 那么就丢弃了. 这个字段主要是用来防止出现路由循环

6. 8位协议: 表示上层协议的类型

7.16位头部校验和: 使用CRC进行校验, 来鉴别头部是否损坏. 

8.32位源IP地址和32位目标IP地址: 表示发送端和接收端.

在我们通信过程中,只有发送端和接收端是有tcp层的, 中间的路由器可以有,但是我们是不会用它的,所有的路由器只工作在网络层。

二、网段划分(重要)

         IP地址分为两个部分, 网络号和主机号
        网络号: 保证相互连接的两个网段具有不同的标识;
        主机号: 同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号;

1. 不同的子网其实就是把网络号相同的主机放到一起.
2.如果在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致, 但是主机号必须不能和子网中的其他主机重复

        通过合理设置主机号和网络号, 就可以保证在相互连接的网络中, 每台主机的IP地址都不相同.
那么问题来了, 手动管理子网内的IP, 是一个相当麻烦的事情.

因此

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

我们再补充一些与路由器有关的内容。

1.路由器本质也是特定一个子网的主机,也要配置ip地址

2.路由器一定至少要连接两个子网,那么路由器也就相当于同时存在于两个子网。

所以,路由器可以,也一定是会配置多个ip的。这里我们简单认为路由器有多张网卡即可。

3.路由器一般是一个子网中的第一台设备,通常来说它的ip地址的网络号都为 1.

4.路由器除了可以进行ip报文转发,构建子网(局域网),也会对子网中的ip地址进行管理

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

        A类 0.0.0.0到127.255.255.255
        B类 128.0.0.0到191.255.255.255
        C类 192.0.0.0到223.255.255.255
        D类 224.0.0.0到239.255.255.255
        E类 240.0.0.0到247.255.255.255 

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

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

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

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

        所谓的子网掩码是配置在全世界的路由器中的, 包括上面的分类划分发,也是在路由器中配置好的。我们经常说我们转发的时候要通过目的网络转发,凭的是什么呢?凭的就是我们的报文到了某一个路由器,这个路由器内部会拿着我们的报文和其内部的子网掩码,按位与就得到了网络号。每个路由器它连接着哪些子网它自己也清楚。他就可以通过目的网络来进行转发。

        可见,IP地址与子网掩码做与运算可以得到网络号, 主机号从全0到全1就是子网的地址范围;
        IP地址和子网掩码还有一种更简洁的表示方法,例如140.252.20.68/24,表示IP地址为140.252.20.68, 子网掩码的高24位是1,也就是255.255.255.0 

三、特殊的IP地址 

1. 将IP地址中的主机地址全部设为0, 就成为了网络号, 代表这个局域网;
2.将IP地址中的主机地址全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包;
3.127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1

四、IP地址的数量限制 

        1.我们知道, IP地址(IPv4)是一个4字节32位的正整数. 那么一共只有 2的32次方 个IP地址, 大概是43亿左右. 而TCP/IP协议规定, 每个主机都需要有一个IP地址.
        2.这意味着, 一共只有43亿台主机能接入网络么?
        实际上, 由于一些特殊的IP地址的存在, 数量远不足43亿; 另外IP地址并非是按照主机台数来配置的, 而是每一个网卡都需要配置一个或多个IP地址.
        3.CIDR在一定程度上缓解了IP地址不够用的问题(提高了利用率, 减少了浪费, 但是IP地址的绝对上限并没有增加), 仍然不是很够用. 这时候有三种方式来解决: 

        a. 动态分配IP地址: 只给接入网络的设备分配IP地址. 因此同一个MAC地址的设备, 每次接入互联网中, 得到的IP地址不一定是相同的;
        b.NAT技术(后面会重点介绍);
        c.IPv6: IPv6并不是IPv4的简单升级版. 这是互不相干的两个协议, 彼此并不兼容; IPv6用16字节128位来表示一个IP地址; 但是目前IPv6还没有普及;

五、私有IP地址和公网IP地址

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

        1.10.*,前8位是网络号,共16,777,216个地址
        2.172.16.到172.31.,前12位是网络号,共1,048,576个地址
        3.192.168.*,前16位是网络号,共65,536个地址。包含在这个范围中的, 都成为私有IP, 其余的则称为全局IP(或公网IP); 

在我们的使用生涯中,直接使用的基本上都是 私有ip

云服务器-----公网ip

六、理解运营商和全球网络

         运营商把光纤接入用户家中,我们家中的调制解调器把光电的模拟信号转化为数字信号交给家用路由器。而我们的路由器可以构建局域网。运营商会给我们的路由器设置账号和密码,使得该路由器可以接入运营商的内网,而我们路由器本身也有一个账号和密码,这个、样可以防止周边的其他人使用

 而关于全球网络

 

实际上网络的划分比较复杂,我们这里以国家地区为基准,简单介绍全球网络。 

我们三十二位的ip地址可以进行层层划分。

        例如我们有接近200个国家,那么可以拿出最前面的八位 用于标识每个国家。不同国家间有国际间的路由器。此时我们国家层的子网掩码是前八位为1.

        而对于某个国家内部,以我们国家为例,省和自治区直辖市等合计有三十几个,那么我们又可以拿出六位来标识不同的地区。我们国内不同地区也有不同地区的路由器。此时子网掩码为8+6 为14位的1

        而某个省内部的市也以同样的方式进行划分。同样有市内的路由器组成网络。

        而这些全都是公网ip! 

        这样层层下来,我们就可以进行通信了。但是此时出现了一个问题,剩余的位数太少,根本无法支持一个地区大量的用户使用。那么怎么解决呢?

        而且 我们之前说了,我们日常接触的都是私网ip,那么我们是怎么与公网联系起来的呢?

        

        我们可以观察到下图中,运营商的路由器有一个子网ip,即它内部使用的ip,是一个私有ip。而它的WAN口ip则是一个公网ip。 

        而我们的路由器的WAN口ip则是运营商的内网内使用的ip。

        实际上家用路由器和运营商路由器的性质是类似的 

     

  由于私有ip是不能用于公网进行通信的,所以在我们的路由器向上传递的时候会进行报文的替换,会将源ip替换成每一个路由器的WAN口ip。 

        

七、路由 

在复杂的网络结构中, 找出一条通往终点的路线;

        路由的过程, 就是这样一跳一跳(Hop by Hop) "问路" 的过程.
        所谓 "一跳" 就是数据链路层中的一个区间. 具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间.

 IP数据包的传输过程也和问路一样

1.当IP数据包, 到达路由器时, 路由器会先查看目的IP;
2.路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器;
3.依次反复, 一直到达目标IP地址;

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

 路由表可以使用route命令查看

1.如果目的IP命中了路由表, 就直接转发即可;
2.路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址。

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

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

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

        1.跟第一行的子网掩码做与运算得 到192.168.56.0,与第一行的目的网络地址不符
        2.再跟第二行的子网掩码做与运算得 到192.168.56.0,正是第二行的目的网络地址,因此从eth1接口发送出去;
        3.由于192.168.56.0/24正 是与eth1 接口直接相连的网络,因此可以直接发到目的主机,不需要经路由器转发; 

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

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

八、协议格式补充

        实际上在主机中,报文并没有通过网络层直接发出去,而是继续交给自己的下一层协议(数据链路层)

        而数据链路层要求上层不能交付给它过大的报文。它有大小的限制,如图我们看到该主机的MTU(最大传输单元)为1500,MTU指网络层协议(如 IP)允许传输的最大数据包大小(以字节为单位)。

        如果上层仍然给了比较大的报文,那么我们的ip层就会进行分片转发。 

(为什么不是数据链路层分片呢?按照常识,谁分片谁就应该将其组装起来。如果由数据链路层进行分片和组装,那么每次转发到新的路由器,这些报文都会再进行组装和分片,这样效率太低了)

因此ip协议为了报文的分片和组装,其报头内也规定了相应的字段

        16位标识,用于唯一标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个id都是相同的

        第二个三位标志,每个小包的ip协议的3位标志字段中 ,第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到).,第二位置若为0表示允许分片,为1则不允许,第三位是结束标记(表示当前是否是最后一个小包,是的话为0,否则置为1)

        13位分片偏移: 是分片相对于原始IP报文开始处的偏移

我们怎么知道一个ip报文是被分片了呢? 片偏移 != 0 || 更多分片 == 1 

 怎么确保将分片全部拼到一起?

1.当丢失第一个报文 那么会缺少片偏移为0的报文

2.丢中间报文,片偏移会出现异常,也会被识别出来

3.丢最后一个报文,那么会缺少结束标记为0的报文

        但是我们并不建议分片,因为有任何一个分片丢失,整个ip报文都需要重传。同样的数据,如果进行分片传输,需要重传的概率会变高

        需要注意的是,每个分片都需要报头,因此进行分片的时候我们需要给报文添加报头。如图我们原本有3000字节的数据,我们对其进行分片,第一个分片为1500字节,第二个分片也为1500字节,但是第一个分片中的报头是原始报文,但是第二个分片中的报头是我们添加的,并不是原始报文,因此第二个分片的片偏移为1500而第三个分片的片偏移则为1500 + 1480 = 2980。

数据链路层 

数据链路层解决的是直接相连的主机(电脑、路由器)之间,进行数据交付的问题。

 一、以太网帧格式

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

mac帧如何做到解包和封装? 使用定长报文

 如何做到分用?(即该将我们的有效载荷交给谁) 可以填写相应的类型字段

二、局域网的通信原理

我们之前讲过这个原理。

        实际上每个主机在局域网内转发mac帧的时候,局域网内的每一个主机都会收到这个mac帧,只不过除了目的地址符合的主机,其它主机都将这些报文丢弃了而已 。

        我们某个主机在转发mac帧的时候,其它主机也有可能在进行转发,那么就会发生数据碰撞。我们要保证某一时刻局域网内只有一个主机在发送数据,就要进行碰撞检测并且进行碰撞避免算法。即让产生数据碰撞的主机都等待一会,然后分别进行数据包的重发。因此我们也能知道,数据链路层也会有重发。

        在局域网中,主机数目越多发生数据碰撞的可能性也就越大。

        用系统的目光看,实际上局域网可以被看成一个临界资源。

        发送数据包的时候,网络层会进行决策,决定 数据包如何转发。

        例如我们图中A主机将数据包转发给主机R,那么R主机在数据链路层进行解包后会将报文根据类型向上交付,并且又会重新在自己的网络层进行决策,此时会形成一个新的mac帧,它的源地址和目的地址都被更改了。那么这样我们就清楚了,mac帧其实只在局域网有效。 

三、认识MTU 

        在局域网中,我们会使用交换机来隔离碰撞域,减少碰撞。

        而数据链路层本身也会采取相应策略来减少数据碰撞的概率。相较于较长的数据包,较短的数据包更不容易发生碰撞。我们的mac帧的有效载荷被要求不要太长,这个限制即为MTU。


        1.以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位;
        2.最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;
        3.如果一个数据包从以太网路由到拨号链路上,如果数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation);
        4.不同的数据链路层标准的MTU是不同的;

 四、MTU对IP协议的影响

 MTU对IP协议的影响

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

1.将较大的IP包分成多个小包, 并给每个小包打上标签;
2.每个小包IP协议头的 16位标识(id) 都是相同的;
3.每个小包的IP协议头的3位标志字段中, 第2位置为0, 表示允许分片, 第3位来表示结束标记(当前是否是最后一个小包, 是的话置为1, 否则置为0);
4.到达对端时再将这些小包, 会按顺序重组, 拼装到一起返回给传输层;
5.一旦这些小包中任意一个小包丢失, 接收端的重组就会失败. 但是IP层不会负责重新传输数据;

五、MTU对于TCP协议的影响 

        但是我们上面已经说过了,我们并不建议 网络层进行分包,那么我们就需要在传输层协议也指定相应的规则了

1.TCP的一个数据报也不能无限大, 还是受制于MTU. TCP的单个数据报的最大消息长度, 称为MSS(MaxSegment Size);
2.TCP在建立连接的过程中, 通信双方会进行MSS协商.
3.最理想的情况下, MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU).
4.双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值.
5.然后双方得知对方的MSS值之后, 选择较小的作为最终MSS.
6.MSS的值就是在TCP首部的40字节变长选项中(kind=2) 

由于每层都需要将有效载荷添加报头,因此用MTU向上推得到MSS时,MSS必定是更小的。 

六、ARP协议的作用

我们发现,所谓的将数据发送到目标网络,本质上是通过无数个连续的子网实现的

        可是我们在网络层进行决策的时候,只知道目标主机的ip,那么我们在数据链路层封装的时候是怎么知道 目标主机的mac地址的呢?

        此时我们就需要提到我们的ARP协议了,它可以在局域网中,将目标主机的ip转化为它的Mac地址

 

1. 先说原理

        主机A和主机B通信前先会发送ARP请求,这个ARP请求是广播的。它会标明目标主机B的ip地址,当目标主机B接收到这个ARP请求,它就会根据ARP请求内的目标IP地址进行辨认,如果这个目标主机ip地址是自己,那么它就会给主机A响应一个ARP应答。

2.谈arp报头 并模拟一次arp过程

arp协议与mac帧都是在数据链路层,但是arp协议在mac帧的上层。如右图所示 

arp请求/应答里面的字段值较为固定。

 

每个主机都有可能接收到arp请求和arp应答

        但是arp请求因为没有目的mac地址,因此如果不符合,拆分报头后在arp软件层 进行判断后才会丢弃。

        arp应答因为已经携带了目的mac地址,因此如果不符合,经过判断后会立即丢弃,就不需要向上交付给arp软件层了。

        在arp过程中收到的任何arp都是先看op,op决定了arp的类型,是非常重要的字段。

(下面的图片中这五个主机在同一局域网,中间一条横线上的arp报文表示把arp报文投入这个局域网中)

arp请求应答例子 

 

而为了提高效率,主机的ip地址和mac地址会被临时缓存起来, 时间在几十分钟不等。

3.arp周边问题

 1.arp只有在缓存失效的时候才会进行

2.我可以通过我的ip和子网掩码,得到我的网络号,然后拼接ip地址,ping所有的主机,就能得到所有主机的ip和mac。

3.如果主机收到多次同样的arp应答,会以最新的为准。

4.arp欺骗。

主机M可以向主机A发送大量的arp应答,将与IPR相关联的mac地址改为macM。

这样主机A向路由器R发送的报文就会发送给主机M,主机M可以将收到的报文全部丢弃,这样就进行了一次定向让主机A断网的操作。

(同时主机M也可以向路由器R发送大量arp请求,实现双向欺骗)

其它重要协议或技术

1.DNS

        因此如果我们没有缓存,那么使用域名访问服务器时就需要先访问DNS服务器,拿到域名对应的ip地址 

 2.ICMP协议

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

 

icmp功能

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

当你在浏览器地址栏输入一个URL后回车,将会发生的事情?

当你在浏览器地址栏输入一个URL后回车,将会发生的事情?-CSDN博客

一个坑:

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

3.NAT技术

NAT技术背景


        之前我们讨论了, IPv4协议中, IP地址数量不充足的问题
        NAT技术当前解决IP地址不够用的主要手段, 是路由器的一个重要功能;
        1.NAT能够将私有IP对外通信时转为全局IP. 也就是就是一种将私有IP和全局IP相互转化的技术方法:
        2.很多学校, 家庭, 公司内部采用每个终端设置私有IP, 而在路由器或必要的服务器上设置全局IP;
        3.全局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不仅仅会替换ip地址,也会对端口号进行替换。

        (我们将源ip与目的ip看作是一个大的字符串,看下图的表格,在左侧,内网中这个字符串是具有唯一性的,同样的,与其相关联的替换后的字符串也具有唯一性,为了避免重复,甚至端口号也会被替换。)

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

NAT技术的缺陷

由于NAT依赖这个转换表, 所以有诸多限制:
        1.无法从NAT外部向内部服务器建立连接;
        2.装换表的生成和销毁都需要额外开销;
        3.通信过程中一旦NAT设备异常, 即使存在热备, 所有的TCP连接也都会断开; 

4.代理服务器 

        路由器往往都具备NAT设备的功能, 通过NAT设备进行中转, 完成子网设备和其他子网设备的通信过程.
        代理服务器看起来和NAT设备有一点像. 客户端像代理服务器发送请求, 代理服务器将请求转发给真正要请求的服务器; 服务器返回结果后, 代理服务器又把结果回传给客户端.

        我们使用校园网都需要认证,这个认证的过程就是给我们分配ip的过程。(方框代表的是路由器,路由器并不能进行认证工作,但是我们的请求需要通过路由器到学校的服务器) 

正向代理:

反向代理:

许多公司为了使公司内的机器能够被均匀访问,实现负载均衡,也会使用代理服务器。

 还有如下情况也是一种代理服务器

        正常来说我们国内不能访问国外服务器,但是一些特殊地区可以,那么我们只需要先访问特殊地区的服务器,然后通过 特殊地区的服务器再访问国外的服务器。那么我们就可以间接访问到国外的服务器了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/89664.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/89664.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/89664.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx入门进阶:从零到高手的实战指南

Nginx 入门与进阶玩法指南 一、什么是 Nginx? Nginx(Engine X)是一个高性能的 HTTP 和反向代理服务器,同时也可以作为 IMAP/POP3/SMTP 邮件代理服务器。它最初由俄罗斯程序员 Igor Sysoev 开发,用于解决高并发下 Apa…

NPM组件 alan-baileys 等窃取主机敏感信息

【高危】NPM组件 alan-baileys 等窃取主机敏感信息 漏洞描述 当用户安装受影响版本的 alan-baileys 组件包时会窃取用户的主机名、用户名、工作目录、IP地址等信息并发送到攻击者可控的服务器地址。 MPS编号MPS-wkyd-5v7r处置建议强烈建议修复发现时间2025-07-02投毒仓库npm…

Python爬虫实战:研究httplib2库相关技术

1. 引言 1.1 研究背景与意义 随着互联网的快速发展,网络上的信息量呈爆炸式增长。如何从海量的网页中高效地获取有价值的数据,成为了当前信息技术领域的一个重要研究课题。网络爬虫作为一种自动获取互联网信息的程序,能够按照一定的规则,自动地抓取网页内容并提取和整理信…

【C++】简单学——模板初阶

模板(template) 泛型编程,让编译器把我们不想干的事情给干了 类似于typedef,解决了typedef使用不方便地原因(虽然看似写少了,其实只是编译器做多了) 例如: 生成两个栈,…

X-Search:Spring AI实现的AI智能搜索

X-Search AI智能搜索 X-Search使用Spring AI和Spring AI Alibab Graph实现的AI智能搜索系统。 gitee:https://gitee.com/java-ben/x-search github:https://github.com/renpengben/x-search 核心功能 快速开始 git clone https://github.com/renpengben/x-search.git 1.申请…

一台香港原生ip站群服务器多少钱?

一台香港原生ip站群服务器多少钱?在香港地区租用原生 IP 站群服务器的价格受多重因素影响,不同配置和服务的组合会导致费用差异显著。以下是详细分析:一、影响香港原生 IP 站群服务器价格的核心因素IP 资源成本:原生 IP 由于其注册…

JavaScript性能优化实战:从理论到实践的全方位指南

Hi,我是布兰妮甜 !JavaScript作为现代Web开发的核心语言,其性能直接影响用户体验、转化率和搜索引擎排名。本文将深入探讨JavaScript性能优化的各个方面,从基础原则到高级技巧,提供一套完整的实战指南。 文章目录 一、…

MCU的晶振匹配测试,是否匹配跟哪些因素相关?

晶振能否与目标电路良好匹配,取决于多个相互作用的因素。这些因素可归纳为以下四大类: 【】一、晶振自身特性(核心基础) 标称频率与公差:晶振的基频精度(如 10ppm)是匹配起点。 负载电容 (CL)&…

前端单元测试覆盖率工具有哪些,分别有什么优缺点

以下是主流的前端单元测试覆盖率工具及其优缺点对比,帮助你在项目中根据需求选择合适的工具:1. Istanbul(NYC) 类型:JavaScript 覆盖率工具适用框架:通用(React/Vue/Node.js 等)原理…

C语言常用转换函数实现原理

编程时,经常用到进制转换、字符转换。比如软件界面输入的数字字符串,如何将字符串处理成数字呢?今天就和大家分享一下。01 字符串转十六进制 代码实现: void StrToHex(char *pbDest, char *pbSrc, int nLen) {char h1,h2;char s…

办公文档批量打印器 Word、PPT、Excel、PDF、图片和文本,它都支持批量打印。

办公文档批量打印器是一款可以批量打印文档的工具,其是绿色单文件版,支持添加文件、文件夹。 我之前也介绍过批量打印的软件,但是都是只支持Office的文档打印,详情可移步至——>>大小只有700K的软件,永久免费&am…

大事件项目记录13-文章管理接口开发-总

一、文章管理接口。 共有5个,分别为: 1.新增文章; 2.文章列表(条件分页) ; 3.获取文章详情; 4.更新文章; 5.删除文章。 二、详解。 1.新增文章。 ArticleController.java: PostMappingpublic R…

如何防止内部威胁:服务器访问控制与审计策略

内部威胁是指来自组织内部的用户或设备对服务器和数据的潜在安全威胁。这些威胁可能是由于恶意行为、疏忽或配置错误造成的。为了防止内部威胁,必须建立强大的访问控制和审计策略,确保服务器的安全性和数据完整性。 1. 什么是内部威胁? 1.1 …

科技赋能电网安全:解析绝缘子污秽度在线监测装置的核心技术与应用价值

绝缘子是电力系统中保障输电线路安全运行的关键设备,其表面污秽积累可能引发闪络事故,导致线路跳闸甚至电网瘫痪。传统的人工巡检方式存在效率低、时效性差等问题,而绝缘子污秽度在线监测装置通过实时数据采集与分析,为电网安全运…

实际开发如何快速定位和解决死锁?

一、死锁的本质与常见场景 1. 死锁的四大必要条件 互斥:资源同一时间只能被一个线程持有。占有并等待:线程持有资源的同时请求其他资源。不可抢占:资源只能被持有者主动释放。循环等待:多个线程形成资源的循环依赖链。2. 常见死锁场景 数据库事务死锁:-- 事务1 BEGIN; UP…

uniapp实现图片预览,懒加载,下拉刷新等

实现的功能 懒加载 lazy-load --对小程序起效果图片预览下拉刷新触底加载更多底下设置安全距离env(safe-area-inset-bottom)右下角固定图标置顶及刷新功能 效果如图&#xff1a; 预览 代码 <template><view class"image-classify"><uni-segmente…

FFmpeg开发笔记(七十七)Android的开源音视频剪辑框架RxFFmpeg

《FFmpeg开发实战&#xff1a;从零基础到短视频上线》一书的“第 12 章 FFmpeg的移动开发”介绍了如何使用FFmpeg在手机上剪辑视频&#xff0c;方便开发者更好地开发类似剪映那样的视频剪辑软件。那么在Android系统上还有一款国产的开源视频剪辑框架RxFFmpeg&#xff0c;通过该…

小测一下笔记本电脑的VMXNET3和E1000e网卡性能

正文共&#xff1a;999 字 14 图&#xff0c;预估阅读时间&#xff1a;1 分钟 通过上次操作&#xff0c;我们已经实现了将笔记本电脑的ESXi版本从6.0升级到了6.7&#xff08;VMware ESXi 6.7可以成功识别机械硬盘了&#xff09;&#xff0c;并且测得以电脑中的虚拟机作为server…

K8S初始化master节点不成功kubelet.service failed(cgroup driver配置问题)

一、背景 安装k8s集群&#xff0c;初始化master节点一直不成功。 二、排查 查看日志 ps -ef | grep kube-apiserver [rootzjy01 home]# ps -ef | grep kube-apiserver root 85663 4637 0 12:41 pts/1 00:00:00 grep --colorauto kube-apiserver [rootzjy01 home…

C++ 标准模板库算法之 transform 用法

目录 1. 说明 2. 用法示例 1. 说明 std::transform 是一种多功能算法&#xff0c;用于将已知函数应用于一个或多个范围内的元素&#xff0c;并将结果存储在输出范围内。它主要有两种形式&#xff1a;一元运算和二元运算。具体来说是在 <algorithm> 标头中。函数声明&am…