상세 컨텐츠

본문 제목

각 계층의 프로토콜과 기타

Netwrok & Security

by thankee 2007. 12. 10. 14:16

본문

시작하기 앞서..
 - 프로토콜이란? : 보통 사람들은 프로토콜이라 하면 복잡한 프로그램을 떠올리곤 한다. WIndows 네트워크 창에 TCP/IP프로토콜 설치나 스타크래프트의 멀티플레이 창에 나타나는 TCP, UDP들을 자주 보았기 때문에 그러리라 생각된다. 프로토콜은 정확히 어떤 프로그램을 지칭하는 것이 아니라, 통신을 위한 약속이다. 약속이라 하면, 통신을 위해 통신회선은 어떤것으로 쓰고, 어떻게 네트워크 상에 컴퓨터를 구성하고 배치할 것이며, 어떤 장비를 이용할 것이며, 어떤 신호를 보내면 어떻게 반응 할 것인지 등.. 통신을 하기 위해 필요한 모든 약속이 프로토콜이 되는 것이다. 이 점 착오가 없길 바란다.
(물론 프로그램이 프로토콜이 될 수 있다)


응용계층의 프로토콜

  1. HTTP : 웹서버와 클라이언트 사이에서 사용자 브라우져에 내용을 표현하기위한 문서를 전송하기 위해 사용되는 프로토콜.(대표적으로 HTML문서가 있다.) 보통 TCP 80포트를 주로 사용한다.
  2. SMTP(Simple Mail Transfer Protocol) : E-mail을 송신(전송)하는데 사용되는 프로토콜
  3. POP3(Post Office Protocol 3) : E-mail을 수신하는데 사용되는 프로토콜.
    - 메일을 송신하고 수신하기 위해서는 SMTP와 POP3 모두 필요하며 모두 같은 서버에 설치되기도 하며, 각각 다른 서버에 설치될 수도 있다.
  4. DNS(Domain Name Service) : 우리가 흔히 사용하는 문자기반의 인터넷 주소(도메인)을 IP 주소로 변환하는 작업을 하는 프로토콜. 보통 TCP 53번 포트를 사용한다.
  5. Telnet : 원격으로 컴퓨터에 접속해서 작업을 가능하게하는 프로토콜.
  6. FTP(File Transfer Protocol) : 파일을 전송하기 위해 사용되는 프로토콜.
  7. SNMP(Simple Network Management Protocol) : TCP/IP기반의 네트워크 망에서 스위치, 허브, 서버 등의 네트워크 기기의 관리 정보를 전송하기 위해 사용하는 프로토콜.
  8. NTP(Netwrok Time Protocol) : 네트워크 상의 장비, 컴퓨터의 시간을 동기화하는 프로토콜.

