网络层IP协议的基本原理 数据链路层ARP协议 域名解析以及一些重要技术

news/2024/5/19 7:31:47

目录

  • 1 网络层
    • IP协议
      • 协议头格式
      • 网段划分
      • DHCP
      • CIDR:基于子网掩码的划分方式
      • 特殊的IP号
      • IP地址的数量限制
      • 私有IP地址和公网IP地址
      • 路由
        • 路由表
  • 2 数据链路层 — 局域网的转发问题
    • 以太网
      • 认识以太网
      • 以太网帧格式
        • 局域网通信原理
      • MTU
        • MTU对IP协议的影响
        • MTU对UDP协议的影响
        • MTU对TCP协议的影响
      • ARP协议
        • ARP数据报格式
        • ARP协议工作过程
  • 3 DNS(Domain Name System)
    • 域名简介
    • 域名解析工具
  • 4 NAT技术
    • NAPT
    • NAT技术的缺陷
    • NAT和代理服务器
  • 5 ICMP协议
  • 6 网络总结
    • 数据链路层
    • 网络层
    • 传输层
    • 应用层
    • 传输层
    • 应用层

1 网络层

网络层作用:在复杂的网络环境中确定一个合适的路径。

tcp/ip协议,tcp解决可靠性与效率,ip提供在网络中传输的能力。

传输层决定了单次向下交付数据包的大小。

IP协议

IP(Internet Protocol)协议是一种网络层协议,用于在互联网上进行数据传输。它定义了数据如何在网络中进行分组、寻址和路由。IP协议是互联网的核心协议之一,它为互联网上的每个设备分配一个唯一的IP地址,以便进行数据交换。

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

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

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

协议头格式

封装和解包:定长报头+自描述字段

如何交付(分用):报头的8位协议:udp or tcp

image-20230722145013994

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

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

  • 8位服务类型(Type Of Service): 3位优先权字段(已经弃用), 4位TOS字段,和1位保留字段(必须置为0).

  • 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于
    ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要.

    • 16位总长度(total length): IP数据报整体占多少个字节.
  • 16位标识(id): 唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个
    id都是相同的.

  • 3位标志字段:

    • 第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到)

    • 第二位置为1表示禁止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文.(比如配合管理工作做MTU的大小探索时)

    • 第三位表示"更多分片", 如果分片了的话,最后一个分片置为1, 其他是0. 类似于一个结束标记.

  • 13位分片偏移(framegament offset): 是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后一个报文之外, 其他报文的长度必须是8的整数倍(否则报文就不连续了).

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

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

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

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

  • 选项字段(不定长, 最多40字节): 略

链路层由于物理特征的原因,一般无法转发太大的数据,链路层有一次可以转发到网络的报文大小的限制(默认1500字节,MTU,最大传输单元)。

image-20230723185134802

分片:将一个比较大的ip报文,拆分成为多个小的,满足条件的报文。分片的行为是网络层做的,同样组装的行为也必须由对方的网络层做。

为什么要组装?

对方给自己的网络层是一个完整的TCP报文,接收方,在网络层向上交付也必须是一个完整的报文。协议的一致性,也减少了协议编写和维护的成本。IP分片和组装的行为TCP是不知道也不关心的。

分片是如何做到的?

在网络层中,分片是通过IP协议来实现的。IP协议定义了将数据包分割成较小的片段并在网络上进行传输的机制。 以下是分片的工作过程:

  1. 数据包分割:发送端将较大的数据包分割成较小的片段,每个片段称为分片。每个分片都包含IP头部和一部分数据。

  2. 分片标识:每个分片都被赋予一个唯一的标识号,以便接收端能够将它们重新组装成原始的数据包。这个标识号存储在IP头部的标识字段中。

  3. 分片偏移:每个分片还包含一个分片偏移字段,指示该分片在原始数据包中的位置。这个偏移值用于确定分片的顺序以及它们在重新组装时的位置。

  4. 分片大小:每个分片都有一个最大长度限制,这是由网络的最大传输单元(MTU)决定的。如果数据包的大小超过了MTU的限制,就需要进行分片。

  5. 分片传输:分片被单独发送到目的地,通过网络传输。每个分片都独立地经过路由器和其他网络设备,可能会采取不同的路径到达目的地。

  6. 分片重组:接收端收到分片后,根据IP头部的标识号和分片偏移字段,将它们重新组装成原始的数据包。接收端使用这些信息确定分片的顺序和位置,以正确地重建原始数据包。

