RST 패킷 대신 RST, ACK 패킷이 표시되는 이유는 무엇입니까?


42

Wireshark를 보면 TCP 스트림이 RST 패킷 대신 RST, ACK 패킷으로 끝나는 경우가 종종 있습니다. 이것이 왜 그런지 아는 사람이 있습니까?

내가 보는 것의 예 :

SYN SYN, ACK ... 데이터 ... RST, ACK

Wireshark는 RST, ACK 패킷 이전에 RST 패킷을 선택하지 않습니다.


2
RST / ACK 전에 RST 세그먼트가 있어야한다고 생각하는 이유는 무엇입니까? 이러한 패킷 추적의 예를 제공 할 수 있습니까?
Gerben

ACK가 동일한 패킷에서 RST를 피기 백했습니까?
generalnetworkerror

어떤 대답이 도움이 되었습니까? 그렇다면 질문에 대한 답변이 계속 나오지 않도록 답변을 수락해야합니다. 또는 자신의 답변을 제공하고 수락 할 수 있습니다.
Ron Maupin

요청을 보냈습니다 ACK / 데이터 연결 종료 연결 종료 = RST
motoko

답변:


55

RST / ACK는 RST의 승인이 아니며 SYN / ACK는 SYN의 정확한 승인이 아닙니다. TCP 설정은 실제로 4 방향 프로세스입니다. 시작 호스트는 SYN을 수신 호스트로 보내고,이 SYN에 대한 ACK를 보냅니다. 수신 호스트는 SYN을 시작 호스트로 보내고,이 호스트는 ACK를 다시 보냅니다. 이것은 상태 저장 통신을 설정합니다.

SYN --> 
    <-- ACK
    <-- SYN
ACK -->

이를보다 효율적으로하기 위해 수신 호스트는 SYN을 ACK하고 동일한 패킷으로 자체 SYN을 전송하여 우리가 보는 3 방향 프로세스를 만듭니다.

SYN -->
    <-- SYN/ACK
ACK -->

RST / ACK의 경우 장치는 ACK를 사용하여 이전 패킷에서 전송 된 모든 데이터를 ACK로 확인한 다음 RST와의 연결이 종료되었음을 발신자에게 알립니다. 이 장치는 SYN / ACK처럼 두 패킷을 하나로 결합합니다. RST / ACK는 일반적으로 TCP 세션을 닫을 때 정상적인 응답이 아니지만 반드시 문제를 나타내는 것은 아닙니다.


4
RST / ACK를 보내는 시나리오의 예로는 수신 호스트가 대상 TCP 포트에서 수신 대기하지 않는 경우가 있습니다.
Indika K

네 확실합니다. 한 번은 컴퓨터 A에서 포트 80의 컴퓨터 B로 DDoS 공격을 (교육 목적으로) 시뮬레이션하려고 시도했지만 B의 80 포트는 열려 있지 않습니다. 따라서 시스템 B RST ACK가 가짜 소스 주소에 많은 응답을 보내는 것을 볼 수 있습니다 .
smwikipedia

RST / ACK 응답이 패킷 내용에 따라 달라질 수 있습니까? 즉, 서버가 패킷을 수신하고 패킷 내용이 일부 조건과 일치하여 세션이 종료되었습니다.
skooog

1

연결이 설정되면 모든 패킷에 ACK가 설정되고 안정적인 전송 / 보안을 위해 수신 된 패킷의 시퀀스 번호와 일치해야합니다. ACK가없는 RST는 수락되지 않습니다. 한쪽이 RST를 보내면 소켓이 즉시 닫히고 유효한 RST를받은 직후 수신 측도 소켓을 닫습니다. 인정 될 필요는없고 인정 될 수 없다.

TCP 핸드 셰이크 후

A ---> B Syn = x, Ack = y, len = z, ACK 플래그

B ---> A Syn = y, Ack = x + z, len = o, ACK 플래그

A ---> B Syn = x + z, Ack = y + o, len = p, ACK 플래그

B ---> A Syn = y + o, ACK = x + z + p, len = q, RST, ACK 플래그

B는 마지막 패킷을 보낸 후 소켓을 닫고 A는 소켓을받은 후 소켓을 닫습니다.

(여기서 TCP 창을 고려하지 않거나, 승인 전에 한쪽 끝에서 더 많은 패킷이있을 수 있습니다)

ACK 플래그, 승인 번호 및 승인 절차는 관련되어 있지만 동일하지는 않습니다.

RFC793 당

RFC793

승인 번호 : 32 비트

If the ACK control bit is set this field contains the value of the
next sequence number the sender of the segment is expecting to
receive.  Once a connection is established this is always sent.

리셋 처리

SYN-SENT를 제외한 모든 상태에서 모든 재설정 (RST) 세그먼트는 SEQ 필드를 확인하여 유효성을 검사합니다. 시퀀스 번호가 창에 있으면 재설정이 유효합니다. SYN-SENT 상태 (초기 SYN에 응답하여 수신 된 RST)에서 ACK 필드가 SYN을 확인하면 RST가 허용됩니다.

RST의 수신자는 먼저이를 검증 한 후 상태를 변경합니다. 수신자가 LISTEN 상태 인 경우이를 무시합니다. 수신자가 SYN-RECEIVED 상태에 있고 이전에 LISTEN 상태에 있었던 경우, 수신자는 LISTEN 상태로 돌아가고, 그렇지 않으면 수신자가 연결을 중단하고 CLOSED 상태가됩니다. 수신자가 다른 상태에있는 경우 연결을 중단하고 사용자에게 알리고 CLOSED 상태가됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.