전송계층의 프로토콜(TCP, UDP)

  1. TCP : 신뢰성이 요구되는 Data를 전송하는데 사용되는 프로토콜로서 데이터 감시, 복구, 회선 감시 등의 신뢰성을 높이기 위한 작업을 하며 전송을 진행한다.
    - 전송을 하는 두 장치 모두 서로 포트를 열고 서로 확인 후 전송을 실시 한다.
    - HTTP, FTP, Telnet, SMTP, POP3 모두 TCP를 사용한다.
    - 통신 요청과 종료는 누가 통신을 요청했는지에 상관없이 장치가 원할때 종료요청 할 수 있다.
    - TCP는 장치간에 통신하기 위해 가상회선을 열고 통신을 진행하는데, 통신을 열기 위한 3과정을 3-Way Handshake, 통신을 종료하기 위한 4과저을 4-Way Handshak라고 한다.
    (가상회선은 TCP전송의 논리적인 개념일 뿐이며, 실제로 두 장치가 전용 통신회선을 가지고 전송하는 것은 아니다.)
    - 3-Way Handshake(가상회선을 열기위한 3과정)
      * 1. 연결을 원하는 장치가 연결 요청 데이터 전송 (Synchronize)
      * 2. 수락측에서 요청 인정 데이터 수락측의 연결 요청 데이터 전송
           (Synchronize + Acknowdgement)
      * 3. 연결을 먼져 요청한 PC에서 연결 수락 데이터 전송 (Acknowledgement)
      * 데이터 요청 및 데이터 전송 작업이 이 때부터 진행된다.
    - 4-Way Handshake(가상회선을 닫기위한 4과정)
      * 1. 어떤 장치라도 먼저 종료 요청할 수 있으며, 상대에게 종료요청 데이터를 전송(Finish)
      * 2. 요청을 당한 상대는 통신 종료 요청 인정 데이터 전송(Acknowledgement)
      * 3. 요청을 당한 상대가 다시 종료 요청 데이터를 요청한 장치로 전송(Finish)
      * 4. 종료 요청 인정 데이터 전송(Acknowledgement)
      * 통신 종료
    - 1~65535까지의 포트를 생성하여 통신하며, 통신을 하는 두 장치의 포트가 같을 필요는 없다
    - 잘알려진 포트번호는 1024 이하로 포트번호가 할당되며, 1024를 초과하는 포트번호는 잘 알려지지 않는 임의 포트 번호가 된다.
    - 전송요청, 종료요청 나 또는 전송 중에, 임의로 일련번호(Sequence Number)를 생성하여 전송하며, 받는 상대는 이 일련번호+1의 숫자로 요청 인정 및 응답을 해야한다.
    - 전송 중인 데이터의 신뢰성 체크는 보내는 쪽에서 전송하는 패킷의 크기 +1의 번호를 포함하여 패킷을 전송하고, 상대는 이 번호를 보고 옳바로 전송 되었는가 확인하며, 전송에 문제가 생겼을 시 재전송을 요청한다.
    - 헤더에 처리가능한 데이터의 양(수신가능한 데이터 크키)을 포함하여 전송하기 때문에, 받는 측의 버퍼 크기를 초과하는 데이터 전송은 잘 일어나지 않는다.
    - TCP프로토콜에서 패킷에 붙이는 헤더의 구조는 다음과 같다.
    - 조정비트 중에 RST는 Reset의 줄임말로, 요청한 포트로 서비스 불가 등의 상황에 상대에게 답장을 보내는 것으로서 SEQ(일련번호)를 증가시키지 않고 보낸다.


    - Source Port : 출발지 포트 번호
    - Destination Port : 목적지 포트 번호
    - 순서번호 : 전송되는 데이터 일련번호
    - 인정번호 : 전송 받은 일련번호 + 1의 인정 번호
    - Length : TCP헤더의 길이
    - 예약필드 : 특별히 사용하지 않는 예약 필드
    - Control bit Window: 조정비트로서 SYN,(요청) ACK(수락), FIN(종료), RESET(서비스불가)등 제어 정보
    - Window : 수선 컴퓨터의 수신 버퍼 크기
    - Checksum : TCP세그먼트의 체크섬(오류 검출을 위한 방법중 하나)
    - Urgent Pointer : 급히 처리될 데이터의 마지막 바이트
    - Options : 최대 20바이트의 필요시 추가사항 기록
    - Padding : 헤더를 32비트 크기로 맞추기 위해 채워질 데이터
     
  2. UDP(user datagram protocol) : 신뢰성이 없는 프로토콜이 아니라, TCP와 비교해 볼 때, 데이터 전송시 문제가 생겨도 감지나, 복구 등의 기능이 없는 대신에 보다 가볍고 간단하다. 간단하며 신뢰성이 크게 요구되지 않는 데이터를 전송할 때 주로 사용한다.
    - DNS, SNMP, TFTP(Trivial File Transfer Protocol) 프로토콜들이 사용한다.
    - 데이터를 요청하면 응답하는 매우 간단한 방식의 전송
    - 신뢰성이 필요한 경우 UDP를 사용하면 프로그램 에러나, 속도가 오히려 떨어지는 역효과가 일어날 수 있으나, 단순 텍스트 전송등의 간단한 데이터 전송에는 오히려 적절하다.
    - UDP헤더는 다음과 같다.
    - UDP는 에러등의 상황에 상대에게 어떠한 메시지를 보낼 수가 없기 때문에 필요시 ICMP(Internet Control Message Protocol)을 사용하여 에러 등 필요한 메시지를 전송한다.


    - Source Port : 출발지 포트 번호
    - Destination Port : 목적지 포트 번호
    - Length : 헤더를 포함한 데이터 길이
    - Checksum : 체크섬 정보
    - 헤더뒤에 바로 데이터가 포함된다.

