cs-study-07 | 네트워크(3way-handshaking)

TCP (Transmission Control Protocol)

  • TCP는 전송 계층에서 사용하는 프로토콜
  • 장치들의 연결을 설정하여 신뢰성을 보장하는 연결형 서비스가상 회선 방식 (통로) 을 제공한다

TCP Header

  • Sequence number 때문에 쪼개진 세그먼트의 순서를 파악할 수 있다
  • 혼잡 제어 기능 향상을 위한 3개의 비트 플래그
  • 기존에 존재하던 6개의 비트 플래그
    • URG (urgent) : Urgent Pointer 필드가 유효한가 / 긴급 데이터 전송하기 위해 사용
    • ACK (acknowledgement): 상대방 요청에 응답
      • SYN 과 RST를 제외하고 모든 세그먼트에 ACK가 설정된다
    • PSH (push) : 현재 세그먼트에 포함된 데이터를 상위 계층에 즉시 전달
    • RST (reset): 상대방에게 강제로 연결 끊기 요청
    • SYN (synchronize): 상대방에게 연결 요청
    • FIN (finish): 상대방과 연결 종료 (더이상 보낼 데이터가 없거나 + 연결을 해제하고 싶다)

3way-handshaking

  • TCP 통신을 이용하여 데이터를 전송하기 위해 네트워크 연결을 설정하는 과정

  1. A — (SYN)— > B
    • 접속 요청 프로세스 A (Client) 가 연결 요청 메시지 전송 (SYN)
    • Client가 최초로 데이터를 전송할 때 Sequence Number를 임의의 랜덤 숫자로 지정하고, SYN 플래그 비트를 1로 설정한 세그먼트를 전송한다
  2. B — (SYN+ACK)— > A
    • 접속 요청 프로세스 B(Server)가 요청을 수락했으며 (ACK) , 접속 요청 프로세스인 A도 포트를 열어달라는 메세지 전송 (SYN)
    • 수신자는 ACK Num 필드를 (Sequence Num + 1) 로 지정하고 SYN과 ACK 플래그를 1로 설정한 세그먼트를 전송한다.
  3. A — (ACK)— > B
    • 접속 요청 프로세스 A(Client)가 요청을 수락하여 연결을 맺음 (ACK)
    • 이떄 전송할 데이터가 있으면 이 단계에서 데이터를 전송할 수 있다

4way-handshaking

  • TCP의 연결을 해제하는 과정

  1. A — (FIN)— > B

    • 프로세스 A (Client) 가 연결 종료 메시지 전송 (FIN)

    • 프로세스 B가 FIN 플래그로 응답하기 전까지 연결을 계속 유지

  2. B — (ACK)— > A

    • 프로세스 B(Server)는 일단 확인 메시지를 보내고 자신의 통신이 끝날 때까지 기다린다.
    • ACK = 받은 Seq+1
    • 자신이 전송할 데이터가 남아있다면 이어서 계속 전송한다
  3. B — (FIN)— > A

    • 프로세스 B가 통신이 끝났으면 연결 종료 요청에 합의한다는 의미로 프로세스 A에게 FIN플래그 전송
  4. A — (ACK)— > B

    • 프로세스 A는 연결 해제에 알겠다는 메시지 전송
  • Active Close : TCP 연결 해제를 요청한 대상
  • Passive Close : TCP 연결 해제를 수신한 대상

포트 상태정보

  • CLOSED : 포트가 닫힌 상태
  • LISTEN : 포트가 열린 상태로 연결 요청 대기 중
  • SYN_RCV : SYNC 요청을 받고 상대방의 응답을 기다리는 중
  • ESTABLISHED : 포트 연결 상태
  • FIN_WAIT : active close 대상이 passive close 로부터 fin 패킷을 기다리는 상태
  • CLOSE_WAIT : FIN요청을 수신한 passive close는 즉시 close 실행을 하지 않고 , TCP 포트를 사용중인 프로세스에게 종료 명령을 내리고 close 명령을 실행할 때까지 대기
  • TIME_WAIT : active close 대상이 fin 패킷에 대한 ack 응답을 송신한 후 즉시 disconnect를 하지 않음 ; 세그먼트의 lifetime의 2배, 약 60초 정도 뒤에 실제 연결을 disconnect
    • 즉시 연결 종료 후 바로 다음 연결을 맺었을 때 , 첫번째 연결했을 때의 데이터 패킷이 뒤늦게 도착하여 Sequence ID가 꼬이는 것을 방지하기 위해
    • 마지막 ACK 패킷이 손실 되어 Active close 혼자 연결을 Disconnect 해버리는 경우 방지하기 위해

포트 : TCP가 상위 계층과 데이터를 주고받을 때 사용하는 길, 통로 같은 것이다

  • 데이터를 넘겨줄 컴퓨터에는 다양한 종류의 응용프로그램이 실행하고 있다.

  • 수신 측 컴퓨터가 인터넷 계층에서 패킷을 수신한 후 응용층으로 데이터를 전달하려고 할 때 누구한테 데이터를 전달해야할지 구분할 때 OS는 응용프로그램의 논리적인 주소인 port번호를 이용한다
  • 포트 번호의 종류
    • well-known port (잘 알려진 포트) : 0~1023
      • 20 - FTP // 22 - SSH // 53-DNS // 80-HTTP
    • registered port (등록된 포트) : 1024~49151
      • 사용자가 직접 등록할 수 있는 포트
      • 톰캣 사용시 8080
    • dynamic port (동적 포트) : 49152~65535
      • 수시로 변경되는 포트, 인터넷이나 시스템에서 사용할 떄 동적으로 할당하는 포트

You might also enjoy