网络层
网络层做的工作:
1、地址管理–>IP地址
2、路由选择–>数据包传输的路径规划
网络层主要的协议就是IP协议
IP协议的报头结构:
4位版本: 有两个取值,4表示IPv4,6表示IPv6,默认是IPv4
4位首部长度: IP协议的报头也是可变长的,实际报头长度是该值*4,例如首部长度为10时,实际报头长度是40
8位服务类型TOS: type of service,表示IP协议以哪种模式进行工作。3位优先权已经弃用,1位保留字段,实际上只有4位有效,4位分别表示:最小延迟,最大吞吐量,最高可靠性,最小成本,这4个相互冲突,只能选择一个
16位总长度: IP数据包的总长度,表示IP数据报整体占多少个字节,16位,也就是64kb,IP协议会把大的数据包拆成多个小的数据包,到达接收方后会自动组包。所以不代表IP协议不能传输64kb以上的数据包。
16位标识: 同一个载荷的数据会被分成多个IP数据包来进行传输,这些数据包的16位标识是相同的,
3位标志位: 只有2个有效,其中一个表示这个包是否需要组包(判断是否是拆包的一部分),另一个表示当前包是否是组包中最后一个包。剩下一个是保留位。
13位片偏移: 片偏移决定拼装组包时,数据包的位置
8位生存时间(TTL): 表示一个数据包在网络中最多存活多长时间。TTL的单位是次数,表示经过路由器转发的次数。如果一个IP数据包的中的目的IP写错了,写成不存在的IP地址,这样的数据包不能让它无限传输,当达到了TTL的上限后,这个数据包就会被自动丢弃。发送数据包时会有一个初始的TTL(32、64、128…),数据包每经过一个路由器转发,TTL就会-1,TTL一旦减为0,这个数据包就会被当前的路由器丢弃。
8位协议: 描述了IP数据包携带的载荷,是根据哪种传输层协议进行传输的(TCP、UDP等)
16位首部校验和: 验证数据在传输中是否出错(针对IP报头)
32位源IP地址: 描述IP数据包从哪来的
32位目的IP地址: 描述IP数据包到哪里去
选项: 可选的项
数据: 要传输的数据
关于IP地址:
IP地址一般是用32位整数描述的,一个IP地址分为两部分,左边部分是网络号,右边部分是主机号。至于哪些部分是网络号,哪些部分是主机号,需要根据子网掩码判断。根据子网掩码的二进制形式,判断,子网掩码为1的部分就是网络号,为0的部分就是主机号。例如:
子网掩码为255.255.255.0,IP地址为192.168.100.150,子网掩码换成二进制形式就是:11111111 11111111 11111111 00000000,说明前24位是网络号,也就是192.168.100是网络号,150是主机号。
以上这种子网掩码的方案,是比较常用的一种方式,还有一种方案:ABCDE五类网络,在如今,这种方式只出现在教材中,我们不过多介绍。
特殊的IP地址:
1、主机号全为0:这个IP相当于当前网段(相当于网络号)。给某个设备分配IP地址时不能把主机号设为全0
2、主机号全为1:如192.168.0.255,这个IP是广播IP,往这个IP地址发送数据包,相当于给整个局域网中所有的设备发送了数据包
3、127开头:这个叫环回IP,给这个IP地址发送数据,设备就会从这个IP地址上收到相同的数据,相当于自己给自己发,常见的环回IP是127.0.0.1
我们知道IP地址用是32位表示的,表示的范围也就是0 ~ 42亿9千万,这样的范围放在现在的时代,有非常大的可能会出现IP地址不够用的情况,毕竟光全球人口数量就比42亿多,那么有没有什么办法解决这个问题?
方案1:动态分配IP地址
动态分配就是,当设备上网的时候,就分配IP地址,不上网的时候就不分配。
方案2:NAT(Network Address Translation)网络地址转换
NAT的原理就是,一个设备上网的时候,IP数据包的地址会被NAT设备进行修改。
我们一般把IP地址分为两大类:
一类是私网IP(内网IP):10.开头,前8位是网络号、172.16 ~ 172.31,前12位是网络号,192.168开头,前16位是网络号。这些范围内的都称为私网IP
一类是公网IP(外网IP):除了私网IP范围之外的IP
同一个局域网内,A主机范围主机B是可以的(不涉及NAT);公网上的设备A访问公网上的设备B也是可以的(不涉及NAT);一个局域网中的主机A访问另一个局域网的设备B,NAT机制不允许这样做;NAT主要处理的是:局域网内部的设备A访问公网上的设备B。
问题是,局域网内不止我一个人使用CSDN,当CSDN收到数据包时,返回数据包,怎么知道是给谁返回呢?网络通信中不止有IP地址信息,还有端口号,在NAT中,端口号可以区分不同主机上的不同应用程序。
运营商的NAT设备,会保存替换的映射关系,根据映射关系,就能确定是返回给我还是返回给朋友。
方案3:使用IPv6,IPv4使用的是32位表示地址,而IPv6使用128位表示,这个范围可以使地球上的每一粒沙子都能有自己的IP地址,IPv6不是IPv4的升级版,所以想大力推广使用IPv6,需要更换硬件设备,成本非常大,目前咱们普及程度是非常高了~
路由选择:
路由选择就是路线规划,规划数据包在网络中走哪个路由器进行传输。当IP数据包到达路由器时,路由器会查看目的IP,决定数据包是不是能直接发给目的主机,还是说要发送给下一个路由器,如此往复直到达到目的IP地址。具体的流程可以查看资料,咱们Java程序员了解一下即可。
数据链路层
数据链路层中最常见的协议:以太网
以太网数据帧格式如下:
目的地址和源地址都是mac地址,不是IP地址。
mac地址和IP地址的区别
1、mac地址使用6个字节表示,范围大
2、一般计算机或者其他设备在出厂时,mac地址就被分配好了,不能再修改了,mac地址也能作为设备的身份标识。IP地址可以手动修改
3、mac地址使用在数据链路层,用来实现两个设备之间的数据转发;IP地址是在网络层中使用的。
类型:描述了载荷中是什么样的数据
ARP是建立IP地址和mac地址的映射关系,当前设备接入网络时,会往广播地址发送ARP报文,收到ARP请求的设备会返回ARP响应,在响应中告知自己的IP和mac地址
46 ~ 1500字节:1500描述了数据链路层数据帧最大载荷长度
以上是网络层和数据链路层的相关介绍,作为Java程序员,我们需要了解的就是这些~