Поясняет Паша Вавилин, наставник на курсе по Python:
Если вы читаете эти строки, значит, вы точно использовали какой-то из протоколов сетевого взаимодействия. Протокол сетевого взаимодействия — это такая договорённость, как будут выглядеть сообщения между компьютерами, как указания «Откуда», «От кого», «Куда», «Кому». Вот ровно так же и в компьютерных сообщениях: на каждом запросе и пакете данных есть эта информация.
Главное отличие в том, что, например, отправить какой-то файл целиком в одном пакете невозможно — это как если бы вы попробовали отправить банку солений в конверте формата A4. Поэтому компьютеры дробят посылку на последовательность сообщений и нумеруют эти сообщения последовательно. И тут как раз проявляется разница в протоколах.
TCP-протокол по аналогии с почтой можно представить так: нам нужно отправлять три тома «Войны и мира», для этого нужно не менее 200 конвертов. Но тут свои коррективы вносит «Почта России»: какие-то из писем уедут на сортировочный пункт в Хабаровск, а какие-то из писем и вовсе могут потеряться в кипах посылок.
Мы нумеруем наши конверты, чтобы точно знать, какие мы уже получили, а какие надо подождать или попросить отправить заново. Конверты уходят, получатель получает какую-то их часть. Потом он звонит нам: «Отправь заново конверты 12, 48 и 110, они не дошли». Мы отправляем. Получатель снова звонит: «Вот, теперь всё получил».
А вот протокол UDP — это протокол без гарантии: конверты просто улетели. Что дошло, то дошло. Можно представить так: мы попросили рассказать «Войну и мир» здесь и сейчас. Рассказывающий будет забывать большие куски повествования, где-то будет сокращать, но в целом суть истории мы узнаем и требовать дословного пересказа не будем.
Протокол TCP, таким образом, используется при отправке файлов, почты, при работе веб-серверов: там, где требуется гарантировать корректность переданных данных. А протокол UDP подходит для потоковых данных: аудио- или видеозвонки, потоковое видео, стриминги и прочее. Если какие-то пакеты потеряются, то качество может незначительно ухудшиться, но смысл останется понятным, а времени восстанавливать эти потерянные пакеты у нас может не быть в случае онлайн-стриминга.
Напоследок анекдот про эти протоколы:
- Я знаю неплохой анекдот про UDP, но не факт, что он до вас дойдёт.
- Я знаю неплохой анекдот про TCP, но если он до вас не дойдёт, то я повторю