需要注意的是,由于网络的不可靠性,分片的丢失或延迟可能会导致数据包无法正确重组。因此,网络层的分片机制需要依赖上层的传输层协议(如TCP)来确保数据的可靠传输。

分片严重不推荐,分片的坏处:

  • 丢包是有概率的,分片会增大丢包的概率

网段划分

每个国家的IP地址,在开始的时候,就已经被划分好了,国际上的路由器都有自己的路由表,可以进行国家和国家的转发。

IP地址分为两个部分,网络号和主机号

  • 网络号:保证相互连接的两个网段具有不同的标识
  • 主机号:同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号

image-20230724101338033

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

划分原因

  1. 便于定位
  2. 提高查找效率

DHCP

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

手动管理子网内的IP,是一个相当麻烦的事情。

有一种技术叫做DHCP,能够自动的给子网内新增主机节点分配IP地址,避免了手动管理IP的不便

一般的路由器都带有DHCP的功能,因此路由器也可以看做一个DHCP服务器

CIDR:基于子网掩码的划分方式

过去曾经提出一种划分网络和主机号的方案,把所有IP地址分为五类。分类划分法:

image-20230726171954537

  • 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类却浪费了大量地址。

针对这种情况提出了新的划分方案,称为CIDR。

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

不同路由器配置不同位数的子网掩码即可看到不同的网络号

image-20230726172223601

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

特殊的IP号

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

IP地址的数量限制

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

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

私有IP地址和公网IP地址

RFC 1918规定了用于组建局域网的私有IP地址:

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

默认网关:特定子网中的第一台主机

image-20230724140953236

一个路由器有两套地址:

  • 对内:Lan口IP,局域网ip
  • 对外:WAN口IP,自己所在上级子网给自己分配的ip

路由器LAN口连接的主机, 都从属于当前这个路由器的子网中。

不同的路由器,子网IP其实都是一样的(通常都是192.168.1.1)。子网内的主机IP地址不能重复,但是子网之间的IP地址就可以重复了。

子网内的主机需要和外网进行通信时, 路由器将IP首部中的IP地址进行替换(替换成WAN口IP), 这样逐级替换,最终数据包中的IP地址成为一个公网IP.。这种技术称为NAT(Network Address Translation,网络地址转换)。

如果希望我们自己实现的服务器程序,能够在公网上被访问到,就需要把程序部署在一台具有外网IP的服务器上。这样的服务器可以在阿里云/腾讯云上进行购买。

源IP地址在不同内网,不同层级的网络节点中转发,被替换的技术,叫做NAT。

路由

路由是指在计算机网络中,根据特定的算法和规则,将数据包从源主机传送到目的主机的过程。路由是网络通信中的核心概念,它决定了数据包在网络中的传输路径和下一跳的目的地。

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

路由的过程,相当于一跳一跳“问路”的过程。所谓的“一跳”,就是数据链路层中的一个区间,具体在以太网中指从源MAC地址之间的帧传输区间。

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

  • 当IP数据包, 到达路由器时, 路由器会先查看目的IP;
  • 路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器;
  • 依次反复, 一直到达目标IP地址;
  • 通过每个节点内维护的路由表判定当前数据包应该发送到哪里。

路由表

路由表是路由器或交换机中存储的一张表格,用于决定数据包在网络中的传输路径。路由表包含了网络地址和对应的下一跳信息,用于指导数据包的转发。

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

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

小结:

  1. 目的ip
  2. 子网划分
  3. 路由表查找与路由算法
  4. IP没有解决设备在转发的具体功能,IP提供的是转发的策略,即路径选择。

局域网数据转发问题——>数据链路层解决

2 数据链路层 — 局域网的转发问题

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

每一个节点本质都是子网转发。

以太网

认识以太网

以太网(Ethernet)是一种常用的局域网(LAN)技术,用于在计算机和其他网络设备之间传输数据。它是一种基于共享介质的传输技术,最初由Xerox、Intel和DEC(Digital Equipment Corporation)共同开发。

  • "以太网"不是一种具体的网络,而是一种技术标准。既包含了数据链路层的内容,也包含; 一些物理层的内容。例如:规定了网络拓扑结构,访问控制方式,传输速率等等。
  • 以太网中的网线必须使用双绞线,传输速率有10M,100M,1000M等
  • 以太网是当前应用最广泛的局域网技术,和以太网并列的还要令牌环网,无线LAN等

