Поверхностно про сеть:
ru.m.wikipedia.org/wiki/%D1%E5%F2%E5%E2%E0%FF_%EC%... - тут нужно уловить, что такое сигналы, что такое пакеты и что такое данные...
Теперь, о том как пишется собственно сервер (приложение). ОС предоставляет 4-е системных вызова (про сетевую карту, драйвера и как ОС работает с erhernet не буду рассказыывать). Собственно системные вызовы:
1) socket - создает сокет, для веб сервера, обычно это tcp;
2) bind - привязывает сокет к локальному ip-адресу сервера (железки) и на определенный порт. Нужно из-за того, что на железке может быть много ip-адресов;
3) listen - переводит сокет в состояние "слушать" (включает его на прием и передачу - если просто), это значит, что сокет готов принимать соединения от клиента (см tcp handshake) и ставить его в очередь ОС (очередь приложения backlog);
4) accept - создает сокет к клиенту, позволяя уже с ним обмениваться данными. Accept вызывает само приложение, в зависимости от алгоритма, учитывая что есть ресурсы на обработку клиентского запроса. Если accept не сделать, то соединение повиснит в очереди (backlog) на время таймаута выставленного со стороны клиента или сервера.
После accept, apache создает дочерний процесс, который уже и начинает из данных извлеченных из tcp "парсить" http по rfq (аля соглашению) и обрабатывать пользовательский запрос - разбирая зоголовки и выплевывая в сетевой буфер прочтенный с диска index.html с правильными заголовками http 1.0 или 1.1.