计算机网络-----详解网络原理TCP/IP(下)
文章目录
- 📕1. 网络层
- ✏️1.1 IP协议
- ✏️1.2 地址管理
- ✏️1.3 路由选择
- ✏️1.4 IP地址的数量限制
- 📕2. 数据链路层
- ✏️2.1 认识以太网
- ✏️2.2 对比理解MAC地址和IP地址
- ✏️2.3 认识MTU
- ✏️2.4 ARP协议
- 📕3. NAT与NATP机制
- 📕4. DNS协议
📕1. 网络层
✏️1.1 IP协议
基本概念
- 主机:配有IP地址, 但是不进⾏路由控制的设备。
- 路由器:即配有IP地址, ⼜能进⾏路由控制。
- 节点:主机和路由器的统称
协议头格式
4位版本号:通常是IPv4与IPv6,其他版本没有推广使用。
4位首部长度:首部长度是4字节,但IP协议中首部长度也是可以变的,最大是60字节。
8位服务类型:3位优先权字段(已经弃⽤), 4位TOS字段, 和1位保留字段(必须置为0). 4位TOS分别表⽰: 最⼩延时(发送数据和收到数据时间尽量短), 最⼤吞吐量(单位时间内传输的数据尽量多),最⾼可靠性(IP本身并不考虑可靠性,只是在IP层面尽可能的减小丢包的概率),最⼩成本(消耗的系统资源最少)。 这四者相互冲突, 只能选择⼀个.
16位总长度:IP报头与应用层载荷的总长度,IP协议自身支持拆包/装包,超过64kb的数据包IP协议会切分成多个数据包。
16位标识:唯⼀的标识主机发送的报⽂,如果IP数据包被分片了,那么每一片的标识都是一样的。
3位标志位:第⼀位保留(保留的意思是现在不⽤,但是还没想好说不定以后要⽤到)。第⼆位置为1表示禁⽌分⽚,这时候如果报⽂⻓度超过MTU,IP模块就会丢弃报⽂。第三位表示"更多分⽚",如果分⽚了的话,最后⼀个分⽚置为1,其他是0,类似于⼀个结束标记。
13位片偏移:主要目的就是用来表示当前分片在原来报文中的那个位置,防止后发先至。
8位生存时间(TTL):主要是用来记录当前IP数据报的在网络上存活多久(单位是次数,而不是时间),初始情况下,TTL是32/64/128等,每经过一次路由器,TTL-=1,如果TTL==0时还没到达对方,就可以认为永远也到不了了,就可以丢弃了。
8位协议:描述当前IP数据报的载荷部分是使用的哪个传输层协议。
16位首部校验和:IP协议只关心IP数据报报头是否损坏,损坏就直接丢弃,应用层载荷的报头则有TCP/UDP协议自己校验。
32位源地址和32位⽬标地址:表示发送端和接收端。
✏️1.2 地址管理
🌈网断划分
把1个IP地址划分成两部分,一部分是网络号,一部分是主机号,约定:同一个网络下,设备的主机号必须不相同,网络号必须相同。对于相邻的两个局域网,网络号必须不相同。
不同的⼦⽹其实就是把⽹络号相同的主机放到⼀起,如果在⼦⽹中新增⼀台主机,则这台主机的⽹络号和这个⼦⽹的⽹络号⼀致,但是主机号必须不能和⼦⽹中的其他主机重复。
通过合理设置主机号和⽹络号, 就可以保证在相互连接的⽹络中, 每台主机的IP地址都不相同
那么问题来了,⼿动管理⼦⽹内的IP,是⼀个相当⿇烦的事情,有⼀种技术叫做DHCP,能够⾃动的给⼦⽹内新增主机节点分配IP地址,避免了⼿动管理IP的不便。⼀般的路由器都带有DHCP功能,因此路由器也可以看做⼀个DHCP服务器。
🌈特殊的IP地址
- 主机号全是0的IP地址,这是一个特殊地址,表示该网段,不能将它分配给设备。
- 主机号全是1的IP地址,表示该局域网的广播IP,广播IP的作用是,给这个IP发送数据包,广播IP就会把这个数据包发送给该局域网内的所有设备。
- 127.* 环回IP ,例如我们经常使用的127.0.0.1,通过这个IP发送的数据,也会通过这IP收到,即自己发自己收。
🌈私有IP地址和公⽹IP地址
如果⼀个组织内部组建局域⽹,IP地址只⽤于局域⽹内的通信,⽽不直接连到Internet上,理论上使⽤任意的IP地址都可以,但是RFC 1918规定了⽤于组建局域网的私有IP地址
10.0.0.0 - 10.255.255.255 (10.0.0.0/8)
172.16.0.0 - 172.31.255.255 (172.16.0.0/12)
192.168.0.0 - 192.168.255.255 (192.168.0.0/16)
任何在此范围内的IP地址都可以被任何组织或个人在其内部网络中自由使用,而无需向全球互联网注册机构申请。
✏️1.3 路由选择
在网络通信中,起点到终点的路径是怎么规划的呢?类似于高德地图这样的导航软件,能够获取到全局信息,我们输入目的地之后,会给我们选择出一条最快的路出来,但是网络上的路由线路,虽然也类似于导航,但是每个路由器都无法知道网络结构是什么样的,所以就没有全局信息,无法选择最快的那条路,路由器只知道自己相邻的网络情况,所以只能选择一个较优解,路由器的路由选择,是启发式探索式的路由选择,也可以称为叫下一跳(next hop)。
路由器里面会维护一张路由表,目的IP会匹配路由表,匹配成功,就说明目的IP是该路由器的相邻设备,直接转发就行,没有匹配成功的话,就会下一跳,跳到更高级别的路由器。
✏️1.4 IP地址的数量限制
IPv4是⼀个4字节32位的正整数. 那么⼀共只有 2的32次⽅ 个IP地址, ⼤概是43亿左右. ⽽TCP/IP协议规定, 每个主机都需要有⼀个IP地址.这意味着, ⼀共只有43亿台主机能接⼊⽹络么?可是实际上的主机数量远超43亿台,IP地址不够怎么办呢?
- 动态分配IP地址
设备上网再分配IP地址,不上网就不分配IP地址,早期对于设备数量不算特别大的时候可以解决,但随着设备数量进一步增加,这种方案也不适用了。
- NAT机制
详情请看3.NAT机制
- IPv6
IPv6并不是IPv4的简单升级版. 这是互不相⼲的两个协议, 彼此并不兼容; IPv6⽤16字节128位
来表⽰⼀个IP地址; 但是⽬前IPv6还没有普及;IPv6使用16个字节表示IP地址,这是一个天文数字,哪怕给地球上的一粒沙子都分配一个IP地址,都是绰绰有余的。
📕2. 数据链路层
✏️2.1 认识以太网
“以太⽹” 不是⼀种具体的⽹络,⽽是⼀种技术标准,既包含了数据链路层的内容,也包含了⼀些物理层的内容。例如: 规定了⽹络拓扑结构,访问控制⽅式,传输速率等。例如以太⽹中的⽹线必须使⽤双绞线,传输速率有10M,100M,1000M等。以太⽹是当前应⽤最⼴泛的局域⽹技术,和以太⽹并列的还有令牌环⽹,⽆线LAN等。
以太⽹帧格式
源地址和⽬的地址是指⽹卡的硬件地址(也叫MAC地址), ⻓度是48位,是在⽹卡出⼚时固化的
帧协议类型字段有三种值,分别对应IP、ARP、RARP
帧末尾是CRC校验码
认识MAC地址
- MAC地址⽤来识别数据链路层中相连的节点
- ⻓度为48位, 及6个字节. ⼀般⽤16进制数字加上冒号的形式来表⽰(例如: 08:00:27:03:fb:19)
- 在⽹卡出⼚时就确定了, 不能修改. mac地址通常是唯⼀的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些⽹卡⽀持⽤⼾配置mac地址)
✏️2.2 对比理解MAC地址和IP地址
- IP地址描述的是路途总体的 起点 和 终点;
- MAC地址描述的是路途上的每⼀个区间的起点和终点;
✏️2.3 认识MTU
MTU相当于发快递时对包裹尺⼨的限制. 这个限制是不同的数据链路对应的物理层, 产⽣的限制
- 以太⽹帧中的数据⻓度规定最⼩46字节,最⼤1500字节,ARP数据包的⻓度不够46字节,要在后⾯补填充位;
- 最⼤值1500称为以太⽹的最⼤传输单元(MTU),不同的⽹络类型有不同的MTU;
- 如果⼀个数据包从以太⽹路由到拨号链路上,数据包⻓度⼤于拨号链路的MTU了,则需要对数据包进⾏分⽚(fragmentation);
- 不同的数据链路层标准的MTU是不同的;
✏️2.4 ARP协议
ARP协议是横跨数据链路层和传输层的协议,ARP不携带任何业务数据,只给网络转发做必要的支持,在进行网络转发时,不仅要知道对方的IP地址,还要知道对方的MAC地址,在数据链路层的交换机中,会有这样一个转发表,记录着MAC与具体网口的对应关系,ARP协议的作用就是构造出这个转发表,ARP可以根据IP地址查询出Mac地址,ARP协议的报文会周期性的发送,因为网络结构可能会发生变化,ARP广播整个局域网中的所有设备,询问各自的MAC地址,设备收到询问消息就会立刻返回自己的MAC地址。
📕3. NAT与NATP机制
NAT技术当前解决IP地址不够⽤的主要⼿段, 是路由器的⼀个重要功能。我们将IP地址分为两大类,私网IP和公网IP,不同局域网下的设备IP可以相同。
在NAT机制网络转发的情况下,有A,B两个设备:
- 如果A和B都是外网IP,不涉及到NAT机制,直接转发就行
- 如果A和B在同一个局域网下,直接传输就行
- 如果A和B都是内网IP,禁止传输
- 如果A是内网IP,B是外网IP,A直接访问B是可以,会涉及到NAT机制。B无法访问A。
NAT怎么工作的呢?
NAT路由器会把该局域网下的设备IP转换成全局IP,例如该局域网下有10个设备,每个设备在局域网下都有不同的IP地址,但因为NAT机制,这10个设备与外界进行传输的时候都会被转化成一个外网IP。路由器接受到数据后又会把转化后的新IP在转化回去原来的IP,把数据报传输给设备。在NAT路由器内部, 有⼀张⾃动⽣成的, ⽤于地址转换的表。NAT的本质就是让一个局域网下的多个设备共用同一个外网IP,原来一个外网IP只能对应一个设备,现在一个外网IP可以对应上千个设备,解决了IP地址不够用的问题。
但是现在还有一个问题,假如我在学校连接学校的校园网,我的同学也连接了校园网,那么我们访问选课系统时外网IP一定是一样的,那么服务器该如何区分响应的数据返回给我还是返回给我的同学呢?
解决上述问题的方案就是引入端口号作为区分,端口号不仅可以区分同一台主机上的不同程序,也可以区分不同主机上的不同程序,我们把这个过程称为NATP,NATP是NAT的补充。这种关联关系也是由NAT路由器⾃动维护的. 例如在TCP的情况下, 建⽴连接时, 就会⽣成这个表项; 在断开连接后, 就会删除这个表项
NAT机制的优缺点
由于NAT依赖这个转换表, 所以有诸多限制
- ⽆法从NAT外部向内部服务器建⽴连接
- 转换表的⽣成和销毁都需要额外开销
- 通信过程中⼀旦NAT设备异常, 即使存在热备, 所有的TCP连接也都会断开
同时NAT技术还有一个副作用,因为外网IP无法直接访问内网IP,间接的保护了内网设备被入侵。
NAT并不是真的增加了IP地址的数量,只是提高了IP地址的利用率,如果想增加IP地址的数量,还是要使用IPv6。
📕4. DNS协议
DNS又叫域名系统,是一个重要的应用层协议,网络上我们通过一个IP地址来描述一个设备的地址,但IP地址即使用点分十进制来表示,也并不是很好记,于是我们引入了域名,用一串有实际意义的字符串来对应IP地址,这就是DNS域名系统。
最早的域名系统通过hosts文件来记录,随着网站越来越多,现在DNS采用服务器的方式来记录。
那么如果预防DNS服务器崩溃呢?
- 我们在访问网站时,并不是每次都需要访问DNS服务器,因为一个域名对应着的IP地址可能很多年都不会变,浏览器会对域名和IP地址进行缓存,通过缓存,大大减少了对DNS服务器的请求次数。
- 通过分布式系统(有关分布式系统后面我们会详细记录)