猫:调制解调器,连接光纤

以太网帧格式

image-20230724161018505

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

局域网通信原理

image-20230724170736387

如果局域网中,同时有多台主机都在发送数据,数据之间就发生了碰撞问题。发生碰撞,数据则不能使用,因此尽量不能发生碰撞问题。

一旦发生数据碰撞问题。会触发碰撞避免算法。

碰撞避免算法:发送主机会休息随机时间,然后再重新发送。

为了减少数据碰撞,此时使用交换机。

交换机:划分碰撞域。

局域网资源本质类似于一个临界资源。

注意:

  • 局域网中主机越少越好
  • 局域网数据帧发送的时候,数据帧过短会导致携带有效信息较少,数据帧太长会容易产生数据碰撞,因此以太网帧中的数据长度规定最小46字节,最大1500字节。

MTU

MTU相当于发快递时对包裹尺寸的限制. 这个限制是不同的数据链路对应的物理层, 产生的限制.

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

MTU对IP协议的影响

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

将较大的IP包分成多个小包, 并给每个小包打上标签;

每个小包IP协议头的 16位标识(id) 都是相同的;

每个小包的IP协议头的3位标志字段中, 第2位置为0, 表示允许分片, 第3位来表示结束标记(当前是否是最后一个小包, 是的话置为1, 否则置为0);

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

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

MTU对UDP协议的影响

一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)), 那么就会在网络层分成多个IP数据报.

这多个IP数据报有任意一个丢失, 都会引起接收端网络层重组失败. 那么这就意味着, 如果UDP数据报在网络层被分片, 整个数据被丢失的概率就大大增加了.

MTU对TCP协议的影响

TCP的一个数据报也不能无限大, 还是受制于MTU. TCP的单个数据报的最大消息长度, 称为MSS(MaxSegment Size);

TCP在建立连接的过程中, 通信双方会进行MSS协商.

最理想的情况下, MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU).

双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值.

然后双方得知对方的MSS值之后, 选择较小的作为最终MSS.

MSS的值就是在TCP首部的40字节变长选项中(kind=2);

image-20230726174152891

局域网受到攻击原理

向局域网中发送大量垃圾请求导致数据碰撞。

ARP协议

ARP(Address Resolution Protocol)是一种网络协议,用于将IP地址映射到MAC地址,以实现在局域网中的主机之间进行通信。

在局域网中,主机之间通常使用IP地址进行通信,而以太网(Ethernet)使用MAC地址来标识每个网络接口。ARP协议充当了IP地址和MAC地址之间的桥梁,通过查询和维护一个ARP缓存表,将IP地址解析为对应的MAC地址。

ARP不是一个单纯的数据链路层的协议,而是一个介于数据链路层和网络层之间的协议。

ARP数据报格式

image-20230724202042144

  • 硬件类型:链路层网络类型,1指以太网
  • 协议类型指:要转换的地址类型,0x0800为IP地址
  • 硬件地址长度:对于以太网地址为6字节;
  • 协议地址长度:对于和IP地址为4字节;
  • op:
    • 字段为1:ARP请求
    • 字段为2:ARP应答。

注意:

  • 任何主机可能之前向目标主机发起过ARP请求,注定了,未来会收到对应的ARP应答
  • 局域网中:任何一台主机收到ARP的时候,可能是一个应答,有可能是一个请求。因此收到arp,应该首先查看op,查看是请求还是应答,如果是请求,再查看目的IP与自己是否匹配,如果不匹配则丢掉。

image-20230726095927372

ARP协议工作过程

  1. ARP请求:当主机A需要与主机B通信时,它首先检查本地的ARP缓存表,查看是否已经知道主机B的MAC地址。如果没有,主机A将发送一个ARP请求广播到局域网上的所有主机,询问“谁拥有IP地址为B的设备的MAC地址?”该请求包含主机A的IP地址和MAC地址。

  2. ARP应答:当主机B收到ARP请求后,它会检查自己的IP地址是否与请求中的目标IP地址匹配。如果匹配,主机B将发送一个ARP应答,包含自己的IP地址和MAC地址。

  3. ARP缓存更新:主机A收到ARP应答后,将主机B的IP地址和MAC地址添加到本地的ARP缓存表中,以便将来的通信使用。

  4. 数据通信:在主机A知道主机B的MAC地址后,它可以使用MAC地址作为目标地址,将数据包直接发送到主机B。

