A normal map and a bump map do the same ultimate thing: they change the angle of a sample, which affects how light reflects off of it. However, they use different ways to get there.
A bump map is a black and white map of height. It can be used either in a displacement node (for material-wide bump mapping, depending on material settings) or in a bump node (potentially, for per-shader bump mapping within a single material.) When the bump map is evaluated, it looks at the value of the bump for the sample, and then at the value of the bump for at least two adjacent samples, and it uses the difference between these values, as well as the distance between those samples, to create an angle. For example, if one sample has a height of 1 m, and another sample that is 1m away has a height of 0m, that's a 45 degree angle.
There are two different kinds of normal maps, both of which are used with a "normal map" node. A normal map is never black and white. A tangent space normal map should be predominantly 0.5,0.5,1.0 RGB lavender. An object space normal map will look much more colorful than that, and, for a manifold mesh, should explore (almost) the entire color space. There is no material-wide option for normal maps as with a Displacement node for bump mapping; instead, the output of a normal map needs to be plugged into the normal input of every shader you want to use that modified normal.
An object space normal map represents remapped, object-space vectors. It ignores the existing normals of the object and simply replaces them with the normals that it looks up on the image. It is mildly better for static objects than a tangent space normal map, but is totally inappropriate for deforming objects. Many people never bother with object space normal maps, because the benefits over tangent space are so small-- a little precision, a tiny bit of performance-- compared to the mental cost of thinking about two different kinds of normal maps, one for static objects and one for deforming objects.
A tangent space normal map represents remapped tangent-space vectors (naturally.) Tangent space is a space where the Z vector is the direction of the unmodified normal of the sample and the X vector is the direction of increasing U, from the UV map. Yes, that's a per-sample space: there are as many different tangent spaces on a render as there are samples, and each sample uses its own space. This means that it is measured relative to the normals and the UV map of the mesh, which allows it to work with deforming objects.
Both types of normal map need to be made for a specific, fixed mesh, including that mesh's UV map in the case of a tangent space normal map. However, in practice, texture artists routinely provide normal maps that are normal maps of planes (object space and tangent space are the exact same space in the case of a default Blender plane), which people then use as tangent space normal maps on arbitrary meshes with arbitrary UV maps, and this does something, but not the right thing.
The advantage of bump maps is that they do not need to be made for a specific mesh or UV map. The disadvantage is that they do not tolerate magnification well: you will see pixelation as you zoom in on a bump-mapped surface. There are other minor differences: a normal map is slightly more performant; a bump map can be more intuitive to edit, like when changing a cross-section with an RGB curves node, something that wouldn't make any sense with a normal map.
The way to take advantage of the strengths of bump maps and the strengths of normal maps at the same time is to bake bump mapped materials to mesh-specific normal maps once the mesh and UV map are finalized.
You can tell the difference between a bump map and a normal map by color; with very little experience, it's easy enough to tell the difference between an object-space and tangent-space normal map by color. None of these are interchangeable: you can't use a black and white bump map as a normal map, you can't use a normal map as a bump map, and you can't use a tangent space normal map as object space or vice versa (except in the case of a default Blender plane.) Again, trying to do any of that will do something, but not the right thing. There is almost never any reason to combine normal and bump maps; if you're using a texture pack, use either their bump or their normal, not both. There are slightly more reasons to combine within a particular style, but this can be difficult to do for normal maps, particularly with Blender's handling of normal maps, and isn't really combining in the case of bump maps, where you're just adding two different heights.
If you're looking for best practices, the best practice is to never use a texture artist's normal map, because they don't know what your mesh is and so cannot create an accurate normal map for it, and to instead use their bump map, but to ultimately bake that bump map to a normal map. Or, to bake a normal map from the difference with a high poly sculpt, with a selected-to-active normal bake.