It's mostly about triangles really
There are a number of *Draw commands to render something in OpenGL.
The *Draw command contain a mode parameter that tell OpenGL what primitive to draw. The normal rule when a primitive starts can be changed with glPrimitiveRestartIndex. That way it is possible to draw more then on triangle strip at the same time.
Each vertex in the vertex stream is a point. Each point is drawn as a screen-aligned square. The size of a point can be set with glPointSize (https://www.opengl.org/wiki/GLAPI/glPointSize) or from a shaders gl_PointSize if GL_PROGRAM_POINT_SIZE is enabled. Max size of points depends on implementation. gl_PointCoord can be used in fragment shader to get position inside point (0-1).
GL_LINES: Every 2 vertices form a line.
GL_LINE_STRIP: All the vertices form a single line with n-1 segments.
GL_LINE_LOOP: All the vertices form a line loop with n segments.
GL_TRIANGLES: Every three vertices form a triangle.
GL_TRIANGLE_STRIP: Every group of 3 adjacent vertices form a triangle.
GL_TRIANGLE_FAN: Every group of 2 adjecent vertices beoynd the first will form a triangle with the first one.
Non-indexed or Indexed
There are two main groups of draw functions in opengl and they are non-indexed (*Arrays) and indexed (*Elements). A array function use the vertices in the order they appear in the buffers to form primitives. A Elements function reads a GL_ELEMENT_ARRAY_BUFFER and use the values found in it as indices into the vertex buffers. The most basic function in each group are glDrawArrays and glDrawElements. Then there is many tweaks to the basic setup where each adds a new part of the names and makes them more and more horrible.
A BaseVertex functions are used on the indexed functions and takes a parameter used to offset the indices. So when this function is used the index 0 will be found at basevertex+0 in the vertex buffer.
Hints to opengl that no indices in the draw call will be outside start and end.
An indirect draw command takes the parameter from a buffer object. To use them a buffer object must be bound with the parameters to the GL_DRAW_INDIRECT_BUFFER target.
If one combine more then one object into the buffers this can be used to select the ones to draw. It is like calling multiple glDrawArrays or glDrawElements in a row.
Instancing draw the same vertices multiple (instancecount) times and it sends the number of the instance in a gl_InstanceID parameter to the shader.
MultiDrawIndirect - 2014
Multi-Draw-Indirect is here - 2010
Rendering Lots of Cubes - 2010