【JavaEE】网络原理——网络层+数据链路层

07-17 1899阅读

【JavaEE】网络原理——网络层+数据链路层

🤡🤡🤡个人主页🤡🤡🤡

🤡🤡🤡JavaEE专栏🤡🤡🤡

🤡🤡🤡上一篇文章:【JavaEE】网络原理——传输层协议🤡🤡🤡

文章目录

  • 1.网络层
    • 1.1IP协议的报文格式
    • 1.2IP地址基本规则
      • 1.2.1网段划分
      • 1.2.2特殊IP地址
      • 1.2.3路由选择
      • 2.数据链路层
        • 2.1以太网协议

          1.网络层

          1.1IP协议的报文格式

          【JavaEE】网络原理——网络层+数据链路层

          1. 4位版本:就是ipv4和ipv6两个版本,此处的报文格式是ipv4的。
          2. 4位首部长度:此处的和TCP是一样的,单位为字节,范围为0-15,则最大报头字节为15*4=60字节,最小为20字节。
          3. 8位服务类型:其实只有4位有效,并且这4位还是互斥的,有一位为1则其余三位都为0.

            【JavaEE】网络原理——网络层+数据链路层

          4. 16位总长度:指IP报头和载荷的和,通过这个长度可以算出TCP的载荷长度。

            【JavaEE】网络原理——网络层+数据链路层

            TCP载荷=IP总长度-IP报头-TCP报头

            此处的16位,那么IP的数据包也最多只有64kb?

            为了解决这个问题,IP有自动拆包和自动组包的特性

            【JavaEE】网络原理——网络层+数据链路层

            以上就是拆包的过程,那么接收方怎么把这些拆包的数据包组成一个完整的IP数据包呢。

          5. 16位标识:用来区分哪些数据包需要进行合并
          6. 3位标志:其实有用的只有2位,其中一位是表示该数据包是否触发拆包的效果,进而确定是否要组包,另一个标志位是在组包的时候标记最后一个包,在组包的过程,发现了这个标记说明到达了这个完整包的最后一部分。
          7. 13位片偏移:这个就是标记若干个要拼接数据包的先后顺序,片偏移量越大就越在后面。
          8. 8位生存时间:其实是IP数据包在网络转发的次数,一个IP数据包的初始情况下,有一个TTL的值(像32/64这样的整数)每经过一次路由器转发就-1,减到了0那么就丢包了,这个初始值是可配置的,是系统内核的参数。
          9. 8位协议:这里就是描述载荷部分是哪种协议的数据包,比如TCP,UDP等等协议
          10. 16位首部检验和:和TCP,UDP的检验和是一样的。
          11. IP地址:是一个32位的整数,为了让人们可以更好的观察,我们采取"点分十进制"的方式,理论上ip个数有42亿多,放到之前肯定是无法用完的,但是就现在而言,网络的发展,ip地址是远远不够的。

            IP地址不够用怎么办?

            1)动态分配IP地址

            比如这个地方的人不用,就给另一边的人用,就是空闲下来的ip地址分配给需要用的人。

            2)NAT机制——网络地址映射

            外网IP不可以重复,内网IP在不同的局域网中可以重复。

            a)内网/局域网

            192.168.* 10* 172.16-172.31* 一般这些IP地址开头的就是局域网,其余就是外网IP

            b)外网/广域网

            在NAT机制下有这几种情况:

            1)同一个局域网中,内网IP访问内网IP是可以的。

            2)不同的局域网中,内网IP访问内网IP是不可以的

            3)外网IP访问外网IP是可以的

            4)外网IP访问内网IP是不可以的

            5)内网IP访问外网IP是可以的

            对于内网IP访问外网IP这个问题我们来画一张图来描述

            首先我们以单个主机访问JD为例:

            【JavaEE】网络原理——网络层+数据链路层

            在同一个局域网下多个主机访问JD?

            我们需要添加一个端口号和一个映射表,通过端口号和映射表不仅可以让多个主机访问JD,而且还可以让JD将响应一一返回给我们的主机。

            映射表的简略模型:

            【JavaEE】网络原理——网络层+数据链路层

            【JavaEE】网络原理——网络层+数据链路层

            同局域网下的内网IP端口号相同怎么访问JD外网IP?

            只需要在端口号这改一下即可,将新端口号改为不一样的即可,这个新端口号是由运营商路由器自己分配的,类似于我们自己的主机给我们主机上的程序自动分配端口号一样

            不同局域网下内网IP相同怎么访问JD外网IP?

            【JavaEE】网络原理——网络层+数据链路层

          1.2IP地址基本规则

          1.2.1网段划分

          同一个局域网的主机要按照一定规则分配IP地址

          这个规则就是:

          将一个IP地址分为两部分,一部分为网络号,一部分为主机号。

          在同一个局域网下网络号相同,但主机号不同。

          那么怎么划分网络号和主机号呢?

          这里就需要一个新的概念子网掩码,这个子网掩码就是帮助我们来设置网络号和主机号的,子网掩码左边部分全为1,右边部分全为0,这些01是指二进制,而且01不能交替

          比如:255.255.255.0这个子网掩码就是前三个字节全为1,后一个字节全为0。

          全为1的就是网络号,全为0的就是主机号

          【JavaEE】网络原理——网络层+数据链路层

          1.2.2特殊IP地址

          1. 主机号全为0:这样的IP表示网段,不应该分配给具体的主机
          2. 主机号全为1:这样的IP表示广播IP,在广播IP发送数据,就会发送给局域网中所有的设备,例如:手机投屏。

            广播IP在发送数据是发送UDP数据包而不是TCP数据包,原因就是TCP是有连接的,但是广播IP在发送数据给每一个设备的时候并不需要建立连接,只需要发送到了就行。‘

          3. 127.*开头的地址:这样的地址称为环回地址,就是将数据包自己发送给自己,比如客户端和服务器在同一个主机上。

          1.2.3路由选择

          路由选择其实就是找从源IP到目的IP的路径,这里类似于我们生活中的地图导航,规划出一个路线"最优解",但是在我们路由这里就不是"最优解"而是"较优解"其实就是我们网络路线复杂程度很高,并且路由不是对全局网络路线都很了解,只对周围路由的网络线路了解。

          对于源IP找目的IP是"探索性"的方式寻找,在寻找的过程中会借助"路由表"来寻找目的IP。

          2.数据链路层

          2.1以太网协议

          【JavaEE】网络原理——网络层+数据链路层

          mac地址:为了区分网络传输中不同设备的。

          mac地址/物理地址:

          【JavaEE】网络原理——网络层+数据链路层

          mac地址在网卡出厂的时候就设置好的,原则上不同点网卡的mac地址是不一样的,因此mac地址可以作为主机的一种身份标识。

          IP地址是支持整个传输过程的转发

          mac地址的作用是支持两个相邻节点之间的转发。

          比如:生活中出游的路线规划

          假设我要从株洲出发到重庆旅游,那么我规划的路线是这样的:

          株洲-长沙-重庆

          株洲作为源IP,重庆作为目的IP

          株洲-长沙:株洲就是源mac,长沙就是目的mac

          长沙-重庆:长沙就是源mac,重庆就是目的mac

          这个过程中源mac和目的mac一直是变化的,可以将mac作为短期目标,而ip作为长期目标来理解。

          在数据传输的过程中,IP会用到路由表,mac会用到转发表,这两个表不是同一个东西

          ARP协议就是为了给每一个路由器/交换机来建立转发表的。

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]