Для лучшего понимания - Вам надо изучить семиуровневую модель OSI и знать, что кроме IP, есть ещё IPX (который скорее мёртв, чем жив), NetBEUI (который ещё более мёртв) и ряд других протоколов.
Также надо знать, что кроме Ethernet - есть ещё пакетные сети типа Arcnet и TokenRing. А ещё есть модемные соединения, поверх которых надо запускать SLIP или PPP.
Отсюда видно, что ни сетевая плата, ни её драйвер - отслеживать доставку пакетов в контексте протокола TCP не могут.
Конкретно на Ваш вопрос:
Как правило, решение о повторной передачи пакета - принимает программный код, работающий в составе ядра. В Windows он называется "протокол TCP/IP", хотя там реально восемь протоколов. Во FreeBSD - это компонент ядра "inet".
Однако, я слышал, что есть сетевые платы, которые могут брать на себя отправку подтверждений и тип того. Как это увязывается с ядром, как работает при нескольких сетевых интерфейсах - мне неясно.
В специализированных устройствах - выполнение сетевого стека протоколов мю.б. вынесено на отдельный процессор с отдельной памятью. В настоящее время я продумываю такую архитектуру - вроде, получается интересная система.
Ну и для общего развития:
В древние времена программы для DOS типа KA9Q или UUCP - и сами занимались IP-маршрутизацией, и сами отслеживали доставку пакетов в рамках работы TCP-сессии. У DOS вообще была архитектура, слабо совместимая с работой в сети, поэтому решения тогдашних программистов сильно отличались от нынешних.
PS: Вопрос, конечно, ламерский - показывает огромные пробелы в образовании. Для начинающего самоучки - вопрос хороший. Для человека, изучавшего сети в институте - вопрос демонстрирует отвратное качество преподавания, это должны были дать на лекциях. Ну и о плохом качестве прочитанной Вами литературы это тоже говорит.
Понятно, что претензии тут не к Вам лично, а к окружающей Вас среде.