去评论
海欣资源

IP协议/以太网原理介绍

Mesh
2022/06/02 19:56:10
一、网络层
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的对应关系是很少会改变的。