OSI 7계층(L4는 TLS 버전과 관련있을까?)

브라우저가 2020년부터 TLS 1.1 지원을 중단함에 따라 사내에서 SSL 관련 문의가 증가하고 있다. 사실 그간 웹서버에 인증서를 씌우는 작업을 하면서, 뭔가 남에게 설명할 만큼의 SSL에 대한 이해를 하지는 못했었다. 공부하지 않으려 했던 것은 아니지만 (핑계같지만..) 매번 글을 읽을 때마다 직관적인 이해가 되지 않았던 것 같다. 일단 최근 어떤 분께서 L4가 TLS 버전과 관련이 있냐는 문의를 하셨는데, L4는 TLS와 관련이 아예 없음은 아니지만 직접적으로 버전 변동과는 관련이 없을 것 같았다. 하지만, 역시 정확히 YesNo라고 답해드릴 수 없었다. 왜냐? 내가 잘 몰랐기 때문이다. 일단 위 질문과 SSL에 대해서 정리하기 이전에, OSI 7계층부터 먼저 짚고 넘어가야 될 것 같았다. 정리를 하다보니 TCP가 있는 4계층(전송계층)에서 조금 이야기가 길어졌다. 여하튼 이번 글을 통해서 OSI 7계층을 어렴풋이 정리하고 각 계층별로 속한 프로토콜들을 한 번씩 훑어볼 것이다!

OSI 7계층 OSI 7계층

OSI 7계층

Open Systems Interconnection, OSI 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명한 모델이다. OSI 7계층을 처음 들으면 와닿지 않을 수 있는데, 어플리케이션에서는 MVC 모델/웹 구조에서 3Tier 구조와 같은 모델이 있듯이 프로토콜 디자인에서의 모델이라고 생각하면 될 것 같다.
물리 - 데이터 링크 - 네트워크 - 트랜스포트 - 세션 - 프레젠테이션 - 애플리케이션 으로 이루어져있는데, 상위 프로토콜은 하위 프로토콜을 모두 온전히 지원해야 통신이 가능하다. 또한, 계층 간 통신을 위해서는 동일한 계층에서는 동일한 프로토콜을 지원해야함. (peer-to-peer 통신) 각 계층의 프로토콜이 일치하지 않는다면 통신이 이루어질 수 없음. PC는 7계층 장비, 라우터는 3계층, 스위치는 2계층 장비이다. 7계층장비라는 것은 7계층 이하를 지원하는 장비라는 뜻이다.

7계층, Application 계층

일반적인 사용자가 사용하는 프로그램들은 모두 이 계층에 속한다고 생각하면 된다. HTTP, Telnet, SMTP, FTP 모두 이 계층에 속한다.

6계층, Presentation 계층

코드 번역을 담당하는 계층이다. 7계층에서 생성된 정보를 네트워크로 보내기 위해 디지털 코드로 바꾼다. 예를들어 ASCII 코드표에 따라서 문자를 이진부호로 바꾸는 과정이 이 계층에 속한다. 이 때 ASCII는 문자코딩용 프로토콜, MP3는 음성 코딩 프로토콜, JPEG/MPEG 등은 이미지/영상처리용 프로토콜이다. 이 외에 암호화, 압축과 같은 부분도 프레젠테이션 계층에서 정의한다. 그리고 암호화에서 눈치챌 수 있듯이 대망의 SSL도 프레젠테이션 레이어에 속한 대표적인 프로토콜이다. (잠깐 질문으로 돌아가면..) 이미 여기서 L4장비는 SSL 버전과 관련있지 않음을 알 수 있다.

5계층, Session 계층

통신을 하고자 하는 두 대상(예, 클라이언트-서버)간의 통신의 시작/종결을 관리한다. 데이터를 본격적으로 전송하기 이전에 서버가 신뢰 가능한지, 데이터는 완전히 종결하였는지 등을 담당한다. 데이터를 여러 단위로 나눠 보내거나 받는 것도 이 계층에서 담당한다. 데이터를 나누기 때문에 중간에 어느 하나가 유실되면 작업을 취소하는 All or Nothing 속성을 갖고 있다.

