본문 바로가기

네트워크

[네트워크] 프로토콜

프로토콜이란?

  • Protocol의 사전적 의미는 "여러 컴퓨터나 단말기 사이에서 데이터 통신을 원활하게 하기 위해 필요한 통신 규약"이다.
  • 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고받는 양식과 규칙의 체계.
  • 통신 프로토콜은 쉽게 말해 통신을 하기 위한 규약/약속이라고 이해하면 된다.

프로토콜의 기본 요소

프로토콜을 정의하기 위해선 구문, 의미, 타이밍 이렇게 3가지 기본 요소가 필요하다.

구문(Syntax)

다른 매체와 어떤 단위로, 어떤 형식으로, 어떤 신호를 보낼지를 결정해야 한다.

데이터를 어떻게 구성할 지에 대한 형식, 구체적인 코딩 방법, 신호 레벨 등에 대한 형식을 규정.

송수신 데이터 포맷을 의미한다.

의미(semantic)

데이터에 대하여 구체적으로 어떻게 제어할 것인지에 대한 처리 방법.

오류가 발생했을 때 어떤 식으로 제어할 것인지, 데이터의 속도가 한쪽이 너무 빠를 때 어떤 식으로 흐름을 제어할 것인지 등 제어를 통해 원활한 소통을 할 수 있도록 해야 한다.

타이밍(timing)

위에서 어떤 형식으로 어떻게 데이터를 제어할 것인지를 정했다면 데이터를 어떤 순서로, 어떤 속도로 전송할 것인지를 정해야 한다. 여러 데이터가 동시에 통신을 해야 할 경우 순서 관리를 위한 기법을 포함한다. (데이터 송수신 동작 방식의 정의)


프로토콜의 구성

프로토콜은 물리적 측면과 논리적 측면 이렇게 2가지로 이루어져 있다.

물리적 측면

자료 전송에 쓰이는 전송 매체, 접속용 단자 및 전송 신호, 회선 규격 등 (물리계층, 데이터 링크 계층, 네트워크 계층) 물리적 측면은 말 그대로 물리적인 기기의 어떤 것을 의미.

실제 어떤 장비로 데이터를 보낼 것이며, 어떤 단자를 사용할 것이며, 회선의 규격은 어느 정도로 설정할지가 여기에 포함된다.

논리적 측면

논리적 측면은 물리적인 것이 아닌 데이터를 보낼 때 논리적인 방식을 의미한다.

프레임(Frame, 자료의 표현 형식 단위) 구성, 프레임 안에 있는 각 항목의 뜻과 기능, 자료 전송의 절차 등( 전송 계층, 세션 계층, 표현 계층, 응용 계층) 이 여기에 포함된다

논리적인 측면의 프로토콜은 폐쇄적인가 공개적인가에 따라 또 2가지로 나눌 수 있다.

폐쇄적인 프로토콜은 말 그대로 어떠한 규격을 공개하지 않아 위협에 상대적으로 안전하여 자사의 장치들끼리 통신할 때 사용된다. ex) IBM의 SNA, SDLC 프로토콜

공개적인 범용 프로토콜은 실제 여러 컴퓨터나 장치에 쓰이는 프로토콜을 의미하고, 정보가 공개되어 있기 때문에 위협에 취약한 편이다. ex) 인터넷의 TCP/IP


프로토콜의 기능

1. 단편화와 재결합 (쪼개고 조합하기)

데이터의 용량이 매우 큰 경우 한 번에 보낼 수 없는 상황이 발생한다.

이때 데이터를 전송하기 전 데이터를 보내는 쪽은 전송 효율이 높은 작은 단위로 쪼개서 데이터를 보내야 하며, 데이터를 받는 쪽은 응용 프로그램에서 사용하기 위해 재조합하여야 한다.

송신 측에서 전송할 데이터를 전송에 알맞은 일정 크기의 작은 블록으로 자르는 작업을 단편화(Fragmentation)라 하고, 수신 측에서 단편화된 블록을 원래의 데이터로 모으는 것을 재결합(Reassembly)이라 한다.

2. 캡슐화 (데이터에 제어 정보를 덧붙임)

PDU (Protocol Data Unit)는 PCI(protocol Contorl Unit)와 SDU(Service Data Unit)으로 구성된다.

PCI는 각종 헤더 정보(발신지 주소, 수신지 주소, 순서 번호, FCS 등)를 담고 있고 SDU에는 Payload, 실제 서비스 데이터 정보를 담고 있다.

통신을 구성하는 각각의 Layer를 통과하기 위해서는 캡슐화를 통해 포장하는 과정을 거치며, 데이터를 사용하기 위해서는 캡슐화된 데이터는 수신 측에서 역 캡슐화하는 과정을 통해 각각의 Layer를 통과한다.

3. 연결 제어 (연결할지 말지 정하기)

두 시스템이 서로 데이터를 교환할 때 연결 지향성에 따라 두 가지로 분류할 수 있다.

연결 제어는 연결 설정, 데이터 전송, 연결 해제에 대한 통제.