인터넷 계층의 IP, ICMP

  1. ICMP(Internet Control Message Protocol) : IP, UDP를 도와주는 역할을 주로하는 프로토콜로서 간단한 메세지등을 IP를 사용하여 전송한다.
    - ICMP가 IP를 사용하지만 IP와 같은 인터넷 계층의 프로토콜에 속한다.
    - 간단한 메시지 전송, 에러 내용 전송을 하는데 Ping 명령시 나타나는 문구들이 ICMP로 전송된 메시지 들이다.
    - ICMP의 헤더


    - 타입 : ICMP의 종류(아래 내용 중 하나)
      * 0, 8 : 각각 Echo 응답, 요청
      * 3 : 목적지 도달 불가
      * 4 : 발신자 억제
      * 5 : 재지정
      * 9, 10 : 라우터 간청과 광고
      * 11 : 시간 경과
      * 12 : 매개변수 문제
      * 13, 14 : 타임 스탬프 요청과 응답
      * 17, 18 : 주소 마스크 요청과 응답
    - 코드 : Type의 추가 적인 정보
    - 체크섬 : 헤더를 포함한 데이터의 오류 식별을 위한 데이터
    - 순서번호(Sequence) : 요청과 응답의 순서 번호
    - 데이터 : 헤더 뒤에 데이터가 붙는다.
  1. IP(Internet Protocol) : 인터넷 계층에 없어서는 안되는 필수 프로토콜 로서, IP를 이용한 경로 설정데이터 조각내어 보내고 결합하기 등 여러가지 역할을 한다.
    - 네트워크 부분과 호스트 부분 : IP를 효율적으로 분배하기 위해, 다수의 IP를 필요로 하는 사업자에게, 네트워크 주소만을 부여하고, 호스트 주소 부분 지정은 해당 네트워크 사업자에게 맡기게 된다.(IP는 네트워크 부분과 호스트 부분으로 나누어진다. 아래서 언급될 것이다.) 인터넷 호스팅 업체 등 많은 IP를 필요로 하는 업체(KT나 하나로, 큰 규모의 정부)에는 A나 B클래스를 할당해주어 많은 호스트 부분을 부여하고, 규모가 작은 네트워크 사용자(일반 기업, 작은 학교)에게는 C나 D클래스를 할당해주게 된다. 즉 C클래스를 할당 받으면 256개(실제로는 254개 : 호스트 주소가 모두 1이거나 0인 주소는 다른 용도로 사용)의 장치로 네트워크를 구성하여 각 장치를 인터넷에 연결 시킬수 있다.(그러나 NAT나 PAT로 하나의 IP로 여러 PC가 인터넷을 접속할 수 있다. 반대로 인터넷에 연결하지 않을 것이라면 자기 마음대로 약 42억개의 컴퓨터에 IP를 부여하고 사용할 수있다.)
    - 라우팅 : IP클래스와 서브넷마스크를 시작하기 전에 라우팅의 개념을 미리 알아두는것이 이해에 더욱 도움이 될것이다. 라우팅이란 라우터가 IP의 네트워크 부분을 확인하고 경로를 설정하는 것이다. 먼저 IP를 각 클래스 별로 네트워크 부분과 호스트 부분을 나누어 둠으로서 라우터가 호스트 부분은 무시하고, 네트워크 어드레스 부분만을 확인하고 해당 네트워크(사용자 PC가 아닌 해당 사용자 PC가 포함된 네트워크로)경로를 설정할 수 있도록 한다. 서브넷마스크는 사용자가 호스트 부분을 몇 개의 네트워크로 나누어 쓰더라도 라우팅이 가능하게 하는 것이다. 서브넷마스크로 호스트에서 라우팅에 필요한 부분만 걸러냄으로서 라우터가 라우팅 할 때 호스트 부분이 몇개의 네트워크로 나뉘며, 어디로 가야 목적지로 갈 수 있는지 경로를 지정하는데 도움이 된다.
    - IP 주소체계 : 4Byte(32bit) 주소 체계로서 4자리로 나뉘며, 각 자리는 옥텟(Octet)라고 부르며, 1바이트로서 0~255 사이의 십진수 숫자이다(이진수로 표기하기도 한다).
    - IP의 분배 : 공인 IP주소는 인터넷 할당 번호 관리 기관인 IANA(Internet Assigned Number Authority)에 의해서 관리되는데(사설 아이피는 사용자 마음대로 쓰면된다-_-;) IP주소 분배의 효율성을 높이기 위해 IP주소체계를 아래의 클래스들로 나누었다. 또한 IANA는 대륙별, 국가별로 해당 지역 IP주소의 분배를 총괄하는 조직을 설립하였는데(이 조직을 IR(Internet Registry)이라고 한다), 우선 대륙별로 APNIC(아시아,태평양), RIPE-NCC(유럽), ARIN(미국과 기타지역)이 있으며, 국내 IR조직은 KRNIC가 담당한다.
      * 클래스는 IP에서 호스트 부분과 네트워크 부분을 구분하는 방법이다.
      *A클래스 : 네트워크 부분이 이진수로 가장 앞자리가 0인것, 즉 네트워크 부분이 0~127까지의 번호를 말한다. (0.0.0.0~127.255.255.255 사이의 번호가 A클래스가 된다.)

    0XXXXXX

    XXXXXX

    XXXXXX

    XXXXXX

    (X는 0 또는 1, 붉은 색은 네트워크 부분, 흰색은 호스트 부분)
      * B클래스 : IP를 2진수로 볼 때 가장 앞자리가 10인 것으로서 128.0.0.0~191.255.255.255 사이의 번호를 말한다.

    10XXXXX

    XXXXXX

    XXXXXX

    XXXXXX

    (X는 0 또는 1, 붉은 색은 네트워크 부분, 흰색은 호스트 부분)
      * C클래스 : IP를 2진수로 볼 때 가장 앞자리가 110인 것으로서 192.0.0.0~223.255.255.255사이의 번호를 말한다. 여기까지 사용자가 흔히 볼 수 있는 IP주소이다.

    110XXXX

    XXXXXX

    XXXXXX

    XXXXXX

    (X는 0 또는 1, 붉은 색은 네트워크 부분, 흰색은 호스트 부분)
      * D클래스 : IP를 2진수로 볼 때 가장 앞자리가 1110인 것으로서 224.0.0.0~239.255.255.255사이의 번호를 말한다. 특수 용도로 사용.
    (앞에서 네자리 부분인 1110만 네트워크 부분, 나머지는 호스트 부분이다.
      * E클래스 : 240~.0.0.0~255.255.255.255사이의 주소로서 사용불가 영역이며, 인터넷에 연결되지 않는다면 사용해도 상관없다.
    - 서브넷 마스크 : IP주소는 서브넷 마스크로도 여러 그룹으로 구분할 수 있다. 10명 정도가 사용하는 네트워크에 C클래스를 할당한다고 해도 그 사용자는 256개의 컴퓨터를 쓸 수 있게 되지만, 그 모든 것을 그 사용자에게 주는 것은 비효율 적이다. 따라서 좀더 효율적으로 구분하기 위해 서브넷 마스크를 사용하게 된다.
      * 서브넷 마스크는 IP와 마찬가지로 32비트로서, 4자리로 나눈 숫자들이다.
      * 사용자는 호스트 부분의 서브넷 마스크를 지정해 줌으로서 네트워크를 세분화하여 사용할 수 있다.(네트워크 부분은 1, 호스트 부분은 0 또는 1 이다.)

    11111111

    11111111

    11111111

    XXXXXXXX

    (C클래스의 서브넷 마스크의 기본적인 모습. 서브넷 마스크의 네트워크 부분은 무조건 1이다. 즉 255.255.255.XXX의 모습을 가진다.)
    * 서브넷 마스크의 동작 방식은 실제 IP와 서브넷 마스크를 AND연산하는 것이다. (경로 설정에 필요없는 부분을 모두 걸러버리는 것이다.)

    11001110

    11001011

    11011011

    01011111

    11111111

    11111111

    11111111

    10000000

    위는 실제 IP, 아래를 서브넷 마스크라고 할 때, AND연산하면 아래와 같이 된다.

    11001110

    11001011

    11011011

    00000000

     위에서 서브넷 마스크의 호스트 부분을 1로 처리했다. 왜냐하면 호스트부분의 가장 앞자리를 보고 라우터는 호스트 부분까지도 라우팅 할 수 있게되기 때문이다. 즉 사용자는 호스트 부분을 두개의 네트워크로 구성할 수 있게 되는 것이다.(나누어진 2개의 네트워크도 라우팅이 되므로) 사용자는 이런식으로 서브넷 마스크를 이용하여 호스트부분을 몇개로도 나누어 따로 네트워크를 구축할 수 있게 된다.
    - 공인(Public) IP와 사설(Private) IP : 공인 아이피는 인터넷으로 연결되는 아이피들을 말하며, 사설 아이피는 인터넷으로 나가지 않는 조건으로 사용자가 마음대로 아이피를 부여하여 사용하도록 한 IP 범위를 말한다.
    * 아래는 사설 IP대역을 말한다.

    IP 대역

    클래스

    10.0.0.0~10.255.255.255

    A 클래스 (1개)

    172.16.0.0~172.31.255.255

    B 클래스 (16개)

    192.168.0.0~192.168.255.255

    C 클래스 (256개)

    (사설 IP를 이용한다고 인터넷에 나갈수 없는 것은 아니다. 하나의 공인 아이피를 사설 IP를 사용하는 네트워크 망에 부여하고 NAT를 이용하여 사설 IP를 공인 IP로 변환하여 인터넷으로 나갈 수 도 있다. PAT는 같은 IP를 사용하면서, 포트로서 각 장치를 구분하는 것이다.)
    - IP 프로토콜이 사용하는 헤더는 다음과 같다.


     - 버전 : IP 프로토콜의 버전(IPv4, IPv6등이 있다)
     - 헤더 길이 : 헤더의 길이
     - 서비스 타입 : IP 데이터그램의 우선 순위
     - 전체 길이 : 헤더와 데이터의 길이 합
     - ID : 데이터 그램 일련 번호
     - 조각 상태 : 패킷이 분리된 상태
     - 조각의 위치 : 조각이 전체 데이터 그램에서 어느 부분에 속하는지 구분
     - TTL : Time to Live로서, 의도치 않게 라우터들이 패킷을 같은 경로를 빙빙돌게 경로들이 설정 할 수 있다. 이런 빙빙 도는 패킷이 쌓이면 네트워크 트래픽이 증가할 수 밖에 없다. 이런 경우를 막기위해, 패킷이 처음 전송될 때 TTL에 적당한 숫자 값을 주고(Windows 2000 : 128, Linux : 64), 경유지를 통과할 때마다 TTL을 1씩 감소시켜 0이되면 패킷을 소멸시키도록 만들었다.
     - 프로토콜 : IP프로토콜을 사용하는 상위 계층의 프로토콜
     - 체크섬 : 데이터 손실여부 판단
     - Source IP : 출발지 IP 주소
     - Destination IP : 목적지 주소
     - 선택사항 : 최대 40bit로서 보안 옵션등의 선택 사항 정보가 담겨진다.
     - Padding : 헤더를 32bit크기로 맞추기 위한 데이터가 삽입되는 부분.


by thankee from tistory.com


관련글 더보기