技术标签: 网络 1024程序员节 网络协议 tcp/ip 计算机网络
要回顾就详细地回顾,打破砂锅问到底 = 爽!
推荐想继续再深入的可以再看看《计算机网络-自顶向下方法》和《TCP/IP详解卷1:协议》,后续看情况也会整理对应的笔记。
网络中的核心部分要向网络边缘中的大量主机提供连通性,使边缘部分中的任何一个主机都能够向其他主机通信(即传送或接收各种形式的数据)
建立连接(申请占用通信资源:例如拨号)-> 通话(一直占用通信资源) -> 释放连接(释放通信资源);适合数据量很大的实时性通讯传输,核心路由器之间可以使用电路交换,建立连接后,一次性发送所有数据。
和分组交换类似,都需要写地址,不过报文一般比分组长的多,因为不分段,同时报文交换的时延很长。每个中间路由器需要重新发送整个完整的报文。
假如报文很长,所以分成几个段来分开发送
每个段都必须要有地址,收到后肯定无需地址了
接收到数据,把首部全部去掉,然后将这几段重新组合,就是原来完整的报文
将报文拆分成多个分组后,每个中间路由器需要重新发送整个完整的分组。由于分组更小,时延也就更小。
(理想情况下,比如一个报文平均分4分,从起点到终点,中间需要经过2路由时,那么第一个路由收到分组1,马上接收分组2,并且把分组1发送到第二个中间路由器。)
netstat /?
这条命令来查询ping www.baidu.com
查看返回时间物理层解决如何在连接各种计算机的传输媒体上传输数据比特流的问题,而不是值具体的传输媒体
物理层的主要任务描述为:确定与传输媒体的接口的一些特性,即:
码元 ,就这种上下垂直的波状的图,与模拟信号那种连续的波状不同
┏━━┓ ┏━━┓ ┏━━┓
┃ ┃▁▁┃ ┃▁▁┃ ┃
问:数字信号与模拟信号的区别是什么?
其实最明显的区别就是数字信号是离散变化的,模拟信号是连续的;
数字信号的改变没有体现中间过程的弧线,就是垂直的上凸下凹的图,或者纯数字;
模拟信号的改变能体现中间变化过程,是连续的弯曲弧状波形,需要采样、量化才能转化成数字信号。
数字信号的抗干扰性强,就算波形变化大,只要能判断是凹还是凸即可分辨出01,而模拟信号不能直接根据凹凸情况判断01,如果波形变化大,就更容易失真了。
只有模拟信号才有码元的概念吗?
首先自然界是没有数字信号的,数字信号是为了处理器处理而出现的,所以要先对模拟信号采样得到数字信号,模拟信号转数字信号要经过:采样-量化-编码,再将得到的数字信号按需要处理后转回模拟信号,编码就是对量化后的电平用编码形式表示称为码元,奈奎斯特定律说明了采样要求,当采样频率 f s m a x f_{smax} fsmax大于信号中最高频率 f h m a x f_{hmax} fhmax的2倍时,采样之后的数字信号完整包含了模拟信息,才不会发生频谱混叠
基带信号(即基本频带信号)—— 来自信源的信号(没有经过任何处理的信号)。像计算机输出的代表各种文字或图像文件的数据信号都属于基带信号。基带信号就是发出的直接表达了要传输的信息的信号,比如我们说话的声波就是基带信号
基带信号往往包含有较多的低频成分,甚至有直流成分,而许多信道并不能传输这种低频分量或直流分量。因此必须对基带信号进行调制 ( m o d u l a t i o n modulation modulation)
因为基带信号通常传的不远(类似我们的声音,传的不是很远),如果要传的远的,就需要调制
调制分为两大类:
由于在近距离范围内基带信号的衰减不大,从而信号内容不会发生变化,因此在传输距离较近时,计算机网络都采用基带传输方式。如从计算机到显示器、打印机等外设的信号就是基带传输的
高频(HF,High frequency):是频率在3 ~ 30MHz 之间的信号频率,这只是对高频的狭隘理解。而高频是包括3MHz到X00GHz的频率范围都可以称为高频。
低频(LF,Low frequency):是指频带由30 KHz到300 KHz的无线电电波。
频率越高,传输损耗越大(比如穿透墙壁损耗能量大,导致最后获取到的信号基本是那少部分衍射、反射过来的信号),覆盖距离越小,绕射能力越弱(原理是衍射)。
低频段资源紧张,低频段的无线电波主要用于广播、点视、寻呼等系统。
从信号波形中可以看出,曼彻斯特 ( M a n c h e s t e r Manchester Manchester) 编码和差分曼彻斯特编码产生的信号频率比不归零制高。
从自同步能力来看,不归零制不能从信号波形本身中提取信号时钟频率(这叫做没有自同步能力),而曼彻斯特编码和差分曼彻斯特编码具有自同步能力。
奈氏准则:在任何信道中,码元传输的速率是有上限的,否则就会出现码间串扰的问题,使接收端对码元的判决(即识别)成为不可能。(比如录音后,3倍速播放,就听不清楚)
公式为:
理想低通信道的最高码元传输速率 = 2 W B a u d 理想低通信道的最高码元传输速率 = 2W Baud 理想低通信道的最高码元传输速率=2WBaud
+ W W W是理想低通信道的带宽,单位 H Z HZ HZ
+ B a u d Baud Baud是波特,是码元传输速率的单位(若一个码元含有n个bit的信息量,那么 1 B a u d = n b i t / s 1Baud = n bit/s 1Baud=nbit/s)
波特 B a u d Baud Baud与 b i t bit bit的区别:在调制解调器中经常用到波特 B a u d Baud Baud这个概念。bit是信息量,如果一个码元含有3个 b i t bit bit信息量,那么这个时候 1 波特 B a u d = 3 b i t / s 1波特Baud=3bit/s 1波特Baud=3bit/s。(比如光猫->光调制解调器,PC把数字信号通过光猫转模拟信号到网络传输,光猫在把接收到的模拟信号转回数字信号传到PC)
香农(Shannon) 用信息论的理论推导出了带宽受限且有高斯白噪声干扰的信道的极限、无差错的信息传输速率。 信道的极限信息传输速率(单位 b / s ): C = W l o g 2 ( 1 + S / N ) 信道的极限信息传输速率(单位b/s):C=Wlog_2(1+S/N) 信道的极限信息传输速率(单位b/s):C=Wlog2(1+S/N)
香农公式标明:(土话说就是,周围噪音大的时候,语速放慢勉强能听清楚,语速足够慢,总能听清。比如你边放音乐边讲话,别人0.5倍速听你的讲话录音能勉强听清楚)
奈氏准则讲的是在没有干扰的情况下的传输速率,香农公式讲的是再有噪声的传输情况下的定理。噪声越大传输越慢
{1}输入信息->{2}[[源点]]->{3}输入数据(数字信号)->{4}[[发送器(调制)]]->{5}发送信号(模拟信号)=>{6}[[传输系统]]=>{7}接收信号(模拟信号)->{8}[[接收器(解调)]]->{9}输出数据(数字信号)->{10}[[终点]]->{11}输出信息
{5}~{7},码元传输速率受奈氏准则的限制(只作用于模拟信号)
{3}~{9},信息传输速率受香农公式的限制(作用于数字信号、模拟信号)
奈氏准则:作用于模拟信号(信道上的码元传输,前面说过了,码元即使用时间域的波形来表示数字信号,代表不同离散数数值的基本波形就是码元。)
香农公式:作用于数字信号和模拟信号
实际上,单模光纤和多模光纤的不同点,即纤芯直径大小,单模细、多模粗。在有线点视网络中使用的光纤全是单模光纤,其传播特性好,带宽可达 10 G H Z 10GHZ 10GHZ,可以在一根光纤中传输60套 P A L − D PAL-D PAL−D 电视节目。
非导向(引)传输媒体
非导向传输媒体就是指自由空间,其中的电磁波传输被称为无线传输。无线传输所使用的频段很广。
假如ABCD连接Hub,那么A->B的数据,并不判断信号从哪来到哪去,B、C、D都会收到。一方面阻塞其他主机的传输线路,一方面其他主机若主动抓包数据会导致信息泄露。如果集线器总带宽12M,那么这里ABCD平均带宽只有3M。
举个例子:信道复用,就是整个通道的流量20G,然后只有一个人打电话,目前是用了4K,绰绰有余了,要把这些流量全部占完利用起来,就必须使用信道复用
不同的基带模拟信号通过不同调制器( m o d u l a t o r modulator modulator)进行调制,调成高频信号后,和其他载波调制后的高频信号合并后传输。由于合并前,每个信号所使用的频带不同,获取方根据不同的调制器针对不同频带解调,既可获取之前传输的基带模拟信号。
不同频段不同用户
时分复用则是将时间划分为一段段等长的时分复用帧(TDM帧)。每一个时分复用的用户在每一个 TDM 帧中占用固定序号的时隙。
每一个用户所占用的时隙是周期性地出现(其周期就是TDM帧的长度)的。
TDM 信号也称为等时 ( i s o c h r o n o u s isochronous isochronous) 信号。
时分复用的所有用户在不同的时间占用同样的频带宽度。(可能会造成线路资源的浪费,因为即时某几个用户不交互数据了, 依旧占有时间片)
同一频段下,不同时间片不同用户
根据用户实际需要动态分配线路资源的时分复用方法。只有当用户有数据要传输时才给他分配线路资源,当用户暂停发送数据时,不给他分配线路资源,线路的传输能力可以被其他用户使用。采用统计时分复用时,每个用户的数据传输速率可以高于平均速率,最高可达到线路总的传输能力。
码分复用是CDM,常用的名词是码分多址 CDMA (Code Division Multiple Access)。联通电信手机通信、打电话的时候就是码分复用,使用的是同一个频率。
各用户使用经过特殊挑选的不同码型,因此彼此不会造成干扰。
这种系统发送的信号有很强的抗干扰能力,其频谱类似于白噪声,不易被敌人发现。
每一个比特时间划分为 m m m个短的间隔,称为码片( c h i p chip chip)。
(原本 1 b i t 1bit 1bit数据 0 o r 1 0or1 0or1需要至少 m m m个 b i t bit bit去表示。码分复用也是类似频分复用一样,多个用户只要码型不同,发送的数据叠加后在网络传输,也能再根据不同的码型还原回原本的数据)
多址技术是指实现小区内多用户之间,小区内外多用户之间通信地址识别的技术。多址技术多用于无线通信。多址技术又称为多址接入技术。
时分多址是以不同时隙实现通信。码分多址是以不同的代码序列来实现通信的。空分多址是以不同方位信息实现多址通信的。
脉码调制PCM体制最初是在电话局之间的中继线上传送多路电话
由于历史上的原理,PCM有两个互不兼容的国际标准,北美的24路PCM(简称T1)和欧洲的30路PCM(简称E1)
我国采用欧洲E1标准
E1速率 2.048 M b / s 2.048Mb/s 2.048Mb/s,而T1速率是 1.544 M b / s 1.544Mb/s 1.544Mb/s
当需要更高的速率时,可采用复用的方法
用户要连接到互联网,必须先连接到某个ISP。
在互联网的发展初期,用户都是利用电话的用户线通过调制解调器连接到ISP的,电话用户线接入到互联网的速率最高仅达到56 kbit/s。
美国联邦通信委员会FCC原来认为只要双向速率之和超过200 kbit/s 就是宽带。但 2015 年重新定义为:
宽带下行速率要达到 25 M b i t / s Mbit/s Mbit/s
宽带上行速率要达到 3 M b i t / s Mbit/s Mbit/s
把现在的有线电视网进行改造,就给我们提供Internet接入服务了
HFC网采用结点体系结构(光纤同轴混合网HFC,Hybrid Fiber Coax)
HFC网是目前覆盖面很广的有线电视网CATV的基础上开发的一种居民宽带接入网
HFC网除可传送CATV外,还提供电话、数据和其他宽带交互性业务
现有额CATV网是树形拓扑结构的同轴电缆网络,它采用模拟技术的频分复用对电视节目进行单向传输。而HFC网则需要对CATV网进行改造
FTTx(光纤到…)也是一种实现宽带居民接入网的方案。(x可代表不同意思)
层次上看数据流动,那么只有主机H1和主机H2需要经过TCP/IP五层网络模型,而中间存储和转发的路由器 R 1 R 3 R1~R3 R1 R3仅经过三层(物理层、数据链路层、网络层)
在数据链路层,我们只关心数据帧的传输,只关心如何封装,如何传到这个点的,不关心下层物理层采用的传输介质是双绞线、同轴电缆、光纤还是其他,也不关心其信道复用技术采用的是频分多路复用FDM、时分复用TDM、统计时分复用STDM、波分复用WDM、码分多址CDMA还是其他
(帧头)(帧数据部分,受MTU限制大小<=1500字节【以太网标准】)(帧尾FCS)
中间的帧数据部分,用于封装上层网络层的IP数据报(或其他网络层数据)。
关于封装成帧,比如说话,一句一句的说,这叫一句话一个帧,必须知道开始和结束,标记是什么
(帧头帧尾限界处的字节数据,通常是不可打印的控制字符,尽可能地避免和帧数据部分的内容冲突。)
(接收端数据链路层,根据首部和尾部的标记,从(物理层)比特流中识别帧的开始和结束。)
(当然不止如此,不同的数据链路层协议的数据帧的帧头和帧尾的功能不尽相同,通常帧尾内还包括FCS,用于判别数据是否在传输时出现错误)
思考问题:
如果帧未发送完,发送端除了问题,只能重发该帧。接收端却接受到了“半截子帧”,它回抛弃吗?为什么?
答:不管是接收到含有帧头(SOH)的前半部分“子帧”还是接受到含有帧尾(EOT)的后半部分“子帧”,由于不是一个完整的帧,数据链路层都会抛弃该帧。只有完整地含有帧头(SOH)帧尾(EOT)的帧,才会被保留
若传输的数据是ASCII码中的“可打印字符(共95个)”集时,帧头帧尾的识别不会出现问题。
若传输的数据不是仅由“可打印字符”组成时,就会出现问题。
eg:【帧头SOH】(帧数据部分…EOT…)【帧尾EOT】 该帧被接收端接收时,会将帧数据部分含有的EOT字符识别成帧尾,导致后面的所有数据被当作无效帧而丢弃。=> 接收端接收【帧头SOH】…EOT,舍弃…【帧尾EOT】。
帧在传输过程中,可能产生比特差错:1可能会变成0,而0也可能会变成1。(根据前面物理层的知识,可以猜想是电压突然出现问题,或者高频信号在空气或其他介质中传输收到噪音干扰,等)
在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(Bit Error Rate)
误码率与信噪比有很大的关系。(信噪比SNR,SIGNAL-NOISE RATIO,物理层知识,S/N,S为信道内传输信号的平均功率,N为信道内部的高斯噪音功率,越高越好)
为了保证数据传输的可靠性(比如纠错,或者丢失重传等措施,这些实际由上层协议保证。),在计算机网络传输数据时,必须采用各种差错检测措施
(数据链路层只检查出错误帧并丢弃,不纠错,不重传。纠错和重传等其他动作,由上层协议实现。上层对被丢弃的帧无感知。)
应对手段
在帧尾加入冗余校验码FCS
在数据链路层传送的帧中,广泛使用了循环冗余检验CRC技术。(只是其中一种生成FCS的技术)
在发送端,先把数据划分为组。假定每组k个比特。假设带传送的一组数据M=101001(现在k=6)。我们在M的后面再添加供差错检测用的n位冗余码一起发送。
FCS( f r a m e frame frame c h e c k check check s e q u e n c e sequence sequence)帧检验序列的CRC计算方式
(CRC的除数P和冗余码位数n由数据链路层协议商定,无需用户自己指定,理论上除数位数越多相对越可靠。大致知道计算方式即可)
计算出来的余数就是帧检验序列FCS
在数据后面添加上的冗余码称为帧检验序列FCS(Frame Check Sequence)
循环冗余检验CRC(Cyclic Redundancy Check)和帧检验序列FCS并不等同
小结:CRC差错检验技术(其实前面也都讲得很详细了,这里就再总结一下)
仅用循环冗余检验CRC差错检测技术只能做到无差错接受(accept)
(当然这个只是理想情况,实际就算加了FCS字段,出现数据错误时也可能正好接收端FCS检验计算出来余数也是0–>0表示数据无出错,只不过概率很小。)
要做到“可靠传输”(即发送什么就收到什么),就必须再加上确认和重传机制
考虑:帧重复、帧丢失、帧乱序的情况
可以说“CRC是一种无比特差错,而不是无传输差错的检验机制”,(OSI/RM模型的观点:数据链路层要做到无传输差错。)实际上,无线传输时就会考虑在数据链路层实现无传输差错,而有线传输通常只做到无比特差错
广泛使用于拨号上网
对于点对点的链路,目前使用得最广泛的数据链路层协议是点对点协议 PPP (Point-to-Point Protocol)
PPP 协议在 1994 年就已成为互联网的正式标准
当用户拨号接入 ISP 时,路由器的调制解调器对拨号做出确认,并建立一条物理连接(底层up)。PC 机向路由器发送一系列的 LCP 分组(封装成多个 PPP 帧)
这些分组及其响应选择一些 PPP 参数,和进行网络层配置(此前如有PAP或CHAP验证先要通过验证),NCP 给新接入的 PC机分配一个临时的 IP 地址,使 PC 机成为因特网上的一个主机
通信完毕时,NCP 释放网络层连接,收回原来分配出去的 IP 地址。接着,LCP 释放数据链路层连接。最后释放的是物理层的连接
PPP帧一般用于广域网,在以太网环境直接抓包抓不到,一般在路由器要发送数据到其他路由上(ISP提供的节点)就自动封装成PPP帧再向外传输。所以要抓包PPP帧,得连线路由器,抓包路由器上的数据
现在全世界使用得最多的数据链路层协议,是点对点协议PPP(Point to Point Protocol)
用户使用拨号电话线接入因特网时,一般都是使用PPP协议
(补充下,前面物理层的ADSL早期也是用电话线上网,但是能够同时上网和讲电话(频段/频谱不同);而更早的拨号上网,如果打电话就不能上网,上网就不能打电话,会占用电话线。)
异步传输使用字节填充方法,同步传输使用零比特填充方法
简单——这是首要的要求
封装成帧(注意MTU限制)
透明性(透明传输,帧定界判别问题;异步线路用字节填充,同步线路用零比特填充)
多种网络层协议(会标识传输的帧数据部分是IP数据报、安全性认证PAP或者其他…)
多种类型链路(物理层兼容,光纤、同轴电缆、双绞线等)
差错检测(确保无差错接收,CRC等技术)
检测连接状态(比如拨号上网,返回各种网络状态信息)
最大传输单元(MTU,以太网的标准是<=1500Byte)
网络层地址协商(比如拨号上网后,分配IP地址)
数据压缩协商(比如多个0或者多个1协商怎么简写表示,然后接收后再还原)
PPP采用7EH作为一帧的开始和结束标志(F);其中地址域(A)和控制域(C)取固定值(A=FFH,C=03H) ;协议域(两个字节)取0021H表示IP分组,取8021H表示网络控制数据,取C021H表示链路控制数据;帧校验域(FCS)也为两个字节,它用于对信息域的校验。若信息域中出现7EH,则转换为(7DH,5EH)两个字符。当信息域出现7DH时,则转换为(7DH,5DH)。当信息流中出现ASCII码的控制字符(即小于20H),即在该字符前加入一个7DH字符
字节数据 | 表示类型 |
---|---|
0x0021 | PPP帧的信息字段,IP数据报 |
0xC021 | 信息字段是PPP链路控制数据 |
0x8021 | 表示这是网络控制数据 |
0xC023 | 信息字段是安全性认证PAP |
0xC025 | 信息字段是LQR |
0xC223 | 信息字段是安全性认证CHAP |
当 PPP 用在异步传输时,就使用一种特殊的字符填充法
当 PPP 用在同步传输链路时,协议规定采用硬件来完成比特填充(和 HDLC 的做法一样)
问题:信息字段中出现标志字段的值,可能被误认为是“标志字段”,如何处理?
这里传的是比特流了,这样传的长度就不一定是8的倍数了(一个字节8bits)
PPP协议用在 SONET/SDH 链路时,是使用同步传输(一连串的比特连续传送)。这时PPP协议采用零比特填充法实现透明传输
在发送端,只要发现有5个连续1,则立即填入一个0,这样就不会出现 7 E 7E 7E了,就不会出现误判结束与开始了,接收端对帧中的比特进行扫描。每当发现5个连续的1时,就把这5个连续1后的一个0删除
因为扫描的时候是碰见五个连续的1就加0,这样好理解一点
字节填充针对传输字节的情况,零比特填充针对传输比特的情况
错了就扔掉,不要求纠错,不要求重传
可见,PPP 协议已不是纯粹的数据链路层的协议,它还包含了物理层和网络层的内容。
Router1:
hostname router1
username router2 password xxx
interface Serial0
ip address 192.168.16.1 255.255.255.0
clockrate 1000000
ppp authentication chap
Router2:
hostname router2
username router1 password xxx
interface Serial0
ip address 192.168.16.2 255.255.255.0
ppp authentication chap
PPPoE(英语:Point-to-Point Protocol Over Ethernet),以太网上的点对点协议,是将点对点协议(PPP)封装在以太网(Ethernet)框架中的一种网络隧道协议。由于协议中集成PPP协议,所以实现出传统以太网不能提供的身份验证、加密以及压缩等功能,也可用于缆线调制解调器(cable modem)和数字用户线路(DSL)等以以太网协议向用户提供接入服务的协议体系。
拓扑的意思就是说其在物理上是如何连接的
(花钱租用别人的链路,比如通过电信的ADSL技术,比如和邻居都付钱买了电信的宽带,就算面对面聊天,都是广域网;但是如果你们无线AP,用网线连起来了,就算隔着100迷,还是局域网,所以广域网就算花钱租带宽。还有广域网肯定就不广播了,不然要是大家都广播,带宽就被占满了。不过也有黑客用DOS或者DDOS强行占满攻击目标的带宽,使攻击目标网络瘫痪或者无法正常处理请求。)
静态划分信道:
动态媒体接入控制(多点接入):
(连接总线的主机通信时占用整个线路,单通道,不存在使用信道复用技术)
(其他的主机其实也接收到数据帧了,不过判断目的地址与自己不同,就丢弃了。所以如果在这里强行抓包,是可以获取到数据的–>存在数据泄露的安全问题)
(其实就是,不管谁发数据,总线上都广播该数据,霸占整个线路。早期这种)
"多点接入"表示许多计算机以多点接入的方式连接在一根总线上
"载波监听"是指每一个站在发送数据之前先要检测一下总线上是否有其他计算机在发送数据,如果有,则暂时不要发送数据,以免碰撞
"碰撞检测"就是用电子技术检测总线上有没有其他计算机发送的数据信号
“碰撞检测”就是计算机边发送数据边检测信道上的信号电压大小
检测到碰撞后
最先发送数据帧的站点,在发送数据帧后至多经过2τ(传播时延*2)就可以知道发送的数据帧是否遭到了碰撞。
以太网的争用期
最短有效帧长
最先发送数据帧的站,在发送数据帧后至多经过时间 2 τ τ τ (两倍的端到端往返时延)就可知道发送的数据帧是否遭受了碰撞。
以太网的端到端往返时延 2 τ τ τ 称为争用期,或碰撞窗口。
经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞。
10 Mbit/s 以太网取 51.2 μ s μs μs 为争用期的长度。
对于 10 Mbit/s 以太网,在争用期内可发送 512 bit,即 64 字节。
DIX Ethernet V2是世界上第一个局域网产品(以太网)的规约。
IEEE的802.3标准
DIX Ethernet V2标准与IEEE的802.3标准只有很小的差别,因此可以将802.3局域网简称为“以太网”。严格来说,"以太网"应当是指符合DIX Ethernet V2 标准的局域网。
为了让数据链路层能更好地适应多种局域网标准呢,802委员会局域网的数据链路层拆分成两个子层:
与接入到传输媒体有关的内容基本都放在MAC子层,而LLC子层则与传输媒体无关,不管采用何种协议的局域网对LLC子层来说都是透明的。
由于TCP/IP体系经常使用的局域网是DIX Ethernet V2而不是802.3标准中的几种局域网,因此现在802委员会制定的逻辑链路控制子层LLC(即802.2标准)的作用已经不大了。
以太网提供的服务是不可靠的交付,即尽最大努力的交付。
当接收站受到有差错的数据帧时就丢弃此帧,其他什么也不做。差错纠正由高层来决定。
如果高层发现丢失了一些数据而进行重传,但以太网并不知道这是一个重传的帧,而是当作一个新的数据帧来发送。
概述如下:
集线器是使用电子器件来模拟实际电缆线的工作,因此整个系统仍然像一个传统的以太网那样运行。集线器使用了大规模集成电路芯片,因此这样的硬件设备的可靠性已大大提高了。
使用集线器的以太网在逻辑上仍然是一个总线网,各工作站使用的还是CSMA/CD协议,并共享逻辑上的总线。
集线器很像一个多接口的转发器,工作在物理层。
(集线器Hub没啥智商,受到流进某一接口的数据,就直接往集线器的其他Hub接口广播发送)
10BASE-T的通信距离稍短,每个站到集线器的距离不超过100m,这种10Mb/s速率的无屏蔽双绞线星形网的出现,既降低了成本,又提高了可靠性。
10BASE-T双绞线以太网的出现,是局域网发展史上一个非常重要的里程碑,它为以太网在局域网中的统治地位奠定了牢固的基础。
注意到,成功发送一个帧需要占用信道的时间是 T 0 + τ T_0 + τ T0+τ,比这个帧的发送时间要多一个单程端到端时延 τ τ τ
这是因为当一个站发送完最后一个比特时,这个比特还要在以太网上传播
在最极端的情况下,发送站在传输媒体的一端,而比特在媒体上传输到另一端所需的时间是 τ τ τ
所以要提高以太网的通信利用率,就必须减小 τ τ τ(传播时延)与 T 0 T_0 T0(发送时延)之比,因为时延越大,肯定利用率就越低了。在以太网中定义了参数 а а а,它是以太网单程端到端时延 τ τ τ与帧的发送时间 T 0 T_0 T0之比: а = τ T 0 а=\frac{τ}{T_0} а=T0τ
a > 0 a>0 a>0表示一发生碰撞就可以立即检测出来,并立即停止发送,因而信道利用率很高
a a a越大,表明争用期所占比例增大,每发生一次碰撞就浪费许多信道资源,使得信道利用率明显降低
对以太网参数的要求
信道利用率的最大值
(厂家标识符24bit | 商品编码24bit)大概这个样子。MAC在硬件出厂前就设置在硬件内了。
网卡芯片的MAC出厂固定不能修改,但我们可以制定计算机用我们自定义的MAC地址通讯,而不用网卡自带的MAC地址。
w i n 10 / 11 win10/11 win10/11通过CMD输入ipconfig /all可以查看MAC地址
适配器从网络上每收到一个MAC帧就首先用硬件检查MAC帧中的MAC地址
"发往本站的帧"包括以下三种帧:
常用的以太网MAC帧格式有两种标准:
最常用的MAC帧是以太网V2的格式
数据字段的正式名称是MAC客户数据字段(可封装IP数据报),最小长度64字节-18字节的首部和尾部=数据字段的最小长度(46字节)。当数据字段的长度小于46字节时,应在数据字段的后面加入整数字节的填充字段,以保证以太网的MAC帧不小于64字节
FCS字段4字节。当传输媒体的误码率为1\10-8时,MAC子层可使未检测到的差错小于110-14
在帧的前面插入的8字节中第一个字段共7个字节,是前同步码,用来迅速实现MAC帧的比特同步。第二个字段就是帧开始定界符,表示后面的信息就是MAC帧
由于以太网使用曼彻斯特编码(物理层、数字信号),其表示0和1时都有电平跳变,所以能够区分数据0和停止传输数据这两种情况。再加上以太网传输数据时有"帧间最小间隔"的限制,所以以太网传输MAC帧只需要告知帧开始定界符,而没必要告知帧结束定界符
有效的MAC帧长度为 64 − 1518 64-1518 64−1518字节之间。对于检查出的无效MAC帧就简单地丢弃,以太网不负责重传丢失的帧。
用集线器扩展局域网优点
用集线器扩展局域网的缺点
碰撞域增大了,但总的吞吐量并未提高。 (毕竟广播数据,占用总线)
如果不同的碰撞域使用不同的数据率,那么就不能用集线器将他们互连起来
在数据链路层扩展局域网是使用网桥
网桥工作在数据链路层,它根据MAC帧的目的地址对收到的帧进行转发。网桥具有过滤帧的功能。当网桥收到一个帧时,并不是向所有的接口转发此帧,而是先检查此帧的目的MAC地址,然后再确认将该帧转发到哪一个接口
好:
坏:
目前使用得最多的网桥就是透明网桥( t r a n s p a r e n t transparent transparent b r i d g e bridge bridge)
"透明"是指局域网上的站点并不知道所发送的帧将经过哪几个网桥,因为网桥对各站来说是看不见的。(反正网桥会学习MAC-端口表,用户无需参与学习过程。)
透明网桥是一种即插即用设备,其标准是IEEE 802.1D
按照以下自学习算法处理收到的帧和建立转发表
若从A发出的帧从接口x进入了某网桥,那么从这个接口出发沿相反方向一定可以把一个帧传送到A
网桥每收到一个帧,就记下其源地址和进入网桥的接口,作为转发表中的一个项目
在建立转发表时把帧首部中的源地址写在"地址"这一栏的下面
在转发帧时,则是根据收到的帧首部中的目的地址来转发的。这时就把"地址"栏下面已经记下的源地址当作目的地址,而把记下的地址直接当作转发接口
网桥在转发表中登记了以下三个信息
地址
接口
帧进入网桥的时间
这是因为以太网的拓扑可能经常会发生变化,站点也可能会更换适配器(这就改变了站点的地址)。另外,以太网上的工作站并非总是接通电源的。
把每个帧到达网桥的时间登记下来,就可以在转发表中只保留网络拓扑的最新状态信息。这样就使得网桥中的转发表能反应当前网络的最新拓扑状态。黑客可以利用这点搞ARP欺骗等,导致网络产生广播风暴,谁也别想上网。
网桥收到一帧后先进行自学习。查找转发表中与收到帧的源地址有无相匹配的项目。如没有,就在转发表中增加一个项目(源地址、进入的接口和时间)。如有,则把原有的项目进行更新。
转发帧。查找转发表中与收到帧的目的地址有无相匹配的项目
互联在一起的网桥在进行彼此通信后,就能找出原来的网络拓扑的一个子集。在这个子集里,整个连通的网络中不存在回路,即在任何两站之间只有一条路径
为了避免产生的转发的帧在网络中不断地兜圈子。(广播风暴)
为了得出能够反应网络拓扑发生变化时的生成树,在生成树上的根网桥每隔一段时间还要对生成树的拓扑进行更新
1990年问世的交换式集线器(switch hub),可明显地提高局域网的性能。
交换式集线器常被称为以太网交换机(switch)或第二层交换机(表明此交换机工作在数据链路层)。
以太网交换机通常都有十几个接口。因此,以太网交换机实质上就是一个多接口的网桥,可见交换机工作在数据链路层
交换机特点:
首先补充两个概念
网段(network segment) 一般指一个计算机网络中使用同一物理层设备(传输介质,中继器,集线器等)能够直接通讯的那一部分
在计算机网络中,一个二层网络可以被划分为多个不同的广播域,一个广播域对应了一个特定的用户组,默认情况下这些不同的广播域是相互隔离的。不同的广播域之间想要通信,需要通过一个或多个路由器。这样的一个广播域就称为VLAN
VLAN是在交换机组网才有的概念
交换机switch的使用使得VLAN的创建称为可能。(言外之意就是有了交换机后才有VLAN的概念)
虚拟局域网VLAN是由一些局域网网段构成的与物理位置无关的逻辑组。
虚拟局域网其实只是局域网给用户提供的一种服务,而并不是一种新型局域网
一个VLAN=一个广播域=逻辑网段(子网)
(交换机switch可以设置接口对应的VLAN,比如某交换机共24个接口,默认24个接口共同在一个默认的VLAN。如果我们手动修改,配置成后12个接口在新建的VLAN2里,那么连接前12接口的设备无法通过该交换机直接与后12接口的设备进行通讯)
通过VLAN能够有效的降低局域网的广播包,提升局域网的网络性能;划分VLAN需要通过支持命令行的二层交换机,普通交换机无法实现VLAN划分。
实现不同VLAN之间的访问,有两种方式:一种是通过三层交换机,通过默认网关的方式实现不同VLAN之间的访问;一种是通过路由器,利用路由器的子端口和默认路由的方式实现访问。
交换机的端口有两种类型:
交换机组件的网络,如果需要多个VLAN通过的链路就需要配置为干道链路。如果链路上只需要单一VLAN的数据通过就可以配置为访问链路。 (言外之意就是交换机连接交换机,不一定就是干道链路,因为接入层的交换机虽然接入汇聚层的交换机,但是其switch没有进行VLAN的划分,即属于一整个默认的VLAN。而假如另外三个接入层交换机各通过一条线接入汇聚层的交换机,且这三个交换机switch都平均分配自己的端口到VLAN1、VLAN2、VLAN3,那么他们接入汇聚层交换机的三条链路都是干道链路,需要通过统计时分复用STDM来共用带宽。)
I S L ISL ISL干道使 V L A N VLAN VLAN能够跨骨干
100Base-T以太网的物理层:
可在全双工方式(同时收发)下工作而无冲突发生。因此,不使用CSMA/CD协议
MAC帧格式仍然是802.3标准规定的。
保持最短帧长不变,但将一个网段的最大电缆长度减小到100m。帧间时间间隔从原来的9.6μs该为现在的0.96μs。
(可全双工,因为接口可缓存,有阻塞队列,所以收发不影响。)
允许在1Gb/s下全双工和半双工两种方式工作
使用802.3协议规定的帧格式
在半双工方式下使用CSMA/CD协议(全双工方式不需要使用CSMA/CD协议)
与10BASE-T和100BASE-T技术向后兼容
可以是光纤也可以是铜线
可以实现端到端的以太网传输
当吉比特以太网工作在全双工方式时(即通信双方可同时进行发送和接收数据),不使用载波延伸和分组突发
物理层:
1000BASE-SX SX表示短波长
1000BASE-LX LX表示长波长
1000BASE-CX CX表示铜线
10吉比特以太网与10Mb/s,100Mb/s和1Gb/s以太网的帧格式完全相同。
10吉比特以太网还保留了802.3标准规定的以太网最小和最大帧长,便于升级。(其实很多类似的,都是因为早期设定已经出了很多对应的设备和用于实际网络了,不方便改标准什么的,所以就沿用呗。)
10吉比特以太网不再使用铜线而只是用光纤作为传输媒体。
10吉比特以太网只工作在全双工方式,因为没有争用问题,也不使用CSMA/CD协议。
这种工作方式的好处是:
在计算机网络领域中,网络层应该向传输层提供怎么样的服务(“面向连接"还是"无连接”)曾引起了长期的争论。
争论焦点的实质就是:在计算机通信中,可靠交付应当由谁来负责?是网络还是端系统
两种服务:网络层应该向传输层提供怎么样的服务?
现一般认为,可靠性传输,需要端系统(传输层)去实现。网络中路由器丢包不要求上一个路由器重发。
只走自己配置好的这一条路,如果这条路断了就直接不走了,这就是虚电路服务
虚电路表示这只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,而并不是真正建立了一条物理连接
注意,电路交换的电话通信是先建立了一条真正的连接。因此分组交换的虚连接和电路交换的连接只是类似,完全不一样
假设有PC1+++++Router1、Router2、Router3++++++PC2,PC1连接到Router1~3,并且这些Router下一跳都是PC2。如果PC1和PC2建立虚连接时,采用PC1->Router3->PC2,那么之后PC1发送给PC2的所有分组都沿着这条虚电路传送(除非中间这个Router3与其中一方连接出问题,才会重新PC1才会重新和其他Router建立虚连接)
数据报服务就是数据包写上地址,从哪来到哪去,目标地址源地址是什么,沿着路径,由路由器来选择
网络层向上只提供简单灵活的、无连接的、尽最大努力交付(比如中间某路由缓存容量20分组,结果一瞬间收到100分组,只保留20个,其余直接丢弃,也不会叫上一个路由重传。)的数据报服务
网络在发送分组时,不需要先建立连接。每一个分组(即IP数据报)独立发送,与其前后的分组无关(不进行编号)
网络层不提供服务质量的承诺。即所传送的分组可能出错、丢失、重复和失序(不按序到达终点),当然也不保证分组传送的时限
尽最大努力交付的好处:
中间设备又称为中间系统或中继(relay)系统
网际协议IP是TCP/IP体系中两个最主要的协议之一。与IP协议配套使用的还有四个协议:
一般,ARP和RARP也被直接被合起来说成ARP(毕竟,ARP是知道IP获取MAC,而RARP是知道MAC获取IP,都是IP和MAC的对应问题)
网络地址(也可以称为网络号)唯一指定了每个网络。同一网络中的每台计算机都共享相同的网络地址,并用它作为自己IP地址的一部分
分类IP地址
每一类地址都由两个固定长度的字段组成,网络号(net-id)标识主机(或路由器)所连接到的网络,主机号(host-id)标识该主机(或路由器)。
两级的IP地址可以记为IP地址::={<网络号>,<主机号>}
A类地址(前8位主机号,0开头)1.0.0.0~126.255.255.255
B类地址(前16位主机号,10开头)128.0.0.0~191.255.255.255
C类地址(前24位主机号,110开头)192.0.0.0~223.255.255.255
D类地址(1110开头,组播地址也叫多播地址)224.0.0.0~239.255.255.255
E类地址(1111开头,保留研究用)240.0.0.0~255.255.255.255
只要看前4bit就可以区分IP地址类别了
常用的三种类别的IP地址
会告诉计算机哪些是网络部分哪些是主机部分
子网掩码( s u b n e t subnet subnet m a s k mask mask)又叫网络掩码、地址掩码,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分
如果一台计算机的IP地址配置为172.16.122.204,子网掩码为255.255.0.0。将其IP地址和子网掩码都写成二进制,进行与运算,即1和1与运算得1,0或1和0做与运算都得0。这样经过IP地址和子网掩码昨晚与运算后,主机位不管是什么值都归零,网络位得值保持不变,这样就得到该计算机所处的网段为172.16.0.0
综上,IP地址与子网掩码做与运算,主机位全归零,得到的就是网络部分
一个网段的情况:
(虽然路由器可以使用该网段的任何可用IP地址,为了避免该网段计算机的地址和路由器的地址冲突,一般路由器设置为该网段的第一个可用的IP地址或最后一个可用的IP地址)
A子网:192.168.0.0xxx,xxxx(可用主机号1~126,全0的0和全1的127舍去) (网关192.168.0.1,取第一个主机号)
B子网:192.168.0.1xxx,xxxx(可用的主机号129~254,全0的128和全1的255舍去) (网关192.168.0.129,取第一个主机号)
这样就分成了A与B两个子网
子网掩码:255.255.255.0 -> 255.255.255.128【1000,0000】
| A子网 | B子网 |
0-------128------255
每个子网是原本的1/2,子网掩码往右移动(右移就是除以2,就是1/2)一位(每后移动1位,划分1/2)
你看,未划分的时候,192.168.0.xxxxxxxx就是一个C类地址,默认的子网掩码就是255.255.255.0,现在你要将子网进行划分,所以子网掩码就必须向右移动一位,也就是255.255.255.128,相当于是原来的1/2
现在子网掩码再往后移动一位,所以就有00,01,10,11这四种可能了
A子网 192.168.0.[00…]
B子网 192.168.0.[01…]
C子网 192.168.0.[10…]
D子网 192.168.0.[11…]
子网掩码:255.255.255.0 -> 255.255.255.192【1100,0000】
| A子网 | B子网 | C子网 | D子网 |
0------64------128------192------255
A子网能用的地址:1~62,因为每一个分段前面的地址,是这一个网段的广播地址,所以64前面的63是广播地址,不能用
B子网能用的地址:65~126
C子网能用的地址:129~190
D子网能用的地址:193~254(最后一个因为255就是广播地址了,所以直接往前一位)
一定要写出第一个能用的地址到最后一个能用的地址这个区间,然后再说每一个网段的子网掩码是多少
每个子网是原来的1/2 * 1/2,子网掩码向右移动两位
现在是有三种情况了,子网掩码往后移动三位,也就是000,001,010,011,100,101,110,111
A子网 192.168.0.[000…]
B子网 192.168.0.[001…]
C子网 192.168.0.[010…]
D子网 192.168.0.[011…]
E子网 192.168.0.[100…]
F子网 192.168.0.[101…]
G子网 192.168.0.[110…]
H子网 192.168.0.[111…]
子网掩码:255.255.255.0 -> 255.255.255.224【1110,0000】
那么现在A子网是从1~30可用,大范围0~32,那么A子网的子网掩码是多少呢?
A这一段,是除以了三个2才划分得来的,所以子网掩码直接就是255.255.255.224(224就是11100000,因为除了3个2,每除一个2就往后移动一位)
划分不了的情况:
划分子网得遵循除以2的规律进行划分
200划分成50和150:0—128—255,150>128,不可能拆出某个>=150的子网
与等长基本一致
180划分成10,20,50,100
100<1281; 50<64; 20<32; 10 <16
0—128—255 (128~255给100)
0—64—128—255 (64~128给50)
0—32—64—128—255 (32~64给20)
0—16—32—64—128—255 (16~32给10)
判断192.168.201.168/30和192.168.201.169/30哪个是正常的主机地址
30说明只有后2位是主机号。22=4,得168/4余0,即168后两位是00,那么169后两位是01,由于主机号不能全0or全1,所以169才是正确的
判断192.168.0.67/26的子网掩码
64 < 67 < 128,0—[64—128]—192—255,向右移动2位,所以子网掩码是192.168.0.64(主机号全0)
子网掩码作用,与IP做与运算,判断目标地址和源地址是否同一网段(同一主机号),同一网段则直接ARP请求解析MAC地址,然后发送数据给对方;如果不同网段,则发送到默认网关(默认路由),访问其他网段(路由器根据路由表判断怎么走)
现有两计算机PC-A和PC-B分别连接到交换机Switch1和Switch2,且Switch1和Switch2相连(即数据链路层上,两计算机位于同一个网段)。Switch2连接Router。已知PC-A(IP:192.168.0.2;net mask:255.255.255.0;gateway:192.168.0.1),而PC-B(IP:192.168.1.2;net mask:255.255.255.0;gateway:192.168.1.1),由于主机号不同(网络层,A和B不在同一网段),导致A和B通讯还不能直接通过链路层交换机Switch就完成,必须再经过路由器。(理想:A->Switch1->Switch2->B;现实:A->Switch1->Switch2->Router->Switch2->B)
如何看两个计算机在不在一个网段? 将这两台计算机的子网掩码与IP地址分别进行与运算,看得出来的结果是不是一致,如果一致,则说明在同一个网段,就能通信,如果不一致,则不在一个网段
很明显本来两层(物理层、数据链路层)就能完成的通讯,现在变成三层(物理层、数据链路层、网络层),效率更低了。为解决这种问题,就需要超网,两个某类网络合并成一个网段
将两个PC的IP地址写成2进制形式,容易发现前23位数字相同(8+8+7),那么只要保留前23位作为网络号,后面不同的部分作为主机号即可,即修改两者的子网掩码为255.255.254.0。(子网掩码向前移动一位,网络号相同)
192.168.【0000 0000】.0
192.168.【0000 0001】.0
255.255.【1111 1111】.0
255.255.【1111 1110】.0 => 255.255.254.0
# 合并A和B子网后,新的子网掩码
IP地址与MAC地址应用:网络层及以上,使用IP地址;链路层及以下,使用硬件地址
M1~M6表示MAC地址,Router有两个接口对应不同MAC地址
PC1(M1) === Switch1 === Router1(M2,M3) === Router2(M4,M5) === Switch2 === PC2(M6)
PC1 ===> PC2 发送数据报,经过以下几个流程:
数据传输时,只有MAC的源地址和目的地址被修改(毕竟链路层就靠这个识别路径的),数据包是不会变的
MAC地址决定了下一跳给谁,IP地址决定了终点到哪去
交换机基于数据帧的MAC地址转发数据帧,路由器基于数据包的IP地址转发数据包
数据包在传输过程不变,过网络设备数据帧要用新的物理层地址重新封装
MAC地址决定了数据帧下一跳哪个设备接收,而IP地址决定了数据包的起点和终点
IP地址 ==> ARP == (IGMP组播) ==> 物理地址MAC
物理地址MAC ==> RARP == (IGMP组播) ==> IP地址
(所有的动态路由协议都属于IP协议)
(ARP协议存在重大安全隐患。ARP欺骗、中间人攻击等)
不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。
每一个主机都设有一个ARP高速缓存(ARP cache),里面由所在的就局域网上的各主机和路由器的IP地址到硬件地址的映射表
当主机A欲向本地局域网上的某个主机B发送IP数据报时,就现在其ARP高速缓存中查看有无主机B的IP地址。如有,就可查出其对应的硬件地址,在将此硬件地址写入MAC帧,然后通过局域网将该MAC帧发送此硬件地址。如果没,则广播ARP请求报文,正常情况下只有ARP的目的IP地址和自己相同的某个主机才会回应该ARP请求(同时把从ARP请求分组中的源IP和MAC地址加入或更新自己的ARP缓存),其他主机要是开启了ARP学习功能(如果本地没有该IP-MAC项,就新增),否则只要本地没有记录过该IP-MAC项(有的话就更新)则直接丢弃收到的ARP请求报文。收到ARP回应的原请求者,再把响应的IP和MAC加入到本地IP-MAC缓存中
(windows的cmd通过arp -a
查看arp缓存。可以看到IP广播255.255.255.255
IP地址对应帧广播的ff-ff-ff-ff-ff-ff
MAC地址)
为了减少网络上的通信量,主机A再发送其ARP请求分组时,就将自己的IP地址到硬件地址的映射写入到ARP请求分组
当主机B收到A的ARP请求分组时,就将主机A的这一地址映射写入主机B自己的ARP高速缓存中。这对主机B以后向A发送数据报就更方便了
ARP是解决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题,如果索要找的主机和源主机不在同一个局域网上,那么就要通过ARP找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。(代理ARP)
从IP地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的
只要主机或路由器要和本网络上的另一个已知IP地址的主机或路由进行通信,ARP协议就会自动地将将IP地址解析为链路层所需要的硬件地址
反向地址转换协议(RARP)允许局域网的物理机器从网关服务器的 ARP 表或者缓存上请求其 IP 地址。网络管理员在局域网网关路由器里创建一个表以映射物理地址(MAC)和与其对应的 IP 地址。当设置一台新的机器时,其 RARP 客户机程序需要向路由器上的 RARP 服务器请求相应的 IP 地址。假设在路由表中已经设置了一个记录,RARP 服务器将会返回 IP 地址给机器,此机器就会存储起来以便日后使用
RARP以与ARP相反的方式工作。RARP发出要反向解析的物理地址并希望返回其对应的IP地址,应答包括由能够提供所需信息的RARP服务器发出的IP地址。虽然发送方发出的是广播信息,RARP规定只有RARP服务器能产生应答。许多网络指定多个RARP服务器,这样做既是为了平衡负载也是为了作为出现问题时的备份
使只知道自己硬件地址的主机能够知道其IP地址。
虽然RARP在概念上很简单,但是一个RARP服务器的设计与系统相关而且比较复杂。相反,提供一个ARP服务器很简单,通常是TCP/IP在内核中实现的一部分。由于内核知道IP地址和硬件地址,因此当它收到一个询问IP地址的ARP请求时,只需用相应的硬件地址来提供应答就可以了
作为用户进程的RARP服务器的复杂性在于:服务器一般要为多个主机(网络上所有的无盘系统)提供硬件地址到IP地址的映射。该映射包含在一个磁盘文件中(在Unix系统中一般位于/etc/ethers目录中)。由于内核一般不读取和分析磁盘文件,因此RARP服务器的功能就由用户进程来提供,而不是作为内核的TCP/IP实现的一部分
更为复杂的是,RARP请求是作为一个特殊类型的以太网数据帧来传送的(帧类型字段值为0x8035)。这说明RARP服务器必须能够发送和接收这种类型的以太网数据帧。由于发送和接收这些数据帧与系统有关,因此RARP服务器的实现是与系统捆绑在一起的
每个网络有多个RARP服务器实现的一个复杂因素是RARP请求是在硬件层上进行广播的。这意味着它们不经过路由器进行转发。为了让无盘系统在RARP服务器关机的状态下也能引导,通常在一个网络上(例如一根电缆)要提供多个RARP服务器。当服务器的数目增加时(以提供冗余备份),网络流量也随之增加,因为每个服务器对每个RARP请求都要发送RARP应答。发送RARP请求的无盘系统一般采用最先收到的RARP应答。另外,还有一种可能发生的情况是每个RARP服务器同时应答,这样会增加以太网发生冲突的概率。
一个IP数据报由首部和数据两部分组成
首部前一部分是固定长度,共20字节,是所有IP数据报必须有的
在首部的固定部分的后面是一些可选字段,其长度是可变的
版本: 占4位,指IP协议的版本(IPv4还是IPv6)。通信双方使用的IP协议版本必须一致。广泛使用的IP协议版本号为4(即IPv4)。关于IPv6,还处于草案阶段
首部长度: 占4位,可表示的最大十进制数值是15。请注意,这个字段所表示数的单位是32位字长(1个32位字长是4字节),因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此数据部分永远在4字节的整数倍开始,这样在实现IP协议时较为方便。首部长度限制为60字节的缺点是有时可能不够用。但这样做是希望用户尽量减少开销。最常用的首部长度就是20字节(即首部长度为0101),这时不使用任何选项;还有就是首部有一部分是可变部分,可变部分有时多一点有时短一点,然后要告诉他首部有多长
区分服务: 占8位,用来获得更好的服务(让数据包打上一个标记,来告诉网络中传输的数据这个数据包在传的时候是着急还是不着急;所以总的来说,在计算机上配置数据包加标记再在沿途路由器上配置标记的先传,这就是区分服务,区分服务一定要和路由器的区分服务一块配)。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年IETF把这个字段改名为区分服务DS(Differentiated Services)。只有在使用区分服务时,这个字段才起作用。(数值越低,优先级越高。需要路由器也设置区分服务才有用。路由器收到区分服务250和区分服务100的两个数据报时,则优先处理、转发区分服务为100的数据报。一般情况下都不使用这个字段QoS服务质量)
总长度: 总长度指首部和数据部分之和的长度(数据包一共多大),单位为字节。总长度字段为16位,因此数据报的最大长度为 2 16 − 1 = 65535 2^{16}-1=65535 216−1=65535 字节
在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元MTU(Maximum Transfer Unit)。当一个数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值
标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个
标志字段中间的一位记为DF(Don’t Fragment),意思是“不能分片”。只有当DF=0时才允许分片
片偏移: 占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,除了最后一个分片,每个分片的长度一定是8字节(64位)的整数倍。
生存时间: 占8位,生存时间字段常用的的英文缩写是TTL(Time To Live),表明是数据报在网络中的寿命(每过一个路由器,这个TTL就减1,变成0之后,路由器就不转发了,这个包就往上消失)。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源。最初的设计是以秒作为TTL的单位。每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把TTL值减1。当TTL值为0时,就丢弃这个数据报。后来把TTL字段的功能改为“跳数限制”(但名称不变)。路由器在转发数据报之前就把TTL值减1.若TTL值减少到零,就丢弃这个数据报,不再转发。因此,TTL的单位不再是秒,而是跳数。TTL的意义是指明数据报在网络中至多可经过多少个路由器。显然,数据报在网络上经过的路由器的最大数值是255。若把TTL的初始值设为1,就表示这个数据报只能在本局域网中传送,。如果没有TTL,就代表这个数据包有可能不断被转发,永远到不了目的地
ping 地址 -i 1
,这样经过一个路由器,TTL = 0,然后这个路由器就会有回复了ping 地址 -i 2
就行,其他的以此类推就行(综上,可以用ping指令看看数据报传输时的TTL。pathping查看沿途经过的路由+分析丢包率)
首部检验和: 占16位。这个字段只检验数据报的首部(验证首部有没有错误),但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量
源地址: 占32位
目的地址: 占32位
可选字段(长度可变):
IP首部的可变部分就是一个可选字段。选项字段用来支持排错、测量以及安全等措施,内容很丰富。此字段的长度可变,从1个字节到40个字节不等,取决于所选择的项目。某些选项项目只需要1个字节,它只包括1个字节的选项代码。但还有些选项需要多个字节,这些选项一个个拼接起来,中间不需要有分隔符,最后用全0的填充字段补齐成为4字节的整数倍。
增加首部的可变部分是为了增加IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。实际上这些选项很少被使用。新的IP版本IPv6就将IP数据报的首部长度做成固定的。这些任选项定义如下:
安全和处理限制(用于军事领域)
记录路径(让每个路由器都记下它的IP地址)
时间戳(Time Stamp)(让每个路由器都记下IP数据报经过每一个路由器的IP地址和当地时间)
宽松的源站路由(Loose Source Route)(为数据报指定一系列必须经过的IP地址)
严格的源站路由(Strict Source Route)(与宽松的源站路由类似,但是要求只能经过指定的这些地址,不能经过其他的地址)
这些选项很少被使用,并非所有主机和路由器都支持这些选项
原则:有来有回
数据路由,路由器在不同网段转发数据包,跨网段通讯的都叫路由
那么怎么去呢?
沿途的路由器必须知道到目的网络下一跳给哪个接口
沿途的路由器必须知道到源网络下一跳给哪个接口
(windows使用route print查看路由表,arp -a查看mac高速缓存)
(一般局域网ping网关响应在10ms以内属于正常;ping外部网络IP如果经常是数百ms且偶尔丢包,则可能是网络阻塞。)
下面举例,某PC主机有两个网卡,分别配置一个默认路由,一个连接因特网,一个连接同一局域网环境的其他网段。
局域网其他网段----(eth0 配置了默认路由0)PC(eth1 配置了默认路由1)---- 因特网
此时 ping 因特网上某一服务器,会发现一次能通、一次不能通、一次能通、一次不能通,有规律地交替出现能通、不能通的情况。因为主机认为两个网关的路由配置权重相同,认为等价,所以轮流使用默认路由0、默认路由1访问外部网络。(50%丢包率)
如果PC只有一个网卡,且只有1默认路由,如果ping外部网络,偶尔出现一次丢包,而且每次成功的数据报响应都在几百ms,那么大概率是网络阻塞问题
en //进入特权模式
config t
show ip route //ip路由表
(config) #ip route 192.168.0.0 255.255.255.0 172.16.0.1 //告诉下一跳的地址,形成静态路由
//这里192.168.0.0不写主机号是因为路由器只认网段,所以不写主机号也没事
(config) #no ip route 192.168.0.0 255.255.255.0 172.16.0.1 //删除刚刚添加的地址
route print
可以查看路由表route add
ping /?
或 route /?
从数据报的首部提取目的主机的IP地址D,得出目的网络地址为N
若网络N与此路由器直接相连,则把数据报直接交付目标主机D;否则是间接交付,执行3
若路由表中有目的地址为D的特定主机路由,则把数据报传给路由表中指明的下一跳路由器;否则执行4
如路由表中有到达网络N的路由器,则把数据报传给路由表指明的下一跳路由器;否则,执行5
若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行6
报告转发分组出错。(ICMP)
一个CIDR地址块可以表示很多地址,这种地址得到聚合常称为路由聚合,它使得路由表中的一个项目可以表示很多个(例如上千个原来传统分类地址的路由)。
路由聚合也成为构成超网(suppernetting)。0100 0100
CIDR虽然不使用子网了,但仍然使用“掩码”这一名词(但不叫子网掩码)。对于/20地址快,它的掩码是20个连续的1。斜线记法的数字就是掩码中1的个数。
在使用CIDR时,路由表中的每个项目由“网络前缀”和”下一跳地址“组成。在查找路由表时可能会得到不止一个匹配结果。
应当从匹配结果中选择居于最长网络前缀的路由:最长前缀匹配(longest-prefix matching)。
网络前缀越长,其地址快越小,因而路由就越具体(more specific)。
最长前缀匹配又称为最长匹配或最佳匹配。
当路由表的项目数很大时,怎样设法减小路由表的查找时间就成为一个非常重要的问题
为了进行更加有效的查找,通常是将无分类地址的路由表存放在一个层次的数据结构中,然后自顶向下地按层次进行查找。这里最常用的就是二叉线索树(binary trie)。(IP地址32位,查找深度最多32)
IP地址中从左到右的比特值决定了从根节点逐层向下延伸的路径,而二叉线索中的各个路径就代表路由表中存放的各个地址
为了提高二叉线索的查找速度,广泛使用了各种压缩技术
# 二叉线索树与路由表查找举例
|-------------32位的IP地址-------------|唯一前缀|
01000110 00000000 00000000 00000000 0100
01010110 00000000 00000000 00000000 0101
01100001 00000000 00000000 00000000 011
10110000 00000010 00000000 00000000 10110
10111011 00001010 00000000 00000000 10111
向主机报告差错的,看网络有没有故障,就用 ICMP 协议
为了提高IP数据报交付成功的机会,在网际层使用了忘记控制报文协议ICMP(Internet Control Message Protocol)
ICMP允许主机或路由器报告差错情况或提供有关异常情况的报告
ICMP不是高层协议,而是IP层的协议
ICMP报文作为IP层数据报的数据, 加上数据报的首部,组曾IP数组报发送出去
ICMP报文的种类有两种,即ICMP差错报文和ICMP询问报文
ICMP报文的前4个字节是统一的格式,共有三个字段,即”类型“、代码和校验和。接着的4个字节的内容与ICMP的类型有关
差错报告报文有五种(细分的话不止,详情可百度):终点不可达、源点抑制(Source quench)(已弃用)、时间超过、参数问题、改变路由(重定向)(Redirect)
访问报文有两种(同样不止,详细百度):回送请求和回答报文,时间戳请求(弃用)和回答报文
举例:
A—>B发送ICMP访问报文时,若B发现检验和出现差错,丢弃该数据报,并会送ICMP差错报文。
A—>B ,IP数据报:【ip首部】【ICMP前8字节】【ICMP数据部分–无用】
B收到后,检查ip首部的校验和,发现出错,于是丢弃【ICMP数据部分】,在剩余的【ip首部】【ICMP前8字节】前面再添加新的【ICMP前8字节】和【IP首部】,原本的【ip首部】【ICMP前8字节】作为新的ICMP数据部分,整体封装成一个IP数据报回送。
B—>A,【IP首部】【ICMP前8字节】【ICMP数据部分(原本A—>B的ip首部、ICMP前8字节)】
路由信息协议RIP(Routing Information Protocol)是基于距离矢量算法的路由协议,利用跳数来作为计量标准。
在带宽、配置和管理方面要求较低,主要适合于规模较小的网络中。
RIP是互联网上最早的动态路由协议
RIP是一种分布式的基于距离向量的路由选择协议,周期性将自己的网段进行广播
最早
周期性广播30秒(广播告知邻居路由器到自己跳一次,邻居路由器告知下一个路由器,到自己1,到上一个路由器2…如果遇到重复的到X路由器,选择跳数最小的作为以后转发的路径,其余条数要求大的暂保留备用。)
跳数16(第16跳不可达,也就是路由器最多跳转15次)
Net1 ---- Router1 ---- Net2 ---- Router2 ---- Net3
N1 1 直接 N1 2 R1
N2 1 直接 N2 1 直接
N3 2 R2 N3 1 直接
RIP三要点:
OSPF(Open Shortest Path First开放式最短路径优先)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决策路由。是对链路状态路由协议的一种实现,隶属内部网关协议(IGP),故运作于自治系统内部。著名的迪克斯加算法被用来计算最短路径树。OSPF支持负载均衡和基于服务类型的选路,也支持多种路由形式,如特定主机路由和子网路由等。
自治系统:autonomous system。在互联网中,一个自治系统(AS)是一个有权自主地决定在本系统中应采用何种路由协议的小型单位。这个网络单位可以是一个简单的网络也可以是一个由一个或多个普通的网络管理员来控制的网络群体,它是一个单独的可管理的网络单元(例如一所大学,一个企业或者一个公司个体)。一个自治系统有时也被称为是一个路由选择域(routing domain)。一个自治系统将会分配一个全局的唯一的16位号码,有时我们把这个号码叫做自治系统号(ASN)。
几个要点:
OSPF路由协议是一种典型的链路状态(Link-state)的路由协议,一般用于同一个路由域内。在这里,路由域是指一个自治系统(Autonomous System),即AS,它是指一组通过统一的路由政策或路由协议互相交换路由信息的网络。在这个AS中,所有的OSPF路由器都维护一个相同的描述这个AS结构的数据库,该数据库中存放的是路由域中相应链路的状态信息,OSPF路由器正是通过这个数据库计算出其OSPF路由表的
作为一种链路状态的路由协议,OSPF将链路状态组播数据LSA(Link State Advertisement)传送给在某一区域内的所有路由器,这一点与距离矢量路由协议不同。运行距离矢量路由协议的路由器是将部分或全部的路由表传递给与其相邻的路由器
在信息交换的安全性上,OSPF规定了路由器之间的任何信息交换在必要时都可以经过认证或鉴别(Authentication),以保证只有可信的路由器之间才能传播选路信息。OSPF支持多种鉴别机制,并且允许各个区域间采用不同的鉴别机制。OSPF对链路状态算法在广播式网络(如以太网)中的应用进行了优化,以尽可能地利用硬件广播能力来传递链路状态报文。通常链路状态算法的拓扑图中一个结点代表一个路由器。若K个路由器都连接到以太网上,在广播链路状态时,关于这K个路由器的报文将达到K的平方个。为此,OSPF在拓扑结构图允许一个结点代表一个广播网络。每个广播网络上所有路由器发送链路状态报文,报告该网络中的路由器的链路状态
OSPF 中划分区域的目的就是在于控制链路状态信息LSA 泛洪的范围、减小链路状态数据库LSDB的大小、改善网络的可扩展性、达到快速地收敛。
当网络中包含多个区域时,OSPF 协议有特殊的规定,即其中必须有一个 Area 0,通常也叫做骨干区域(Backbone Area),当设计 OSPF 网络时,一个很好的方法就是从骨干区域开始,然后再扩展到其他区域。骨干区域在所有其他区域的中心,即所有区域都必须与骨干区域物理或逻辑上相连,这种设计思想的原因是 OSPF 协议要把所有区域的路由信息引入骨干区,然后再依次将路由信息从骨干区域分发到其它区域中
由于划分出来的区域都必须和骨干区域连接,所以只能再分出二级区域,不存在第三级
OSPF不用UDP而是直接用IP数据报传输
OSPF对不同的链路可根据IP分组的不同服务类型而设置不同的代价。因此,OSPF对不同类型的业务可计算出不同的路由
如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径。这叫作多路径间的负载平衡
所有在OSPF路由之间交换的分组都具有鉴别的功能
支持可变长度的子网划分和无类别编址CIDR
每一个链路状态都带上一个32位的序号,序号越大状态越新
边界网关协议(BGP)是运行于 TCP 上的一种自治系统的路由协议。 BGP 是唯一一个用来处理像因特网大小的网络的协议,也是唯一能够妥善处理好不相关路由域间的多路连接的协议。 BGP 构建在 EGP 的经验之上。 BGP 系统的主要功能是和其他的 BGP 系统交换网络可达信息。网络可达信息包括列出的自治系统(AS)的信息。这些信息有效地构造了 AS 互联的拓朴图并由此清除了路由环路,同时在 AS 级别上可实施策略决策
由于可能与不同的AS相连,在一个AS内部可能存在多个运行BGP的边界路由器。同一个自治系统(AS)中的两个或多个对等实体之间运行的BGP 被称为 IBGP(Internal/Interior BGP)。归属不同的AS的对等实体之间运行的BGP称为EBGP (External/Exterior BGP)。在AS边界上与其他AS交换信息的路由器被称作边界路由器(border/edge router)。在互联网操作系统(Cisco IOS)中,IBGP通告的路由的距离为200,优先级比EBGP和任何内部网关协议(IGP)通告的路由都低。其他的路由器实现中,优先级顺序也是EBGP高于IGP,而IGP又高于IBGP
连接各个自治系统用的
BGP是不同自治系统的路由器之间交换路由信息的协议,BGP较新版本是BGP-4
边界网关协议BGP只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由
每一个自治系统AS的管理员至少要选择一个路由器作为该自治系统的“BGP发言人”,发言人一般放到边界上面
(自治系统的动态路由协议一般是RIP(跳数)或者OSPF(带宽))
BGP属于外部网关路由协议,可以实现自治系统间无环路的域间路由。BGP是沟通Internet广域网的主用路由协议,例如不同省份、不同国家之间的路由大多要依靠BGP协议。BGP可分为IBGP(Internal BGP)和EBGP(External BGP)。BGP的邻居关系(或称通信对端/对等实体)是通过人工配置实现的,对等实体之间通过TCP(端口179)会话交互数据。BGP路由器会周期地发送19字节的保持存活keep-alive消息来维护连接(默认周期为30秒)。在路由协议中,只有BGP使用TCP作为传输层协议。
下面举个实际连接VPN时,查看ifconfig /all的配置
以太网适配器 以太网3:
连接特定的DNS后缀:
描述:Array Networks VPN Adapter
物理地址: 某 48位
DHCP已启用: 否
自动配置已启用:是
IPv4地址:10.90.197.116(首选) #可见连接VPN时虚拟出来的虚拟网卡,其配置优先级最高
子网掩码:255.255.0.0
默认网关:
DNS服务器:127.0.0.1
TCPIP上的NetBIOS:已启用
此时若访问需要该VPN才能访问的网站,抓包,发现源地址即VPN虚拟网关
10.90.197.116
,获得的响应其目的地址同样是VPN的10.90.197.116
。(一般每次不一样,比如我断开VPN后,第二次重开VPN就变成10.90.201.6
)
# 就拿我本地VPN虚拟网关为10.90.197.116 255.255.0.0作为样例
# 我想要访问VPN代理后才能访问的因特网上某一个局域网
(1) 我使用VPN网关发送数据10.90.197.116,预访问对面局域网的10.90.223.100(这个随便写的)
【IP源地址10.90.197.116】【IP目的地址10.90.223.100】{数据部分}
(2) VPN再IP数据报前再添加对面远程RAS所在网段的某一地址作为源地址;比如对面RAS的公网IP为23.23.2.2,那么VPN给本地访问RAS的源地址设置为23.23.2.20(都是瞎编的)
【IP源地址23.23.2.20】【IP目的地址23.23.2.2】{【IP源地址10.90.197.116】【IP目的地址10.90.223.100】{数据部分}}
(3) 通过和远程目的局域网的RAS(远程访问服务器)建立的连接(PPTP or L2TP)发送数据到对面RAS{一般本地VPN会和对面RAS配合,进行一些身份认证、加密解密等操作}
(4) 对面RAS接收到数据后,把原本VPN添加的外层IP数据报头去掉,再继续把数据报传输到内部局域网
【IP源地址10.90.197.116】【IP目的地址10.90.223.100】{数据部分}
(5) 对面局域网10.90.223.100接受到数据报后,回应时,再把我们本地的VPN网关10.90.197.116作为目的地址,同样发送给RAS
【IP源地址10.90.223.100】【IP目的地址10.90.197.116】{数据部分}
(6) RAS收到数据报后,根据根据IP目的地址为10.90.197.116,查表,包装IP数据报,再发送回我们这里的VPN网关
【IP源地址23.23.2.2】【IP目的地址23.23.2.20】{【IP源地址10.90.223.100】【IP目的地址10.90.197.116】{数据部分}}
(7) VPN收到来自RAS的数据报,再舍弃最外层IP数据报的IP首部字段
【IP源地址10.90.223.100】【IP目的地址10.90.197.116】{数据部分}
如果是 W i n d o w s 7 Windows7 Windows7使用系统自带的VPN服务,配置VPN时,有个在远程网络上使用默认网关的选项
在远程网络上使用默认网关,即所有VPN代理的流量,不管访问的是VPN制定的对面内部局域网,还是访问我们本来就能正常访问的正常因特网,我们访问流程都变成本地VPN--> 对面远程RAS --> 对面局域网or我们本来自己就能访问的因特网
。很明显,大多数情况下,访问正常的因特网,我们没必要再特地经过VPN代理,这样网速还更慢,这时候我们去掉勾选的远程网络上使用默认网关
,那么访问对面局域网时,还是本地VPN--> 对面远程RAS --> 对面局域网
,访问因特网时,则直接本地原本连接外网的网关–>我们自己能访问的因特网
(上面这些这个远程网络上使用默认网关
经常也被VPN叫作全局模式
,不开启则是PAC
模式。亲测远程网络上使用默认网关
的选项弃用时,访问正常因特网还是用的本地默认网关;而访问VPN和对面RAS协商的指定网段时,才会走VPN)
VPN还有一些奇葩的使用情况:
比如ABC三个网络环境不同(理解为三个互不相干的局域网)
此时,A和C因为某些原因,需要互相访问,但是两种都没有设置远程访问服务器RAS
,所以不能通过VPN互联,但是B有远程访问服务器RAS
,其归C管理。于是C通过VPN连接B,并且新增VPN用户账号,通过电话、邮件等方式把该账号告知A,那么A和C就能通过都通过VPN连接到网络C中,互相访问对方。(连接VPN就类似把自己电脑搬到对面RAS管理的网段内。这里约等于,两个人都变成B网络内的主机了,所以能互相访问)
虚拟专用网VPN
本地地址——仅在机构内部使用的IP地址,可以由本机构自行分配,而不需要向因特网的管理机构申请。
全球地址——全球唯一的IP地址,必须向因特网的管理机构申请。
RFC1918指明的专用地址( p r i v a t e private private a d d r e s s address address):
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
通过隧道技术实现虚拟专用网,这在现实的连锁店管理等场景经常使用
记住,VPN 拨号拨通之后相当于搬到那个网段里面去了
点对点隧道协议(英语:Point to Point Tunneling Protocol,缩写为PPTP)是实现虚拟专用网(VPN)的方式之一。PPTP使用传输控制协议(TCP)创建控制通道来发送控制命令,以及利用通用路由封装(GRE)通道来封装点对点协议(PPP)数据包以发送数据。这个协议最早由微软等厂商主导开发,但因为它的加密方式容易被破解,微软已经不再建议使用这个协议。
PPTP的协议规范本身并未描述加密或身份验证的部分,它依靠点对点协议(PPP)来实现这些安全性功能。因为PPTP协议内置在微软视窗系统家族的各个产品中,在微软点对点协议(PPP)协议堆栈中,提供了各种标准的身份验证与加密机制来支持PPTP。 在微软视窗系统中,它可以搭配PAP、CHAP、MS-CHAPv1/v2或EAP-TLS来进行身份验证。通常也可以搭配微软点对点加密(MPPE)或IPSec的加密机制来提高安全性。
NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。
这种方法需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。
另外,这种通过使用少量的公有IP 地址代表较多的私有IP 地址的方式,将有助于减缓可用的IP地址空间的枯竭。在RFC 2663中有对NAT的说明。
10.7.1.2
的私网,然后现在要访问202.12.49.10
这个公网,能访问吗?能发送过去,但是回不来了,因为202
网段不知道10
网段怎么回去。假如现在用私网的单位有一个公网的地址111.23.213.69
,这时候再想访问之前的202
网站,就会先设置目标地址为202
,源地址为10
,然后走到公网111
的时候,进行更改,变成目标地址202
,源地址111
。这样就能做到有去有回用 NAT 这种方式,内网的能主动出去,外网的进不来
功能:
NAT不仅能解决IP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。
宽带分享:这是 NAT 主机的最大功能
安全防护:NAT 之内的 PC 联机到 Internet 上面时,他所显示的 IP 是 NAT 主机的公共 IP,所以 Client 端的 PC 当然就具有一定程度的安全了,外界在进行 portscan(端口扫描) 的时候,就侦测不到源Client 端的 PC
实现方式:
静态转换是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。借助于静态转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问
动态转换是指将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址时,就可以进行动态转换。动态转换可以使用多个合法外部地址集。当ISP提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式
**端口多路复用(Port address Translation,PAT)**是指改变外出数据包的源端口并进行端口转换,即端口地址转换(PAT,Port Address Translation).采用端口多路复用方式。内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自internet的攻击。因此,目前网络中应用最多的就是端口多路复用方式
ALG(Application Level Gateway),即应用程序级网关技术:传统的NAT技术只对IP层和传输层头部进行转换处理,但是一些应用层协议,在协议数据报文中包含了地址信息。为了使得这些应用也能透明地完成NAT转换,NAT使用一种称作ALG的技术,它能对这些应用程序在通信时所包含的地址信息也进行相应的NAT转换。例如:对于FTP协议的PORT/PASV命令、DNS协议的 “A” 和 “PTR” queries命令和部分ICMP消息类型等都需要相应的ALG来支持
如果协议数据报文中不包含地址信息,则很容易利用传统的NAT技术来完成透明的地址转换功能,通常我们使用的如下应用就可以直接利用传统的NAT技术:HTTP、TELNET、FINGER、NTP、NFS、ARCHIE、RLOGIN、RSH、RCP等
虽然NAT可以借助于某些代理服务器来实现,但考虑到运算成本和网络性能,很多时候都是在路由器上来实现的
cmd使用指令netstat -n
查看主机与外部建立的会话
NAPT(Network Address Port Translation),即网络地址端口转换,可将多个内部地址映射为一个合法公网地址,但以不同的协议端口号与不同的内部地址相对应,也就是**<内部地址+内部端口>与<外部地址+外部端口>之间的转换**。NAPT普遍用于接入设备中,它可以将中小型的网络隐藏在一个合法的IP地址后面。NAPT也被称为“多对一”的NAT,或者叫PAT(Port Address Translations,端口地址转换)、地址超载(address overloading)。
NAPT与动态地址NAT不同,它将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的TCP端口号。NAPT算得上是一种较流行的NAT变体,通过转换TCP或UDP协议端口号以及地址来提供并发性。除了一对源和目的IP地址以外,这个表还包括一对源和目的协议端口号,以及NAT盒使用的一个协议端口号。
NAPT的主要优势在于,能够使用一个全球有效IP地址获得通用性。主要缺点在于其通信仅限于TCP或UDP。当所有通信都采用TCP或UDP,NAPT允许一台内部计算机访问多台外部计算机,并允许多台内部主机访问同一台外部计算机相互之间不会发生冲突。
Full cone NAT
即著名的一对一(one-to-one)NAT
一旦一个内部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有发自iAddr:port1的包都经由eAddr:port2向外发送。任意外部主机都能通过给eAddr:port2发包到达iAddr:port1
Address-Restricted cone NAT
限制地址,即只接收曾经发送到对端的IP地址来的数据包。
一旦一个内部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有发自iAddr:port1的包都经由eAddr:port2向外发送。任意外部主机(hostAddr:any)都能通过给eAddr:port2发包到达iAddr:port1的前提是:iAddr:port1之前发送过包到hostAddr:any. "any"也就是说端口不受限制
Port-Restricted cone NAT
类似受限制锥形NAT(Restricted cone NAT),但是还有端口限制。
一旦一个内部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有发自iAddr:port1的包都经由eAddr:port2向外发送。一个外部主机(hostAddr:port3)能够发包到达iAddr:port1的前提是:iAddr:port1之前发送过包到hostAddr:port3.
Symmetric NAT(对称NAT)
每一个来自相同内部IP与port的请求到一个特定目的地的IP地址和端口,映射到一个独特的外部来源的IP地址和端口。
同一个内部主机发出一个信息包到不同的目的端,不同的映射使用
外部主机收到了一封包从一个内部主机可以送一封包回来
NAT表在路由器上保持的时间大概30~50s左右,至少我本地测试的时候,如果创建多个UDP client与外部通信,且外部通信能成功区分各个UDP client响应回来的话,其实差不多要保持40s左右的心跳包刷新NAT表才行
传输层为相互通信的应用进程(应用层)提供了逻辑通信。从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。
应用层 http https ftp DNS SMTP(发邮件) PoP3(收邮件) RDP(远程桌面协议)
传输层 TCP UDP
网络层IP(RIP OSPF BGP) (路由选择相关的,统称IP协议) ICMP IGMP ARP
传输层两个协议的应用场景
netstat -n
(查看建立的会话)传输层和应用层之间的关系
http = TCP+80
https = TCP+443
ftp=TCP+21
SMTP=TCP+25
POP3=TCP+110
RDP=TCP+3389(windows可以通过mstsc使用RDP服务远程桌面连接)
共享文件夹=TCP+445
SQL Server=TCP+1433
DNS = UDP+53 or TCP+53(少部分情况)
(IP定位主机,端口Port定位服务。eg:4个服务监听4个端口,主机根据收到的包的目的端口判别访问哪个服务)
查看自己计算机侦听的端口:netstat -ano
IP协议的作用范围:提供主机之间的逻辑通信
TCP和UDP协议的作用范围:提供进程之间的逻辑通信
运输层为应用进程之间提供端到端的逻辑通信(但网络层是为主机之间提供逻辑通信)
运输层还要对收到的报文进行差错检验。(网络层,当路由器收到了一个IP数据报,先对其首部进行校验,若发现存在错误,则抛弃该IP数据报,并向源主机发送ICMP(因特网控制报文协议)差错报告报文。每个分组(报文)都有首部校验和字段)
运输层提供面向连接和无连接的服务
两个对等运输实体在通信时传送的数据单位叫作"运输协议数据单元"TPDU(Transport Protocol Data Unit)
TCP传送的协议数据单元TCP 报文段( s e g m e n t segment segment)
UDP传送的协议数据单元是UDP 报文或用户数据报
UDP传输数据前不需要建立连接。对方的运输层在收到UDP报文后,不需要输出任何确认。虽然UDP不提供可靠交付,但在某些情况下UDP是一种最有效的工作方式。
TCP提供面向连接的服务。TCP不提供广播或多播服务。由于TCP要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销(指建立连接3次握手和释放连接4次挥手)。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。
刚刚已经说了,最好记住以下常用的联系
netstat -an
TCP的端口,端口用一个16位端口号进行标志,即端口号只是为了标志本计算机应用层中的各进程。在因特网中不同计算机的相同端口号是没有联系的。(IP标识主机,port标识服务)
三类端口:
通过防火墙设置,可以限定出/入端口+协议限制
例如:开启 Windows 防火墙后,我们可以ping外部,但是外部不能ping我们;如果防火墙对外只开放80端口,那其他人就访问不了我们的其他服务
(Windows 防火墙不拦截出流量,只拦截入流量)
灰鸽子病毒利用windows防火墙不限制出流量这点,在被攻击者误触灰鸽子安装程序后,灰鸽子程序自动在后台隐藏进程运行。灰鸽子程序按照之前攻击者设定的IP地址,主动向外部发出请求。而攻击者打开自己的灰鸽子控制面板,就能看到被攻击者向自己报告IP地址,我们就能直接在面板上对被攻击者的电脑进行操作(远程桌面控制、文件控制等)
一些奇特的防攻击技巧:服务器B设置只允许服务器A远程访问,然后我们远程访问A,再通过A远程访问B;这样黑客想要远程黑入服务器B,还需要先黑入服务器A
UDP首部(共8字节)
[源端口2字节][目的端口2字节][长度2字节][检验和2字节]
长度是指包括报头和数据部分在内的总字节数。
虽然UDP提供有错误检测,但检测到错误时,UDP不做错误校正,只是简单地把损坏的消息段扔掉,或者给应用程序提供警告信息(一般就是单纯的丢掉。除非你开发的应用程序有作什么特殊的检测)
面向连接(三次握手、四次挥手)
每一条TCP连接只能有两个端点(endpoint),每一条TCP连接只能是点对点的(一对一)。
可靠交付
全双工通信(即时是A从B下载文件,B也会时不时自己给A回应,确认下载到哪里了。)
面向字节流
面向字节流:
应用程序把字节流写入TCP缓存区,在空闲时将TCP缓冲区的字节按照顺序取出(取出的字节数不一定),然后加上TCP首部,够成TCP报文段,通过TCP连接发送到接收方的TCP缓冲区。对方在从TCP缓冲区读取字节流数据
TCP连接的端点:
TCP把连接作为最基本的抽象。每一条TCP连接有两个端点(套接字),端口号拼接到IP地址组成套接字,作为TCP的端点
套接字socket = (IP地址:port端口号)
TCP连接::={socket1,socket2} = {(IP1:port1),(IP2:port2)}
A B A B
|\ | |\ |
| | | |
| /| |\ |
|/ | | |
无差错情况。 | /|
A发送M1–>B。 |/ |
B确认M1–>A 有差错情况。
A发送M1–>B
M1在传输过程丢包
A超时重传M1(一般在RTT多一点的时间重传,也就是往返时间多一点点)
B确认M1
信道利用率 U = T D T D + R R T + T A 信道利用率U=\frac{T_D}{T_D+RRT+T_A} 信道利用率U=TD+RRT+TATD
一般RTT变动不大(和物理设备、网络环境有关),TA是接受方发送+传播时延,一般极小(一收到就回应确认),TD是发送方发送+传播时延,一般比TA大,比RTT小。所以理论上发送方发送时延TD增大,信道利用率U就增大
现一般不采用传一次确认一次的停等式 ARQ,而是采用流水线传输方式,发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认(发送一堆,对面之后也确认一堆,回应一堆 ACK)。由于信道上一直有数据不间断地传送,这种传输方式可获得很高的信道利用率
发送方流水线传输数据,一般搭配发送窗口。而接受方也不再一个一个确认,而是采用累计确认的方式(比如B收到4个字节后,直接告诉A下次从第5个字节开始发。这样A就知道前4个字节都接收了,发送窗口向右移动,将得到确认的前4字节从缓冲区剔除)
TCP 每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的重传时间到但还没有收到确认,就要重传这一个报文段。 新的 R T T s = ( 1 − α ) ∗ ( 旧的 R T T s ) + α ∗ ( 新的 R T T 样本 ) 新的RTT_s = (1 - α) * (旧的RTT_s) + α * (新的RTT样本) 新的RTTs=(1−α)∗(旧的RTTs)+α∗(新的RTT样本)
很明显, α α α 越大时,说明 RTT_s 越依赖新值,如果网络平稳,那么 RTT 一般变动不大,可让 α α α 小一点。(因为稳定的网络,我们认为新的 RTT 也不会有多大的变动。而波动大的网络,某些时间段拥塞某些时间端又很顺畅的,就需要α调大)
超时重传时间应略大于上面得出的加权平均往返时间 RTT_s(比如多次 RTT 响应分别9,10,11,那么取平均10)
RFC2988推荐的 α α α 值为 1 / 8 1/8 1/8
窗口(Window Size):16bit,通知发送方自己的本地接收缓存大小(接收端滑动窗口),最大值就是2^16-1=65535字节。(在SYN建立连接阶段,协商win和WS,之后会根据带宽和RTT再定下来最终的win和RS计算出实际通信的滑动窗口大小)
检验和(TCP Checksum):对TCP首部和TCP数据的校验和,和UDP校验和计算方式相同,需要配合IP伪首部计算
紧急指针(Urgent Pointer):只有当 URG 标志置 1 时紧急指针才有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。( TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。前面提到URG很少用到,所以这个也理所当然的很少用到了)
可选部分(Options):(只列举几个抓包经常需要注意的)
填充:和IP首部一样,如果TCP首部不能被4字节(16bit)整除,就填充0直到能被4字节整除
119
文章浏览阅读3.8k次,点赞9次,收藏28次。直接上一个工作中碰到的问题,另外一个系统开启多线程调用我这边的接口,然后我这边会开启多线程批量查询第三方接口并且返回给调用方。使用的是两三年前别人遗留下来的方法,放到线上后发现确实是可以正常取到结果,但是一旦调用,CPU占用就直接100%(部署环境是win server服务器)。因此查看了下相关的老代码并使用JProfiler查看发现是在某个while循环的时候有问题。具体项目代码就不贴了,类似于下面这段代码。while(flag) {//your code;}这里的flag._main函数使用while(1)循环cpu占用99
文章浏览阅读347次。idea shift f6 快捷键无效_idea shift +f6快捷键不生效
文章浏览阅读135次。Ecmacript 中没有DOM 和 BOM核心模块Node为JavaScript提供了很多服务器级别,这些API绝大多数都被包装到了一个具名和核心模块中了,例如文件操作的 fs 核心模块 ,http服务构建的http 模块 path 路径操作模块 os 操作系统信息模块// 用来获取机器信息的var os = require('os')// 用来操作路径的var path = require('path')// 获取当前机器的 CPU 信息console.log(os.cpus._node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是
文章浏览阅读10w+次,点赞435次,收藏3.4k次。SPSS 22 下载安装过程7.6 方差分析与回归分析的SPSS实现7.6.1 SPSS软件概述1 SPSS版本与安装2 SPSS界面3 SPSS特点4 SPSS数据7.6.2 SPSS与方差分析1 单因素方差分析2 双因素方差分析7.6.3 SPSS与回归分析SPSS回归分析过程牙膏价格问题的回归分析_化工数学模型数据回归软件
文章浏览阅读7.5k次。如何利用hutool工具包实现邮件发送功能呢?1、首先引入hutool依赖<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.19</version></dependency>2、编写邮件发送工具类package com.pc.c..._hutool发送邮件
文章浏览阅读867次,点赞2次,收藏2次。docker安装elasticsearch,elasticsearch-head,kibana,ik分词器安装方式基本有两种,一种是pull的方式,一种是Dockerfile的方式,由于pull的方式pull下来后还需配置许多东西且不便于复用,个人比较喜欢使用Dockerfile的方式所有docker支持的镜像基本都在https://hub.docker.com/docker的官网上能找到合..._docker安装kibana连接elasticsearch并且elasticsearch有密码
文章浏览阅读1.3w次,点赞57次,收藏92次。整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)近年来,随着机器学习的兴起,有一门编程语言逐渐变得火热——Python。得益于其针对机器学习提供了大量开源框架和第三方模块,内置..._beeware
文章浏览阅读7.9k次。//// ViewController.swift// Day_10_Timer//// Created by dongqiangfei on 2018/10/15.// Copyright 2018年 飞飞. All rights reserved.//import UIKitclass ViewController: UIViewController { ..._swift timer 暂停
文章浏览阅读986次,点赞2次,收藏2次。1.硬性等待让当前线程暂停执行,应用场景:代码执行速度太快了,但是UI元素没有立马加载出来,造成两者不同步,这时候就可以让代码等待一下,再去执行找元素的动作线程休眠,强制等待 Thread.sleep(long mills)package com.example.demo;import org.junit.jupiter.api.Test;import org.openqa.selenium.By;import org.openqa.selenium.firefox.Firefox.._元素三大等待
文章浏览阅读3k次,点赞4次,收藏14次。Java软件工程师职位分析_java岗位分析
文章浏览阅读2k次。Java:Unreachable code的解决方法_java unreachable code
文章浏览阅读1w次。1、html中设置标签data-*的值 标题 11111 222222、点击获取当前标签的data-url的值$('dd').on('click', function() { var urlVal = $(this).data('ur_如何根据data-*属性获取对应的标签对象