ARP协议使用广播方式进行通信,因此只能在同一个局域网中进行操作。如果通信的目标设备不在同一个局域网中,需要使用其他协议(如ARP的扩展协议Proxy ARP)或者路由器来实现跨网络的地址解析。

如何获取一下所处的局域网中,所有主机的MAC和IP地址?

  • ifconfig 查询后,将自己的IP地址和子网掩码进行按位与,得到网络号
  • 例如得到网络号172.28.71.0,这是使用while循环进行ping
    • while [1.254] ping -c1 172.28.71.number ; number++; done
  • 则可缓存各IP跟MAC之间的映射关系
  • 可以通过arp -a查看刚才缓存的映射关系

arp伪装

在A和B不知情的情况下成为中间人,arp欺骗

image-20230726102256061

注意:

  • 在网络转发过程中,目的IP不变,MAC帧报头会改变。
  • 任何一个主机都暂时无法得知下一跳的MAC地址,必须知道要不然无法封装MAC帧。通过arp协议知道目的IP地址的MAC地址。
  • arp请求成功之后,请求方会暂时将IP和MAC地址的映射关系暂时保存下来(保存一段时间)。
  • arp的过程会在网络中的任何路径随时发生

3 DNS(Domain Name System)

属于应用层协议,DNS是一整套从域名映射到IP的系统,用于将域名解析与对应IP地址的网络协议。

TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序. 但是IP地址不方便记忆。

于是人们发明了一种叫主机名的东西, 是一个字符串, 并且使用hosts文件来描述主机名和IP地址的关系.

image-20230726105354548

