TCP/IP 통신의 주요 프로토콜

junu-devlog·2021년 7월 4일
0

TCP/IP 4계층 2 - IP, TCP&UDP

여기서는 4계층에서 간단히 다뤘던 IP와 TCP&UDP 등의 프로토콜에 대해 좀 더 자세히 살펴보도록 한다.

Data-Flow-of-TCP/IP-protocol

IP(Internet Protocol)와 IP 주소

  • 인터넷 계층에서 활용되는 주요 프로토콜로, End-to-End 통신을 수행하는 것이 주요 역할임

  • 데이터 전송을 위해서는 전달받은 세그먼트에 IP 헤더를 추가하여 IP 패킷 만들어야 하는데, 이는 쉽게 말해 네트워크 상에서의 출발지와 목적지 정보를 데이터에 추가하는 것을 의미함.

    • 어플리케이션계층과 트랜스포트 계층을 거치면서 데이터에 http 헤더와 TCP 헤더가 붙어있는 상태에서 IP헤더가 추가적으로 붙는 것
  • 출발지에서 내보내진 IP 패킷은 네트워크상의 라우터 를 거쳐, 최종 목적지로 도착하게 되며 이를 라우팅 이라고 부름

  • IP 주소 는 통신 상대가 되는 호스트들을 식별하기 위한 정보로, 네트워크 상에서 호스트의 주소 정보 정도로 이해하면 됨

    • IP 헤더에 출발지와 목적지의 IP 주소가 지정되어 있으며, TCP/IP 통신이 정상적으로 이루어지기 위해서는 필수적임
    • IP주소는 보통 호스트 내부에서 이더넷 등의 인터페이스와 IP 프로토콜을 연관지어 설정됨.
      • PC에는 복수의 유, 무선의 복수의 인터페이스 가 탑재되어 있으며, 이러한 인터페이스마다 IP주소를 설정 할 수도 있음
      • IP 주소는 엄밀히 말해 호스트 자체가 아닌, 호스트 내의 인터페이스를 식별하는 것
  • IP주소는 32비트이며, 8비트씩 0~255 사이의 10진수로 변환하여 '.'으로 구분하여 표기함(도트형 10진 표기)

  • 이용 범위에 따라 공인 IP주소사설 IP주소 로 나눠볼 수 있는데, 공인IP 주소는 전체 인터넷에서 중복되지 않게 관리되며, 사설 IP 주소는 특정 사설 네트워크 내에서 이용되기 때문에 사설 네트워크 내에서만 중복되지 않는다면 문제되지 않음

    • 사설 네트워크에서 통신을 하는 경우에는, NAT(Network Address Translation) 을 통해 IP 주소를 변환하며, 라우터 는 나중에 응답이 돌아올 경우를 대비해서, 변환한 주소의 대응을 따로 NAT 테이블 에 보존해뒀다가 응답이 라우터로 오면 목적지 IP 주소를 테이블을 보고 다시 사설 IP 주소로 변환함

유니캐스트, 브로드캐스트, 멀티캐스트

