linux网络ip及其他

文章目录

  • 网络层
  • 基本概念
  • ip与tcp(udp)的关系
  • ip header
    • 分片
    • 3位标志
    • 16位标识
    • 13位片偏移
    • 分片合并过程(重要,可以帮助理解上面三个字段)
  • 网段划分
    • 子网掩码(重要)
    • 特殊的ip
    • IP地址的数量限制
    • 私有ip和公有ip地址
    • NAT(Network Address Translation,网络地址转换)
  • 路由
  • 数据链路层
    • 以太网协议
    • 前情回顾
    • mac帧(以太网帧)格式
    • 数据链路层角度看路由过程(重要)
    • mac地址和ip地址
    • 对MTU的补充
    • MSS
  • ARP协议
    • ARP协议工作原理(重要)
    • ARP header(了解)
  • DNS(Domain Name System)
    • 域名解析
  • ICMP协议
    • 功能
    • ping
    • traceroute
  • NAT技术
    • NAPT
    • NAT和代理服务器
      • 正向代理和反向代理
  • 最后再梳理一下传输过程

网络层

在复杂的网络环境中确定一个合适的路径。也就是说网络层解决的是数据在网络的传输的问题

基本概念

主机:配有ip第hi,但是基本不进行路由控制的设备。
路由器:配有ip地址,又可以进行路由控制
节点:主机和路由器的统称

ip与tcp(udp)的关系

ip有一个能力,可以把数据跨网络从A主机送到B主机的能力。

ip和tcp的关系就好像学生和老师的关系一样。tcp是老师,ip是学生。ip负责在网络中传输数据,tcp负责为ip指定传输数据的策略,比如说什么超时重传,确认应答,流量控制啦,这些策略。tcp的用意是想ip更好的传输,相当于老师想学生考试拿更高的分数。

ip不保证可靠性,丢了就丢了。可靠性还是由tcp制定的策略来保证的。

ip header

linux网络ip及其他_第1张图片
ip的header格式和tcp很像

  • 四位版本:ipv4和ipv6,现在多数还是ipv4
  • 4位首部长度:和tcp的四位首部长度是一样的。一个bit位的1代表4个字节,因此最大能表示60个字节。最小是20个字节,因为header不带选项的话默认是20字节。
  • 8位服务类型:在网络传输中,有可能有不同的需求。有的是最小延时,有的是最少丢包。根据不同的要求,ip会选择不同的传输路径来传输数据。普通用户基本不会设置这个标志
  • 16位总长度:ip数据报整体大小,包含了数据。
  • 8位生存时间(TTL):数据在网络传输的时候有可能会丢失,发送不到目的地,这时候它们就是游离数据了。也就是垃圾。一个ip数据包每经过一个路由它的TTL就减1,当减为0的时候,还没有到达目的地,它就自己销毁了。
  • 8位协议:8位协议特定的2进制序列代表上层的tcp和udp协议,与就是ip要传给上层的哪一个协议
  • 16位首部检验和:使用CRC进行校验, 来鉴别头部是否损坏。知道它是用来校验的就好了。头部如果损坏了ip的header直接就丢掉就好了。
  • ip地址:用来标识在公网(对外开放的网络)当中唯一一台主机

剩下的几个字段后面说:

分片

最大传输单元(Maximum Transmission Unit,MTU)用来通知对方所能接受数据服务单元的最大尺寸,说明发送方能够接受的有效载荷大小
linux网络ip及其他_第2张图片
linux网络ip及其他_第3张图片
有效载荷就是上层的协议加上本身的数据。

由于mac的有效载荷MTU最大时1500,可以推出一下关系:

ip+有效载荷 = 1500字节,因此ip的有效载荷最大应该是1500-20=1480。

tcp+有效载荷 =1480,因此tcp的有效载荷最大应该是1480-20=1460.


ip把有效载荷给了mac之后,如果比MTU要大,那么mac就要求ip进行分片。
分片是ip干的,tcp是不知道的。
所谓分片就是把大的有效载荷分成几个小的有效载荷。

比如说现在ip传了一个3000字节(加上自己的header)的有效载荷给mac,比MTU=1500要大,mac就要ip分片后再传下来。ip怎么分片呢?