비연결 데이터 전송(데이터그램)과 연결 위주 데이터 전송(가상 회선)을 위한 통신로를 개설·유지·종결하는 기능.

4. 오류 제어 (오류 발견하고 대비하기)

데이터를 주고받는 과정에서 오류가 발생했다면 이것을 확인할 수 있어야 하고, 해당 오류를 수정하고 손실되지 않도록 대비해야 한다.

PDU로 데이터를 교환할 때 SDU나 PCI가 잘못되었는지 발견하는 기법을 오류제어라고 한다. 오류 제어(Error Control)는 전송 중에 발생하는 오류를 검출하고 정정하며 특정 시간 안에 데이터를 받지 못하면 재전송을 요구하는등 데이터나 제어 정보의 파손에 대비하는 기능이다.

오류 제어(Error Control)는 전송중에 발생하는 오류를 검출하고 정정하여 데이터나 제어 정보의 파손에 대비하는 기능이다.

5. 흐름 제어 (속도 조절하기)

데이터를 주고받을 때 한쪽에서 너무 빠르게 데이터를 보내지 않도록 속도를 조절해야 한다. 흐름 제어는 수신 측의 처리 능력에 따라 송신 측에서 오는 전송량이나 전송 속도를 조절하는 기능이다. 송신과 수신에 있어서 속도 차이로 인한 데이터의 유실을 방지한다.

6. 순서 제어 (순서 정하기)

데이터를 어느 순서로 보낼지를 결정해야 하며, 이러한 순서는 오류가 발생했을 때 어느 지점에서 발생했는지 쉽게 확인할 수 있도록 한다.

데이터가 전송될 때는 PDU(Protocol Data Unit)을 통해서 하나의 데이터를 여러 개의 각 프로토콜에 맞는 단위로 쪼개어 전송하게 된다. 순서 제어란 PDU에 전송 순서를 부여하는 기능으로 연결 지향형(예를 들어 TCP 프로토콜)에만 사용한다.

데이터들이 순서적으로 전송되도록 함으로써 흐름 제어, 혼잡 제어 및 오류 제어를 용이하게 한다. 순서 제어에 의해서 정해진 PDU를 수신 측에 보내면 순서에 맞게 데이터를 재구성한다.

7. 동기화 (같은 상태 유지하기)

두 통신 객체의 상태(시작, 종류, 검사 등)를 일치시키는 기능.

데이터를 보내는 쪽과 데이터를 받는 쪽 둘 다 시작하는 시간, 검사하는 시간, 어떤 데이터 종류를 가지고 있는지 등 같은 상태를 유지해야 한다.

동기화는 송수신 측이 같은 상태를 유지하도록 타이밍을 맞추는 기능이며 여러 시스템이 동시에 통신할 수 있게 해 준다.

8. 주소 설정 (주소 정하기)

데이터를 어느 주소에서 보낼 건지 , 받는 쪽이 어느 주소에서 받을 건지를 정하여 데이터를 정확하게 전달하여야 한다.

각 전송계층에 맞는 송신자와 수신자의 주소 지정하는 기능.

데이터가 목적지까지 정확하게 전송될 수 있도록 각 전송계층에 맞는 송신자와 수신자의 주소, 목적지, 이름, 주소, 경로를 부여하는 기능이다.

9. 다중화/멀티플렉싱 (여러 명이 사용할 수 있게 하기)

하나의 통신 선로에서 시스템이 동시에 통신할 수 있는 기법을 다중화라 한다.

다중화는 한 개의 통신 회선을 여러 가입자들이 동시에 사용하도록 하는 기능이다.

9. 전송 서비스

전송하려고 하는 데이터가 사용하는 별도의 부가 서비스(우선순위 결정, 패리티 검사, 보안 요구 구현 , 서비스 등급 부여 등)를 제어.


프로토콜의 종류의 대표적인 예

정말 다양한 프로토콜이 존재한다는 것을 알게 되었다. 자세한 종류와 계층에 대해서는 다음 포스트에서 다뤄보자.

1. FTP(File Transfer Protocol)

port(20) : 데이터 전송용

port(21) : 제어용

응용 계층에서 파일을 주고받기 위한 규약이다.

파일 전송을 위한 가장 기본 프로토콜로 RFC114로 1971 년 만들어짐.

보안성 문제로 TLS와 결합한 FTPS와 SSH와 결합한 SFTP가 있다.

2. SSL(Secure Socket Layer)

표현 계층의 네트워크의 인증, 암호화 등의 규약을 의미한다.

3. HTTP(HyperText Transfer Protocol)

port(80)

프로그래밍을 한 사람이라면 누구나 한 번쯤은 들어봤을 법한 HTTP이다.

웹(응용 계층) 상에서 하이퍼텍스트(HTML)를 통해 전송하는 규약을 의미한다.

클라이언트/서버 사이에 요청(request)/응답(response) 할 때 사용한다.

TCP와 IP(TCP/IP) 프로토콜 위에서 동작하는 응용 계층의 프로토콜이다.

