일반적으로 전산분야에서 프로토콜이란 컴퓨터들간의 원활한 통신을 위해 지키기로한 일종의 규약들을 의미한다. 신호처리, 암호화, 네트워크, HTTP/HTTPS등에 대해 여러 규약들이 존재한다.
과거에는 통신 규약이 표준화 되지 않았다. 그렇기에 상호 호환이 되지 않는 시스템, 애플리케이션간에는 통신이 불가능했다. 이를 통합하려 여러 노력이 있었고, 그 노력은 현재 OSI 7계층을 완성시켰다.
1~4계층을 Data Flow
계층 혹은 하위 계층
이라 부르고, 5~7계층을 Application
계층 혹은 상위 계층
이라고 부른다. 계층은 역할과 목표에 따라 분류가 되었다. Data Flow Layer
같은 경우, 데이터를 상대방에게 잘 전달하는 역할을 가지고 있다. 반대로 Application Layer
같은 경우, 데이터를 표현하는데 초점을 두는 계층이다.
일반적인 개발자는 Data Flow Layer
를 크게 신경쓸 이유가 없다. 그렇기에 하향식 접근(Top to Bottom)을 하고, 네트워크 엔지니어 같은 경우에는 상향식 접근(Bottom to Top)을 한다.
상위 계층에서 하위 계층으로 데이터를 보내면, 물리 계층에서 전기신호 형태로 네트워크를 통해 신호를 보낸다. 그리고 받는쪽에서 다시 하위계층에서 상위게층으로 데이터를 보낸다. 데이터를 보내는 과정을 Encapsulation
받는과정을 Decapsulation
이라고 한다. 현대 네트워크는 패킷 네트워크이며, 데이터를 Packet
이라는 단위로 쪼개 회선 전체를 점유하는 방식이 아닌, 동시에 여러 단말간 통신이 가능하게 끔 한다.
데이터 패킷을 쪼개고 네트워크를 이용해 목적지로 보내고, 받는쪽에서 패킷을 다시 큰 데이터 형태로 결합해 사용한다.
우선 Encapsulation 관점에서 보자. 5,6,7계층에서는 데이터를 2,3,4계층은 각각 자신이 필요한 정보(이 정보들은 비트 단위(0,1)로 작성)를 헤더에 추가한다. 그 다음 1계층에서 전기신호로 변환해 전송한다.
반대로 Decapsulation 관점에서 보자. 전기신호를 데이터 형태로 만든 후 2계층으로 보낸다. 2계층에서 헤더를 보고, 목적지가 아니라면 버리고, 맞다면 3계층으로 보낸다(랜카드에 의해) 여기서 주의할 점은 3계층으로 갈때는 2계층 헤더를 제거하고 보내진다. 3계층도 동일하게 헤더를 확인하고 4계층으로 보내고, 동일하게 헤더를 제거한 뒤 데이터를 애플리케이션에 올려보내주는것이다.
Frame
이라고 부르며, 도착지, 출발지 MAC주소가 담겨있다. Packet
이라고 부르며, 도착지, 출발지 IP주소가 담겨있다. Segment
라고 부르며, Sequence Number, Acknowledge Number, 포트번호가 담겨져 있다.OSI 7계층과 TCP/IP의 차이점은 무엇일까? 결론부터 말하자면, 말하고자 하는것은 동일하다. OSI 7계층에서 데이터 플로 계층과 애플리케이션 계층이 구분됨으로서, 애플리케이션 개발자와 네트워크 엔지니어가 신경써야할 부분이 구분이 되었다. TCP/IP 모델은, 그 구분이 좀 더 뚜렸하게 드러난 프로토콜 스택이라고 알고있으면 된다.
물리계층
이라고 하며, 물리적 연결과 관련된 정보를 의미한다. 주로 전기 신호를 전달하는데 초점이 맞춰져 있다. 주요 장비로는 Hub, Repeater, Cable 등이 있다. 1계층은 전기신호를 그대로 전달하는것이 목적
이다. 1계층 장비에는 전기 신호를 재생성해서 보내는 기능이 있으며 주소의 개념이 없기 때문에
모든 포트에 동일한 전기신호를 전송한다.
데이터 링크 계층
에서는 전기신호를 사람이 알아볼 수 있는 형태로 처리한다. 1계층에서는 전기신호를 정확히 전달하는것이 목적이었지만, 2계층에서는 주소정보
라는 개념이 들어간다. 이 주소 정보
를 정의하고, 정확한 주소로 통신이 되도록 하는데 초점이 맞춰져 있다.출발지 주소
와 도착지 주소
를 확인하고, 도착지 MAC 주소가 자신이 아니라면, 해당 패킷을 폐기한다. 만약 맞다면, 데이터를 상위계층에서 처리할 수 있도록 메모리에 적재한다
2계층을 구성하는 요소는 NIC(Network Interface Card)
와 스위치
이다. 그리고 이 중 NIC는 MAC 주소
라는 것이 있다. MAC주소는 NIC제조사에서 제조 시 내장하여 출고를 하며, 이는 하나만 존재할 수 있는 고유 번호이다.(물론 프로그램을 통해 바꿀 순 있지만, MAC주소의 본 목적인 고유 번호이다). IEEE에서는 제조사에게 MAC주소 풀을 부여하고, 제조사는 자체적으로 MAC주소를 할당한다
MAC주소는 48bit 16진수 12자리
로 표현된다. MAC주소는 앞 24비트, 뒤 24비트로 나누어 구분하게 된다. 앞에 24비트는 OUI(Organizational Unique Identifier), 제조사 코드
를 의미하고, 뒤의 24비트는 UAA(Universally Administered Address), 제조사에서 자체적으로 할당한 값을 넣어 장비를 구분하도록 한다.
스위치는 어떤 MAC주소인지, 연결된 포트는 어디인지를 주소습득 과정에서 알 수 있다. 그리고 이를 기반으로, 적절한 포트로 포워딩 해준다. 허브의 경우 한 포트로 들어오는 전기신호를 모든 포트로 전송
하였다. 반면, 스위치는 통신이 필요한 포트만 사용하므로 전반적인 네트워크에서 불필요한 처리가 감소
한다.
3계층에서는 IP주소와 같은 논리적인 주소가 정의된다. 데이터 통신을 할때는 두가지 주소가 필요하다 MAC 주소
와 IP 주소
이다. MAC주소는 고정적이었지만, IP주소는 사용자 환경에 맞게끔 변경되어 사용할 수 있으며, Host주소
와 Network주소
부분으로 나누어진다. 3계층에서 작동하는 장비는 라우터
이다. 라우터는 3계층에서 정의한 IP주소를 이해할 수 있다. 라우터는 IP주소를 사용해 최적의 경로를 찾아주고, 해당 경로로 패킷을 전송하는 역할을 한다. (IP주소에 대해서는 추후 자세히 다룰 예정)
기본적으로 IP 주소는 클래스
개념이 존재한다. 각 클래스는 옥텟 구분자에 따라 나누어지게 되며, 구분자를 서브넷 마스크라고 한다.
A,B,C 클래스는 맨 앞 옥텟의 주소만 보고 구분할 수 있다.
앞 옥텟의 주소가 0~127의 범위이면, 이는 A클래스이다. 다만 127로 시작하는 경우 자신을 의미하는 루프백 주소로 사용되므로 사실상 126.255.255.255까지만 사용 가능하다
첫 옥텟이 1000000 ~ 10111111 범위를 가지는 클래스이다. 10진수로 128~191까지이다.
첫 옥텟이 110 으로 시작하는 11000000 ~ 11011111 범위를 가지는 클래스이다. 10진수로 192 ~ 223까지이다.
이 개념은 과거에 사용하였던 개념이고, 현재는 위 클래스를 기반으로 1비트 단위로 네트워크를 상세히 분할하는 방법을 사용한다.
1,2,3계층에서는 신호와 데이터를 올바른 위치로 보내고 실제 신호를 잘 만들어 보내는데 집중한다. 4계층에서는 이 데이터들이 정상적으로 잘 보내졌는지 확인하는 역할을 한다. 패킷 네트워크는 데이터를 분할해서 전송한다. 그리고 중간에 잠시 멈췄다가 다시 보내지기도 한다(Flow Control). 이러한 경우, 중간에 패킷이 유실되거나 순서가 바뀌는 경우가 생길 수 있다. 4계층에서는 이러한 경우, 바로잡아준다.
기본적으로 패킷에는 번호
가 붙여진다.
이 번호를 대조하여, 만약 유실된 패킷이 있다면, 재전송 요청을 하여 바로잡는다. 또한 장치 내 포트번호를 이용해 애플리케이션을 구분한다.
4계층에서 작동하는 장비로는 로드밸런서
와 방화벽
이 있다. 전송계층 헤더는 기본적으로 도착지 포트, 출발지 포트
통신방식은 연결형, 비연결형으로 나뉜다. 연결형으로 통신하면, 데이터를 신뢰성 있고, 정확하게 전달 할 수 있다. 반대로 비 연결형 통신은 효율적으로 데이터를 전달할 수 있다. 연결형 통신은 데이터를 정확하게 전달하기 위해 지속적인 연락을 통해 통신하는 방식이고, 비연결형 통신은, 일방적인 데이터 전송이다. 다만, 각각 쓰임새가 다르다
TCP가 연결형 통신의 대표적인 프로토콜이고, UDP가 비연결형 통신의 대표적인 프로토콜이다.
TCP로 전송할때 붙이는 헤더를 TCP 헤더라고 부르며, 이와 데이터를 합친것이 세그먼트
이다. TCP는 데이터를 전송할때 상대방의 반응을 계속 확인한다. SYN, ACK가 필요하며, SYN은 연결요청, ACK는 확인응답이다.
이와 데이터 전송전 3번 주고받는것을 3way handshake라고 한다. 연결을 끊을때도 마찬가지이다. 하나씩 세그먼트를 보낼때마다 계속 확인을 하는것은 비효율적이다. 그렇기 때문에, 연속으로 받은 세그먼트를 일시적으로 보관하는 Buffer라는것을 사용한다. TCP헤더에 버퍼 크기 정보를 추가하며, 이를 Window Size라고 한다.
UDP로 전송할때 붙이는 헤더를 UDP 헤더라고 부른다. UDP는 상대방의 반응을 확인하지 않는다(3 Way Handshake 일어나지 않음) UDP는 데이터가 손실 및 유실되도 비교적 영향이 적은 동영상 혹은 이미지를 전송할때 사용된다. 또한 모든 컴퓨터에 브로드 캐스팅을 할때에도 UDP가 사용된다. UDP헤더와 데이터를 합친것을 UDP 데이터 그램이라고 부른다.
주로 5,6,7계층을 묶어서 애플리케이션 계층이라고 지칭한다. 각각의 계층이 어떤 역할을 하는지 짚고 넘어가 보자.
양 끝단의 응용 프로세스가 연결을 성립하도록 도와주고 연결이 안정적으로 유지되도록 관리하고, 작업 완료 후에는 연결을 끊는다. 흔히 말하는 세션
을 관리하는것 또한 세션계층의 역할이며, 에러로 중단된 통신에 대한 복구, 재전송도 수행한다
표현방식이 다른 애플리케이션이나, 시스템간의 통신을 돕기 위해 하나의 통일된 구문 형식으로 변환시키는 기능을 수행한다. MIME(Multipurpose Internet Mail Extensions) 인코딩이나, 암호화, 압축, 코드변환과 같은 동작이 6계층에서 이루어진다.
애플리케이션 프로세스를 정의하고 애플리케이션 서비스를 수행한다. 네트워크 소프트웨어의 UI부분 혹은 사용자 입출력 부분을 정의하는것이 애플리케이션 계층의 역할이다. 대표적으로 FTP,SMTP,HTTP,TELNET등이 있다.