[네트워크] OSI 7계층, TCP/IP 모델 이해하기

sewonK·2022년 2월 13일
0
post-custom-banner

웹을 개발하면서 HTTP, 웹 요청과 응답 등 통신 관련 개념을 많이 접하였습니다. 해당 개념을 이해하기 전, 데이터의 통신 방법에 대한 정립이 필요하다고 생각했고 이에 네트워크 시스템을 정리해보려 합니다.

✅ OSI 7계층과 TCP/IP 모델

네트워크에서 컴퓨터가 통신할 수 있도록 하려면 공통된 통신 규약이 필요한데, 이를 프로토콜이라 합니다. 프로토콜을 국제적으로 표준화하기 위해 국제 표준화 기구인 ISO에서 OSI(Open Systems Interconnection) 7계층 모델을 발표하게 됩니다. 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명한 모델입니다.

흐름을 한눈에 알아보기 쉽고, 문제가 생긴 계층만 수정하면 되기 때문에 네트워크 문제를 해결하기 쉬운 것이 특징입니다. 상하 구조를 가지기 때문에, N계층이 잘 작동하기 위해서는 1 ~ N-1계층이 모두 완벽히 작동되어야 합니다.

그러나 현대의 인터넷은 OSI 모델이 아닌, TCP/IP 모델을 따르고 있습니다. OSI 모델이 TCP/IP 모델과의 시장 점유 싸움에서 졌기 때문입니다. TCP/IP 모델도 OSI 모델과 마찬가지로 네트워크 시스템에 대한 모델입니다.

쉽게 이해하기 위해서 예시를 들어보겠습니다(예시는 블로그를 참고하였습니다, 블로그는 참고한 링크들 참조). "서울시 마포구 서교동 월드컵로 10길"로 우편물을 보내는 상황이라고 해보겠습니다.

먼저 전국에서 서울시(MAC addr)를 찾고 : Data Link Layer

마포구(IP addr)를 찾아 : Network Layer

월드컵로(Port)를 찾은 뒤

10길(Socket)에 도착하여 : Transport Layer

우편물을 전달한다. : Application Layer

의 과정을 거친다고 생각하면 되겠습니다.


1. 물리 계층(Physical Layer)

물리 계층은 실제 장치들을 연결하기 위해 필요한 전기적, 물리적 하드웨어 전송 기술을 말합니다. 프로토콜 데이터 단위(PDU, Protocol Data Unit)는 비트(0, 1)입니다.

0과 1의 나열을 아날로그 신호로 바꾸어 전선으로 흘려 보내고(encoding), 아날로그 신호가 들어오면 0과 1의 나열로 해석(decoding)하여 물리적으로 연결된 두 대의 컴퓨터가 통신할 수 있도록 해주는 모듈이라고 생각하면 됩니다. 1계층 모듈은 하드웨어적으로 구현되어 있습니다.

물리 계층에서는 단지 데이터를 전달할 뿐, 데이터의 종류나 오류는 제어하지 않습니다. 허브, 리피터가 대표적인 물리 계층의 장비입니다.