4. DNS**(Address Resolution Protocol)**

port(53)

DNS(Domain Name System, 53번 포트) : 도메인 이름을 통해 IP주소를 확인하는 프로토콜.

5. SSH(Secure Shell Protocol)

port(22)

Public Network를 통해 서로 통신을 할 때 보안적으로 안전하게 통신을 하기 위해 사용하는 프로토콜입니다. 데이터 전송과 원격제어에 사용된다.

6. TCP(Transmission Control Protocol)

전송계층에서 동작하는 연결 지향형 프로토콜로 데이터의 흐름을 관리하고, 데이터가 정확한지 검증하며 통신한다. 3-way handshaking을 통해 연결 설정.

전송 계층에서 정보 전달을 안전하게 할 수 있도록 하는 규약을 의미한다.

  • Stream 방식
  • 양방향 통신
  • 연결성, 순서, 신뢰성이 있음

높은 신뢰성, 가상 회선 연결 방식, 연결의 설정과 해제, 데이터 체크섬, 시간 초과와 재전송, 데이터 흐름 제어 역할을 수행한다.

7. UDP(User Datagram Protocol)

전송 계층에서 보다 빠르게 데이터를 주고받을 수 있도록 하는 규약.

TCP와 달리 비연결 지향형 프로토콜.

양방향 연결이 필요 없음.

속도를 우선으로 연결성, 순서, 신뢰성이 없음, 데이터의 무결성을 보장받지 못한다.

상대방이 보낸 응답을 확인하지 않으며, 송신 시스템이 전송하는 데이터에 대한 목적지 시스템의 확인 절차를 생략하므로 네트워크에 부하를 주지 않는 장점이 있음, 그러나 데이터 자체의 신뢰성이 없으므로 수신한 데이터는 무결성을 보장받지 못함. (데이터 손실 발생)

8. ICMP**(Internet Control Message Protocol)**

port(1)

호스트 서버와 인터넷 게이트웨이 사이에서 메시지를 제어하고 오류를 알려주는 프로토콜이다.

운영체제에서 오류 메시지를 전송받는데 주로 쓰이며 몇몇 진단 프로그램을 제외한 남지는 데이터를 교환하지 않는다.

IP는 비연결 지향형 프로토콜이라서, 오류 제어가 없다. 이를 보조해주는 것이 ICMP이다.

ICMP는 IP 계층 위에서 동작한다.

대표적으로 ping 툴이 있다.

9. IP(Internet Protocol)

네트워크 계층에서 호스트의 주소 지정과 패킷을 분할하고 조립하는 규약을 의미한다.

  • 패킷을 분할 및 재조립함
  • 수신할 상대 주소를 지정함

랜의 영역을 넘어서는 회선이 서로 다른 두 노드 사이 WAN 구간의 데이터를 전송. IP 주소는 A, B, C, D, E, 클래스로 구분하고 각 클래스는 네트워크 부분과 호스트 부분으로 구성되어있다.

IP는 32자리 2진수로, 8자리마다 점을 찍어 구분하고 개수가 제한되어 있다.

EX) 200.333.111.444 <- 십진수 표현법.

0.0.0.0 ~ 255.255.255.255 경우의 수가 가능하다.

클래스가 있는 IP주소와 클래스가 없는 IP로 나눠지며 현재는 클래스가 없는 IP 주소를 사용한다.

10. ARP(Address Resolution Protocol)

통신 대상 시스템에 도달하기 위한 다음 네트워크 인터페이스의 MAC 주소를 알아내야 할 때 사용된다.

3 계층에서는 IP주소를 활용하는데 데이터를 전송하기 위해서는 IP주소뿐만 아니라 물리적인 주소(MAC)를 먼저 확보해야 한다. ARP는 IP를 보조하기 위해 사용한다. ARP는 MAC 주소를 위해 사용하지만 정보로 담는 값은 IP이므로 데이터 링크와 네트워크 계층 중간에 위치한다고 볼 수 있다.

과정은 다음과 같다.

  • 브로드 캐스트(BroadCast)를 통해 특정 IP주소를 사용하는 호스트가 응답하도록 요구한다.
  • 이 요구에 호스트는 응답을 하고 ARP 테이블을 설정한다.
  • ARP 테이블의 정보에 따라 데이터 링크 계층 통신이 수행된다.

RARP(Reverse ARP)는 반대로 MAC 주소를 알고 IP주소를 모를 때 사용하는 프로토콜이다.

11. Ethernet

흔히 LAN이라고 부르는 네트워크 구간 또는 네트워크 하드웨어 사시에서 MAC(Media Access protocol) 주소를 기반으로 통신을 위한 프로토콜.

제록스의 PARC에서 1970년대에 개발.

최소 길이 64 KBytes, 최대 길이 1,518 KByte.

1980년대 IEEE 802.3이 규약의 기초.

이후 DEC, 인텔, 제록스가 버전 2를 발표했다.

오늘날에는 CSMA/CD(Carrier Sense Multiple Access/Collision Detection) LAN을 이르는 말로 사용된다.