1) прикладной уровень (HTTP) использует TCP как сервис (а именно - какое-либо API, предоставляемое ОС, например сокеты Беркли) и выражает желание отправить некоторое количество данных в пункт Б; в теории объем данных может быть любым, т.к. задача именно TCP - разбить данные на куски и прилепить к ним свой заголовок. Полученные куски с заголовками называются TCP-сегментами; в этих заголовках есть все, что необходимо для обеспечения всех гарантий, которые даёт TCP, а именно: а) номер пакета для получения пакетов в порядке их отправления и возможности сборки отправленных данных; б) целостность пакетов и отсутствие в них ошибок; в) номера портов получателя и отправителя (чтобы несколько программ на одной машине могли обмениваться данными); г) флажки для обслуживания TCP-соединения. Вся суть TCP сводится к предоставлению вам, т.е. прикладному уровню, некоего надежного виртуального "провода", которым вы как бы подключили одну программу на одной машине к другой программе на другой машине. В терминах типов коммутации, TCP поверх IP - это коммутация каналов поверх коммутации пакетов.
2) После сборки каждого сегмента TCP использует уровень IP как сервис, и отдает ему сегменты для упаковки в пакеты. Уровень IP нужен для предоставления возможности закинуть (т.е. маршутизировать) любой пакет с текущего узла на любой другой в сети. IP не предоставляет никаких гарантий о порядке прихода пакетов на узел, и даже о том, что они вообще придут (IPv6 также не проверяет целостность пакета), однако с его помощью сетевое оборудование в состоянии выбирать различные (!) пути для доставки пакетов получателю и осуществлять эту доставку. В заголовке IP-пакета, как на письме, указан узел-отправитель и узел-получатель.
После сборки пакета оный отправляется на канальный уровень для доставки по конкретной физической среде.
Теперь представим, если бы этих уровней (TCP/IP) не было. Самое простое, работающее по такой схеме, что приходит на ум - передача данных по COM-порту между двумя машинами. В такой схеме вы, вероятно, получали бы данные в порядке их отправления и возможно даже имели бы контроль ошибок, НО:
а) только одно приложение могло бы передавать/получать данные, т.к. нет виртуальных соединений (нет мультиплексирования);
б) для передачи данных машины нужно соединять физически. Ну или сажать тётеньку, которая бы перетыкала провода, как на первых телефонных станциях с ручной коммутацией каналов.
IP избавляет вас от пункта б), TCP - от пункта а) и тех доп. проблем, которые добавляет IP своим присутствием.