Transmission Control Protocol - это протокол, тесно связанный с IP, который используется в аналогичных целях, но на более высоком уровне — транспортном уровне. Часто эти протоколы, по причине их тесной связи, именуются вместе — ТСР/IР. Термин «TCP/IP» обычно означает все, что связано с протоколами TCP и IP. Он охватывает целое семейство протоколов, прикладные программы и даже саму сеть. В состав семейства входят протоколы TCP, UDP, ICMP, telnet, FTP и многие другие. TCP/IP — это технология межсетевого взаимодействия, технология internet. Сеть, которая использует технологию internet, называется Internet.

Сам протокол TCP занимается проблемой пересылки больших объемов информации, основываясь на возможностях протокола IP. Как можно переслать книгу по почте, если та принимает только письма и ничего более? Очень просто: разделить ее на страницы и отправить страницы отдельными конвертами. Получатель, руководствуясь номерами страниц, легко сможет книгу восстановить. Этим же простым и естественным методом и пользуется TCP.

TCP делит информацию, которую надо переслать, на несколько частей. Нумерует каждую часть, чтобы позже восстановить порядок. Чтобы пересылать эту нумерацию вместе с данными, он обкладывает каждый кусочек информации своей обложкой — конвертом, который содержит соответствующую информацию. Это и есть TCP-конверт. Получившийся ТСР-пакет помешается в отдельный IP-конверт и получается IP-пакет, с которым сеть уже умеет обращаться.

Получатель распаковывает IP-конверты и видит ТСР-конверты, распаковывает и их и помещает данные в последовательность частей в соответствующее место. Если чего-то не достает, он требует переслать этот кусочек снова. В конце концов, информация собирается в нужном порядке и полностью восстанавливается. Вот теперь этот массив пересылается выше к пользователю (на диск, на экран, на печать).

Это слегка упрощенный взгляд на TCP. В реальности пакеты не только теряются, но и могут искажаться при передаче из-за наличия помех на линиях связи. TCP решает и эту проблему. Для этого он пользуется системой кодов, исправляющих ошибки, Существует целая наука о таких кодировках. Простейшим примером такового служит код с добавлением к каждому пакету контрольной суммы (и к каждому байту бита проверки на четность). При помещении в ТСР-конверт вычисляется контрольная сумма, которая записывается с TCP-заголовок. Если при приеме заново вычисленная сумма не совпадает с той, что указана на конверте, значит, что-то тут не то, где-то в пути имели место искажения, так что надо переслать этот пакет заново, что и делается.

Большие возможности TCP требуют большой производительности процессора и большой пропускной способности сети. Когда прикладной процесс начинает использовать TCP, то начинают общаться модуль TCP па машине пользователя и модуль на машине сервера. Эти два оконечных модуля TCP поддерживают информацию о состоянии соединения — виртуального канала. Этот виртуальный канал потребляет ресурсы обоих оконечных модулей TCP. Один прикладной процесс пишет данные в TCP-порт, откуда они модулями соответствующих уровней по цепочке передаются по сети и выдаются в TCP-порт на другом конце канала, и другой прикладной процесс читает их отсюда — из своего TCP-порта. Все это создает видимость выделенной линии связи двух пользователей. Гарантирует неизменность передаваемой информации. Что входит на одном конце, выйдет с другого. Хотя в действительности никакая прямая линия отправителю и получателю в безраздельное владение не выделяется (другие клиенты могут пользоваться теми же узлами и каналами связи в сети в промежутках между пакетами этих), но извне это именно так и выглядит.

Существует и упрощенная версия протокола TCP, предназначенная для пересылки небольших порций данных — протокол UDP (User Datagram Protocol - протокол пользовательских дейтаграмм). UDP проще TCP, поскольку он не заботится о возможной пропаже данных, пакетов, о сохранении правильного порядка данных и т. д. UDP используется для клиентов, которые посылают только короткие сообщения и могут просто заново послать сообщение, если отклик подтверждения не придет достаточно быстро.

Предположим, что вы пишите программу, которая просматривает базу данных с телефонными номерами где-нибудь в другом месте сети. Совершенно незачем устанавливать TCP-связь, чтобы передать десяток байт в каждом направлении. Вы можете просто уложить имя в UDP-пакет, запаковать это в IP-пакет и послать. На другом конце прикладная программа получит пакет, прочитает имя, посмотрит телефонный номер, положит его в другой UDP-пакет и отправит обратно. Что произойдет, если пакет по пути потеряется? Баша программа тогда должна действовать так: если она ждет ответа слишком долго и становится ясно, что пакет затерялся, она просто повторяет запрос, т. е. посылает еще раз то же послание. Так обеспечивается надежность передачи при использовании протокола UDP.