네트워크 이론 기초

안녕하세요. 플밍 4기 입니다.
게임 개발을 배우기 전 네트워크 엔지니어 도메인에서 익히고 배웠던 네트워크 이론에 대한 기초 입니다.
학습에 도움이 되길 바라며 공유 드립니다. 😀
갑자기 왜 이 포스팅을?
- 먼저, 일반적으로는 회사에서
인터넷 환경에 접근 되지 않는 업무 PC 를 이용하여 업무를 할 일은 없을 것 입니다. 따라서 이인터넷 환경이 말썽을 일으키는 경우가 태반입니다. - 큰 회사는 이러한 것을 전문으로 다뤄주는 분들이 있지만, 작은 회사에서는 스스로 해결해야 하는 경우가 많습니다. 어느 때가 되건, 관련 엔지니어와의 유연한 커뮤니케이션을 하기 위해서는 어느 정도의 키워드를 알아야 좋다고 생각하여 포스팅을 하게 되었습니다.
인터넷의 시작 (TCP/IP)
인터넷의 시작이라 할 수 있는 TCP/IP 모델이 나온 것은 생각보다 오래되지 않았습니다.
미 국방부에서 초기 모델로 사용되다 1980년대 초, 인터넷 아키텍처 모델로써 처음 알려지게 되었습니다.
간혹, OSI 7 Layer 의 축소판으로 소개되어, TCP/IP모델이 더 늦게 출시 된 것으로 알고 있는 분들이 계시다만,
실제로는 OSI 7 Layer보다 더 먼저 나온 모델 입니다.

TCP/IP 모델은 간단히, 데이터 전송을 위한 계층과 데이터 처리를 위한 계층으로 나뉜다고 볼 수 있습니다.
디바이스(간단히 PC)간 통신의 전송에 대해서는 IP 가, 디바이스 내에서 어플리케이션까지의 데이터 전송은 TCP나 UDP가 담당합니다. 그 이후 어플리케이션에서는 데이터를 처리하게 되는 모델 입니다.
OSI 7 Layer
OSI 7 Layer 는 TCP/IP이후 정의 되었다고 전술 하였지만, 사실 별도로 정의하고 있던 아키텍쳐 모델 입니다. TCP/IP모델이 정의된 이후로 해당 모델을 같이 병합하여 현재 우리가 아는 OSI 7 Layer가 탄생하였습니다.
OSI 7 Layer는 TCP/IP모델에 비해 계층이 상세히 나뉘어져 있어 필요 당위성을 느끼기 어려울 수 있겠지만,
실제로 OSI 7 Layer 로 나뉜 계층을 토대로 개발 비용 산정이 되는 경우가 있습니다. 가령, Router라는 장비는 Layer 3 에 해당하는 프로토콜에 대해서만 제어하면 되기 때문에 다른 Layer에 대한 개발을 상세히 할 필요가 없어 그 개발 비용이 줄어듭니다. 또한, 교육 목적으로도 해당 모델은 유용합니다.
기본 구조

OSI 7 Layer 는 기본적으로 데이터가 Layer7 -> Layer1 으로 전달되며 관련 Header 가 붙는 캡슐화(Encapsulation) 가 일어나 전기 신호 혹은 광 신호를 통해 다른 디바이스에 전달됩니다. 전달 받은 데이터는 다시 어플리케이션에게 전달을 위해 역캡슐화(Decapsulation)가 일어납니다.
Layer 별 대표 예시
| Layer Number | 대표 Protocol | 대표 장비 |
|---|---|---|
| 1; Physical | 100Base-TX, 1000Base-TX, ... | UTP Cable, Fiber Cable, Fiber Transceiver, Hub |
| 2; Datalink | Ethernet, Frame Relay, ... | Switch |
| 3; Network | IP, ... | Router, IP 공유기(NAT) |
| 4; Transport | TCP, UDP, ... | Load-balancer |
| 5; Session | SSL, ... | - |
| 6; Presentation | ASCII, JPG, ... | - |
| 7; Application | HTTP, SMTP, ... | - |
Protocol
프로토콜은 통신을 위한 약속 입니다. 사람 간 대화 시 한쪽은 영어로, 한쪽은 중국어로 이야기 하면 서로 대화가 되지 않을 것 입니다. 인터넷 통신도 마찬가지 입니다. 이를 위해 서로 간 약속을 위한 프로토콜을 정의하고 이 프로토콜을 지키며 통신합니다. 아래 실무에서 많이 접하는 프로토콜에 대해 간략히 소개 합니다.
Layer 2 - Ethernet, ARP
-
Ethernet

