covariant and contravariant components
Once spacetime has a metric with minus signs, there turn out to be two natural ways to attach components to a vector — and they are not equal. 'Contravariant' (upper index) and 'covariant' (lower index) components are these two versions of the same geometric object; the metric is the dictionary that translates between them. Getting the index positions right is the single most important piece of covariant bookkeeping.
Contravariant components V^mu are the ordinary expansion of a vector along the coordinate axes (like the components of a displacement); they transform with the Lorentz matrix, V'^mu = Lambda^mu_nu V^nu. Covariant components V_mu are obtained by lowering the index with the metric, V_mu = eta_munu V^nu, and transform with the inverse matrix — hence 'co-variant' (varying WITH the basis) versus 'contra-variant' (varying against it). Geometrically, contravariant components describe a vector (an arrow), covariant components a one-form (a stack of level surfaces). In the (+,-,-,-) signature lowering an index flips the sign of the spatial components: if V^mu = (V^0, V), then V_mu = (V^0, -V).
The point of the machinery is invariants: a properly formed scalar always contracts one upper with one lower index, A_mu B^mu = eta_munu A^mu B^nu, and this contraction is Lorentz invariant. The Einstein summation convention sums an upper with a lower index for exactly this reason. Caveat and common trap: the four-gradient partial_mu = partial/partial x^mu naturally carries a LOWER index even though x^mu is upper — differentiation 'lowers' — and forgetting the spatial sign flip when raising or lowering is the most common source of wrong signs in relativistic calculations. In a purely Euclidean space (all + signs) the distinction collapses (V_mu = V^mu), which is why introductory vector calculus never needs it.
For the four-momentum p^mu = (E/c, p_x, p_y, p_z), the covariant form is p_mu = (E/c, -p_x, -p_y, -p_z), and the invariant p_mu p^mu = (E/c)^2 - |p|^2 = m^2 c^2 comes out right only because one index is up and one is down.
Contracting an upper with a lower index is what produces a frame-independent number.
An index 'up' and 'down' are genuinely different components once the metric has minus signs; you may only sum a repeated index when one copy is upper and one is lower. A sum over two upper (or two lower) indices is almost always a mistake.