IP 프로토콜로 데이터 전송시, 목적지는 여러개여도 상관이 없으며, 따라서 데이터 전송 방식을 목적지 수에 따라 3가지로 분류할 수 있음

  • 유니캐스트

    • 단 하나의 목적지 로 데이터를 전송하는 것을 말하며, 유니케스트에 이용하는 IP 주소가 곧 유니캐스트 IP주소가 됨
      • 대부분의 TCP/IP 통신에서 설정되는 IP 주소는 유니캐스트 IP 주소임
      • 네트워크부 + 호스트부 의 구조로 이루어져 있으며, 네트워크부를 이용해 각 네트워크를 식별하고 호스트부를 통해 네트워크 내 호스트의 인터페이스를 식별함
      • 여기서 IP 주소의 네트워크 영역을 따로 나눈 것을 서브넷(Subnet) 이라고 하며, IP 주소에서 어디까지가 네트워크부인지 IP 주소 형태로 명시한 것을 서브넷마스크(Subnet Mask) 라고 함
    • PC 등에서는 유니캐스트 IP주소를 설정하며, 유니캐스트 데이터 전송 시 목적지 호스트의 유니캐스트 IP 주소를 IP 헤더의 목적지 IP로 지정
    • 완전히 같은 데이터를 복수의 주소로 전송하고자 할 경우에는, 목적지의 수 만큼 유니캐스트 데이터 전송을 반복해야 하므로 효율이 좋지 않음
  • 브로드캐스트

    • 같은 네트워크 상의 모든 호스트 에 완전히 똑같은 데이터를 전송하는 것을 말함
    • IP 헤더의 목적지 IP 주소에 브로드캐스트 IP주소를 지정하면, 같은 네트워크 상에서 모든 호스트에 데이터를 전송할 수 있음
    • 도트형 10진 표기로는, 2555.255.255.255 가 브로드캐스트 IP 주소를 의미하며, 이는 32비트가 모두 1로 이루어진 주소임
      • 호스트부의 비트를 모두 1로 채운 것
  • 멀티캐스트

    • 같은 어플리케이션이 동작하는 등의 특정 그룹에 포함되는 호스트 에, 완전히 똑같은 데이터를 전송하는 것을 말함
    • 멀티캐스트 그룹에 포함되는 호스트라고 해서, 반드시 같은 네트워크에 속한다고 볼 수는 없음
    • IP헤더의 목적지 IP 주소에는 멀티캐스트 IP 주소를 지정함
    • 보통 224.0.0.0 ~ 239.255.255.255 로 미리 범위가 정해져 있으며, 일례로 224.0.0.2 와 같은 멀티캐스트 주소는 같은 네트워크 상의 모든 라우터 그룹을 의미함
      • 사용자가 자유롭게 그룹을 결정하기 위해 239로 시작되는 범위를 이용할 수도 있음
      • 호스트부의 비트를 모두 0으로 채워 네트워크부 만을 식별한 것
  • 여기서 3가지 방식 모두 출발지 IP는 유니캐스트 IP주소가 됨

ICMP(Internet Control Message Protocol)

  • IP 프로토콜로 네트워크상의 다른 호스트에 데이터를 전송하지만, 사실 IP 프로토콜 자체는 응답이 제대로 돌아오지 않는 경우에 대해서는 딱히 대처하지 않고 있음(Best Effort)
  • 별도로 End-to-End 통신이 잘 이루어졌는지 확인하기 위해 ICMP 라고 불리는 프로토콜을 활용하는 것
  • ICMP의 주요 기능은 에러 리포트와 진단 기능으로 나눠볼 수 있음
  • 어떤 오류가 발생하여 IP 패킷이 폐기되었다면, 폐기한 기기는 ICMP를 이용해 폐기된 IP 패킷의 출발지로 통신 실패의 원인이 담긴 에러 리포트를 전송하는데, 이를 도달불능 메시지 라고 부름
  • 진단 기능은 End-to-End 통신이 가능한 지 여부를 확인하는 것이며, ping 명령어를 통해 미리 요청/응답 메시지를 보내 지정된 IP 주소와의 통신이 가능한 지를 확인함

ARP(Address Resolution Protocol)

  • 네트워크 연결 계층을 거치면서(이더넷 인터페이스) IP 패킷에는 이더넷 헤더가 붙는데, 여기에는 목적지의 MAC 주소 가 지정됨
  • 여기서 목적지의 MAC 주소를 식별하기 위해 ARP 가 사용되는 것이며, IP 주소와 MAC 주소를 대응시키는 것을 가리켜 주소 해석 이라고 부름
  • 주소 해석의 범위는 같은 내트워크 내의 IP 주소이며, 보통 이더넷 인터페이스가 목적지 IP 주소를 지정하면서 자동으로 ARP가 수행됨
    • ARP 요청을 보내 IP 주소에 대응하는 MAC 주소가 무엇인지 물어봄
    • 요청 받은 IP 주소에 해당하는 호스트는, ARP 응답을 통해 MAC 주소를 알려줌
    • IP 주소와 MAC 주소의 대응을 ARP 캐시에 보존시킴

TCP(Transmission Control Protocol)

