目录
一.网络层 IP协议
IP协议头部格式
IP协议如何管理地址
1.动态分配IP地址:
2.NAT机制(网络地址映射)
编辑3.IPv6
IP协议如何进行网段划分
早期的网段划分和现在还不一样:
一些特殊的IP地址:
IP协议进行地址管理
二、数据链路层 以太网
以太网帧格式:
三、DNS协议
一.网络层 IP协议
IP协议主要完成两项工作:
1.地址管理:使用一套地址体系(IP地址),来描述互联网上每个设备所处的位置.
2.路由选择:指一个数据包如何从互联网上的一个设备传输到另一个设备。
IP协议头部格式
1.4位版本(version):指定IP协议的版本,对于IPv4来说,就是4.对IPv6来说,就是6,只有两个值.目前主流版本是IPv4.
2.4位首部长度(header length):IP头部的⻓度是多少个32bit,也就是length*4的字节数.4bit表⽰最 ⼤的数字是15,因此IP头部最⼤⻓度是60字节.
3.8位服务类型(Type Of Service):实际上只有4位,并且这4位是相互冲突的,只有1位是1,其余三位都是0,分别代表:最小延时,最大吞吐量,最高可靠性,最小成本。表示当前IP协议所处的模式。
4.16位总长度(total length):整个IP数据报的总长度(报头+载荷)。
虽然IP数据报长度受限,但IP提供了拆包和组包的功能,当IP载荷(TCP数据报/UDP数据报)长度过长时,IP数据报就会自动拆分成多个IP数据报,每个数据报都会携带载荷的一部分信息.
这个拆包是在操作系统内核中完成的,程序代码无法控制.
5.16位标识符,3位标志位,13位片偏移:
上面拆包时,多个IP数据报将一个载荷拆分成多个IP数据报,这多个IP数据报的标识符都是相同的值.
拆包之后如何组包就是通过 16位标识符,3个标志位和13位片偏移 来识别完成的.
16位标识符用来确认哪些是同一个IP数据报的载荷,将其组装在一起;
3位标志位:只有2位是有效的,1位代表IP数据报是否拆分;1位代表该IP数据报携带的载荷是否为最后一个.
13位片偏移:表示了这些包的先后顺序,IP数据报可能会出现先发后至的现象,这个片偏移标识载荷的前后位置.
6.8位生存时间:单位是"次数"。当一个IP数据报每经过一个路由器,TTL的值就-1,当TTL为0时,就将这个数据报丢掉。这是为了防止IP数据报的目的地址有问题,而在网络中无限止的转发下去。
TTL的值一般是32/64就足以支撑当前的网络传输了.
windows有一个tracert指令,可以查看当前网络通信的路径:
比如访问美国官网:
7.8位协议:表示在传输层使用哪个协议.
8.16位首部检验和:只用来检验IP报头,IP数据报的载荷中有TCP检验和/UDP检验和,在IP层就不再检验了.
9.32位原IP地址,32位目的IP地址:标示量发件人和收件人的IP地址.
IP协议如何管理地址
就是通过这两个32位原IP地址和32位目的IP地址.
IP地址本质上就是32位整数,为了方便,把IP地址表示成 点分十进制的形式。通过三个点,把IP地址分成4部分,每部分1字节,每个字节的范围:0-255。
IP地址的存在,就是为了区分网络上的不同设备,希望每个设备都有一个唯一的IP地址.
32位地址,表示的范围:2^32=42亿9千万多 的数字,这个数字看起来很大,但对于快速发展的网络来说,并没有很大,如何解决IP地址不够用问题,就成了一个很重要的事情,
有三种解决方法:
1.动态分配IP地址:
全世界,并不是所有设备都同一时刻一起上网的,通过更充分的利用IP地址,动态分配IP地址,解决问题。(这个方法,理论上可行,但实际中中很难实施的)
2.NAT机制(网络地址映射)
先把IP地址分为两大类:
1.私网IP(局域网IP):IP地址以:10.*,172.16-172.31.*,192.168.*开头的都是局域网IP。
2.公网IP(广域网IP):除了私网IP外,别的都是公网IP.
要求公网的设备上,使用的公网IP都不能重复,必须是唯一的;但私网设备使用的私网IP,只要保证在同一个局域网内不能重复,不同局域网之间的IP允许重复。
由于上面的规定,在设备之间进行访问时,有一个重要限制:
1>.公网设备访问公网设备时,可以直接访问。
2>.私网设备访问私网设备(同一个局域网中的),可以直接访问。
3>.私网设备访问私网设备(不同局域网中的),不允许访问。
4>.私网设备访问公网设备,需要对私网设备地IP地址进行转换,也是可以访问地。
5>.公网设备访问私网设备,不允许主动访问。
一个路由器一般都带有两个IP地址:
LAN口IP:一般是一个局域网;
WAN口IP:可能是一个局域网,也可能是一个公网。
路由器地核心就是把这两个局域网连接起来。
在客户端(我的电脑)构造一个IP数据报:
到达路由器,要对源IP进行修改,设这个路由器地WAN口IP为5.6.7.8;
这个IP数据报到达路由器,就会被修改为:
并不是每个路由器都会对IP地址进行替换地,当当前IP地址为公网IP时,就不在替换了。
进行IP地址替换,本质上是为了让一个公网IP地址,对应到多个设备,从而起到节省IP的效果.
当IP数据报到达服务器之后,只能看到源IP为5.6.7.8,无法感知最初局域网IP地址了。
从服务器中返回的IP数据报又怎样返回到局域网设备呢?
路由器在进行NAT的时候,会把这次通信的相关信息记录下来:
路由器IP数据报:
源Ip 替换后IP 目的IP
主机一: 192.168.1.10 5.6.7.8 1.2.3.4
从服务器返回的响应数据的源IP和目的IP和收到的IP数据报是相反的:
服务器IP数据报:
源IP:1.2.3.4
目的IP:5.6.7.8
当服务器将相应数据返回的时候,t通过目的IP,对照路由表中记录的替换后的IP ,就能找到源IP地址了.
当局域网中的主机访问的都是不同的服务器,可以根据 路由表中的记录 通过 替换后的IP 进行查找源IP地址,但是当局域网设备不只一个访问相同的服务器时,又能找到源主机吗?
此时路由器中记录的信息:
源Ip 替换后IP 目的IP
主机一: 192.168.1.10 5.6.7.8 1.2.3.4
主机二: 192.168.1.20 5.6.7.8 1.2.3.4
当 将返回的信息的 目的IP 与路由表的 替换后的IP 进行对比,此时,还是无法确定哪个是源主机.
实际上,这个表中还有一列数据:源端口 目的端口:
路由器收到的响应数据包是这样的,
路由器通过查询 IP数据报 传输层的目的端口,就能知道 替换之前的IP了。
又有问题了,因为端口号都是系统随机分配的,若是极小的概率下,两个主机之间的端口号相同,又要怎么查找源IP地址呢?
这是路由器有实现了一个功能,替换源端口号:路由器会对端口号进行映射,为每个主机分配不同的端口号:
此时,路由器IP数据报到达服务器处的IP数据报就成了这个样子:
IP数据报:
源IP 目的IP 源端口 目的端口
主机一:5.6.7.8 1.2.3.4 10001 9090
主机二:5.6.7.8 1.2.3.4 10002 9090
返回响应的IP数据报就成了这个样子:
源IP 目的IP 源端口 目的端口
主机一:1.2.3.4 5.6.7.8 9090 10001
主机二:1.2.3.4 5.6.7.8 9090 10002
IP数据报返回到路由器时,通过 查找传输层的目的端口 就能找到源主机了。
3.IPv6
NAT机制是通过公用一个公网IP,来节省IP地址数量,并没有增加IP地址的数量;IPv6就是从根本上解决问题:增加了IP地址的数量,IPv4中 IP数量为4字节,32个比特为,IPv6将其扩大到16字节,64个比特位.就是2^64个地址,这就是一个天文数字了,完全够用。
但还有一个问题,IPv6的报头结构和IPv4是不兼容的,存在结构不兼容的问题,引入IPv6,就意味着需要对整个网络设备进行升级,更换成能支持IPv6的设备,这是一个在网络发展长河中是一个非常漫长的过程.
IP协议如何进行网段划分
IP地址分为两个部分:网络号+主机号
主机号:同一个网段之内,每个主机之间有相同网络号,但每个主机必须有不同的主机号.
在windows控制台中输入ipconfig可以查看自己主机的信息:
可以看到:IPv4地址的信息:192.168.159.1;
这里还有一个子网掩码:255.255.255.0;这里的前三个数是非0的,第四个数是0,则说明PIv4 的
前三个数据: 192.168.159 就是网络号;第四个数据: 1 就是主机号.
这些IP地址都是路由器自动配置的,不需要我们手动配置.
在一个局域网中,若有主机号和网络号都相同,那么这个主机是无法上网的;
在局域网中,如果主机的网络号和路由器的网络号不相同,也是无法上网的,因为这个主机无法通过路由器访问外网,也就无法访问局域网那个的其他网络.
两个相邻的局域网,网络号是不能相同的。(一个路由器连接的两个网络就是相邻的)
早期的网段划分和现在还不一样:
早期的网段是分为A,B,C,D,E五类。
这种方式的划分比较死板,且A,B类的浪费量非常大,A类的主机号可以有24位,即一个局域网内可以有2^24个主机,没有这么大的局域网能包含这么多主机,很难有这样的使用场景。
这种网段划分的方式已经费用了。
一些特殊的IP地址:
127.*:表示环回IP(loopback),代表自己的主机。一般用于测试(常用 127.0.0.1)
若某个IP的主机号全是0,则表示“这个网段”;
若某个IP的主机号全是1,表示:“广播地址”。这两个IP是一种特殊的IP,不能分配给主机。
广播对应的IP有多种:
单播:一对一;
组播:一对多(这里的多是有限制的,全部中的一部分)
多播:一对多(所有,没有限制)
向广播地址上发送消息,局域网上的所有设备都能收到消息。(但要发UDP消息,TCP消息不支持广播)
IP协议进行地址管理
路由选择是找到了能到达目的主机的所有路径,但哪条在什么样的需求下最合适,就需要探索。
由于网络结构太复杂了,每个路由器无法掌握全局路径信息,IP地址对于路径选择属于探索式的“边走边问”,无法在最开始就把路线规划好。
二、数据链路层 以太网
以太网是横跨数据链路层和物理层。
以太网帧格式:
以太网引入了另一套地址体系,“mac”地址/物理地址。mac地址和IP地址是两套独立的地址体系。
IP地址侧重于全局转发,从起点地址到目的地址的转发;mac地址更侧重于局部路径的转发,两个相邻设备的转发。
mac地址按照16进制的形式表示,字符之间用 - 或者 ; 分隔:
mac地址能表示的范围要比IPv4大很多,每个主机都有一个自己的mac地址,是一一绑定的关系。
IP地址很多时候是动态分配的,而mac地址是静态分配的,网卡出厂的时候,mac就写死了,因此可以通过一个mac地址来确定一个主机位置。
数据链路层的以太网数据帧:
由于每个主机都有自己的mac地址,因此,每经过一个路由器/交换机,源mac和目的mac都会改变,
经过这样的转发,就能把数据报进行封装和分用.
ARP和RARP是两个横跨了 网络层 和 数据链路层 的协议.
ARP协议建⽴了主机IP地址和MAC地址的映射关系.ARP 是能让路由器/交换机建立起内部的结构:IP->mac(类似于hash表)转发表。
RARP:也是能让路由器/交换机建立起内部的结构 :mac->IP 建立起一个内部结构,占46字节.
以太网数据帧载荷部分的数据范围是46-1500字节,最小·46就是ARP协议的使用,最⼤值1500称为以太⽹的最⼤传输单元(MTU),1500字节是受限于物理设备的特性(IP数据报将载荷进行截取承载,也是有这个原因)
三、DNS协议
DNS是⼀整套从域名映射到IP的系统,叫域名解析协议。
TCP/IP中使⽤IP地址和端⼝号来确定⽹络上的⼀台主机的⼀个程序.但是IP地址不⽅便记忆.于是⼈们发明了⼀种叫主机名的东西,是⼀个字符串,并且使⽤hosts⽂件来描述主机名和IP地址的关系.
DNS服务器,并不是只有一份,而是由很多份
搭建根域名服务器还时,还会对域名进行分级管理,一级域名,二级域名,三级域名....这样可以控制每个域名管理的数据都不多.
像:www.baidu.com 这就是域名解析协议.
com属于一级域名;baidu:属于二级域名;www属于三级域名...