La norma TCP (Transmission Control Protocol) establece los requisitos de control de errores y de flujo para el transporte de datos en una red de comunicaciones. TCP es un protocolo orientado a conexión que requiere que las computadoras que se comunican establezcan una conexión virtual antes de que puedan intercambiar datos. Las computadoras en cada extremo de la conexión virtual mantienen una tabla de estados de la conexión, que describe el estado actual de la conexión y se usa para determinar cómo responder a los paquetes que reciben. Si una computadora no puede establecer la conexión virtual, no puede usar TCP para enviar o recibir datos. Las redes que usan el protocolo TCP incluyen el Internet, así como muchas otras redes privadas que usan protocolos de Internet (IP), como IPX y AppleTalk. Algunos programas que usan TCP incluyen telnet, FTP, HTTP y SMTP.
El protocolo TCP está definido por un número de puerto. Los números de puerto se asignan a programas específicos que se ejecutan en las computadoras. Por ejemplo, el programa FTP usa el puerto 21; el programa telnet usa el puerto 23. El protocolo TCP también se define por una dirección IP. La dirección IP de una computadora se puede obtener de varias maneras, como mediante el uso del comando ipconfig en un sistema Windows o el comando ifconfig en un sistema Linux. También se puede obtener de la configuración de red de la computadora.
Para establecer una conexión TCP, una computadora debe enviar un paquete SYN (Synchronize) a la computadora con la que desea comunicarse. Este paquete contiene información sobre la versión del protocolo TCP que está siendo usada, así como el número de puerto que se está usando. La computadora que recibe el paquete SYN debe responder con su propio paquete SYN, que contiene la misma información. A continuación, ambas computadoras establecen una conexión lógica entre ellas, que se usa para el intercambio de datos. Esta conexión lógica se mantiene activada mientras haya datos para enviar o recibir. Si no hay datos para enviar o recibir, la conexión se cierra. Si se produce un error en la conexión, se reestablece.
Para enviar datos, una computadora divide los datos en paquetes y luego envía cada paquete a la computadora de destino. Cada paquete contiene información sobre el número de secuencia de los datos, así como un código de control que se usa para detectar errores. Si se detecta un error en un paquete, se reenvía el paquete. Si no se detecta ningún error, la computadora de destino responde con un paquete que contiene el número de secuencia de los datos. A continuación, la computadora divide los datos en paquetes y envía cada paquete a la computadora de destino. Cada paquete contiene información sobre el número de secuencia de los datos, así como un código de control que se usa para detectar errores. Si se detecta un error en un paquete, se reenvía el paquete. Si no se detecta ningún error, la computadora de destino responde con un paquete que contiene el número de secuencia de los datos. A continuación, la computadora reenvía los paquetes que no han sido confirmados. Esto se hace hasta que todos los paquetes hayan sido enviados y confirmados.
Cuando se reciben datos, se almacenan en un buffer hasta que se puedan leer. Si el buffer se llena, se detiene el envío de datos. Si se produce un error en la conexión, se reestablece. Si no se produce ningún error, se confirma la recepción de los datos. A continuación, se reenvían los datos que no hayan sido confirmados. Esto se hace hasta que todos los datos hayan sido enviados y confirmados.