I'm going to brute force it numerically.

First, let's define the function we're interested in:

 fun = KnotData[{3, 1}, "SpaceCurve"]

Imagine that this function `fun[t]` describes the position of a moving point in time. The the magnitude of its velocity as a function of the time `t` is

 Sqrt[#.#] & [fun'[t]]

I'm going to make an interpolating function out of this to speed up and simplify the numerical calculations:

 v = FunctionInterpolation[Sqrt[#.#] & [fun'[t]], {t, 0, 2 Pi}]

The integral (antiderivative) of this function will give us the distance covered as a function of time.

 dist = Derivative[-1][v]

This is a monotonically increasing function, so it can be inverted:

 invdist = InverseFunction[dist]

Using the inverse we can generate the times at which the point passes through the equally spaced points. Let's divide the curve into 20 equal-length segments:

 times = Table[invdist[x], {x, 0, dist[2 Pi], dist[2 Pi]/20}]

Now we can easily plot the equally spaced points:

 Show[
 ParametricPlot3D[fun[t], {t, 0, 2 Pi}, PlotStyle -> Black],
 ListPointPlot3D[fun /@ times, PlotStyle -> Directive[PointSize[0.02], Red]]
 ]
 
![Mathematica graphics](https://i.sstatic.net/QMBZJ.png)