最初,通过互联网信息中心(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这样的格式,来表示主机支持的协议。

域名解析工具

可以使用dig工具分析DNS过程

yum insatll bind-utils
dig www.baidu.com

域名解析服务呈现出一定的区域性,区域的域名解析服务。

根域名服务器:

根域名解析服务器是互联网域名系统(DNS)中的最高级别服务器。它负责解析全球范围内的顶级域名(如.com、.net、.org等)的IP地址,并将请求转发给相应的顶级域名服务器。根域名解析服务器的主要作用是提供域名解析的起始点。当用户在浏览器中输入一个域名时,例如www.example.com,浏览器会向本地域名解析服务器发送一个域名解析请求。如果本地域名解析服务器无法直接解析该域名,它会向根域名解析服务器发送一个请求。根域名解析服务器的IP地址是固定的,因此本地域名解析服务器可以直接发送请求到根域名解析服务器的IP地址。根域名解析服务器会根据请求中的顶级域名信息,将请求转发给相应的顶级域名服务器。顶级域名服务器负责解析该顶级域名下的二级域名(如example.com)的IP地址,并将结果返回给根域名解析服务器。根域名解析服务器通常由互联网域名系统的管理机构维护和管理,例如国际互联网名称与数字地址分配机构(ICANN)。全球共有13台根域名解析服务器,分布在世界各地,以提供高可靠性和负载均衡的服务。

有时候QQ、微信、游戏等登陆正常,但是网页打不开?

DNS解析可能出现问题。DNS解析将域名转换为IP地址,如果DNS服务器出现故障或配置错误,就无法正确解析域名,导致网页无法打开。

思考:在浏览器输入一个url后,会发生哪些过程?

4 NAT技术

NAT(Network Address Translation,网络地址转换)技术是一种在计算机网络中常用的技术,用于将私有IP地址转换为公共IP地址,以实现多个设备共享一个公共IP地址的功能。

NAT技术的主要作用是解决IPv4地址资源的短缺问题。由于IPv4地址空间有限,无法为每个设备都分配一个唯一的公共IP地址。NAT技术通过在网络边界设备(如路由器或防火墙)上进行地址转换,将内部私有IP地址映射到外部公共IP地址上,从而实现多个设备共享一个公共IP地址。

NAT技术的工作原理如下:

  1. 内部设备发送数据包到外部网络时,源IP地址被替换为路由器的公共IP地址,同时在NAT表中记录映射关系。
  2. 外部网络返回数据包给路由器时,路由器根据NAT表中的映射关系将目标IP地址转换为内部设备的私有IP地址。
  3. 内部设备接收到数据包后进行处理。

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

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

NAPT

image-20230726140158159

在进行源地址转换的过程中,可能不一定只替换源IP,必要的时候,源端口也要被替换。

路由器在NAT转换的过程中,除了单纯的替换,还会为我们根据报文请求的四元组构建一个映射关系。

源IP表示唯一的一台主机,源端口表示该主机上的唯一的一个进程。则源IP+源端口表示当前内网中唯一的一个进程。

无论从内向外,还是从外向内,都能在各自的网络中表示唯一性,所以,这个映射关系是互为KEY值的。

NAT技术的缺陷

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

  • 无法从NAT外部向内部服务器建立连接;
  • 装换表的生成和销毁都需要额外开销;
  • 通信过程中一旦N AT设备异常, 即使存在热备, 所有的TCP连接也都会断开;

内网穿透技术

如果一个客户端从未访问过外网,在理论上外网是不能够直接访问内网的。但是有很多基于NAT原理的软件,能够实现从外网访问内网。这种技术成为内网穿透。

NAT和代理服务器

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

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

NAT和代理服务器的区别是什么?

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

代理服务器是一种应用比较广的技术。

  • 翻墙:广域网中的代理。
  • 负载均衡:局域网中的代理。

代理服务器又分为正向代理和反向代理。

正向代理用于请求的转发(例如借助代理绕过反爬虫),反向代理往往作为一个缓存。

5 ICMP协议

一个网络层协议,基于IP协议工作。用来确认IP包是否成功到达目标地址,通知在发送过程中IP包被丢弃的原因。
ICMP只能搭配IPv4使用,如果是IPv6的情况下,需要是用ICMPv6。

6 网络总结

数据链路层

  • 数据链路层的作用: 两个设备(同一种数据链路节点)之间进行传递数据
  • 以太网是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;
  • 以太网帧格式
  • 理解mac地址
  • 理解arp协议
  • 理解MTU

网络层

  • 网络层的作用: 在复杂的网络环境中确定一个合适的路径.
  • 理解IP地址, 理解IP地址和MAC地址的区别.
  • 理解IP协议格式.
  • 了解网段划分方法
  • 理解如何解决IP数目不足的问题, 掌握网段划分的两种方案. 理解私有IP和公网IP
  • 理解网络层的IP地址路由过程. 理解一个数据包如何跨越网段到达最终目的地.
  • 理解IP数据包分包的原因.
  • 了解ICMP协议.
  • 了解NAT设备的工作原理

传输层

  • 传输层的作用: 负责数据能够从发送端传输接收端.
  • 理解端口号的概念.
  • 认识UDP协议, 了解UDP协议的特点.
  • 认识TCP协议, 理解TCP协议的可靠性. 理解TCP协议的状态转化.
  • 掌握TCP的连接管理, 确认应答, 超时重传, 滑动窗口, 流量控制, 拥塞控制, 延迟应答, 捎带应答特性.
  • 理解TCP面向字节流, 理解粘包问题和解决方案.
  • 能够基于UDP实现可靠传输.
  • 理解MTU对UDP/TCP的影响.

应用层

  • 应用层的作用: 满足我们日常需求的网络程序, 都是在应用层
  • 能够根据自己的需求, 设计应用层协议.
  • 了解HTTP协议.
  • 理解DNS的原理和工作流程.
    P地址, 理解IP地址和MAC地址的区别.
  • 理解IP协议格式.
  • 了解网段划分方法
  • 理解如何解决IP数目不足的问题, 掌握网段划分的两种方案. 理解私有IP和公网IP
  • 理解网络层的IP地址路由过程. 理解一个数据包如何跨越网段到达最终目的地.
  • 理解IP数据包分包的原因.
  • 了解ICMP协议.
  • 了解NAT设备的工作原理

传输层

  • 传输层的作用: 负责数据能够从发送端传输接收端.
  • 理解端口号的概念.
  • 认识UDP协议, 了解UDP协议的特点.
  • 认识TCP协议, 理解TCP协议的可靠性. 理解TCP协议的状态转化.
  • 掌握TCP的连接管理, 确认应答, 超时重传, 滑动窗口, 流量控制, 拥塞控制, 延迟应答, 捎带应答特性.
  • 理解TCP面向字节流, 理解粘包问题和解决方案.
  • 能够基于UDP实现可靠传输.
  • 理解MTU对UDP/TCP的影响.

应用层

  • 应用层的作用: 满足我们日常需求的网络程序, 都是在应用层
  • 能够根据自己的需求, 设计应用层协议.
  • 了解HTTP协议.
  • 理解DNS的原理和工作流程.

http://www.mrgr.cn/p/14585086

相关文章

脑电信号处理与特征提取——6.运用机器学习技术和脑电进行大脑解码(涂毅恒)

目录 六、运用机器学习技术和脑电进行大脑解码 6.1 前言 6.2 基于脑电数据的机器学习基础分析 6.3 基于脑电数据的机器学习进阶分析 6.4 代码解读 六、运用机器学习技术和脑电进行大脑解码 6.1 前言 6.2 基于脑电数据的机器学习基础分析 6.3 基于脑电数据的机器学习进阶分…

谷粒商城第七天-商品服务之分类管理下的分类的拖拽功能的实现

目录 一、总述 1.1 前端思路 1.2 后端思路 二、前端实现 2.1 判断是否能进行拖拽 2.2 收集受影响的节点,提交给服务器 三、后端实现 四、总结 一、总述 这个拖拽功能对于这种树形的列表,整体的搬迁是很方便的。但是其实现却并不是那么的简单。 …

如何在不使用脚本和插件的情况下手动删除 3Ds Max 中的病毒?

如何加快3D项目的渲染速度? 3D项目渲染慢、渲染卡顿、渲染崩溃,本地硬件配置不够,想要加速渲染,在不增加额外的硬件成本投入的情况下,最好的解决方式是使用渲云云渲染,在云端批量渲染,批量出结…

大厂HR经常会问到的Java线程池面试题

一、什么是线程池 线程池和数据库连接池非常类似,可以统一管理和维护线程,减少没有必要的开销。 二、为什么要使用线程池 因为在项目开发过程中频繁的开启线程或者停止线程,线程需要重新被CPU从就绪状态调度到运行状态,需要发生C…

爆肝整理,接口自动化测试-数据驱动框架封装(实战)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 接口自动化框架—…

SpringBoot环境标识设置及nacos匹配配置

本地环境标识设置 本地父类maven配置 可以看到相关的分类&#xff0c;设置环境标识主要需要用到profiles; <profiles><profile><id>dev</id><properties><!-- 环境标识&#xff0c;需要与配置文件的名称相对应 --><profiles.active&…

2023项目管理产品排行榜:优化企业项目管理的顶级选择

随着全球竞争加剧和商业环境的变化&#xff0c;企业对项目管理的需求越来越迫切。优秀的项目管理产品能够帮助企业提高工作效率、资源利用率和项目交付质量。 本文参考了不同的产品测评网站&#xff0c;在众多项目管理产品中&#xff0c;总结了以下几款备受好评的项目管理工具&…

stm32 mpu6050 cubemx DMP法读取角度

文章目录 前言一、相关文件二、cubemx配置三、代码变量初始化主循环 总结 前言 文件 记录使用dmp库来读取mpu6050的角度。 这是参考文件 参考1–主要参考 github参考 参考2 参考三 一、相关文件 相关文件在这里下载&#xff08;未填&#xff0c;不过可以在上面的git中下载&a…

js全端支持的深拷贝structuredClone

Jul 7, 2023 经过一年半的试用&#xff0c;structuredClone转正了&#xff0c;全端可以正式使用。 https://developer.mozilla.org/en-US/docs/Web/API/structuredClone

牛客网Verilog刷题——VL48

牛客网Verilog刷题——VL48 题目答案 题目 在data_en为高期间&#xff0c;data_in将保持不变&#xff0c;data_en为高至少保持3个B时钟周期。表明&#xff0c;当data_en为高时&#xff0c;可将数据进行同步。本题中data_in端数据变化频率很低&#xff0c;相邻两个数据间的变化&…

【Git】git reset 版本回退 git rm

前言 在日常开发时&#xff0c;我们经常会需要撤销之前的一些修改内容或者回退到之前的某一个版本&#xff0c;这时候reset命令就派上用场了 git reset 用法1——所有文件回退到某个版本 1、使用git reflog查看要回退的commit对象 2、使用git reset [-- hard/soft /mixed] …

计算机网络网--应用层

目录 应用层概述1.进程通信2. 供应用程序使用的运输服务3.因特网提供的运输服务 一.网络应用模型1.1 C/S模型&#xff08;client/server&#xff0c;客户/服务器模型&#xff09;定义工作原理功能特点优势应用 1.2 P2P&#xff08;peer to peer&#xff09;模型 与 P2P文件分发…

认识主被动无人机遥感数据、预处理无人机遥感数据、定量估算农林植被关键性状、期刊论文插图精细制作与Appdesigner应用开发

目录 第一章、认识主被动无人机遥感数据 第二章、预处理无人机遥感数据 第三章、定量估算农林植被关键性状 第四章、期刊论文插图精细制作与Appdesigner应用开发 更多推荐 遥感技术作为一种空间大数据手段&#xff0c;能够从多时、多维、多地等角度&#xff0c;获取大量的…

ubuntu20.04 安装 Qt5.15

目录 安装前工作 选择安装QT的哪个版本 安装时候选择哪些组件 安装Qt5.15 在线安装 我选择的组件 源码包安装 测试 安装前工作 ubuntu20.04.3安装Qt6.22操作步骤_ubuntu安装qt6_sonicss的博客-CSDN博客 # 安装g、gcc编译器 sudo apt-get install build-essential 安装l…

HTTP——二、简单的HTTP协议

本章将针对 HTTP 协议结构进行讲解&#xff0c;主要使用HTTP/1.1版本。学完这章&#xff0c;想必大家就能理解 HTTP 协议的基础了。 HTTP 一、HTTP协议用于客户端和服务器之间的通信二、通过请求和响应的交换达成通信三、HTTP是不保存状态的协议四、请求URI定位资源五、告知服…

spring-websocket在SpringBoot(包含SpringSecurity)项目中的导入

✅作者简介&#xff1a;大家好&#xff0c;我是 Meteors., 向往着更加简洁高效的代码写法与编程方式&#xff0c;持续分享Java技术内容。 &#x1f34e;个人主页&#xff1a;Meteors.的博客 &#x1f96d;本文内容&#xff1a;spring-websocket在SpringBoot(包含SpringSecurity…

途乐证券:沪指强势拉升涨0.63%,券商等板块走强,传媒板块活跃

31日早盘&#xff0c;两市股指全线走高&#xff0c;沪指一度涨超1%收复3300点&#xff0c;上证50指数盘中涨逾2%&#xff1b;随后涨幅有所收窄&#xff1b;两市成交额显着放大&#xff0c;北向资金净买入超90亿元。 到午间收盘&#xff0c;沪指涨0.63%报3296.58点&#xff0c;深…

ERROR in unable to locate ‘***/public/**/*‘ glob

前提 自己搭了一个react项目的脚手架&#xff0c;npm包下载一切都很正常&#xff0c;启动的时候突然就报ERROR in unable to locate ***/public/**/* glob这个错误&#xff0c;根据百度分析了一下产生的原因&#xff1a;webpack配置文件中的CopyWebpackPlugin导致的 网上给出的…

SpringBoot中间件—ORM(Mybatis)框架实现

目录 定义 需求背景 方案设计 代码展示 UML图 实现细节 测试验证 总结 源码地址&#xff08;已开源&#xff09;&#xff1a;https://gitee.com/sizhaohe/mini-mybatis.git 跟着源码及下述UML图来理解上手会更快&#xff0c;拒绝浮躁&#xff0c;沉下心来搞 定义&#x…

Mycat-Balance使用指南

MyCAT Balance是一个Java NIO的高性能负载均衡器&#xff0c;可以替代普通的硬件的交换机或其LVS类似的复杂机制&#xff0c;实现MyCAT集群的负载均衡。 MyCAT Balance的配置文件在conf目录下&#xff0c;frontend-conf.为前端配置&#xff0c;包括绑定的端口等&#xff0c;js…