IP, TCP, DNS

Mar 15, 2019


1. IP (Internet Protocol)

Network Layer에 속하며, 개개의 패킷을 상대방에게 전달하는 역할을 맡고 있다.

  • IP Address : 각 노드에 부여된 주소
  • MAC (Media Access Control) Address : 각 네트워크 카드에 할당된 고유의 주소
  • IP 주소와 MAC 주소는 서로 연관되어 있다.
  • IP 주소는 변경 가능하지만, MAC 주소는 기본적으로 변경할 수 없다.
  • ARP (Address Resolution Protocol) : 네트워크 상에서 IP 주소를 물리적 네트워크 주소로 대응(Bind)시키기 위해 사용되는 프로토콜
    • 정확히 설명하자면, 실제로는 IP를 통해서 네트워크 통신을 하는 것이 아니라 IP 주소에 대응되는 물리적 네트워크 주소를 통해 네트워크 통신이 이루어지는데, 이 경우에 단 한번의 전송으로 통신이 끝나는 것이 아니라 ARP로 대응된 물리적 네트워크 주소를 통해 여러 개의 라우터를 거쳐 전달하는 형태로 통신하게 된다.
    • 라우팅 (Routing) : 목적지까지 중계를 하는 도중에 컴퓨터, 라우터 등 네트워크 기기들은 최종 목적지가 아니라 최종 목적지까지 도착하기 위한 경유 목적지를 알고 있다. 이를 라우팅이라고 한다.
      • 결론적으로, 어떤 컴퓨터나 네트워크 기기도 인터넷 전체를 상세하게 파악하고 있지는 않다.

2. TCP (Transmission Control Protocol)

  • 3-way Handshake : TCP/IP를 이용하여 통신을 하는 응용프로그램이 데이터를 전송하기 전에 정확한 전송을 보장하기 위해 데이터 수신측과 세션을 수립하는 과정
    Client > Server : TCP SYN
    Server > Client : TCP SYN ACK
    Client > Server : TCP ACK
    // SYN (SYnchronized sequence Numbers), ACK (ACKnowledgement)
    

    3-way Handshake

    • #1 : 클라이언트는 서버에 접속을 요청하는 SYN 패킷 전송, 이 때, 클라이언트는 서버의 SYN+ACK 응답을 대기하는 SYN-SENT 상태가 된다.
    • #2 : 서버는 클라이언트로부터 SYN 요청을 받고 요청 수락을 의미하는 ACK와 클라이언트의 ACK 응답을 받기 위한 SYN flag가 설정된 패킷을 발송한다. 이 때 서버는 SYN-RECEIVED 상태가 된다.
    • #3 : 클라이언트 또한 ACK 응답을 서버로 보낸 후, 연결이 완료되고 데이터의 교환이 이루어진다. 이 떄 클라이언트는 ESTABLISHED 상태가 되고, 서버는 클라이언트의 ACK 응답을 받고 ESTABLISHED 상태가 된다.
  • 4-way Handshake : TCP 연결 세션을 종료할 때 수행하는 과정
    Client > Server : TCP FIN
    Server > Client : TCP ACK
    Server > Client : TCP FIN
    Client > Server : TCP ACK
    

    4-way Handshake

    • (#1) : 클라이언트가 연결을 종료하겠다는 FIN 플래그를 서버로 전송, 클라이언트는 서버의 ACK 응답을 기다리는 FIN-WAIT-1 상태가 된다.
    • (#2) : 서버는 연결 종료를 수락하는 ACK 응답을 전송하고 진행 중이던 통신이 끝날 때까지 대기 상태가 된다. CLOSE-WAIT 상태
    • [#1] : 클라이언트는 ACK 응답을 받고 연결 세션을 닫기 위한 서버 측의 FIN 플래그를 대기한다. 클라이언트는 FIN-WAIT-2 상태가 되고 서버에서는 진행 중이던 통신이 종료되고 클라이언트에 FIN 플래그를 전송한다. 서버는 클라이언트의 마지막 ACK 응답을 기다리기 위한 LAST-ACK 상태로 돌입한다.
    • [#2] : 클라이언트는 서버로 확인했다는 마지막 ACK 응답을 전송하고 연결 세션을 종료한다.
    • 만약 [#1] 과정에서 서버가 클라이언트에 FIN 플래그를 전송하기 전에 보낸 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN 패킷보다 더 늦게 도착할 경우에는?
      • 클라이언트에서 세션을 종료시킨 후 뒤늦게 도착하는 패킷들이 Drop되고 데이터의 유실을 방지하기 위해 FIN 플래그를 수신한 뒤에도 일정 시간(기본 240초)동안 세션을 남겨놓고 잉여 패킷을 기다리는 과정을 거친다. > TIME-WAIT 상태
  • TCP와 UDP의 차이
    • TCP는 위에 서술한 것처럼 연결 세션이 열기 위해 3-way Handshaking을 수행하고, 연결 세션을 닫을 때 4-way Handshaking을 수행하여 데이터를 주고 받기 전 송수신 측이 각각 패킷을 받을 준비가 되었는지, 패킷을 다 보냈는지 확인하는 과정을 거친다.
      • 이러한 과정은 정합성이 중요한 데이터를 주고 받을 때는 큰 장점이지만, 속도가 요구되는 상황에서는 약점이 될 수 밖에 없다.
      • 이처럼 패킷 로스가 발생하더라도 빠른 속도로 데이터를 주고 받을 때는 UDP를 사용한다. (ex. 게임 서버/클라이언트의 경우)