网络原理IP协议/以太网
Posted 红苹果超好吃
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络原理IP协议/以太网相关的知识,希望对你有一定的参考价值。
大家快来学习啦~~~
目录
一、网络层
1.IP协议
①IP协议的报头格式以及各部分说明:
②对以上其它重要部分再次进行说明:
1.16位总长度:
16位,64k,也就是说单个IP数据报最大程度不能够超过64k。但是在实际中,我们不免会遇到超过64k的数据报,那么这个时候该怎么办呢?
我们就只能使用IP协议自身实现的分包,组包的操作。 而下面介绍的这三个部分,就是用来完成分包,组包操作的核心
2.16位标识,3位标志,13位片偏移:
a.各部分讲解:
b.如何实现分包操作?
注意!!!在分包的过程中,每个分包本身也不能超过64k.
这个时候就会有人问,那为什么TCP报头只有一个?
这里给大家举个例子:
我有一个作业本,某天上课的时候,老师要求用纸质完成,周围同学没有,纷纷向我借,我就把撕下一张张作业纸给他们,我就相当于把这个作业本分成了很多份,但是,有作业本封面的人却只有我一个。而所有部分合起来才是一个完整的本子。
3.8位生存时间(TTL):
指一个IP数据报在网络中所能存活的最长时间,这里的单位不是s或者ms,而是转发次数。
对于一个IP数据报而言,当它开始发送的时候,会有一个初始的TTL(常见取值128,64)。当它每经过一个路由器的时候,这个TTL就会自动减1,而当它减到0了就说明永远到不了了,这个时候,收到这个包的路由器就会把它给丢弃(因为在网络中硬件资源是有限的,不可能无休止的转发)
1.1地址管理
IP地址格式:
对于IPv4而言,一个IP地址本质上是一个32位的整数,我们常会用到“点分10进制”的方式来表示这个IP地址。三个点把32位整数分为4个部分,每个部分一个字节,每部分的取值范围是0-255(1111 1111)
1.1.1普通地址
IP地址的组成:
IP地址是由网络号+主机号组成的
(网络号:是用来描述当前网段的信息,也就是当前局域网的标识。主机号:是用来区分局域网内部的主机)
下面用我自己电脑上的IP地址来做示范:
这个时候,就会有人发生疑问了,到底网络号是多少个bit位?前3个吗?是固定的吗?
答案实则是不然的。这个网络号的位数是根据子网掩码来决定的。
那么子网掩码是怎么来决定的呢?
子网掩码的左侧都是1,右侧都是0,(不会0,1混着排列),左边的这些1就表示网络号,剩下0就是表示哪些位是主机号。(仍然用自己电脑上的网络掩码来举)
1.1.2特殊地址
①网络号:
如果IP的主机号全为0,该IP就表示一个网络号(局域网中的一个正常设备,主机号不能为0)
②广播地址:
如果IP的主机号全为1,该IP就是一个"广播地址",往这个IP发送的消息,整个局域网都可以收到。
③环回IP:
如果IP地址是以127开头,就表示这是一个"环回IP",即表示主机自己
如果IP地址是10开头,或者192.168或者127.16-127.31开头的,表示该IP是一个局域网内部的IP(内网IP),剩下的IP被称为是外网IP(直接在广域网上使用的)。
注意:!!!
外网IP一定是唯一的,每个外网IP都会对应一个唯一的设备,而内网IP只在当前局域网内部是唯一的,但是在不同的局域网内可以有内网相同的IP设备。
这个时候有人又会有疑问了,对于我们的认知来讲不是每一个IP地址和设备都是一一对应的关系,而现在确实多个设备对应一个IP这种多对一的关系,那么为什么会这样呢?
这个时候,我们就用1.1.3来解决这个问题。
1.1.3NAT机制
当前使用的版本是IPv4,已知是一个32位的整数,而IPv4所能表示的最大范围约在42亿九千万。而当前互联网的趋势可能家家户户平均下来都有多台,显然这样的局面是远远不够的,因此我们采用三个方法,试图解决这个问题。
①动态分配IP地址
所谓动态分配,是指让每个设备连网时才有IP,不连网时就没有IP,也就是,这一个设备可以有多个用户进行使用,很显然,这不能从根本上解决问题
②NAT机制
指的是让多个设备共用一个IP(这里的IP是指外网IP),我们都知道网络分为了局域网(内网)和广域网(外网),我们就要求外网IP必须表示是唯一的设备,而同时,内网的若干设备,可以共用一个外网IP,这个时候IP地址的压力就会缓解很多啦。
而我们仍然需要知道:
对于NAT机制来说,它将网络分为了外网,内网两个部分,这个时候就表明,对于一个外网IP来说,可以在互联网任何地方进行访问,并且也可以访问到。对于一个内网IP来说,只能在其当前的局域网内进行访问,且任何一个内网IP在其自身的局域网中是唯一的,但是对于不同的局域网而言,他们可能会有相同的内网IP,这是很正常的。
关于NAT机制,还有值得注意的一点,当多个设备使用同一个IP地址,有多台设备访问外网的同一服务器,服务器收到的IP地址是一样的,那么我们如何准确地对不同设备回复响应呢?
但是这个时候又会面临一个问题,要是源端口号相同咋办?(因为源端口号是系统随机分配的,虽然相同的可能性很小,但不排除)
这个时候NAT不光会把内网IP调整成外网IP,同时也会对端口进行内部的调整。(详细见图)
但是,即使这样可以很大程度上解决问题,但是仍然不能从根本上解决问题。
下面的IPv6就是让我们从根本上来解决问题。
③IPv6
为什么说IPv6从根本上解决了问题?
这是因为IPv6报头用了一个更长的字段来解决问题。
:16个字节,128位,这和IPv4的4个字节,比起32位是呈幂指数的增长,据说可以为地球上的每一粒沙子都可以分配一个IP地址。都这样了,难道还怕不够用吗?
但是为什么IPv6没有被全面普及?这是因为要同时更新硬件设备,成本太高所导致的问题。
1.2路由选择
①什么是路由选择?
路由选择其实就是规划路径,数据想要从一个设备到另一个设备,需要找出一条通道,来完成,使得它来完成整个传输的过程。
②具体过程:
例如:IP数据报中的目的地址,就表示了这个包究竟要发到哪里去。
对于这个目的地址来说,如果路由器直接认识,那么就会告诉你该怎么走。就算该路由器不认识,它也会告诉你先关路径(大致位置),到了新的位置后,你又可以继续问新的路由器,而要是问了新的路由器后有了多种选择,那么,我们就可以选择一条更为合适的路径。
举个通俗的例子:
当你在问别人路的时候,别人不一定准确知道,但是极大可能,他知道大致方位,他就会告诉你到他熟悉的地方,到了那之后,你又可以问新的人,直到到达目的地为止。
③什么叫路由器认识这个IP?
这是路由器在内部中维护了一个路由信息表(一种数据结构),表里面记录一些网段信息以及每个网络号对应的网络接口(网络接口就直接对应到路由器里面具体的端口)。那么路由器时如何形成路由表的?
当路由器接入网络后,就会和相邻的设备朋友“认识认识”,在认识的时候就构造了这个信息表,当然也可以直接手动进行导入。
二、数据链路层
对于数据链路层而言,最主要的协议,莫属以太网了,下面就让我们来认识一下以太网协议。
1.以太网协议
①什么是以太网协议?
以太网协议不仅仅规定了数据链路层的内容,也规定了物理层的内容。
②认识以太网数据帧:
1.mac地址:
很多人在这里会感到困惑,明明已经有了IP地址,那么为什么还要有mac地址呢?
这是因为,在很久很久以前,网络层协议和数据链层协议都是独立研发出来的。因此,你是否会觉得当今来看的话有些重复,然而在如今,当然又有新的见解了咯。
如今,IP地址是用来表示一次传输过程中的起点和终点。
而mac地址是用来表示一次传输过程中的两个相邻节点的地址,也就是说,一个以太网数据帧每次转发的时候,它的源mac地址和目的mac地址均会发生改变。
举个通俗的例子:
我从成都到北京,源IP地址为成都,目的IP地址为北京。
而我先从成都到河北,再从河北到北京,就涉及到两组mac地址(源mac地址:成都,目的mac地址:河北 => 源mac地址:河北,目的mac地址:北京)
2.帧尾:
帧尾的功能同UDP中一致起的是校验的作用,它是基于CRC算法的校验和。
3.MTU:(46~1500表示数据的加载范围)
MTU表示一个以太网数据帧能够承载的数据范围。
而这个范围取决于硬件设备,而以太网也是和硬件设备密切相关的,而不同的数据链路层设备对应的协议可能不同,MTU也就不同。那么要是数据报超过了MTU怎么办?这就会用到我们前面讲的IP分包,IP分包的并不是给IP报头64k准备的,更多的是用于此处适应数据链路层的MTU。
MTU与TCP协议的联系:
MSS:是TCP在IP不分层的情况下,所能搭载的最大载荷。与此同时,MTU也取决于TCP和IP的报头长度(是可以变长的)。
而MTU和MSS的联系:
4.ARP:(ARP报文不是用来传输数据的,而只是起到简单的辅助作用)
像路由器这样的设备在转发数据的时候,首先会拿到一个目的IP,通过这个目的IP来决定接下来的路怎么去走。而我们前面也讲到了每相邻路径实际是由mac地址来决定的,而目的mac是啥?这就要根据ARP协议,建立起IP=>mac这样的映射关系。
当设备启动的时候,就会向局域网中广播ARP报文,然后每个报文收到后都会给出一个应答,这个应答中就包含了自己的IP和mac地址,然后发起广播的一方就可以根据这些回应建立起这样的映射表了。
这里建立起这样的映射表,通俗一点来讲,还是用老例子:
成都到北京。这就建立起了成都=>河北=>北京这样的映射路线表了
2.DNS协议
①什么是DNS协议?
这是一个域名解析协议,位于应用层
②为什么会有这个协议?
这是因为就算将IP地址点份十进制的形式,但是对于我们来记忆来说还是有一定难度。为了解决这个问题,就决定使用了一串英文字母来表示这个IP地址,而这串英文字母就是域名,类似于www.baidu.com这就是一个域名,而且域名和IP地址是一一对应的关系。
③DNS的前身:
DNS系统刚开始的时候只是一个普通的文件:hosts文件。
④DNS在全球是如何进行推广使用的?
如今host文件也不再使用了,因为全世界的域名太多了,任凭这样改的话,是非常低效的,因此就成立了一个机构专门负责维护这里的域名和IP地址的对应关系,假如你想申请一个域名的话,就可以去这个机构报备一下就可以。
这个机构维护一组服务器就会把hosts文件存到这个服务器里面(域名解析服务器),要是自己想对其域名进行解析的话,就访问一下这个总的服务器就OK。
这个时候就会有人说,那这个多麻烦,每个设备上网要是都去访问这个解析服务器,那这个服务器的压力也太大了吧。
因此就把这个总的域名解析服务器设为根域名解析服务器,另外在每个国家每个地区都有各自的网络运行商,这些运营商就会就近架设域名解析镜像服务器(定时回合根域名解析服务器进行同步),像我们平时上网的话就会访问这些就近的镜像服务器。
⑤DNS遇到的问题:
不知道大家在上网的时候有没有遇到这样的问题:QQ能登录上,但是打不开浏览器。这就是因为就近的域名解析镜像服务器挂了(QQ使用的是自己写死的IP来访问QQ服务器,是不需要进行域名解析的)。
既然遇到了问题,那么我们该如何解决?
手动更改自己的域名解析服务器:打开我的电脑网络设置找到更改适配器选项,点击以太网属性,选择TCP/IP将自动获取域名解析服务器改成手动获取就可以。需要获取的域名解析服务器可以在网上进行搜索。
每当我们查询了DNS后,主机会对其进行缓存一段时间,当我们下次访问同一域名,就可以省略查询DNS的过程了,对于DNS域名和IP的对应关系是很少会改变的。
网络部分的内容到这里就结束啦,
之后紧着博主会跟前端三剑客(html,CSS,JS)相关内容哦 ,
大家可以来看看
以上是关于网络原理IP协议/以太网的主要内容,如果未能解决你的问题,请参考以下文章
[架构之路-41]:目标系统 - 系统软件 - Linux下的网络通信-1-计算机网络拓扑架构ISO协议栈以太网协议栈与工作原理