下面的分析都是假设tcp和ip没有给选项来分析的:

ip层传下去的3000字节里面有20字节是ip协议的header,剩下的是有效载荷2980字节。

可能会有人这么分:
如果每一片分成1500字节,分成两片,不就刚好3000字节了吗?

实际上每一片1500字节,1500字节里面1480字节是有效载荷,2片1480的有效载荷等于2960的有效载荷,那么这样就比原来的2980有效载荷少了20字节。因此不能这么分。

只能分成三片了。

3位标志

这3位标志就是如果有效,就是用来标志ip发下来的一系列数据包是否是经过分片的。

  • 3位标志的第一位是空着的,暂时没有用,不用管。
  • 第二位标志表示是否允许分片,为1就禁止分片。如果数据包大小大于MTU直接丢掉。为0代表允许分片。
  • 第三位代表该分片是否是最后一个分片(有分片的话第三位才有用)。如果第三位为1,代表它不是最后一个分片,后面还有分片。如果为0,就代表它后面没有分片了。(就当字符串的斜杠0来记住就好了)

3位标志在合并分片和确认该数据包是否为分片的时候有用。

16位标识

经过分片之后,凡是16位标识相同的,证明这几个包原来属于同一个包。

13位片偏移

片偏移就是分片的时候的切割点。比如一个1000字节的数据包分片成两个500的数据包,第一个数据包的片偏移是0,第二个片偏移是500.

有两个作用:

  • 用来把分片后,原来属于同一个包的所有包合并在一起。
  • 用来看这个数据包是否是经过分片的。如果该数据包的片偏移不是0,那么证明它一定是经过分片的。

分片合并过程(重要,可以帮助理解上面三个字段)

一开始客户端给server端发数据,数据传输到ip层了。方形就是一个个数据包
linux网络ip及其他_第4张图片
现在要做的就是挑选出被分片过的数据包。怎么挑选呢? 根据3位标识和13位片偏移来挑选。

  • 如果这个数据包片偏移是0,但是3位标识为1,证明它是被分片的。
  • 如果这个数据包的片偏移不为0,证明它是被分片的

挑选完之后还要进行分组,因为有很多client给server发消息,我们要把属于同一个数据包的分片分在一组。怎么分呢?根据16位标识来分。16位标识一致就是同一组。


分完组之后,我们就要把同组的分片拼起来,怎么拼呢?用13位片偏移+3位标识来拼。

按照片偏移从小到大排序,然后直接拼就好了。

就拿上面那个3000字节的数据包要分片成三个包来举例子好了。

linux网络ip及其他_第5张图片
现在有一个问题:如果有一些分片之后的包丢了怎么办,ip可以发现吗?
答案是可以的。别忘了header里面有数据报总长度,和4位首部长度。
如果自己的偏移量加上自己的长度等于下一个分片的偏移量证明没有丢包。如果不等就是丢包了。

丢包了tcp没有收到对方的ack,因此整一个重新发送。(超时重传)

分片不好,容易丢包。包越多越容易丢。因此最好不要分片

网段划分

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

同一个网段就是同一个局域网的意思。同一个局域网的网络号一定是一样的,不同局域网的网络号一定是不同的。

linux网络ip及其他_第6张图片

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

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

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

但不要认为这5类划分ip的方法很落后,现在还在用。


子网掩码(重要)

针对这种情况提出了CIDR(无类域间路由)

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

简单理解着就是ip号与子网掩码按位与得到的就是网络号。

linux网络ip及其他_第8张图片
IP地址和子网掩码还有一种更简洁的表示方法,例如140.252.20.68/24,表示IP地址为140.252.20.68, 子网掩码的高24位是1,也就是255.255.255.0。


这个包含的主机号范围是咋算的?
其实就是字码掩码的全0部分变成全1部分的值。

举两个例子

比如说255.255.255.0是最后8为2进制位为0,因此主机号的范围就是
00000000-11111111,总共256个主机号。
如果是255.255.255.240,那么最后4位2进制是0,因此主机号是0-15,总共16个主机。

