计算机网络基础概述
网络层级结构设计的基本原则
计算机网络是使用分层来实现的。
分层设计的原则:
1.各层之间是相互独立的,这一层不需要知道下一层或者上一层是怎么实现的。即层与层之间耦合度是非常低的。
2.各层之间完全解耦
3. 每一层要有足够的灵活性
OSI七层模型
由上到下是:
应用层(为计算机用户提供接口和服务,应用层是直接面向用户的)
表示层(数据处理,如编码解码,加密解密)
会话层(管理(建立,维护,重连))通信会话
传输层(管理端到端的通信连接)
网络层(数据路由(决定数据在网络的路径))
数据链路层(管理相邻节点之间的数据通信)
物理层(数据通信的光电物理特性)
每一层都分别完成一个特定任务。
OSI最终没有成为广为使用的标准模型
TCP/IP四层模型
由上到下是:
应用层(相当于OSI模型中的应用层,表示层,会话层)
传输层
网络层
网络接口层(相当于OSI模型中的数据链路层和物理层)
TCP/IP四层模型才是现在广为使用的模型
之后的学习都是围绕着TCP/IP模型学习的
现代互联网的网络拓扑
Q:终端机器(如电脑,手机)是怎么连到另一台终端的
以家庭为例
终端通过有线或者无线的方式和路由器连接。
路由器连接当地的网关,一个网关可能和一个或多个路由器连接
网关连接较近的地区ISP
以企业为例
终端通过有线或者无线的方式和路由器连接。
路由器连接当地的网关,企业可能有多个路由器和多个网关,这些网关组成内部网关。还有一个统一网关,这个统一网关会收敛所有内部网关的连接,提供一个接口和地区ISP连接
多个地区ISP会连接到主干ISP,多个主干ISP通过国际路由器进行连接。
两台机器要经过多少路由器或者网关才能连接到要看两台机器的位置。
例如机器 A和B 隔得很近,甚至就是局域网中的两台机器,A只需通过一台路由器就能连接到B从而和B通信
如果 A和B 在中国深圳和美国纽约,那么就要经过路由器,中国的网关,国内地区ISP,中国主干ISP,国际路由器,美国的ISP,美国的网关,路由器,最后到B
以树状结构表示的话:
主干ISP在顶层,往下分支是地区ISP,再往下分支是公司,校园,家庭这样的边缘部分
PS:ISP(Internet Serveice Provider)网络服务提供商。如联通,电信和移动。
其中 地区ISP是指 广东联通,北京联通,湖南联通等
主干ISP指 中国联通,中国电信
按照地区范围可以将ISP分为大大小小的ISP。
国家与国家之间通信是通过国家之间的ISP连接做到的。
客户-服务器模式(C/S模式)
这也是我们最熟悉的模式。即客户端发送请求给服务器,服务器返回响应。客户端和服务端通过互联网连接起来(路由器,网关,ISP等)
对等连接模式(P2P模式)
通过互联网连接的两台主机不分谁是客户端谁是服务端。
==============================
计算机网络的性能指标
网络常用单位是 bps ,即 bit/s 每秒多少字节
时延:
网络中的时延包括四个:
1. 发送时延
发送时延 = 数据长度(bit)/发送速率(bit/s)
其中发送速率是指计算机网卡带宽
例如你要发送一个 100M 的视频。
你的带宽是1000Mbps
此时发送时延= 100*8/1000=0.8s
2. 传播时延
传播时延 = 传输路径距离/传播速率(bit/s)
其中传播速率不是由网卡,带宽决定的。而是由传输介质决定(光纤还是铜线)
传输距离,相同介质下,从北京传到深圳肯定比北京传到美国快
3. 排队时延
指数据包在网络设备中等待被处理的时间。因为数据从终端发送到路由器或者网关的时候,路由器不是马上处理你这个数据包,它会处理很多数据包,所以你这个数据包可能要排队等待,才会被处理,然后再发往下一个设备(如网关)
4.处理时延
处理数据包用的时间
总时延等于上述四个时延之和
往返时间(RTT)
RTT是数据报文在端到端通信中来回一次的时间。
通常可以通过ping查看RTT
RTT的长短也是取决于你的机器和目标机器的距离。
如果你在深圳,使用的是深圳的网络。此时你ping广州的一个IP会比ping一个北京的IP所花的RTT长
时延,RTT都是衡量网络性能的重要指标
===================================
下面将正式学习 TCP/IP四层模型 的每一层
A 物理层+数据链路层
物理层
作用:负责连接不同的物理设备,传输比特流(高低电平)
信道的基本概念:
信道是往一个方向传送信息的媒体
机器和机器连接的一条通信电路中包括一个接受信道和发送信道
信道包括:
单工通信信道:只能一个方向通信,没有反方向反馈的信道。例如有线电视,只能接受信号,不能发送信号。
半双工通信信道:双方都可以发送和接受消息,但是不能双方同时发送或同时接收。
全双工通信信道:双方都可以发送和接受消息,双方能同时发送或同时接收。
分用-复用技术
我们知道机器与机器间它们的底层是通过信道来进行通信的。
但是现实中有很多台机器,不可能每两台机器之间都有一条信道连接,这样线路会很复杂
因此提出了分用和复用的技术。
通信双方的机器共同连接分用器和复用器,分用器和复用器用一条信道进行发送和接受消息,就可以大大减少信道。
但是如果通信双方的多台计算机频繁通信就会造成拥塞,因为只有一条信道。
数据链路层
作用:
1.将数据封装成帧
帧是数据链路层数据的基本单位(可以理解为是数据链路层的报文)
发送端数据包经过数据链路层时会在数据前后添加特定的标记形成“帧”
数据包经过接收端数据链路层时会识别出帧
2.透明传输
3.差错检测
物理层只管传输比特流,无法检查数据在传输过程中是否有出错
数据链路层可以检测出数据从出发传到目的端过程中是否有出错
数据差错检测是在目的端的数据链路层中进行的
数据链路层是如何进行差错检测?
a.奇偶检验码
b.循环冗余校验码CRC
接收端机器的数据链路层只进行数据的检测,但不会进行错误纠正,而是将错误的数据直接抛弃。
MTU (最大传输单元)
数据链路层的数据帧不能是无限大的(数据帧是指数据链路层中数据头部的帧的长度+数据尾部的帧的长度+数据本身的长度)
数据帧过大或者过小都会影响传输效率
数据帧可以认为是要传输的数据的大小,而MTU是线路每次能传输的最大大小
如果数据帧大小超过MTU就要分多次传输。
以太网的MTU一般为1500字节
路径MTU:
不同路径的MTU不同,例如从机器A到机器B,要经过:
A --- 路由器1 --- 网关1 --- 网关2 --- 路由器2 --- B
经过5个路径
每个路径的MTU分别为 1500 1492 4464 1500 2000
此时整个线路的MTU(即路径MTU)由链路中MTU的最小值决定。
所以在这里的路径MTU是1492
PS:像电脑,手机这样的终端是七层都具备,但是路由器只有两层即数据链路层和物理层
以太网协议
以太网协议是数据链路层的一种协议
例子:
A,B,C三台机器,他们通过一个路由器就能够相互连接和通信。当A发送数据给B,是如何做到数据发给B而不是发给C的呢?
首先介绍一下
MAC地址(又称物理地址,硬件地址)
每一个设备都有唯一的MAC地址,MAC地址共有48位,一般使用十六进制表示,形如:50-E0-85-DF-5E-99 这个样子
在自己的电脑中可以通过 ipconfig /all 查看
PS:MAC地址不是指电脑这台机器的地址,而是这台电脑中的网卡这个硬件设备的物理地址。MAC地址不可改变,当这块网卡被生产下来后其MAC地址就已经被决定好了。
以太网(Ethenet)是一种广泛使用的局域网技术,也是一种应用于数据链路层的协议。
使用以太网可以完成相邻设备的数据帧传输(就是完成相邻设备的数据传输,数据帧就是数据+数据首位的帧而已)
以太网协议中的数据形式如下:
目的地址 原地址 类型 帧数据 CRC
长度 6字节 6字节 2字节 46~1500字节 4
数据的前12个字节分别记录了目的端的MAC地址和发送端的MAC地址。
帧数据才是真正的数据内容
MAC地址表
这个地址表有两个字段:MAC地址和硬件接口,呈映射关系
MAC地址 硬件接口
50-E0-85-DF-5E-99 接口1
51-E0-85-DF-5E-9C 接口2
43-EE-FA-82-4C-32 接口3
... ...
MAC地址表是存在路由器当中的 。
路由器会记录每一个连接它的设备(手机,电脑,或者其他路由器)的MAC地址和这个设备的接口。只要一个设备连接了这个路由器,路由器就会在MAC地址表中添加这个设备的MAC地址信息和硬件接口信息。
现在回到刚刚的问题:
A,B,C三台机器,他们连接着一个路由器,A发送数据给B,是如何做到数据发给B而不是发给C的呢?
过程如下:
A通过网卡发出数据包
数据包到达路由器,路由器取出数据的前六个字节得到目的机器B的MAC地址
路由器根据MAC地址表找到目的机器B的网络接口
数据就发送到了B
现在有一个稍微复杂的网络
A,D和F连接着路由器E,A和D是电脑,F是另一个路由器。
B和C两台电脑连接着路由器F
以太网协议只能让A节点通过E找到D和F,却无法直接找到C
这就是之前所说的以太网协议只能做到数据在相邻物理节点间的传输
网络层可以解决这个问题。
================================================
网络层
网络层之IP协议
1.虚拟互联网络
实际的计算机网络是错综复杂的
物理设备通过使用IP协议,屏蔽了物理网络之间的差异
当网络中的主机使用IP协议连接时,则无需关注网络细节
上面这三句话可能比较抽象。举个例子,
机器A想发数据给机器B,A和B之间不只有一条路相通。如下图:
比如 A是深圳机器,B是北京机器
A要发数据包给B,这个数据可以经过路由器M到达网关K,网关K再转发给上海联通,再转发给网关J,网关J再转发给路由器N,最后到达机器B。这是一条路。
也可以走另一条路
A要发数据包给B,这个数据可以经过路由器M到达一个中型网络,再转发到武汉联通的一个路由,再转发给网关X,再转发给路由器N,最后到达机器B。
类似这样的能让A的数据包到达B的路太多,所以计算机网络在物理层面上是很复杂的。
而我们无需关心A到底是走哪条路到达B的,无需理会A的数据包通过什么途径到达B。所以我们不必理会这么复杂的物理网络线路和其中的传输细节。
我们只需将A和B之间的线路当做是一个虚拟的互连网络。我们无需理会这个虚拟互连网络内部的细节,只需要知道A能通过这个网络连向B即可。如下图:
网络层的IP协议就可以是的复杂的实际网络变为一个虚拟互连的网络。
总的来说:IP协议的作用就是给每一个机器分配一个唯一地址,从而将一个IP地址的数据发送到另外一个IP地址所代表的设备。也就是说IP协议的作用就是让信息从一个机器准确传给另一个机器,而不会传错给其他机器。
IP协议
我们知道每一个机器(电脑,手机,路由器等等)都有一个唯一的MAC地址。它用二进制表示是一个48位的地址
而IP地址用二进制表示是一个32位的地址,不过我们习惯用点分十进制来表示:192.169.11.11
MAC地址是数据链路层中的地址;而IP地址是网络层中的地址。二者都是唯一地址。
二者的区别:
MAC地址不会变;IP地址受网络环境影响会变。
例如:一块网卡从一个电脑拆下来换到另一个电脑,其MAC地址不会变。一个手机在家上网和在公司上网其IP地址会变
由于IP地址用二进制表示是32位,所以最多可以有 2^32=43亿 的IP地址
IP协议规定的数据形式
IP数据报 = IP首部+IP数据报中的数据
IP首部中包含但不限于以下内容:
源IP地址,目的IP地址,生存时间TTL,协议,首部校验和,片偏移,版本,首部长度,总长度。
版本:记录着IP协议的版本是IPv4还是IPv6。IP协议版本相同才可以通信。所以IPv4的IP地址无法和IPv6的IP地址通信
首部长度:记录着IP首部的长度。IP首部长度最大为60个字节。所以IP首部最多可以记录60字节的信息。
总长度:记录IP数据报(IP首部+IP数据)总长,总长最多为65535个字节。
我们知道网络的最大传输单元MTU一般都是1500个字节。如果IP协议中的数据有65535个字节,远远超过了MTU的大小。此时IP报文数据会被切割分批传输。
片偏移:记录着这个IP报文是不是分批传输,是的话该IP报文是第几片。
生存时间TTL:是IP报文的寿命。这个TTL不是时间,而是次数。
每经过一个设备,TTL会-1,当TTL=0,网络设备会丢弃这个报文。
TTL的作用是,当报文在网络中找不到终点时,防止报文无限次传输而不停消耗带宽。TTL可以保证让报文在有限的传输次数内找到目的机器或者被丢弃。
协议:记录着这个IP数据所携带的是什么协议的数据。如TCP,UDP,ICMP,IP(IP数据中还可以继续封装IP报文)等。
首部校验和:用于校验IP首部是否出错,如果出错则直接丢弃报文
源IP地址和目的IP地址就不必说,就是发送端的IP和目的端的IP
IP协议的转发流程
逐跳(hop-by-hop)
A连接路由器X再连到B,A发送数据包给B的时候,是通过逐跳的方式转发的,数据包先跳到X,再跳到B。
路由表
路由表是工作在网络层的表(终端和路由器都有路由表)。
路由表有两个字段:目的IP地址和下一跳的IP地址
目的IP地址 下一跳的IP地址
IP1 IP4
IP2 IP5
IP3 IP6
......
IP协议的转发流程:
之前问过一个问题
A,D和F连接着路由器E,A和D是电脑,F是另一个路由器。
B和C两台电脑连接着路由器F。A如何将数据包发送给C?
仅从网络层来答:首先每一台机器都有自己的路由表
在A中,A指定目的IP为C的IP。
A在自己的路由表中,根据目的地址C的IP找到其下一跳的地址为E的IP
于是报文发到了路由器E。
在E的路由表中,根据目的地址C的IP找到其下一跳的地址为F。
于是报文发到了F。
在F同理,根据F的路由表和目的地址C的IP找到下一跳的地址为C的IP
最终报文达到C
上面的过程都是仅仅从网络层的层面解释的。因为路由表只在网络层存在。
从网络层+数据链路层来答:
我们知道在一个机器内,报文的加工是从上到下的。所以是先在网络层加工,后在数据链路层加工。
在机器A中:
网络层中,IP报文的IP首部的目的地址设为C的IP地址。查询路由表发现下一跳IP为E的IP,并根据E的IP查询ARP缓存表得到E的MAC地址
报文往A的下一层——数据链路层传输,在数据链路层将目的MAC地址设为E的MAC地址,源MAC地址为A
报文再往A的下一层物理层传输,在物理层变成一堆二进制
数据根据下一跳地址传向路由器E
----
在接收数据的时候,报文是从下到上传的,所以
在机器E中:
E的物理层接收到电平往上一层数据链路层传,再将帧数据交给网络层
在网络层,根据C的IP查询路由表找到下一跳IP为F的ip
E把数据报文传到数据链路层,在报文中设置目的MAC地址为F,源MAC地址为E
向F发送
-----
在机器F中,重复在机器E中的操作
在F中数据向上传到网络层后,查路由表找到下一跳为C
在数据链路层的报文中将目的MAC地址设为C的MAC地址
最后报文发到了C
在转发过程中,在数据帧(数据链路层中的报文形式)中每一跳的MAC地址都在发生变化,但是在IP数据报(网络层中的报文形式)中每一跳的IP地址始终不变。
======================================
ARP协议和RARP协议
ARP协议全称为 地址解析协议
其作用是将网络层的IP地址转化为数据链路层的MAC地址。
网络层有一个ARP缓存表,存储着多个机器的IP地址和MAC地址的映射关系。例如E的IP对应着E的MAC就可以在ARP缓存表查到。
这也是为什么在上面的例子中,A可以知道E的MAC地址。虽然A没有MAC表。但是A有路由表,可以根据路由表找到下一跳E的IP,并根据ARP表将E的IP地址转为MAC地址
有两种情况:
ARP表缓存了某机器的IP地址和MAC地址的映射关系
ARP表没有缓存某机器的IP地址和MAC地址的映射关系
ARP缓存表的记录不是永久有效的,是有有效期的。因为机器IP地址会随网络环境而变。
ARP协议虽然是网络层的内容,但是ARP协议的报文是直接封装在数据链路层的数据帧当中的。
RARP是 逆地址解析协议
就是将MAC地址解析为IP地址
=====================================
IP地址的子网划分
IP地址如何分类
将IP地址分为网络号和主机号,网络号+主机号=32位长度
A类地址:前8位为网络号,后24位为主机号的地址
B类地址:前16位为网络号,后16位为主机号的地址
C类地址:前24位为网络号,后8位为主机号的地址
其中:
A类地址的第一位一定是0
B类地址的前两位一定是10
C类地址的前三位一定是110
没有为什么,这是规定好的。
但是从这里我们能知道A,B和C三类地址的最小和最大网络号的范围。
比如:A类地址的第一位一定为0,所以,A类地址的网络号用二进制表示其范围是:00000000~01111111,换成10进制是 0~127
B类地址的前两位一定是10,所以B类地址的网络号用二进制表示其范围是:10000000.00000000~10111111.11111111(B类地址的网络号有16位),换成10进制是 128.0~191.255
C类地址的前两位一定是110,所以C类地址的网络号用二进制表示其范围是:11000000.00000000.00000000~11011111.11111111.11111111(C类地址的网络号有24位),换成10进制是 192.0.0~223.255.255
所以如果问1.2.3.4是哪一类IP,就知道是A类IP,因为其网络号是1,在0~127中
156.42.33.233是B类IP,因为其网络号 156.42在 128.0~191.255 之间。
特殊的主机号:
主机号全0的是当前网络段,不可分配为特定主机
主机号全1的是广播地址,用于向当前网络段所有主机发消息的
特殊的网络号
A类地址的网络段为0,127的都是特殊网络
B类地址网络段为128.0的是特殊网络
C类地址网络段为192.0.0是特殊网络
这几个网络段都是不可用的
所以A,B,C的最小网络号是1,128.1和192.0.1
A,B,C的最大网络号是127,191.255和223.255.255
A,B,C的IP范围是:1.0.0.1~127.255.255.254,128.1.0.1~191.255.255.254,192.0.1.1~223.255.255.254
判断IP地址是哪一类只需要看前八个位即可
回环地址(127.0.0.1)
这个地址不属于A,B,C类地址。它永远代表设备的本地虚拟接口,是永远不会宕掉的接口。
具有相同网络号的IP我们称这些IP是同一个网段内的IP。
例如:C类IP的前24位都是网络号,只有最后8位是主机号。
所以 192.10.10.1~192.10.10.254的IP都是同一网段的IP,因为这些IP的网络号相同。192.10.10.6和192.10.11.106是不同网段的IP,因为前者的网络号是192.10.10 后者的网络号是192.10.11
对于B类IP,它的前24位都是网络号, 所以像166.107.0.1~166.107.255.255 的IP都是属于一个网段内的IP,因为他们的网络号都是166.107
对于A类IP则以此类推
所以:C类IP的一个网段有2^8-2=256-2=254个IP
B类IP的一个网段有2^16-2=256-2=65534个IP
A类IP的一个网段有2^24-2=256-2=16777214个IP
以前一直以为 xxx.xxx.xxx.xxx 中前三个xxx相同才是同一网段。其实只有C类IP才是这样。B类和A类就不是这样。
同一网段的IP的通信更快
划分子网
一个问题:如果一个公司有100个员工,每人配备一个计算机,则公司应该申请哪类IP?
答:C类IP;因为C类IP的一个网段有254个IP>100,所以对于100个员工来说一个C类的网段的IP是够用的。
一个问题:如果一个公司有256个员工,每人配备一个计算机,则公司应该申请哪类IP?
答:B类IP;因为C类IP的一个网段不够。
可是B类IP的一个网段有65534个IP,远远大于256个IP,这样这个网段就有六万多个IP被浪费掉了。
可以通过划分子网的方式来解决这个问题。
可以将一个网段分为多个子网,那么计算机如何将一个网段划分为多个子网呢?
例如 193.10.10.0 这个网段,可以划分为
193.10.10.1~127 和 193.10.10.128~254 这两个子网
这样公司有100个员工,这个公司只需使用一个子网的IP就够了,就不用使用整个网段的IP数这么多。
一个网段可以分为多个子网,不一定只能划分为2个子网
子网掩码
子网掩码是一堆连续的1和0组成的32位的数字。子网掩码具有网络号位数个连续的1
例如:A类IP的网络号是前8位,所以A类IP的子网掩码有8个1和24个0,化为10进制为:255.0.0.0
同理,B类IP的子网掩码是 255.255.0.0 ,C类IP的子网掩码是255.255.255.0
每个子网都有自己的子网掩码。例如 193.10.10.1~127 和 193.10.10.128~254 这两个子网的子网掩码分别是 255.255.255.0和255.255.255.128
子网掩码的作用是快速查询一个IP是属于哪个子网的(通过将要查询的IP和子网的子网掩码进行一个&运算)
无分类编址CIDR
CIDR没有A,B,C类网络号和子网的概念
CIDR将网络前缀相同的IP地址称为一个“CIDR地址块”
网络前缀是任意位数的。
此时IP的组成就相当于:
IP=网络前缀+主机号
使用斜线记法来划分网络前缀
例如: 193.10.10.129/25 这表示前25位是网络前缀,后七位是主机号
下划线部分都是网络前缀。
其中第25位为0和为1的就是两个不同的子网。
11000001.00001010.00001010.10000000=>193.10.10.128
11000001.00001010.00001010.01111111=>193.10.10.127
所以对于25位的网络前缀,xxx.xxx.xxx.0~127 就是一个子网,xxx.xxx.xxx.128~254 就是另一个子网
现在都是使用CIDR的方式来划分地址的。
现在回到最先的问题:如果一个公司有100个员工,每人配备一个计算机,则公司应该申请哪个网络段?
此时只需划分一个 以前25位为网络前缀的地址块给这个公司即可。
因为这个网络块的主机号有7位,主机数有2^7=128 个IP
拓展一下:
如果一个公司有200个员工,分为两个部门,每个部门100人,每人配备一个计算机,则公司应该申请哪个网络段?
此时只需划分一个 以前24位为网络前缀的地址块给这个公司,此时有2^8=256个IP可用。再将这个网络块划分为两个25位网络前缀的网络块给每个部门即可。
例如: 193.10.10.0/24 划分成两个25位网络前缀的网络块,这两个网络块分别是:193.10.10.0/25 和 193.10.10.128/25。
也就是说,总的地址块是:
193.10.10.1~254
两个小的地址块是:
193.10.10.1~193.10.10.127 和 193.10.10.128~193.10.10.254
===================================
网络地址转换技术(NAT技术)
ipv4的地址最多只有40多亿个,但是早期IP地址的不合理规划导致很多IP号浪费。
IP地址从另一个角度可以分为
内网地址和外网地址
内网地址是内部机构使用的如家庭内,公司内,避免与外网地址重复
外网地址是全球范围使用的
内网地址有分为3类
10.0.0.0~10.255.255.255 支持千万数量级设备(A类内网地址)
172.16.0.0~172.31.255.255 支持百万数量级设备(B类内网地址)
192.168.0.0~192.168.255.255 支持万数量级设备(C类内网地址)
在家庭或者公司的设备(电脑和手机)使用的都是上述这3类IP范围内的内网地址而不是外网地址。
一个外网地址下有多个内网地址。
例如173.195.171.151这个外网地址下有192.168.0.0~192.168.255.255范围的内网地址。
173.195.171.152这个外网地址下也有192.168.0.0~192.168.255.255范围的内网地址。
那么这两个外网地址分别可以支持数万的设备,保证这些设备被分配到一个独立的内网地址。
例如,某一个家庭有一家三口,家里没有电脑,每个人有一个手机。这三个人分别使用 192.168.2.10,192.168.2.11,192.168.2.12 这三个内网IP。另一户人家一家四口,分别使用192.168.2.13,192.168.2.14,192.168.2.15,192.168.2.16这四个内网IP。
这7个内网IP都是在173.195.171.151这个外网IP之下的。即多个内网地址共用一个外网地址
当这些内网IP的设备和外界其他设备同信时,其实是使用的同一个外网IP 173.195.171.151和外界同信,而不是直接让内网IP和外界通信。相当于数据的发送和接受要经过外网地址设备的转发。
端口
一个设备可能会有多个进程都会用到网络和外界进行通信。而一个进程会被分配一个端口作为这个进程和外界通信的接口。
当设备(内网IP为192.168.2.11,外网IP为173.195.171.151)的某个进程(使用端口6666)想和外界网络通信(例如一台手机使用浏览器访问淘宝官网假设访问的这个淘宝官网的IP是23.224.193.22),此时消息是从192.168.2.11:6666这个内网IP和端口发出,先发送到外网地址173.195.171.151所在的路由器设备,路由器设备通过 173.195.171.151:16666 这个IP和端口将消息转发给淘宝网站服务器。
接收消息的时候也是路由器(173.195.171.151:16666)先接收,再将消息转发会给192.168.2.11:6666这个设备的这个端口。
这种网络地址转换技术即使NAT技术。
用学术性的表达可以表达为:
NAT技术是一种在IP数据包通过路由器或防火墙时重写来源IP地址的技术。这种技术被普遍使用在有多台主机但只通过一个公有IP地址访问因特网的私有网络中。
其原理是内网IP的消息在路由器被转发时,路由器替换IP报文头部的地址信息为外网IP的IP地址。
NAT技术好处是扩展了IP的个数,让设备有足够多的IP可以分配。
坏处是让主机之间的通信变得复杂,导致了通信效率的降低。
=======================================
ICMP协议
又称网络控制报文协议。
ICMP协议可以报告错误信息。
ICMP协议是封装在IP数据报的数据中的。包括ICMP报文首部和ICMP报文数据
ICMP报文的内容是错误报告或者询问报文
ICMP协议的应用
1.Ping应用
使用ping时,其ICMP的报文是询问报文。
通常ping会按顺序ping 3个地址:
a. ping 127.0.0.1 ping本机地址可以排查系统的网络协议是否正确。如果ping不通,请重装系统
b. ping 网关地址(即路由器地址,网关可以看出是一个大点的路由器)
如果ping不通,说明网线没接好或者路由器没插好电源
c. ping 远端地址 例如 ping www.baidu.com
可以检测这个远程地址是否能够通信,以及通信的快慢
2.Traceroute应用
Traceroute可以探测IP数据包在网络中走过的路径
执行 traceroute www.baidu.com 会返回从本机IP到百度服务器IP过程中途径的IP。
===============================================
网络层的路由
路由器中有一个路由表记录着目的IP和下一跳IP的映射关系。
但是路由表中,下一跳地址是怎么来的
下一跳地址是不是唯一的
下一条地址是不是最佳的
路由器这么多,他们是怎么协调的
需要一个好的算法去解决这些事
我们可以使用图来描述一个网络。
其中一个顶点是一个网络,路由器或者计算机
每一条变代表一条网络路径
路由的算法实际上是图论的算法。
自治系统(AS)
一个AS是处于一个管理机构下(一个国家或一个城市或者一个学校或一个公司等)的网络设备群
AS内部网络自行管理,AS对外提供一个或者多个出口入口
自治系统内部路由的协议成为:内部网关协议
自治系统外部路由的协议成为:外部网关协议
关于内部网关协议和外部网关协议的部分这里略过