Troubleshoot TCP/IP connectivity
You might come across connectivity errors on the application end or timeout errors. Most common scenarios would include application connectivity to a database server, SQL timeout errors, BizTalk application timeout errors, Remote Desktop Protocol (RDP) failures, file share access failures, or general connectivity.
When you suspect that the issue is on the network, you collect a network trace. The network trace would then be filtered. During troubleshooting connectivity errors, you might come across TCP reset in a network capture which could indicate a network issue.
TCP is defined as connection-oriented and reliable protocol. One of the ways in which TCP ensures this is through the handshake process. Establishing a TCP session would begin with a 3-way handshake, followed by data transfer, and then a 4-way closure. The 4-way closure where both sender and receiver agree on closing the session is termed as graceful closure. After the 4-way closure, the server will allow 4 minutes of time (default), during which any pending packets on the network are to be processed, this is the TIME_WAIT state. Once the TIME_WAIT state is done, all the resources allocated for this connection are released.
TCP reset is an abrupt closure of the session which causes the resources allocated to the connection to be immediately released and all other information about the connection is erased.
TCP reset is identified by the RESET flag in the TCP header set to 1 .
A network trace on the source and the destination which will help you determine the flow of the traffic and see at what point the failure is observed.
The following sections describe some of the scenarios when you will see a RESET.
Packet drops
When one TCP peer is sending out TCP packets for which there is no response received from the other end, the TCP peer would end up re-transmitting the data and when there is no response received, it would end the session by sending an ACK RESET( meaning, application acknowledges whatever data exchanged so far, but due to packet drop closing the connection).
The simultaneous network traces on source and destination will help you verify this behavior where on the source side you would see the packets being retransmitted and on the destination none of these packets are seen. This would mean, the network device between the source and destination is dropping the packets.
If the initial TCP handshake is failing because of packet drops then you would see that the TCP SYN packet is retransmitted only 3 times.
Source side connecting on port 445:
Destination side: applying the same filter, you do not see any packets.
For the rest of the data, TCP will retransmit the packets 5 times.
Source 192.168.1.62 side trace:
Destination 192.168.1.2 side trace:
You would not see any of the above packets. Engage your network team to investigate with the different hops and see if any of them are potentially causing drops in the network.
If you are seeing that the SYN packets are reaching the destination, but the destination is still not responding, then verify if the port that you are trying to connect to is in the listening state. (Netstat output will help). If the port is listening and still there is no response, then there could be a wfp drop.
Incorrect parameter in the TCP header
You see this behavior when the packets are modified in the network by middle devices and TCP on the receiving end is unable to accept the packet, such as the sequence number being modified, or packets being re-played by middle device by changing the sequence number. Again, the simultaneous network trace on the source and destination will be able to tell you if any of the TCP headers are modified. Start by comparing the source trace and destination trace, you will be able to notice if there is a change in the packets itself or if any new packets are reaching the destination on behalf of the source.
In this case, you will again need help from the network team to identify any such device which is modifying packets or re-playing packets to the destination. The most common ones are RiverBed devices or WAN accelerators.
Application side reset
When you have identified that the resets are not due to retransmits or incorrect parameter or packets being modified with the help of network trace, then you have narrowed it down to application level reset.
The application resets are the ones where you see the Acknowledgement flag set to 1 along with the reset flag. This would mean that the server is acknowledging the receipt of the packet but for some reason it will not accept the connection. This is when the application that received the packet did not like something it received.
In the below screenshots, you see that the packets seen on the source and the destination are the same without any modification or any drops, but you see an explicit reset sent by the destination to the source.
Source Side
On the destination-side trace
You also see an ACK+RST flag packet in a case when the TCP establishment packet SYN is sent out. The TCP SYN packet is sent when the client wants to connect on a particular port, but if the destination/server for some reason does not want to accept the packet, it would send an ACK+RST packet.
The application which is causing the reset (identified by port numbers) should be investigated to understand what is causing it to reset the connection.
The above information is about resets from a TCP standpoint and not UDP. UDP is a connectionless protocol and the packets are sent unreliably. You would not see retransmission or resets when using UDP as a transport protocol. However, UDP makes use of ICMP as a error reporting protocol. When you have the UDP packet sent out on a port and the destination does not have port listed, you will see the destination sending out ICMP Destination host unreachable: Port unreachable message immediately after the UDP packet
During the course of troubleshooting connectivity issue, you might also see in the network trace that a machine receives packets but does not respond to. In such cases, there could be a drop at the server level. You should enable firewall auditing on the machine to understand if the local firewall is dropping the packet.
You can then review the Security event logs to see for a packet drop on a particular port-IP and a filter ID associated with it.
Что такое TCP и как он работает?
Протокол управления передачей (TCP) является одним из самых важных протоколов пакета Internet Protocols. Это наиболее широко используемый протокол для передачи данных в сети связи, такой как Интернет.
- TCP — надежный протокол. То есть, приемник всегда отправляет отправителю положительное или отрицательное подтверждение о пакете данных, так что отправитель всегда имеет яркое представление о том, достигнут ли пакет данных адресату или ему нужно повторно отправить его.
- TCP гарантирует, что данные достигнут назначенного адресата в том же порядке, в котором он был отправлен.
- TCP ориентирован на соединение. TCP требует установления соединения между двумя удаленными точками перед отправкой фактических данных.
- TCP обеспечивает механизм проверки и восстановления ошибок.
- TCP обеспечивает сквозную связь.
- TCP обеспечивает контроль потока и качество обслуживания.
- TCP работает в режиме «точка-точка» Client / Server.
- TCP обеспечивает полный дуплексный сервер, т. Е. Он может выполнять роли как получателя, так и отправителя.
Длина заголовка TCP составляет минимум 20 байтов и максимум 60 байт.
- Source Port (16 бит). Он определяет порт источника процесса приложения на отправляющем устройстве.
- Destination Port (16 бит) — определяет порт назначения процесса приложения на принимающем устройстве.
- Sequence Number (32 бита) — порядковый номер байтов данных сегмента в сеансе.
- Acknowledgement Number (32 бита). Когда установлен флаг ACK, это число содержит следующий порядковый номер ожидаемого байта данных и работает как подтверждение предыдущих полученных данных.
- Data Offset (4 бита). В этом поле подразумеваются как размер заголовка TCP (32-разрядные слова), так и смещение данных в текущем пакете во всем сегменте TCP.
- Reserved (3 бита) — зарезервировано для будущего использования, и все по умолчанию устанавливаются в ноль.
- Флаги (по 1 бит)
- NS — бит Nonce Sum используется сигнальным процессом Явного сообщения о перегрузке.
- CWR. Когда хост получает пакет с установленным битом ECE, он устанавливает, что Congestion Windows Reduced подтверждает, что полученная от ЕС.
- ECE — имеет два значения:
- Если бит SYN очищен до 0, значит, ECE означает, что пакет IP имеет установленный бит CE (перегрузка).
- Если бит SYN установлен в 1, ECE означает, что устройство поддерживает ECT.
- URG — указывает, что поле Urgent Pointer имеет значительные данные и должно обрабатываться.
- ACK — указывает, что поле «Подтверждение» имеет значение. Если ACK очищен до 0, это означает, что пакет не содержит подтверждения.
- PSH — если установлено, это запрос на принимающую станцию на данные PUSH (как только это произойдет) в принимающее приложение без его буферизации.
- RST — флаг сброса. Он используется для отказа от входящего соединения, отклонения сегмента, перезапуска соединения.
- SYN — этот флаг используется для настройки соединения между хостами.
- FIN — этот флаг используется для освобождения соединения, и после этого больше не обменивается данными. Поскольку пакеты с символами SYN и FIN имеют порядковые номера, они обрабатываются в правильном порядке.
- Windows Size — это поле используется для управления потоком между двумя станциями и указывает объем буфера (в байтах), выделенный получателем для сегмента, т. Е. Сколько данных ожидает приемник.
- Checksum — это поле содержит контрольную сумму заголовков, данных и псевдо-заголовков.
- Urgent Pointer. Он указывает на аварийный байт данных, если флаг URG установлен в 1.
- Options — обозначает дополнительные опции, которые не покрываются обычным заголовком. Поле опций всегда описывается в 32-битных словах. Если это поле содержит данные размером менее 32 бит, для заполнения оставшихся битов используется дополнение, чтобы достичь 32-разрядной границы.
Адресация
Связь TCP между двумя удаленными хостами выполняется с помощью номеров портов (TSAP). Номера портов могут варьироваться от 0 до 65535, которые делятся как:
- Порты системы (0 — 1023)
- Порты пользователей (1024 — 49151)
- Частные / динамические порты (49152 — 65535)
Управление подключениями
Связь TCP работает в модели Server / Client. Клиент инициирует соединение, и сервер либо принимает, либо отклоняет его. Для управления подключением используется трехстороннее связывание.
Установка соединения
Клиент инициирует соединение и отправляет сегмент с порядковым номером. Сервер подтверждает это со своим собственным порядковым номером и ACK сегмента клиента, который является еще одним номером последовательности клиентов. Клиент после получения ACK своего сегмента отправляет подтверждение ответа сервера.
Любой из серверов и клиентов может отправлять сегмент TCP с флагом FIN, установленным в 1. Когда принимающая сторона отвечает на это посредством ACKnowlinging FIN, это направление связи TCP закрывается и соединение освобождается.
Управление полосой пропускания
TCP использует концепцию размера окна, чтобы удовлетворить потребность в управлении пропускной способностью. Размер окна сообщает отправителю на удаленном конце, количество сегментов байтов данных, которое может получить приемник с этого конца. TCP использует медленную фазу запуска с использованием размера окна 1 и увеличивает размер окна по экспоненте после каждого успешного сообщения.
Например, клиент использует размер окна 2 и отправляет 2 байта данных. Когда подтверждение этого сегмента получено, размер окна удваивается до 4, а следующий отправленный сегмент отправляется длиной 4 байта данных. Когда получено подтверждение 4-байтового сегмента данных, клиент устанавливает размер окна 8 и т. Д.
Если упущено подтверждение, то есть данные, потерянные в транзитной сети или полученные NACK, размер окна уменьшается до половины, а медленная начальная фаза начинается снова.
Контроль ошибок и контроль потока
TCP использует номера портов, чтобы узнать, какой процесс приложения ему нужен для передачи сегмента данных. Наряду с этим он использует порядковые номера для синхронизации с удаленным хостом. Все сегменты данных отправляются и принимаются с порядковыми номерами. Отправитель знает, какой последний сегмент данных был принят Получателем, когда он получает ACK. Получатель знает о последнем сегменте, отправленном отправителем, ссылаясь на порядковый номер недавно полученного пакета.
Если порядковый номер недавно полученного сегмента не совпадает с порядковым номером, который ожидал приемник, он отбрасывается и NACK отправляется обратно. Если два сегмента поступают с одинаковым порядковым номером, значение временной метки TCP сравнивается для принятия решения.
Мультиплексирование
Способ объединения двух или более потоков данных в один сеанс называется мультиплексированием. Когда клиент TCP инициализирует соединение с сервером, он всегда ссылается на четко определенный номер порта, который указывает на процесс приложения. Сам клиент использует случайный номер порта из частных пулов номеров портов.
Используя TCP Multiplexing, клиент может взаимодействовать с несколькими различными процессами приложения за один сеанс. Например, клиент запрашивает веб-страницу, которая, в свою очередь, содержит различные типы данных (HTTP, SMTP, FTP и т. Д.), Тайм-аут сеанса TCP увеличивается, и сеанс остается открытым на более длительное время, так что накладные расходы на трехстороннюю рукопожатие могут избегать.
Это позволяет клиентской системе получать несколько соединений по одному виртуальному соединению. Эти виртуальные соединения не подходят для серверов, если тайм-аут слишком длинный.
Контроль перегрузок
Когда большое количество данных подается в систему, которая не способна обрабатывать ее, происходит перегрузка. TCP управляет перегрузкой с помощью механизма Window. TCP устанавливает размер окна, говорящий на другом конце, сколько сегмента данных нужно отправить. TCP может использовать три алгоритма управления перегрузкой:
- Аддитивное увеличение, мультипликативное уменьшение
- Медленный старт
- Время ожидания
Управление таймером
TCP использует различные типы таймеров для управления и управления различными задачами:
Таймер сохранения:
- Этот таймер используется для проверки целостности и действительности соединения.
- Когда время ожидания сохраняется, хост отправляет пробник, чтобы проверить, существует ли соединение еще.
Таймер повторной передачи:
- Этот таймер поддерживает сеанс передачи данных с сохранением состояния.
- Если подтверждение отправленных данных не будет получено в течение времени повторной передачи, сегмент данных будет отправлен снова.
Постоянный таймер:
- Сеанс TCP может быть приостановлен хостом, отправив Размер окна 0.
- Чтобы возобновить сеанс, хосту необходимо отправить размер окна с некоторым большим значением.
- Если этот сегмент никогда не достигнет другого конца, оба конца могут ждать друг друга в течение бесконечного времени.
- Когда таймер Persist истекает, хост повторно отправляет свой размер окна, чтобы узнать другой конец.
Persist Timer помогает избежать взаимоблокировок в общении.
Timed-Wait:
- После освобождения соединения один из хостов ждет времени с пометкой времени, чтобы полностью завершить соединение.
- Это делается для того, чтобы убедиться, что другой конец получил подтверждение своего запроса о завершении соединения.
- Выдержка может быть не более 240 секунд (4 минуты).
Восстановление после аварий
TCP — очень надежный протокол. Он предоставляет порядковый номер для каждого байта, отправленного в сегменте. Он обеспечивает механизм обратной связи, т.е. когда хост получает пакет, он привязан к ACK, чтобы ожидал пакет, имеющий следующий порядковый номер (если он не является последним сегментом).
Когда TCP-сервер прерывает связь в середине и перезапускает его процесс, он отправляет трансляцию TPDU всем своим хостам. Затем хосты могут отправить последний сегмент данных, который никогда не был непризнан и продолжен.