其实直接用255-最后一位的数就可以了。255-0 = 255,证明0-255都可以是主机,总共256台。
255-240=15,证明0-15都可以是主机,总共16台。

特殊的ip

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

IP地址的数量限制

ipv4是一个32位整数,很有可能不够用。现在有三种方法来解决这个问题

  1. 动态分配ip地址,只给介入网络的设备分配ip地址
  2. NAT技术
  3. ipv6,ipv6并不是ipv4的升级版,这是毫无关系的两个协议,互不兼容。

私有ip和公有ip地址

私有ip就是局域网里面的ip,不同局域网的私有ip是可以相同的。

比如今天我在学校连了wifi的ip和我在公司连了wifi的ip有可能是一样的,因为这里的ip指的都是私有ip。

理论上 使用任意的IP地址都可以,但是RFC 1918规定了用于组建局域网的私有IP地址
也就是说:
我们可以理解成公网只有一个,协议规定了私有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);

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

先讲一个结论:
实际上我们上网的过程是要先经过运营商的,运行商相当于帮我们建好了网路的高速公路让我们走,这也是为什么我们要上网就要交钱给运营商的原因。

linux网络ip及其他_第9张图片
现在讲一下NAT技术,NAT技术就是不断更换ip地址的技术。

linux网络ip及其他_第10张图片
我们知道ip的header里面有源ip号和目的ip号。那么请问主机发送信息的时候,它的源ip和目的ip是多少?

源192.168.1.201/24
目的122.77.241.3/24

是这样吗?
很明显不是的。刚刚说过,不同局域网里面的ip很有可能是相同的。源ip是192.168.1.201/24的主机太多了,怎么知道是哪一台?而且私有ip是不能出现在公有ip上的。

因此我们需要进行ip地址的转换(NAT)

先从主机发送到家用路由器,此时的src和dst是

源192.168.1.200/24
目的122.77.241.3/24

再从家用路由器中发送到运行商路由器,此时的src和dst是

源10.1.1.2/24
目的122.77.241.3/24

最后从运行商路由器发送到服务器端,此时的src和dst是

源122.77.241.4/24
目的122.77.241.3/24

这样私有ip就不会出现在公网里面了.注意:发送的时候目的ip永远不会变,变得都是源ip。

关于路由器的一些知识点

  • 一个路由器可以配置两个IP地址, 一个是WAN口IP, 一个是LAN口IP(子网IP). WAN口是对外的,对外不是指一定就是对公网的,对大的私网也是可以的。LAN口ip是对内的。
  • 每一个家用路由器, 其实又作为运营商路由器的子网中的一个节点. 这样的运营商路由器可能会有很多级, 最外层的运营商路由器, WAN口IP就是一个公网IP了.
  • 子网内的主机需要和外网进行通信时, 路由器将IP首部中的IP地址进行替换(替换成WAN口IP), 这样逐级替换, 最终数据包中的IP地址成为一个公网IP. 这种技术称为NAT(Network Address Translation,网络地址转换).

注意:
只有最外层的运营商路由器的WAN口IP才是公网ip,其他路由器的WAN口IP还是私网ip。只不过这个WAN口ip是对外的而已。

路由

路由的过程是问路的过程。问的对象是路由表。

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

那么路由器怎么知道要把ip数据包往哪一个路由器上转发呢?这就需要路由表了。

用route命令可以查看路由表
linux网络ip及其他_第11张图片
Genmask是子网掩码,Gateway是下一个地址

假设这是一张路由表
linux网络ip及其他_第12张图片

  • 转发过程例1: 如果要发送的数据包的目的地址是192.168.56.3
    跟第一行的子网掩码做与运算得 到192.168.56.0,与第一行的目的网络地址不符

  • 再跟第二行的子网掩码做与运算得 到192.168.56.0,正是第二行的目的网络地址,因此从eth1接口发送出去;

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

  • 转发过程例2: 如果要发送的数据包的目的地址是202.10.1.2
    依次和路由表前几项进行对比, 发现都不匹配;

  • 按缺省路由条目(即default), 从eth0接口发出去, 发往192.168.10.1路由器;
    由192.168.10.1路由器根据它的路由表决定下一跳地址;


上面讲的所有东西都是工作在网络层的,接下来讲工作在数据链路层的概念

