Принцип работы языков программирования с сетью
Хочу для себя понять общий принцип работы с сетью в таких языках как go, nodejs и так далее
Верны ли мои предположения :
Операционна система предоставляет api для работы с транспортным уровнем(tcp, upd) в виде сокета, а именно набор операций, например listen, send, receive, close, bind и так далее, обращение к api сокета происходит через системные вызовы ОС
Задача языка программирования, реализовать по спецификации протоколы прикладного уровня
Пример. Для отправки http сообщения, язык программирования упаковывает данные в формат http, а далее просто использует api сокета для отправки данных в сеть с помощью операций i/o, делегируя ОС всю работу на транспортном уровне
Ответы (2 шт):
В целом, Вам уже ответили в комментариях.
Я просто хочу подчеркнуть, что Go - это очень хороший пример: это язык, который развивается так быстро, что некотрые фичи, находящиеся в бета-ветке, на глазах становятся частью стандартной библиотеки.
А в общем - в большинстве случаев, поддержка в библиотеках протокола HTTP обычно настолько хороша, что Вы можете несколько лет программировать на языке, использовать HTTP и даже не задумаваться, как там всё "в кишочках". Хотя - да, есть место (мне кажется, что в Go это уже давно часть стандартной библиотеки), где находится реализация того или иного протокола.
Отвечу не как эксперт, но на уровне байки. Может быть, помните, что в середине прошлого века была популярна такая пневмопочта. По ней было много механических наработок в отношении маршрутизации, децентрализации. Ее закат и появление arpanet приблизительно совпадают по времени, и между ними много общего, начиная с пакетов (посылок, капсул). Суть в том, что посылается пакет на котором написан адрес, и его маршрут определяют routers. Что в этом пакете никого не волнует, главное чтобы был подписан адрес. Соответственно, задача упаковать изначально большие данные в мелкие посылки, подписать их, передать в сеть. Над этой идеей много надстроек вроде tcp- посылки с уведомлением о доставке, udp-без уведомления, SSH когда ты просишь шкатулку с защелкой (английским замком т.е. открытый ключ), кладешь содержимое, защелкиваешь отправляешь обратно. Содержимое это html, правила передачи его между пользователями -http (HyperText Transfer Protocol). И тд, аналогия с пневмопочтой мне упрощает понимание. Что касается сокетов (i.e. разьем, вилка-розетка) это изначально и сейчас способ передачи данных на одном компьютере a-la Unix между программами. Его расширили до между компьютеров. Не принципиально передавать пакеты в сеть через сокеты, главное чтобы был Input/Output, просто интерфейс сокетов был более привычен программистам.