http://www.mdpi.com/2076-3417/6/11/358/htm

  • TCP/IP에서 제공되는 신뢰성이 제공되는 연결지향형 데이터 전송 서비스를 일컫음

  • 신뢰성 보장, 흐름 제어, 혼잡 제어 등의 역할을 수행함

    • 목적지로 전송할 데이터를 전송에 알맞은 최대 세그먼트 크기(Maximum Segment Size) 로 절단하여, 세그먼트(Segment) 단위로 데이터를 전송

      • 따라서 데이터의 경계를 따로 구분하지 않음
    • 검사합(checksum) 이라고 불리는, 일종의 중복 및 오류 검사를 수행하며, 데이터 전송의 순서가 보장됨

    • 패킷 전송시 TCP 프로토콜은 보통 일정한 시간을 정해놓고, 제 시간 안에 ACK 패킷이 도착하지 않으면 이를 Timeout으로 간주하여 패킷을 재전송하여 신뢰성 보장에 기여함

    • 흐름 제어 : 수신자 버퍼의 오버플로우를 방지하는 것을 의미

    • 혼잡 제어 : 전송되는 패킷이 과도하게 많아지는 상황을 방지함을 의미

  • 사전에 3 Way Handshake 를 통해 어플리케이션 간 통신이 정상적으로 이루어질 수 있는 지 확인하며, 이것이 TCP의 연결지향적 특성을 갖게 하는 주요 특징이라 할 수 있음

    • 클라이언트가 서버에 접속을 요청하는 SYN 패킷 을 보내며, 응답을 기다리는 SYN_SENT 상태가 됨
    • 서버가 포트가 열린 상태(Listen)에서 패킷을 받으면 SYN_RESEIVED 상태가 되며, 데이터를 송신해도 좋다는 의미로 ACK 패킷 으로 응답하며, 클라이언트로부터의 응답을 기다림
    • 클라이언트는 응답을 받으면 다시 서버로 ACK패킷 보내고, 이후부터는 TCP 커넥션이 이루어진 ESTABLISHED 상태가 되어 데이터를 주고받을 수 있게 됨
  • 데이터의 온전한 상태 유지 및 전송 순서 보장 등의 이점이 있지만, 앞서 언급한 3 Way Handshake와 같은 연결 설정 등으로 인해 후술할 UDP 에 비해 상대적으로 속도가 느림

  • 또한 1:1 통신만 가능하다는 한계가 있음

>> TCP 헤더

TCP Flags: PSH 그리고 URG :: 하얀쿠아의 이것저것 만들기 Blog

  • 보통 TCP 세그먼트라고 함은, 어플리케이션 계층에서 보내진 데이터에 TCP 헤더가 추가된 것을 말함

  • TCP 헤더에는 출발지와 목적지 포트번호, 시퀀스 번호, ACK 번호, 검사합 등의 요소가 존재

    • 시퀀스 번호 : 데이터 전송의 순서 보장을 위한 정보로, 데이터가 분할된 경우에는 시퀀스 번호를 통해 어떻게 분할되었는 지 알 수 있음(전송되는 바이트 수를 기준으로 점점 증가)

      • 앞서 언급한 MSS 기준 세그먼트가 분할되는 것과 대응되는 내용!
    • ACK 번호 : 응답 번호라고도 하며 수신측 프로세스에서 수신한 바이트 수를 제대로 응답하기 위해 사용됨

    • Flags : SYN, ACK 등의 제어 번호가 담긴 제어 비트 영역

    • Window Size : 수신 윈도우의 버퍼 크기를 지정할 때 사용되는데, 사이즈가 0일 경우에는 송신 프로세스가 전송을 중지함

    • 포트 번호 : TCP 프로토콜을 통해 연결되는 송, 수신측(출발지-목적지 양 끝)에 할당되는 포트 번호

    • 검사합(checksum) : 세그먼트에 포함된 헤더 및 데이터에 대한 오류 검출 용도

UDP(User Datagram Protocol)

img

  • 비연결, 비신뢰적 특징 을 갖는 전송계층의 프로토콜을 일컫음

  • 사전 연결 과정 없이 일단 데이터그램을 전송하고 보기 때문에, 빠른 전송이 가능하지만 신뢰성은 떨어짐

    • 동일하게 데이터그램의 전송 순서 또한 보장되지 않으며 중간에 유실되어도 재전송하지 않음
    • TCP가 MSS 사이즈로 패킷을 나누는 등의 데이터 분할 기능도 존재하지 않음
      • 이는 TCP와 달리 데이터의 경계가 구분됨을 의미
    • TCP와 달리 1:1, 1:N, N:N 통신이 모두 가능함
  • UDP가 제공하는 서비스는 최소한의 신뢰성을 위한 오류제어 메커니즘으로 검사합(checksum) 기능을 옵션으로 제공할 뿐임(TCP와의 공통점)

    • UDP 헤더는 TCP 헤더에 비해 포트번호에 검사합 관련 정보 정도가 추가된 정도로 비교적 간단함
  • 결국 신뢰성 보장 등을 위해서는 어플리케이션에서 따로 추가적인 작업이 필요해짐

>> UDP 헤더

  • 단순히 출발지와 목적지 포트번호, 데이터그램의 크기, 검사합의 정보만이 포함됨
profile
배운 것들을 꾸준히 기록하자

0개의 댓글