数据链路层

刚刚在说路由的过程的时候,只是宏观的概念。比如说ip数据包跳一跳跳到路由器上传输,只是宏观的概括,具体传输时是数据链路层要干的事情。

以太网协议

以太网不是一种具体的网络,而是一种技术标准,既包含了数据链路层的内容,也包含了物理层的内容。因此数据链路层+物理层也可以叫做网络接口层。

以太网是当前应用最广泛的局域网技术。和以太网并列的还有令牌环网,无线LAN等(这里不讲

前情回顾

先前情回顾一下:

当在一个局域网里面,主机A要发送东西,先看目的地址,与子网掩码按位与,得到网络号,如果是在本局域网传输数据,就要借助mac帧和以太网技术。如果是发给外网,直接交给路由器就好了

以太网规定:在一个局域网里面,只允许一台主机和另一台主机单独交流。

啥意思呢?
比如说局域网里面有5台主机,ABCDE,现在A和B在通信,C如果想和D通信是不允许的。
因为A和B通信的时候,A其实也有发信息给D,如果C和D要通信就会发生信息碰撞

之前讲过,局域网通信时所有局域网内的主机都是可以收到这条消息的,目标主机不是自己的主机收到这条消息后就会丢掉,只剩下目标主机是自己的主机和发送方进行通信。

如果不是这么做,就会发生信息碰撞(就是干扰)。而我们把整个局域网称为碰撞域。

局域网可以看成是临界资源,只有一个主机可以来使用它。

mac帧(以太网帧)格式

linux网络ip及其他_第13张图片

  • 目的地址:就是目的mac地址
  • 源地址:就是发送方的mac地址
  • 数据就是有效载荷,是包括ip header的有效载荷。

mac地址是定长的,6个字节。一个冒号一个字节。mac地址是全球唯一的。
linux网络ip及其他_第14张图片
类型是数据是什么类型,决定了上层是什么协议给mac层发数据的。有可能是ip,有可能是ARP.

如果类型是0800,证明数据类型是IP,如果类型是0806,证明是ARP请求/应答

数据链路层角度看路由过程(重要)

我们知道如果要发給外网的主机,必须先交给局域网的路由器,由它去路由到目的地。

linux网络ip及其他_第15张图片
主机看到对方主机的网络号并不是自己的网段的,它就会发给自己的路由器,让它去路由。(至于为什么主机会知道路由器的mac地址,后面讲)。在同一局域网是用mac帧来传输的。因此第一阶段的源mac地址是主机A,目的mac地址是路由器A` .

由于路由器是工作在网路层的,因此mac帧需要先解包,把mac的header揭下来,变成ip的数据包。路由器跟着数据包中的ip地址去查路由表,看一下下一个要交付的对象是谁。

在这幅图中,很明显是要给下一个路由器的。而这两个路由器在同一局域网中,因此要重新封包,变成mac地址。此时第二阶段的源mac地址是A`路由器,目的mac地址是B路由器。

重复这个过程,直到找到了目标主机。

这也是之前网络基础里面讲的W型跨网络传输原理。

总结一个重要的点:传输过程的时候,mac地址是一直在变的。目标ip地址是永远不变的(由于NAT技术,源ip地址还是有可能会变得)

mac地址和ip地址

  • 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
  • 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的

IP地址描述的是路途总体的 起点 和 终点;
MAC地址描述的是路途上的每一个区间的起点和终点

对MTU的补充

之前讲ip的分片的时候讲过MTU,mac帧规定了数据最大字节是1500字节。其实它还规定了最小字节,是46.如果不够,会在后面进行填充字节。

MSS

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

linux网络ip及其他_第16张图片
简单理解一下,mss是纯数据的大小,mtu是加上tcp和ip的header的大小

ARP协议

之前讲过一个问题,主机是怎么知道路由器的mac地址的?这就和ARP协议有关系。
ARP协议是在mac帧上层的,因此先加的header是ARP的header,然后再加以太网帧的header

ARP协议工作原理(重要)

  • 源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”, 并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播);
  • 目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中;
  • 每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址

linux网络ip及其他_第17张图片