데이터 링크 계층은 Point to Point 간 신뢰성 있는 전송을 보장하기 위한 계층으로, 같은 네트워크 기기들 간 데이터를 전송하는 역할을 합니다. 순환 중복 검사(CRC, Cyclic Rebundancy Check, http://blog.skby.net/%EC%88%9C%ED%99%98-%EC%A4%91%EB%B3%B5-%EA%B2%80%EC%82%AC-crc-cyclic-redundancy-check/)를 기반으로 물리 계층을 통해 송수신되는 정보의 오류와 흐름을 제어합니다.

같은 네트워크에 있는 여러 대의 컴퓨터들이 데이터를 주고받기 위해서 필요한 모듈입니다. 프로토콜 데이터 단위는 프레임입니다. 프레임이란 데이터를 담는 컨테이너로, 동일 네트워크 상의 발신지와 목적지 주소 정보를 가지고 있습니다. 이를 페이로드라고 하는데, 이 때의 주소 정보가 바로 MAC(Media Access Controller) 주소 입니다. MAC 주소는 동적으로 할당받는 주소인 IP와는 달리, Network Interface Controller의 고유 식별 정보입니다. 원본 데이터를 감싸는 Framing은 데이터 링크 계층에 속하는 작업 중 하나입니다. 데이터 링크 계층에서는 프레임에 맥 주소 값을 물리적으로 할당받습니다. 브릿지, 스위치가 대표적인 데이터 링크 계층의 장비입니다. 2계층 역시 1계층처럼 하드웨어적으로 구현되어 있습니다.


3. 네트워크 계층(Network Layer)

네트워크 계층은 여러 노드(컴퓨터 네트워크 상 연결된 장치)를 거칠 때마다 최적의 경로를 찾아주는, 즉 라우팅을 해주는 역할을 담당하는 계층입니다. 패킷이라는 데이터 단위로 데이터를 전송하는데, 패킷의 헤더에는 출발지와 목적지 정보인 IP 주소가 존재합니다. 프레임은 동일 네트워크 상에서만 전송이 가능하지만, 패킷은 네트워크 간 전송이 가능하다는 특징을 가지고 있습니다. 대표적으로 라우터가 이 계층에서 동작합니다.

라우터를 통해 서로 다른 LAN(Local Address Network) 간에 패킷을 주고받을 수 있습니다. 라우팅 알고리즘을 통해 생성된 Forwarding Table과 패킷의 헤더에 있는 주소 정보를 통해 패킷을 다음 라우터로 보낼 수 있습니다.

결과적으로, 네트워크 계층은 수많은 네트워크들의 연결로 이루어지는 inter-network 속에서 목적지 컴퓨터로 데이터를 전송하기 위해, IP 주소를 이용해 길을 찾고(라우팅) 자신 다음의 라우터에게 데이터를 넘겨주는(포워딩) 모듈입니다. 3계층은 운영체제의 커널에 소프트웨어적으로 구현되어 있습니다.

패킷이 목적지 네트워크로 전달되면, 해당 네트워크에서는 다시 2계층 스위치가 데이터 전달을 처리합니다. 이 때 IP 주소를 MAC 주소로 대응시키기 위해 주소 결정 프로토콜(Address Resolution Protocol)이 사용되며, MAC 주소를 읽고 목적지까지 데이터를 전달합니다. ARP 프로토콜과는 반대로 해당 MAC 주소에 맞는 IP값을 알아오는 프로토콜을 역순 주소 결정 프로토콜(Reverse ARP)이라고 합니다.


4. 전송 계층(Transport Layer)

전송 계층은 양 끝단(End to end)의 사용자들이 신뢰성 있는 데이터를 주고 받도록 하여, 상위 계층들이 데이터 전달의 유효성이나 효율성을 생각하지 않도록 해주는 계층입니다. 오류 검출, 복구, 흐름 제어, 중복 검사 등을 수행합니다. 데이터의 단위는 Segment입니다.

데이터를 프로세스(실행 중이 프로그램)로 전송하기 위해 포트 번호를 사용합니다. 포트 번호는 하나의 컴퓨터에서 동시에 실행되고 있는 프로세스들이 서로 겹치지 않게 갖는 정수 값입니다. 전송 계층은 포트 번호를 사용하여 도착지 컴퓨터의 최종 목적지인 프로세스에까지 데이터가 도달할 수 있도록 하는 모듈입니다. 4계층은 3계층과 마찬가지로 운영체제의 커널에 소프트웨어적으로 구현되어 있습니다.

소켓, TCP와 UDP

소켓은 프로세스가 네트워크를 통해서 데이터를 주고 받을 때, 반드시 열어야하는 창구와 같은 개념입니다. 보내는 쪽이 소켓이라는 창구를 열고 소켓을 통해서 데이터를 보내면, 네트워크 모델에 따라 목적지 호스트에 데이터가 도착하게 되고, 데이터를 담은 봉투에 써진 도착지의 포트 넘버와 같은 포트를 할당받은 프로세스를 찾아서, 그 프로세스의 소켓을 통해 해당 프로세스에 데이터를 전달하는 것입니다. 소켓은 호스트(IP 주소가 할당된 노드)에 할당된 IP주소, 포트 넘버, 프로토콜로 정의됩니다.

프로세스가 하나의 포트를 가지므로, 한번에 한 개의 요청만 처리할 수 있을까요? 그렇지 않습니다.

하나의 포트를 가지고도 여러 개의 소켓을 열 수 있기 때문에, 하나의 프로세스는 하나의 포트만으로 다른 여러 호스트에 있는 프로세스의 요청을 처리할 수 있습니다. IP주소, 포트 넘버, 프로토콜만으로 소켓을 유일하게 식별할 수 없는 이유이기도 합니다.

원하는 소켓으로 Segment를 보내는 과정인 Multiplexing과 Segment에서 넘어온 정보를 받는 Demultiplexing 과정으로 나눌 수 있습니다.

소켓의 종류에는 TCP와 UDP가 있습니다. 이 두 가지 프로토콜은 4계층인 전송 계층의 대표적인 프로토콜입니다.

TCP(Transmission Control Protocol)

  • 일대일 연결만 가능
  • 손실되면 재전송 요청을 하므로 신뢰도가 높음
  • 데이터의 순서와 무결성이 보장됨
  • 속도가 상대적으로 느림
  • 높은 신뢰도를 요하는 서비스에 적합
  • 3-Way Handshaking을 통해 연결을 준비하고 4-Way Handshaking을 통해 연결을 종료함
  • stateful

TCP와 IP가 가장 많이 쓰이기 때문에 TCP/IP Protocol Suite라고도 불립니다.

UDP(User Datagram Protocol)

  • 다대다 연결도 가능
  • 정보를 받았는지 확인치 않고 일방적으로 보냄
  • 데이터의 순서와 무결성을 보장하지 않음
  • 속도가 상대적으로 빠름
  • IPTV, 스트리밍 서비스에 적합
  • stateless

5. 응용 계층(Application Layer)

웹 브라우저 등 사용자의 요청을 받고 그에 대한 응답을 담당하는 계층입니다. 응용 계층의 대표적인 프로토콜로, HTTP가 있습니다.

HTTP


HyperText Transfer Protocol의 약자로, 하이퍼텍스트 문서를 교환하기 위하여 사용된 통신 규약입니다. 웹 브라우저의 표준 프로토콜이며 정의가 잘 되어있어 일반적인 서버와의 통신에도 이용합니다. 다수의 클라이언트의 Request를 처리하기 위해, Connectionless, Stateless의 특징을 갖습니다.

Connectionless는 비연결성으로, 서버에서 응답이 진행되면 연결을 끊는 것을 의미합니다. 연결을 유지하게 되면 리소스가 낭비되고 다른 클라이언트에 대한 응답이 지연되기 때문입니다.

Stateless는 서버가 클라이언트의 상태를 보존하지 않음을 의미합니다. 클라이언트의 상태를 유지하지 않으므로, 서버를 확장(scale-out)해도 상관이 없습니다. 따라서 대량의 트래픽의 발생해도 수월하게 대처할 수 있다는 장점이 있습니다.

HTTP를 응용 계층으로, 서버에서 클라이언트로 데이터를 전송할 때의 전체 흐름을 간략히 정리한 그림입니다.


참고한 링크들

[10분 데코톡] 히히의 OSI 7 Layer
https://www.youtube.com/watch?v=1pfTxp25MA8

정보통신기술용어해설 - 패킷
http://www.ktword.co.kr/test/view/view.php?m_temp1=421

[Network 요약] 레이어 별 용어 정리
https://k-elon.tistory.com/36

이더넷 프레임과 패킷의 차이
https://www.itworld.co.kr/news/106484

소켓(Socket) 포트(Port) 뜻과 차이
https://blog.naver.com/myca11/221389847130

Scale-up과 Scale-out에 대해 알아보자!
https://tecoble.techcourse.co.kr/post/2021-10-12-scale-up-scale-out/

post-custom-banner

0개의 댓글