首页 > 代码库 > 五层结构 判断两个IP是否处于同一子网?

五层结构 判断两个IP是否处于同一子网?

互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层

技术分享

应用层(各种协议)
                                              端口
HTTP-----超文本传输协议----- 80
FTP  -----文件传输协议    ----- 21
DNS  -----域名解析协议    ----- 53
Telnet---远程控制协议      ----- 23
SMTP ----网络管理协议    ----- 25

技术分享

传输层

基于端口进行通讯
补充:端口范围0-65535,0-1023为系统占用端口

TCP:可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。

UDP:不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。

 

tcp报文

技术分享

 

tcp三次握手和四次挥手

 

技术分享

 

网络层


IP地址:网络号(标识子网)和主机号(标识主机)两部分

 

 ARP协议

arp协议由来:计算机通信基本靠吼,即广播的方式,所有上层的包到最后都要封装上以太网头,然后通过以太网协议发送,在谈及以太网协议时候,我门了解到

通信是基于mac的广播方式实现,计算机在发包时,获取自身的mac是容易的,如何获取目标主机的mac,就需要通过arp协议

arp协议功能:广播的方式发送数据包,获取目标主机的mac地址

 

判断两个IP是否处于同一子网?

已知IP地址172.16.10.1和172.16.10.2的子网掩码都是255.255.255.0,请问它们是否在同
一个子网络?两者与子网掩码分别进行AND运算,

172.16.10.1:10101100.00010000.00001010.00000001
255.255.255.255.0:11111111.11111111.11111111.00000000
AND运算得网络地址结果:
10101100.00010000.00001010.00000000->172.16.10.0


172.16.10.2:10101100.00010000.00001010.00000010
255255.255.255.0:11111111.11111111.11111111.00000000
AND运算得网络地址结果:
10101100.00010000.00001010.00000000->172.16.10.0

结果都是172.16.10.0,因此它们在同一个子网络。

 

协议工作方式:每台主机ip都是已知的

例如:主机172.16.10.10/24访问172.16.10.11/24

一:首先通过ip地址和子网掩码区分出自己所处的子网

 技术分享

二:分析172.16.10.10/24与172.16.10.11/24处于同一网络(如果不是同一网络,那么下表中目标ip为172.16.10.1,通过arp获取的是网关的mac)

技术分享
三:这个包会以广播的方式在发送端所处的自网内传输,所有主机接收后拆开包,发现目标ip为自己的,就响应,返回自己的mac

 


数据链路层

.一组电信号构成一个数据包,叫做‘帧’
.每一数据帧分成:报头head和数据data两部分

报头:源地址(6字节) 目的地址(6字节) 数据类型(6字节)
数据:最短46字节,最长1500字节
数据包:报头+数据 最短64字节,最长1518.

五层结构 判断两个IP是否处于同一子网?