总结一下就是先广播,然后局域网内的其他主机通过ip来识别是否是想要自己的mac地址,如果是,就arp回应给请求方(默认局域网内主机之间是知道彼此的ip地址的)

ARP header(了解)

linux网络ip及其他_第18张图片

  • 注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。
  • 硬件类型指链路层网络类型,1为以太网;
  • 协议类型指要转换的地址类型,0x0800为IP地址;
  • 硬件地址长度对于以太网地址为6字节;
  • 协议地址长度对于和IP地址为4字节;
  • op字段为1表示ARP请求,op字段为2表示ARP应答

DNS(Domain Name System)

DNS是属于应用层的。DNS是一整套从域名映射到IP的系统

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

说白了就是一个字符串对应着一个ip+端口号。DNS服务器就相当于一个翻译软件,把字符串翻译成对应的数字。
linux网络ip及其他_第19张图片
做个实验:

ping www.baidu.com

在这里插入图片描述

直接输入这个ip地址也是可以访问的
linux网络ip及其他_第20张图片
DNS下层是udp支持的。

域名解析

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

www.baidu.com

域名使用 . 连接

  • com: 一级域名. 表示这是一个企业域名. 同级的还有 “net”(网络提供商), “org”(非盈利组织) 等.
  • baidu: 二级域名, 公司名.
  • www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式, 来表示主机支持的协议

ICMP协议

ICMP协议是一个网络层协议

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

有可能有这个疑惑:tcp不是可以超时重传吗?可是问题是ip上层不一定采用的是tcp,万一用的是其他没有可靠性的协议怎么办呢?

说白了,icmp就是具有诊断功能的ip。

icmp的工作流程大致如下:
linux网络ip及其他_第21张图片

简单来说就是一直发送请求,对方不理我我就返回一个ICMP的报错给发送方。

功能

ICMP主要功能包括:

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

ping

ping命令就是用的icmp协议。ping命令可以检查网络的连通性
在这里插入图片描述

ping命令会先发送一个 ICMP Echo Request给对端;
对端接收到之后, 会返回一个 ICMP Echo Reply
linux网络ip及其他_第22张图片
有一个问题:telnet的端口号是23,ssh的端口号是22(详情看之前的tcp和udp那一节),那么ping的端口号是多少?

答:ping不关心端口号。端口号是传输层才关心的东西,而ping采用的是icmp协议,是网络层的,不关心端口号。

traceroute

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

traceroute www.baidu.com

linux网络ip及其他_第23张图片

NAT技术

之前已经讨论过,ipv4协议下,ip地址不够用的情况,NAT是当前解决这个问题的重要手段,是路由器的一个重要功能。我们回顾一下:

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

发送的过程
linux网络ip及其他_第24张图片
接收的过程
linux网络ip及其他_第25张图片

  • 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路由器如何判定将这个数据包转发给哪个局域网的主机?

这是啥意思?
画个图就知道了。
由于一个路由器只有一个WAN口ip,那这样一个WAN口ip就对应着两个私网ip了,那查表就查不到目的地了。
linux网络ip及其他_第26张图片

这时候NAPT来解决这个问题了. 使用IP+port来建立这个关联关系
linux网络ip及其他_第27张图片
不仅仅是主机方面加了端口号,路由器方面也加了端口号。不过路由器的端口号是虚拟的(当然也有可能是真实的),最终目的只是为了建立唯一映射关系而已。

总结一下:知道建表的逻辑是用ip+port来建立唯一映射关系即可。具体细节不用知道。

NAT和代理服务器

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

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

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

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

的原理就是代理服务器:
linux网络ip及其他_第28张图片

正向代理和反向代理

正向代理是我要代理去帮我拿数据(本质还是从公网拿)。
反向代理是我自己去向代理拿数据(本质是从代理那拿)。

linux网络ip及其他_第29张图片
反向代理
linux网络ip及其他_第30张图片

总结一下:
正向代理用于请求的转发(例如借助代理绕过反爬虫).
反向代理往往作为一个缓存.(提高访问效率)

最后再梳理一下传输过程

linux网络ip及其他_第31张图片

你可能感兴趣的:(Linux,linux,网络协议,tcp)