4계층, Transport 계층

Transport 계층에서는 서비스를 구분하고 데이터 통신방식을 결정한다. 데이터를 생성하는 상위계층과 데이터를 전달하는 하위계층을 연결해준다. 즉, 클라이언트가 서버로 요청을 보냈을 때에 서버에서 정확히 클라이언트가 원하는 서비스를 찾아서 데이터를 전달해주는 부분이다.
더 쉽게 생각하면, 클라이언트가 http://google.com 서버로 요청을 보낸다고 생각해보자. google.com의 서비서가 떠있는 OS에는 80포트로 웹서버 말고도 sftp, mail서버 등 다른 서비스들이 떠있을 수 있다. 여기서Transport 계층에 의해 클라이언트가 원하는 80포트에 떠있는 서비스로 응답을 올바르게 돌려줄 수 있다.

Transport 계층이 서비스를 올바르게 돌려주기 위해서 사용하는 주소가 바로 ‘Port’이다. 어플리케이션에서는 트랜스포트 계층에서 응답을 올바르게 전달하고 전달받기 위해서 Port를 사용한다. 포트들은 0~66535(2^16, 16비트)까지 있는데, 0~1023까지는 well-known port, 그 뒤는 random port 라고도 한다.

전송계층에서는 몇 가지 통신 방식이 있는데, 대표적으로 TCP, UDP 가 있다.

TCP, Transmission Control Protcol

connection-oriented protocol으로 두 대상(ES) 간 안정적인 연결을 기반으로 데이터를 송수신한다. 안정적인 연결을 기반으로 송수신한다는 것은 Client랑 Server가 계속 끈처럼 연결되어 있다는 게 아니라, 한 End 에서 다른 End로 데이터를 보낼 때에 받는 쪽이 제대로 받았는지 계속 확인하며 데이터를 보낸다는 뜻이다. 뒤에서 설명할 UDP 보다는 아무래도 속도가 느릴 수 밖에 없다. 7계층의 HTTP, HTTPS, FTP, SMTP, Telnet 모두 4계층의 TCP를 사용하는 상위 프로토콜이다.

TCP 통신에서는 데이터를 주고받기 전에 3 Way Handshake라는 3가지 단계를 먼저 거친다. 통신할 장비끼리 서로 통신가능한지 인사를 하는 과정이다. 3way handshake TCP 3way handshake


3way handshake

1) SYN, HostA -> HostB: “Hey, are you getting this” A는 B에게 SYN flag를 1로 표시하고 랜덤숫자를 Sequence number 필드에 넣어 전송한다. Synchronization을 의미하는 SYN은 연결을 요청하는 플래그이다. 필드는 TCP의 포맷에서 각 부분을 의미한다. Flag는 TCP 필드에서 설정할 수 있다. 기본적으로 URG, ACK, PSH, RST, SYN, FIN 6 bit를 각각 0 또는 1로 표현한다

2) ACK/SYN, Host B -> Host A: “Yeah, copy that. What about you?” 응답을 받았다는 의미에서 ACK flag를 1로 표시하고 ‘1)’ 과정과 동일하게 SYN flag를 1로, 랜덤숫자를 Sequence number 필드에 넣고 추가적으로 전달받은 seq 숫자에 1을 더해 ACK 필드에 넣어서 A에게 보낸다.

3) ACK, HostA -> HostB: “Great, I got it either” 응답을 받았으면 ‘2)’의 과정처럼 ACK flag를 1로 표시하고 받은 seq 값을 ACK 필드에 넣어서 돌려준다.

UDP, User Datagaram Protocol

