TCP (Transmission Control Protocol) — это один из основных протоколов интернет-коммуникаций, обеспечивающий надежную передачу данных. Перед началом обмена данными между клиентом и сервером TCP устанавливает соединение с помощью трехэтапного рукопожатия (Three-Way Handshake).
Этапы TCP-рукопожатия
TCP-рукопожатие состоит из трех шагов:
- SYN (synchronize) — клиент отправляет серверу пакет с флагом SYN, запрашивая установку соединения.
- SYN-ACK (synchronize-acknowledge) — сервер получает запрос, подтверждает его и отправляет клиенту пакет с флагами SYN и ACK.
- ACK (acknowledge) — клиент подтверждает получение пакета SYN-ACK, после чего соединение считается установленным.
Пример реализации в C#
Пример TCP-сервера и TCP-клиента, демонстрирующий установку соединения:
TCP-сервер:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class TcpServer
{
static void Main()
{
TcpListener server = new TcpListener(IPAddress.Any, 5000);
server.Start();
Console.WriteLine("Сервер запущен...");
using TcpClient client = server.AcceptTcpClient();
using NetworkStream stream = client.GetStream();
byte[] buffer = Encoding.UTF8.GetBytes("Привет от сервера!");
stream.Write(buffer, 0, buffer.Length);
}
}
TCP-клиент:
using System;
using System.Net.Sockets;
using System.Text;
class TcpClientExample
{
static void Main()
{
using TcpClient client = new TcpClient("127.0.0.1", 5000);
using NetworkStream stream = client.GetStream();
byte[] buffer = new byte[256];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
Console.WriteLine("Сервер: " + Encoding.UTF8.GetString(buffer, 0, bytesRead));
}
}
Особенности TCP-рукопожатия
- Гарантия доставки — устанавливается соединение перед передачей данных, что снижает вероятность потерь.
- Контроль потока — TCP управляет скоростью передачи, предотвращая перегрузку сети.
- Надежность — механизм подтверждения получения пакетов гарантирует целостность переданных данных.