Что такое протокол TCP, его уровни и характеристики
Что проверяют
Понимаете ли вы, где TCP находится в стеке и что он гарантирует приложению, а что нет. Тестировщику это нужно, чтобы отличать сетевую проблему от бага в сервисе. Следом почти всегда просят сравнить TCP с UDP или рассказать, как устанавливается соединение.
Как отвечать
TCP это протокол транспортного уровня: четвёртый уровень модели OSI или транспортный уровень модели TCP/IP. Своих «уровней» у него нет, поэтому на такой вопрос разложите стек TCP/IP:
- прикладной: HTTP, FTP, SMTP, то, что вы видите в DevTools или Postman;
- транспортный: TCP и UDP, порты, сегменты;
- сетевой: IP, адресация и маршрутизация пакетов между узлами;
- канальный: Ethernet, Wi-Fi, передача кадров внутри одной сети.
Характеристики TCP:
- соединение: трёхстороннее рукопожатие
SYN,SYN-ACK,ACK, закрытие черезFIN; - надёжность: байты нумеруются, получатель подтверждает приём
ACK, неподтверждённое отправитель шлёт повторно по таймауту или по дублирующимся подтверждениям; - порядок: приложение получает данные в том порядке, в каком они отправлены, дубли отбрасываются;
- управление потоком: скользящее окно, получатель сообщает, сколько ещё готов принять;
- управление перегрузкой: при потерях отправитель снижает скорость, в Linux по умолчанию работает алгоритм CUBIC, распространён и BBR;
- контрольная сумма: повреждённый сегмент обнаруживается и отбрасывается.
Для QA добавьте практику: connection refused значит, что порт никто не слушает, а таймаут чаще указывает на фаервол или потери. Трафик смотрят в Wireshark или через curl -v, плохую сеть имитируют троттлингом в DevTools.
Где спотыкаются
Путают TCP с IP. IP доставляет пакеты без гарантий, а надёжность и порядок добавляет уже TCP.
Говорят, что TCP исправляет ошибки. Он их обнаруживает по контрольной сумме и получает данные заново, биты он не восстанавливает.
Считают, что весь веб работает поверх TCP. HTTP/3 использует QUIC, то есть UDP, и при тестировании сетевых сбоев это стоит учитывать.