-
현재 우리가 쓰는 인터넷을 포함한 대부분의 디지털 통신은
Ethernet기반으로 통신합니다. -
데이터의 단위를
Frame이라고 합니다. -
보통 MAC(Media Access Control**)**주소 라는 표현을 쓰는
출발지/목적지주소를 갖고 있습니다. -
Ethernet의 기본 동작은 동일 네트워크 상 모든 디바이스에게 뿌리는 것 입니다.
디바이스에서는목적지 주소를 보고 자신이 받아야 하는Frame인지를 판별합니다.
Ethernet은목적지 주소에 따라 조금 다른 동작을 합니다.명칭 MAC 주소 (목적지) 동작 방식 Unicast Multicast 및 Broadcast 를 제외한 모든 주소 1:1 통신을 합니다. 단, 이는 Frame 을 인가하는 디바이스에서 목적 디바이스로 보내는 형태가 아니라, 목적지 주소가 해당 디바이스인 경우만 Frame 을 받아들이며, 나머지는 Frame 을 버립니다. Broadcast FF:FF:FF:FF:FF:FF 1:ALL 통신을 합니다. 목적지 주소가 Broadcast 인 경우 같은 네트워크상 모든 디바이스는 이 Frame 을 받아들입니다. Multicast 01:XX:XX:XX:XX:XX 1:N 통신을 합니다. 목적지는 "특정 그룹"이며, 해당 그룹에 속한 디바이스만이 Frame 을 받아 들입니다.
-
-
ARP
- ARP 는
Layer 2와Layer 3의 사이를 이어주는 프로토콜입니다. 그렇기 때문에 Layer 2 에서 소개하는 곳도 있고 Layer 3 에서 소개하는 곳도 있습니다. 저는 해당 프로토콜이 동작하는 환경 기준으로 설명하기 때문에 Layer2 에서 설명합니다. - OSI(혹은 TCP/IP) 기반으로 동작하는 현 모든 장비에서는 순수하게
IP만으로는 통신할 수 없습니다.
IP 통신은 "동일 네트워크"가 아닌 통신을 하기 위해 있습니다.
참고로, 여기서 이야기한 "네트워크"는EthernetFrame 이Broadcast로 전파가 가능한 영역입니다. - 때문에,
IP와 연결할Ethernet주소를 판별하기 위한 동작이 필요합니다.ARP는IP를 이용하여 같은 네트워크 내 통신할목적지 MAC주소 를 받아오는 역할을 하게 됩니다.
- ARP 는
Layer 3 - IP Protocol, Routing Protocols
- IP Protocol
-
IP는 우리가 흔히 아는 그IP 주소가 맞습니다. 192.168.0.1, 172.1.1.1, 20.193.113.211, ... 이런 포맷으로 보통 많이 사용하고 있습니다. -
IP주소는 아래와 같은 체계를 갖고 있습니다.주소 범위 동작 설명 - 192.0.0.0/8 - 172.0.0.0/8 - 10.0.0.0/8 Unicast 사설 IP 주소 대역.본 대역은 NAT 에서 주로 사용하며, 기본적으로 공인 IP 주소 대역에서 사설 IP 주소 대역으로의 통신은 불가 합니다. 224.0.0.0 ~ 239.255.255.255 Multicast Multicast 를 위한 Group IP 주소 입니다. 255.255.255.255 All Hosts 모든 Host 에 대한 주소 입니다. 잘 사용하지 않습니다. 그 밖의 IP 대역 Unicast 공인 IP 대역 입니다. -
IP는 출발지에서 목적지까지 변화하지 않습니다. 단, NAT 라는 장비가 통신 중간에 있다면 변경이 될 수 있습니다.- NAT? ; Network Address Transform 의 약자로, IP 주소를 변경하는 장비 입니다. 보통 IP 공유기를 통해 쉽게 접할 수 있는 기능 입니다. NAT 는
WAN side와LAN side로 보통 구분됩니다.WAN: 일반적으로 "공인 IP" 쪽으로 보시면 됩니다.LAN: 일반적으로 PC 와 연결되는 부분이라고 보시면 됩니다.
- NAT? ; Network Address Transform 의 약자로, IP 주소를 변경하는 장비 입니다. 보통 IP 공유기를 통해 쉽게 접할 수 있는 기능 입니다. NAT 는
-
Subnet Mask / Wild Mask / CIDR
- 보통 IP 를 적을 때,
10.0.0.1/24,10.0.0.1 255.255.255.0혹은10.0.0.1 0.0.0.255이런 방식으로 적힌 것을 보신 적이 있을 것 입니다. (없...을 수도 있겠네요 😅) - Subnet 혹은 서브넷팅이라고 보통 많이 이야기하는 것은, IP 주소 대역을 나누는 것입니다. 일전에
Ethernet에서도 언급한Broadcast 전파 가능 영역과 동일 합니다. - 주소/숫자 로 표기하는 방식을 CIDR 이라고 합니다.
- Ex) 10.0.0.1/24, 192.168.1.1/16, ...
- 주소 주소포맷 으로 표기 하는 방식을 Mask 라 하며, 이 Mask는 주소와
AND연산자를 통해Network주소와Host주소로 나눌 수 있습니다. 이때Network주소를 뽑는 Mask를 Subnet Mask,Host주소를 뽑는 Mask를 Wild Mask 라고 합니다.- Ex) 10.0.0.1 255.255.255.0, 192.168.1.1 0.0.0.255
- 보통 IP 를 적을 때,
-
- Routing Protocol
- 세상에는 굉장히 많은 IP 가 있으며, IP 들은 모두
Network에 속하고 있습니다. 이 네트워크간의 연결이 어떻게 되어 있는지를 확인하고 공유하는 메커니즘이 여럿 있습니다. - 이러한
Network데이터를 주고 받기 위한Protocol이Routing Protocol혹은Route Protocol이라 합니다. BGP,OSPF,IS-IS,RIP등이 있습니다.
- 세상에는 굉장히 많은 IP 가 있으며, IP 들은 모두
Layer 4 - TCP, UDP
- TCP 와 UDP 는 공통으로
Port라는 개념이 있습니다.Port는 어플리케이션이 네트워크와 연결된 인터페이스의 주소로 이해하시면 좋습니다. - TCP (Transmission Control Protocol)
- TCP 는 통신의
신뢰성보장하는 통신입니다.FTP를 이용한 파일 전송,SSH나Telnet접속, Web Browser 사용 등에 많이 사용 됩니다. - TCP 의 가장 큰 특징은
흐름 제어를 위한Control Flag가 있다는 것 입니다. 이를 이용해 세션을 맺고, 데이터를 보내거나 데이터를 요구하고 세션을 닫거나 합니다. - TCP는
느리다라는 이야기를 간혹 합니다. 그 이유는 TCP 는 누락되거나 잘못된 데이터가 올 경우 다시 보내기(Retransmission) 때문입니다. 이것이 단순히 왜 느린가 싶겠습니다만, 네트워크 환경이 좋지 못 한 곳에서는 Packet Drop (혹은 Loss) 이라는 유실이 발생됩니다. 잦은 유실이 발생되면 Retransmission 이 잦게 발생되니 데이터 전송에 그만큼 시간이 걸리겠죠? 😀
- TCP 는 통신의
- UDP (User Datagram Protocol)
- UDP 는 통신의
신뢰성을 보장하지 않습니다. 즉, Packet Drop 이 발생되었을 경우, 유실된 Packet 을 다시 보내지 않습니다. 따라서 UDP 는 데이터를 보낸 후 완료까지가 TCP 보다는 빠릅니다. - Packet Drop 이 발생하여도 큰 문제가 없는 Streaming Service 등에서 많이 사용합니다.
- UDP 는 통신의
Layer 5 - SSL / TLS
- SSL (Secure Sockets Layer) / TLS (Transport Layer Secure)
- 주로 Layer 4 내
Data에 대한 보안을 담당합니다. 이를 위해 인증서를 서버에 갖고 있어야 하며, 클라이언트는 서버 측에 갖고 있는 인증서 및 알고리즘 등에 대한 정보를 받아 이를 통해 서로 간에 암호화된 데이터를 주고 받게 됩니다.
- 주로 Layer 4 내
Layer 7 - HTTP, DNS
- HTTP (HyperText Transfer Protocol**)**
- 우리가 Web 브라우저에서 URL 을 적는 경우가 있습니다. 이때,
http://혹은https://로 시작하게 적는 경우가 많을 것 입니다. 네. 바로 이것들 입니다. (참고로,https는 간단히, 통신에SSL/TLS를 이용한 암호화를 사용한다는 의미입니다 😀)
- 우리가 Web 브라우저에서 URL 을 적는 경우가 있습니다. 이때,
- DNS (Domain Name Service**)**
- 위에 언급한 URL을 주로 naver.com, google.com 등으로 적은 경우가 많으실 겁니다. 하지만 실제 해당 서버에 접근하려면 이런
문자열로 접근할 수가 없습니다. 위에 언급했던 Layer3 의 IP Address 를 이용해야 합니다. - 하지만 그렇게 되면 우리는 모든 Web Site 의
IP Address를 알고 있어야 할 것입니다. 그렇다면 우리 머리가 아주 좋아야 할 것 입니다. - DNS 는 사람이 이용하기 편하도록
문자로 된 주소를IP Address로 변환해 주는 서비스 입니다.
- 위에 언급한 URL을 주로 naver.com, google.com 등으로 적은 경우가 많으실 겁니다. 하지만 실제 해당 서버에 접근하려면 이런
실무에서는?
- Standalone 형 서비스 (즉, 인터넷 연결이 필요 없는 서비스)를 제외하고 대부분의 서비스 (게임 포함)가 인터넷 환경을 필요로 하고 있습니다. 자신이 만든 서비스에서 인터넷을 활용한 여러 통신을 하고 있는 경우가 대부분일 것 입니다. 이때 의외로 인프라에서 말썽인 경우가 많습니다.
- 대부분 개발단에서 예외 처리 등으로 우회하는 방법을 택합니다만, 그렇지 못할 경우도 있습니다. 이럴 경우, Trouble Shooting 시 인프라에 대한 지식이 있다면 좀 Trouble Shooting 이 좀 더 쉬워질 수 있습니다.
- 한 예로, MSA 환경으로 구축된 웹 서비스에서 일부 서비스간 통신 먹통에 대해 확인 결과 네트워크 이슈로 판명이 되었는데, 이를 네트워크에 대한 이해도가 높은 개발자가 찾아낸 케이스도 있습니다. (..저라곤 안 했습니다?)
마치며
- 웹 개발 및 자동화 개발을 하며, 네트워크에 대해 잘 알고 있다 보니, Private Cloud 내 IDC 에서 서버 위치간에 따른 지연 시간에 대한 설계, IP Network Subnet 을 이용한 IP 할당 솔루션 등 많은 것들을 하였습니다. 특히 Private Cloud 내 IaaS 서비스를 위한 콘솔 개발시에는 개발자와 네트워크 엔지니어간 가교 역할을 많이 하였었습니다.
- 이렇게, 본인의 무기가 많을 수록 많은 부분에서 힘을 발휘 할 수 있다고 생각합니다. (일이 그만큼 많아지는 것은 비밀입니다?) 우리 IT 는 항상 새로운 것을 배워야 합니다. 하지만, 그 기반도 중요하기에, 이런 Raw Level 의 지식을 어느 정도 알면 좋을 것 같아 최소한으로 이렇게 Develog 를 통해 소개하게 되었습니다.
- 시간이 된다면(근데 이제 남은 일정이 프로젝트 2개라 과연..!?), Public Cloud 에서의 Network 통신, Load-balancer 와 Reverse Proxy 등도 정리 및 포스팅 할 예정입니다. 잘 부탁 드립니다 (--)(__)
출처
- https://en.wikipedia.org/wiki/Internet_protocol_suite
- https://en.wikipedia.org/wiki/OSI_model
- https://ko.wikipedia.org/wiki/%EC%9D%B4%EB%8D%94%EB%84%B7
- https://ko.wikipedia.org/wiki/%EC%A0%84%EC%86%A1_%EA%B3%84%EC%B8%B5_%EB%B3%B4%EC%95%88



