• 카테고리

    질문 & 답변
  • 세부 분야

    네트워크

  • 해결 여부

    해결됨

(비)정상종료 실제 패킷

23.08.03 17:54 작성 조회수 404

0

선생님 4way-handshake를 통해 정상종료하는 이론적인 부분에 대해서 이해하였습니다

하지만 실제로 3way-handshake를 통해 정상종료하는 과정을 wireshark를 통해 발견하였습니다

위 사진과 같이 포트번호 별로 3way-terminate하는 경우가 있습니다. 어떤 조건에 의해 다음과 같은 종료를 하는지 궁금합니다.

추가적으로 cmd나 powershell을 통해 ssh로 접속을 한 후 x버튼을 통해 종료를 하게되면 RST패킷을 던지고 비정상종료를 하게됩니다. mobaXterm이나 putty같은 툴을 통해 x버튼으로 종료를 하게되면 이 역시 3way-terminate를 하는 과정도 발견하였습니다. 이러한 이유가 궁금합니다.

 

쓸데없는 질문인 것 같지만 궁금합니다.ㅜ

답변 2

·

답변을 작성해보세요.

1

FIN, ACK 플래그는 함께 조합할 수 있습니다. 이렇게 송/수신 패킷 개수를 줄이면 더 빠르고 효율적으로 처리가 가능하며 결과적으로 4 way-handshake가 처리된 것과 동일하게 TCP 상태가 정상 변화할 수 있습니다. TCP 프로토콜은 매우 다양한 구현이 있습니다. Compound TCP, CUBIC TCP 등이 대표적입니다. 이들 중 핵심 공통 요소는 타이머 입니다.

TCP는 성능 향상을 위해 어느 정도 예측 전송을 실시합니다. 상대가 데이터를 잘 받았다는 ACK 회신이 없어도 빠른 전송을 위해 일단 세그먼트를 전송합니다. 결국 ACK 회신은 꼭 받아야 하는데 문제는 얼마나 오랫동안 ACK응답이 없어도 데이터를 계속 보낼 것인지 결정하는 일입니다.

이러한 디테일은 TCP 표준이 별도로 규정하지 않습니다. 개발하는 쪽에서 결정할 일로 봅니다. RFC 표준이 규정하는 특징에 알맞게 상태 변화가 적절하다면 문제 될 것이 없겠습니다.

마지막으로 닫기 버튼을 클릭하면 프로세스가 종료됩니다. 그 종료 과정에서 소켓을 닫도록 프로그램을 개발하지 않는다면 소켓이 열린 상태에서 프로세스가 종료되며 OS는 개방된 소켓을 비롯해 프로세스가 사용했던 자원을 강제 회수합니다. 이 경우 RST이 발생합니다. 그러나 닫기 버튼 클릭 이벤트를 내부에서 처리하고 소켓을 닫는다면 정상적인 종료 절차를 진행합니다. 이러한 분석으로 소프트웨어가 어떻게 개발된 것인지 유추 할 수 있겠습니다.

쓸 데 없는 질문이 아니라 매우 중요한 질문입니다. :)

tggy0509님의 프로필

tggy0509

질문자

2023.08.04

감사합니다 선생님 덕분에 많이 배우게 됩니다.

tggy0509님의 프로필

tggy0509

질문자

2023.08.04

FIN과 ACK의 조합에 의해 3way로 종료를 하는 과정은 알겠으나 4way-handshake하는 과정의 패킷을 보면 ( FIN+ACK ) > ( ACK ) ( FIN+ACK ) > (ACK ) 으로 4번입니다. 이때는 FIN+ACK로 조합되어있는데 서버가 보내는 즉 passive close가 ACK와 FIN+ACK를 보내는데 이때는 FIN과 ACK가 조합된 게 아니라 ACK로 응답하고 FIN+ACK를 보내는데 이때 ACK는 어떤 패킷에 대한 응답이될까요?

네트워크 공부를 하면 할수록 꼬리에 꼬리를 물고 물어지는 느낌이 드는데 이런 자세는 괜찮은걸까요??

0

SYN에 대한 ACK 응답 시 쌍을 이루는 응답은 그 번호로 알 수 있습니다. 가령 Seq 번호가 1000이면 그에 대한 Ack 번호는 1001 (1000 + 1) 입니다. FIN도 마찬가지 입니다. 그에 따른 ACK응답 시 Ack 번호가 1 증가합니다. 어떤 패킷을 생각할 것이 아니라 번호를 중심으로 살펴보기 바랍니다.