Reptiles and snakes are creatures that have unique forms of locomotion. Unlike mammals, which primarily use their legs, snakes and reptiles tend to use their bodies and spine as a major part of locomotion.
Quadrupedal reptiles, such as lizards and crocodiles, tend to keep their stomachs very close to the ground, with the legs splayed out to the side. With few exceptions, most four legged reptiles have the same awkward position. This keeps the reptile's center of gravity quite low. This makes it more difficult to raise the body off the ground. As a contrast, quadrupedal mammals have their limbs directly underneath the body, which allows the legs to carry all of the animal's weight, which is more efficient.
A reptile walk is similar to a mammalian walk in that the front and back legs move in opposition. The reptile's low center of gravity, however, forces the body to work more. As it walks, a reptile will bend it's torso into a curve to help push the feet along. Despite this awkward motion, some reptiles are capable of moderate speeds. Crocodilians raise their bodies off the ground and make short, fast rushes. Short-bodied lizards also can move fast for short distances. In fact, some lizards can lift their front legs off the ground when running. Longer bodied lizards have greater difficulty in raising their bodies, since they have short legs. This forces their bodies to move more like snakes. In fact, the reptiles with the shortest legs actually have no legs all - these are called snakes.
Snakes move in a very unique way, and to the casual observer, it seems almost magical than an animal with no legs can move so quickly and gracefully. Snakes travel best on surfaces with obstructions and some roughness. This gives their bellies something to grip. Snakes do not do very well on slippery surfaces.
Try putting a snake on loose sand and watch it crawl. Every part of its belly touches the ground and it flows along in a series of S-curves. On the back of each curve you will notice the sand has been pushed up. The body pivots and pushes sidewise against these piles and is propelled forward. They swim in water with the same motion.
Snakes several different modes of locomotion. The method a snake uses depends on several factors such as the size of the snake, the roughness of the surface, and the speed of travel. Typically, the snake finds a bump or a rough spot on the surface, and pushes against that with it's body to move forward.
Serpentine Locomotion uses the classic "S" curve and is the most common method of travel used by snakes. In lateral undulation, waves of sideways bending are propagated along the body from head to tail. The snake's muscles are activated sequentially along the body, relaxing and contracting to form an "S" shape. As the snake progresses, each point along its body follows along the path established by the head and neck, like the cars of a train following the engine as it moves along the track.
Sidewinding is used by many snakes to crawl on smooth or slippery surfaces. It is similar to lateral undulation in the pattern of bending, but differs in a few ways. First, the snake's body doesn't slide along the ground, instead it lifts part of the body, while firmly setting down other parts. This allows the snake to get a better grip.
Next, the parts of the body that are not firmly planted on the ground lift up from the ground causing the body to roll along the ground from neck to tail, forming a characteristic track.
Finally, because the snake repeatedly lifts parts of the body, it moves diagonally relative to the tracks it forms on the ground.
When animating this type of motion, the distance that the snake lifts it's body off the ground is usually measured in fractions of an inch, which practically negligible from the audience's viewpoint. For added effect, you can exaggerate this lift.
In Concertina Locomotion, the snake alternately bends up the body like an accordion and then lifts and straightens out the body to move forward. The front part of the body then comes to rest on the surface and the back part of the body is lifted and pulled up into the accordion shape again. Concertina locomotion is used mostly in crawling through tunnels or narrow passages and in climbing.
Rectilinear Locomotion lets the snake move straight ahead with it's body stretched out, or perhaps on a wide arc. This type of motion is used primarily by large snakes such as boas and pythons. In rectilinear locomotion, the action is somewhat like rippling the belly, as the scales on the snake's belly scales are pulled forward and lifted off the ground, then set down and pushed backwards. Because the scales are aligned much like a ratchet, this pulls the snake forward.
These are simply motions a snakes uses to travel forward. Additionally, snakes can also perform many other motions. They can coil up and strike, climb trees, swim, as well as many others. In all of these, the snake uses it's entire body to move and position itself.
As you can see, snakes can perform some pretty amazing things with their bodies. In order to animate a snake properly, you'll need to create a skeleton or other setup that provides maximum flexibility for the animator.
Your first instinct might be to create a simple chain of bones and link them together to form an IK or FK chain. This might work for a simple motion, but it has a number of drawbacks.
With standard IK and FK solutions seriously deficient for snake animation, you will probably need to turn to other methods. One method may be simply a collection of skeletal bones that are not linked in a hierarchy. You would simply animate the snake by moving each bone individually. This, however, can be a hard to manage.
Splines are a great method for animating snakes. A simple spline looks like a snake, and can be used for animation as well. Most packages support spline deformation in one form or another. Many package will allow you to animate the control points of the spline directly. If this isn't the case, you can make these points into one point clusters and animate those.
Spline Deformation, also known as a wire deformer, is probably the easiest way to create such a setup. In this method, an object's deformation is controlled by a separate spline. A very similar method is to build the snake using a tool such as a loft, using a series of circular outlines to define the snake's diameter, and a spline path to define the length. Most packages will allow you to use this path as a control object as well, so again - animating this spline deforms the body.
Many software packages now support a tool that is generically dubbed spline IK, which uses a spline to control a chain of bones. The spline manipulates a chain of bones, which, in turn, deform the model. This is by far the best solution is to animate an animal such as a snake. The spline allows for easy manipulation, while the bones keep the creature's body from gaining or losing volume.
The head of the snake definitely moves differently from the rest of the body. You'll need to set up the snake with a short "neck" area to allow the head to move independently. This will allow the snake to lift it's head and look around, for example. This can be a separatge chain of bones, or you can simply manipulate the controlling spline as well.