UDP는 사실 TCP와 반대로 동작한다고 생각하면 된다. UDP는 TCP와 같이 3 way handshake와 같은 과정은 거치지 않는다. 당연히 빠를 수 밖에 없고, 대신 수신자가 데이터를 제대로 받았는지 등의 검증은 불가능하다. 안정성은 떨어진다고 생각하면 된다. UDP는 안정성을 포기하고 속도를 얻는다고 생각하면 된다.
TCP는 굉장히 많이 쓰인다는 사실을 바로 알 수 있다. HTTP, Telnet 등 우리에게 익숙한 대부분의 호출들은 TCP를 사용한다. 그럼 UDP는 언제 쓰느냐? multicast, broastcast와 같이 불특정 다수에게 데이터를 쏠 때나 스트리밍 서비스 구현에 사용될 수 있다. 1:1 연결구조가 꼭 필요한 경우가 아닐 경우에 쓰인다. 또, 비연결형 데이터 송수신 방식으로 가상회선방식인 TCP와 달리 데이터그램방식이다.

가상회선방식과 데이터그램방식 패킷을 교환하는 방식 중 하나이다. 가상회선 방식은 데이터를 송수신하기 이전에 논리적 연결상태(가상회선)를 유지하고 각 패킷에 식별번호를 붙여 패킷을 전송한다. 패킷은 전송된 순서로 도착한다. 데이터그램방식은 비연결 상태에서 패킷을 독립적으로 전송한다. 라우터가 패킷을 수신하여 최적 경로로 전송한다. 각 패킷들은 서로 다른 경로로 전송될 수 있고 전송순서와 수신순서는 다를 수 있다.

3계층, Network 계층

(3계층 쯔음부터 본격적으로 와닿지 않기 시작했다.) 데이터를 목적지까지 안전하고 빠르게 전달하는 계층이다. 예를 들어 집에서 google.com으로 요청을 보냈을 때에 한국에 있는 내 PC에서 미국에 있는 google.com을 호스팅하고 있는 서버까지 안전하고 빠르게 요청을 전달하고 응답을 받아 전달해주는 계층이다. 경로를 선택하고 주소를 정해 패킷을 전달해준다. 라우터, 스위치가 이 계층에 속한다.

IPv4, IPv6가 네트워크 계층에 속한 대표적인 프로토콜이다. ARP(Address Resolution Protocol), NDP(Neighbor Discovery Protocol)과 같이 네트워크를 연결하고 찾는 프로토콜도 이 계층에 속한다.

네트워크 위에서 개체간 신뢰성있는 데이터 전송을 위한 계층이다. 물리적으로 할당받은 주소 값을 사용하는데, 이 때 사용되는 주소가 네트워크 카드가 만들어질 때에 생기는 ‘맥 주소’ 이다. 주소 체계는 IP와 달리 계층이 없는 단일 구조이다.
많이 들어본 ‘이더넷’이 데이터 링크계층에 속한 맥주소와 곧 이야기할 물리계층에서의 신호와 배선을 활용한 네트워크 기술 ‘규격’이다.

1계층, Physical 계층

하드웨어 전송 기술이 속한 계층이라고 생각하면 된다. OSI 아키텍처에서 가장 복잡한 계층이라고 한다. (그래서 더 알 수 없는 것인가?) 네트워크 어댑터, 리피터, 네트워크 허브, 모뎀 등이 이 계층에 속한다. 전기신호를 물리신호로 바꾸는 작업과 그와 관련된 모든 기술이 이 계층에 속한다.




이렇게 여기까지 OSI 7계층에 대하여 정리해보았다. 원래의 질문으로 돌아가 보자. L4 장비가 TLS 버전과 관련이 있을까? 그렇지 않다. TLS/SSL은 6계층인 프레젠테이션 레이어에 속하고 L4 장비는 이름처럼 전송계층인 4계층에 속한다. L4 장비에서는 적절한 서비스로 데이터를 전송해 줄 뿐 암호화에는 관여하지 않는다. (L7 장비였다면 얘기가 달라졌을 수도 있다.) 한편, 웹서버 앞단에 웹방화벽이 있는 경우에 웹방화벽에는 SSL을 씌워주어야 한다(웹방화벽에 대한 이해는 이 글에서 참고할 수 있다). 왜냐하면 웹방화벽은 7계층에 속하는 장비이고, HTTP 메시지를 기반으로 방어하는 것이기 때문에 암/복호화 과정에 관여를 한다.