Принцип работы языков программирования с сетью

Хочу для себя понять общий принцип работы с сетью в таких языках как go, nodejs и так далее

Верны ли мои предположения :

  1. Операционна система предоставляет api для работы с транспортным уровнем(tcp, upd) в виде сокета, а именно набор операций, например listen, send, receive, close, bind и так далее, обращение к api сокета происходит через системные вызовы ОС

  2. Задача языка программирования, реализовать по спецификации протоколы прикладного уровня

  3. Пример. Для отправки http сообщения, язык программирования упаковывает данные в формат http, а далее просто использует api сокета для отправки данных в сеть с помощью операций i/o, делегируя ОС всю работу на транспортном уровне


Ответы (2 шт):

Автор решения: S.H.

В целом, Вам уже ответили в комментариях.

Я просто хочу подчеркнуть, что Go - это очень хороший пример: это язык, который развивается так быстро, что некотрые фичи, находящиеся в бета-ветке, на глазах становятся частью стандартной библиотеки.

А в общем - в большинстве случаев, поддержка в библиотеках протокола HTTP обычно настолько хороша, что Вы можете несколько лет программировать на языке, использовать HTTP и даже не задумаваться, как там всё "в кишочках". Хотя - да, есть место (мне кажется, что в Go это уже давно часть стандартной библиотеки), где находится реализация того или иного протокола.

→ Ссылка
Автор решения: John Nix

Отвечу не как эксперт, но на уровне байки. Может быть, помните, что в середине прошлого века была популярна такая пневмопочта. По ней было много механических наработок в отношении маршрутизации, децентрализации. Ее закат и появление arpanet приблизительно совпадают по времени, и между ними много общего, начиная с пакетов (посылок, капсул). Суть в том, что посылается пакет на котором написан адрес, и его маршрут определяют routers. Что в этом пакете никого не волнует, главное чтобы был подписан адрес. Соответственно, задача упаковать изначально большие данные в мелкие посылки, подписать их, передать в сеть. Над этой идеей много надстроек вроде tcp- посылки с уведомлением о доставке, udp-без уведомления, SSH когда ты просишь шкатулку с защелкой (английским замком т.е. открытый ключ), кладешь содержимое, защелкиваешь отправляешь обратно. Содержимое это html, правила передачи его между пользователями -http (HyperText Transfer Protocol). И тд, аналогия с пневмопочтой мне упрощает понимание. Что касается сокетов (i.e. разьем, вилка-розетка) это изначально и сейчас способ передачи данных на одном компьютере a-la Unix между программами. Его расширили до между компьютеров. Не принципиально передавать пакеты в сеть через сокеты, главное чтобы был Input/Output, просто интерфейс сокетов был более привычен программистам.

→ Ссылка