The above is a very good explanation of B-Spline surfaces using a matrix approach. However, for those less familiar with linear algebra, I'll try to explain B-Spline curves using a different approach. From that, it will be relatively simple to extend this to surfaces.

A B-Spile curve is very similar to a Bezier curve. In fact, if you understand the approach to constructing a Bezier curve, a B-Spline curve is only a generalization, thereof.

For a B-Spline curve, you are given L+1 control points (CPs) and what is called a knot vector with K+1 knots on it. Let us call the CPs d00 through d0L and call the knots u0 through uK. The degree of the curve, n, is given by n=K-L+1. Then to extrapolate a point on the B-Spline curve, you have to use the formula

di+1j = (1-a)*dij + a*dij+1

where a is the local parameter on the interval [u(j+i),u(j+n-i)). Specifically:

a = (u-uj+1)/(uj+n-i-uj+1)

You would repeat this process until you are left with one point, which is the point on the B-Spline curve. Below is an example calculation for clarity.

Our example will have 4 CPs and 6 knots on the knot vector. Therefore, the resulting curve will have be degree-3 (6-4+1). The order of calculation of the points would occur as follows:

d00
d01 d10
d02 d11 d20
d03 d22 d21 d30

So d00 and d01 would be used to calculate d11 and so forth until you arrived at d30, which is the point on the curve at the given parameter. To show how the knot span works, below is a graphic of what span each calculated point requires:

|--------|--------|--------|--------|--------|
u0       u1       u2       u3       u4       u5
|--------------------------|                     d10
         |--------------------------|            d11
                  |--------------------------|   d12
         |-----------------|                     d20
                  |-----------------|            d21
                  |--------|                     d30

It is important to note that the curve is only defined over the interval [u2,u3]. If there were more CPs and more knots, the curve would be defined over a larger span. In general, a B-Spline curve is defined over the interval [un-1,uK-n].

Hopefully, that explanation gives some idea as to how a B-Spline curve is constructed. To extend this idea to a surface, imagine a two-dimensional grid of CPs and two knot vectors. One would then calculate curves in one direction for the CPs to follow in the other direction. Then those CPs would be used to calculate points on the surface.

If there are things that are unclear me, drop me a message, and I will try to clear them up here.