ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TCP FSM(Finite State Machine)
    Security in CPS/Networking 2019. 5. 21. 10:13

    안녕하세요.

    이번에는 TCP FSM 에 대해 알아보겠습니다..

    아래 링트에 내용을 정리한 내용이니 참고하시면 되겠습니다.

    http://tcpipguide.com/free/t_TCPOperationalOverviewandtheTCPFiniteStateMachineF-2.htm

     

    The TCP/IP Guide - TCP Operational Overview and the TCP Finite State Machine (FSM)

    Please Whitelist This Site? I know everyone hates ads. But please understand that I am providing premium content for free that takes hundreds of hours of time to research and write. I don't want to go to a pay-only model like some sites, but when more and

    tcpipguide.com

     

    State State Description Event & Transition
    CLOSED 디폴트 상태로 어떤  장치간(Client/Server)간 연결이 존재하지 않는 상태입니다. Passive Open : 서버의 경우 클라이언트의 요청이 들어오기 전까지 대기 상태를 유지하게 됩니다. 이를 위해 필요한 Data structure를 만들고 다음 상태인 Listen 로 전환됩니다.  

    Active Open / Send SYN : 클라이언트의 경우 TCP 연결을 위해 서버에게 SYN 메세지(seq 정보 포함)를 전달합니다. 이때 연결을 위한 TCB(task control black) 를 교환합니다. 이후 다음 상태인 SYN-SENT로 전환됩니다. 

    LISTEN 서버의 상태로 클라이언트의 요청(SYN) 메세지를 기다립니다. Receive SYN, Send ACK : 서버가 클라이언트로부터 SYN 메세지를 받게 되면 SYN-ACK(서버의 seq 넘버 포함) 메세지를 전송합니다. 이후 다음 상태인 SYN-RECEIVED로 전환됩니다.
    SYN-SENT 보통 클라이언트의 상태로 서버로 SYN메세지를 보낸 후 SYN-ACK 메세지를 기다리는 상태입니다. Receive SYN, Send ACK: 클라이언트 자신의 SYN에 대한 ASK를 받지 못하고 다른 클라이언트/서버로 부터 SYN 메세지를 받은 상태로 SYN-RECEIVED 상태로 전환한 후 자신의 SYN에 대한 응답을 기다립니다.
    Receive SYN-ACK, Send ACK: 클라이언트는 서버로 부터 연결이 가능하단 메세지를 받고 TCP Established 상태로 전환합니다.
    SYN-RECEIVED 자신이 보낸 SYN에 대한 ACK를 기다립니다. Receive ACK: 자신의 SYN 에 대한 응답을 받고 다음 ESTABLISHED 상태로 전환됩니다.
    ESTABLISHED TCP 연결을 위한 3-way handshake 가  완료된 상태(open session) 입니다. Close, Send FIN : TCP 연결을 종료하기 위해 서버/클라이언트로 FIN 메세지를 전달하고 FIN-WAIT-1 상태로 전환됩니다.
    Receive FIN : 서버/클라이언트로부터 연결 종료를 위한 메세지(FIN)를 받고 프로그램의 종료를 기다립니다.(CLOSE-WAIT) 
    CLOSE-WAIT 다른 서버/클라이언트로 부터 종료 메세지를 받은 후 진행중이던 동작(apps)의 종료를 기다리는 상태입니다. Close, Send FIN: TCP를 사용중이던 App 에게 TCP 종료를 알리고 관련 리소스를 정리합니다. 정리가 완료된 후 FIN 메세지를 서버 혹은 클라이언트에게 전달합니다. 이후 LAST-ASK 상태로 전환합니다.
    LAST-ASK 자신이 보낸 FIN 메세지에 대한 ACK를 기다립니다.

    Receive ACK for FIN : ACK 메세지를 받으면 Closed 상태로 전환됩니다,

    FIN-WAIT-1 자신의 종료를 알리는 FIN을 보낸 후 ACK를 기다리는 상태입니다. Receive ACK for FIN : 자신의 FIN 메세지에 대한 ACK 를 받은 후(2-way handshake) 서버/클라이언트의 종료 메세지를 기다립니다.(FIN-WAIT-2)
    Receive FIN, Send ACK : 자신의 FIN 에 대한 ACK 를 받지 못한 채 서버/클라이언트로 부터 종료 요청이 들어온 상태로 다음 단계인 TIME-WAIT 상태로 전환한 후 ACK를 기다립니다.
    FIN-WAIT-2 자신의 TCP 연결 종료를 완료하고 상태의 FIN 메세지를 기다리는 상태입니다. Receive FIN, Send ACK : 다른 장치로부터 FIN 를 받고 TIME-WAIT상태로 전환됩니다.
    CLOSING 다른 장치로부터 FIN 를 받았지만 자신의 FIN 메세지에 대한 ACK를 기다리는 상태 입니다. Receive ACK for FIN : 종료를 위한 모든 단계가 완료되어 TIME-WAIT 상태로 전환합니다.
    TIME-WAIT 종료를 위한 모든 메세지 FIN/ACK를 받은 상태로 새로운 연결을 위한 Overlap를 방지하기 위한 상태입니다. Timer Expiration :  디폴트 단계인 CLOSED 상태로 전환됩니다.

     

    댓글

Designed by Tistory.