Network

[네트워크] 단계별로 이해하는 네트워크 - LAN

devnk 2024. 9. 11. 18:57

들어가며..

 

멀티 플레이를 지원하는 게임에서 LAN 모드가 있는 게임을 알고 계신가요? LAN 모드로 게임을 한다면 실제로 인터넷에 연결되어 있지 않아도 친구들과 게임을 즐길 수 있지만, 상대방이 같이 있던 장소나 건물을 벗어나면 연결이 끊겨버릴거에요. 왜 이런 일이 발생하는 걸까요? 이번 포스팅에는 이러한 LAN이 무엇인지 차근차근 알아보는 시간을 가져볼까 합니다!


 

 

LAN이란 무엇인가요?

LAN (Local Area Network) 은 뜻에도 나와있듯이 작은 지리적 영역 내에 포함된 네트워크로 설계하는 사람이 지정하는 범위에 따라서 결정이 되지만 일반적으로는 같은 건물 내에 있는 디바이스들끼리 형성되는 네트워크를 말합니다.


 

 

디바이스간 통신 방법

 

다음과 같은 디바이스 2대가 있다고 가정해볼게요.

디바이스들은 서로 통신하기 위해서 어떤 언어를 주고받아야 할까요? 전기 신호를 사용하는 디바이스들은 공통적으로 기계어  0과 1로만 구성된 이진 코드를 통해 데이터를 주고 받아요.

 

 

 

이러한 이진 코드를 주고받기 위해서는 물리적 통신을 주고받기 위한 물리적인 통로 즉, 매개체가 필요하겠죠? 대표적으로 디바이스간 통신은 주파수를 이용한 무선 통신, 전기 신호를 이용한 전기 통신, 빛을 이용하는 광 통신이 있어요.

 

각 통신에 대한 주요 특징들을 표로 정리해봤어요. 간단하게 알아두시면 좋을 것 같아요!

  전기 통신 광 통신 무선 통신
매체 구리선, 동축 케이블 광섬유 케이블 무선 채널
최대 전송 속도 수십 Mbps에서 수 Gbps까지 수십 Gbps에서 수 Tbps까지 수 Mbps에서 수 Gbps까지
거리 거리가 멀어질수록 신호가 약해짐 긴 거리에도 신호 손실이 적음 낮은 주파수는 거리가 김
높은 주파수는 거리가 짧음
종류 유선 유선 무선

 

 

 

이제 서로 통신할 수 있는 통로가 만들어졌으니, 디바이스끼리 통신이 가능하겠죠? 

하지만, 데이터를 수신하는 디바이스는 송신하는 디바이스가 아무리 기계어로 대화를 시도해도 뜻을 이해하지 못할거에요. 그 이유는 디바이스는 말그대로 기계이기 때문에 정해진 명령을 수행하기 때문이에요!

 

 

프로토콜

이제부터 필요한건 디바이스 간의 데이터를 주고받을 때, 필요한 메시지의 양식과 규칙 체계를 정해줘야 해요. 이러한 통신 규약을 프로토콜 이라고 불러요. 쉬운 예를 들어볼게요.

 

프로토콜이란 용어가 매우 거창하게 보이겠지만, 다음과 같이 'Hello' 라는 문구를 받으면 'World'로 응답하는 구조도 주고 받는 데이터의 양식과 규칙을 지정했으므로 이것 또한 프로토콜이라고 부를 수 있어요. 핵심은 데이터를 주고 받는 디바이스 모두 해당 프로토콜을 알고 있어야 통신이 가능하다는 점이에요.

 

 

OSI 7계층

이제 디바이스끼리 어떤 방식으로 통신을 주고받는지 감이 조금 잡히셨나요?  위의 그림과 같이 간단하게 통신을 주고받으면 좋겠지만 실제로는 복잡한 과정을 거쳐 통신을 주고받게 돼요.

 

위의 그림은 디바이스 간의 데이터 통신 과정을 단계에 따라 나눈 것으로 OSI 7계층 이라고 불러요.

 

각 계층마다 프로토콜을 사용한다는 것을 알 수 있는데, 어떻게 프로토콜 정보를 알려줄 수 있을까요?

그림을 잘 보시면 각 계층마다 헤더를 사용한다는 것을 알 수 있어요. 헤더에는 어떤 프로토콜을 사용하는지, 그리고 해당 프로토콜을 통해 데이터를 주고받을 때 필요한 정보들을 담고 있기 때문에 해당 계층에서 데이터를 주고받을 수 있어요! 여기서 또 하나의 특징은 데이터의 흐름에 따라서 각 계층마다의 프로토콜 정보를 담은 헤더를 감싸는 형태를 볼 수 있는데 이러한 과정을 캡슐화라고 불러요.

 

각 계층마다의 프로토콜 특징을 간단하게 표로 작성해봤어요. 후에 더 자세하게 파고들 예정이니 가볍게 읽어주세요!

계층 데이터 단위 특징 프로토콜
7계층 - 응용 계층 message 응용 프로그램들이 통신으로 활용하는 계층 HTTP, SMTP, FTP...
6계층 - 표현 계층 message 응용 계층에서 교환되는 데이터의 의미를 해석하는 계층 ASCII, MPEG...
5계층 - 세션 계층 message 데이터 교환의 경계와 동기화를 제공하는 계층 NetBIOS, TLS...
4계층 - 전송 계층 segment 디바이스 간의 데이터 전송을 담당하는 역할을 하는 계층 TCP, UDP...
3계층 - 네트워크 계층 packet 상이한 네트워크 사이의 라우팅 및 데이터 전송을 처리 계층 IP, ICMP...
2계층 - 데이터 링크 계층 frame 동일한 네트워크에 있는 장치 간의 통신을 처리 계층 Ethernet, Wi-Fi...
1계층 - 물리 계층 bit 비트 전송을 위한 기계적, 전기적, 수단을 제공하는 계층 RS-232, X.25...

 

 

MAC Address

 

우리가 택배를 보낼 때 상대방의 배달지 주소를 알아야 하듯이, 디바이스도 데이터를 보내기 위해서는 디바이스 주소를 필요로 해요.

그렇다면 디바이스는 어떤 주소를 가질까요?

 

 

 

MAC Address는 총 길이는 48bit로 하나의 섹션당 8bit로 구성되어 이를 16진수로 표현을 하고있어요.

 

여기서 OUI (Organizationally Unique Identifier) 과 NIC (Network Interface Control) 로 각각 24bit로 나누어져 있는걸 볼 수 있는데요. OUI 는 이더넷 인터페이스를 만드는 벤더(제조사) 식별 코드이고 NIC는 이러한 벤더(제조사)가 할당하는 부분이에요.

그러면 앞의 24bit는 어떤 기준으로 식별 코드가 나오는지 의문이 생기실텐데요. 이러한 식별 코드를 관리하는 곳이 바로 IEEE 라는 국제기관이에요. IEEE는 전기/전자/전산 분야의 국제 기구 및 학회라는 것만 알아두시면 될 것 같아요!

 

🤔 그러면 이렇게 체계적으로 관리하고 있으니까 MAC Address는 절대로 중복될 수가 없을까요?

사실 모든게 완벽하면 좋겠지만, 제조 과정의 오류, 의도적인 MAC 주소 변조 (Spoofing), 가상 주소 생성 등 다양한 경우에 의해 MAC Address는 중복이 발생할 수도 있어요.

 

iptime 공유기를 쓰고 계신다면 192.168.0.1 주소로 접속하여 로그인 하신 후 인터넷 설정 정보란에서 간단하게 MAC Address를 바꿔볼 수 있어요.

 

 

🤔 그러면 큰일나는거 아닐까요?

 MAC Address는 LAN 환경에서 사용하는 주소체계이기 때문에 같은 LAN 환경 내에서 같은 MAC address를 사용하면 통신 문제가 발생할 수도 있지만 서로 다른 LAN 환경이라면 영향이 거의 없기 때문에 큰 문제가 되지는 않아요.

 

 

허브 (Hub)

 

본격적인 디바이스 통신 과정을 하기 전에 디바이스 연결 상태에 대해서 한번 짚고 넘어가볼게요.

예시로 들어둔 디바이스 2대는 통신을 하기 위해서 서로 연결이 되어야만 통신이 되니까 선이 하나만 있으면 되겠죠?

 

 

 

그렇다면 디바이스 수가 5대로 늘어난 경우 어떨까요? 각각의 디바이스마다 연결을 하면 총 15개의 선을 필요로 해요.

이렇듯 디바이스의 수를 점점 늘려가면서 연결을 하다 보면 디바이스의 수가 n 이라고 할 때 선의 수는 총 n(n-1)/2 개가 필요하다는 것을 알 수 있어요. 따라서, 이러한 방식으로 디바이스끼리 연결을 하는건 매우 비효율적이라고 볼 수 있겠네요.

 

 

 

이러한 비효율적인 문제를 해결하기 위해 나온 것이 바로 허브(Hub) 에요.

허브는 LAN 환경에서의 통신 관리자로 다양한 디바이스에서 오는 전기 신호들을 받아 증폭시켜 다른 디바이스들에게 뿌려주는 역할을 해요. 이렇게 중앙에 허브를 배치하면, 기존의 모든 디바이스들에게 추가적으로 선을 연결하는 방식보다 효율적으로 디바이스를 추가할 수 있어요.

 

 

 

그렇다면 이제 통신을 주고 받아야겠죠?

예를 들어, A, B, C 디바이스가 있다고 가정할 때, A 디바이스가 C 디바이스의 MAC Address를 알고있다고 가정해볼게요.

 

 

 

허브는 기본적으로 데이터가 들어오면 송신자를 제외하고 자신에게 연결된 모든 디바이스들에게 데이터를 보내는 형식을 사용해요. 수신자들은 해당 데이터들을 받고, 목적지 MAC Address를 비교한 후 자신의 것이 아니면 버리게돼요.

따라서, 다음과 같이 데이터를 보내게 된다면, B는 자신에게 보낸 데이터가 아니기 때문에 버리게 되겠죠?

 

위의 과정에서 허브의 단점이 보이시나요? 

허브는 기본적으로 1계층 - 물리 계층에서 동작하는 장치에요. 따라서 상위 계층의 프로토콜이나 주소 체계를 인식하지 못한다는 말이 되며 이 말인 즉슨, 자신에게 연결된 모든 기기를 하나로 묶어버린다는 말이 돼요. 

 

따라서 모든 데이터가 연결된 모든 디바이스로 전송되기 때문에 의도하지 않은 수신자에게 정보가 노출될 수 있어 보안에 취약해요. 그리고, 브로드캐스팅 방식 때문에 의도치않은 네트워크 트래픽 증가로 인해 네트워크 성능이 급격하게 저하돼요.

 

 

 

이번엔 위의 경우를 한번 볼까요? 디바이스 A는 B로 데이터를 보내고 디바이스 B는 A로 데이터를 보낼 때 우연히 타이밍이 겹쳐버렸네요. 허브는 송신, 수신 선을 하나로 공유하기 때문에 다음과 같이 타이밍이 겹쳐버리게 되면 충돌이 발생해버려요.

허브는 이러한 상황에서 어떻게 대처할까요? 허브는 충돌이 발생했다는 것을 인지하고 해당 데이터들을 폐기해버려요.

 

 

CSMA/CD

 

그렇다면 허브는 충돌이 발생한 데이터들을 버린 이후 어떤 행동을 취할까요?

허브는 충돌이 발생했다는 것을 자신에게 연결된 모든 디바이스들에게 알려주는 신호를 보내요.

이러한 신호를 Jam Signal 이라고 해요.

 

 

 

해당 신호를 받은 디바이스들은 데이터 전송을 멈추고 랜덤한 시간동안 대기를 하게돼요.

 

 

 

대기 시간이 끝난 디바이스는 이제 데이터를 전송할 수 있어요.

만약, 여기서 충돌이 계속 계속 발생한다면 계속해서 대기모드에 들어가게 될 것이고 성능이 크게 저하될거에요.

 

 

 

스위치 (Switch)

스위치는, 위의 허브 방식을 비효율적인 문제점을 해결하기 위해서 나왔어요.

 

허브와의 가장 큰 차이점은 스위치는 2계층 - 데이터 링크 계층 기기라는 점인데요.

스위치는 2계층에서 쓰이는 디바이스 주소인, MAC Address 테이블를 저장하고 있다는 특징이 있어요.

 

 

해당 테이블을 기반으로 A에서 B로 데이터를 보내볼게요.

 

A에서 보낸 데이터가 스위치로 오게되면, 스위치는 해당 데이터의 목적지 MAC Address를 보고 자신의 테이블에서 주소를 찾아 매핑되어 있는 스위치 포트로 데이터를 전송하게 돼요. 따라서, A는 B에게만 데이터를 보내게되고, C는 불필요한 데이터를 받지 않게 되었어요.

 

 

다음은 허브에서 골칫거리였던 데이터 충돌에 대해서는 스위치는 어떻게 해결 했을까요?

 

스위치 방식은 송신, 수신 케이블을 나눠서 2개씩 연결해서 해결 했습니다. 의외로 엄청 간단하게 해결했네요.

 

🤔 허브에서는 왜 다음과 같은 방식을 사용하지 못한걸까요?

허브는 1계층 - 물리 계층 기기 라서 각 디바이스의 정보를 저장하지 못하고 데이터를 받는 족족 브로드캐스팅하여 전달해줘야 하기 때문에, 송신, 수신 케이블을 따로 나눠서 관리하지 못해요. 만약 케이블이 2개가 된다면 많은 에러가 발생하겠죠?

 

 

 

각 디바이스마다 케이블 2개를 관리한다면 MAC Address 테이블도 수정을 필요로 하겠죠?

각각의 케이블을 스위치 포트와 매핑되기 때문에 다음과 같이 송신, 수신 케이블에 따른 테이블을 만들어서 관리해요.

 

 

이더넷 프레임 (Ethernet Frame)

LAN 환경에서 데이터를 주고받을 때, 어떤 메시지 형식으로 주고받을까요?

프레임 메시지 구조를 보기 전에, 먼저 이더넷 프로토콜을 알아야해요. 

 

📚 이더넷이란 무엇인가요?

전세계적으로 사무실이나 가정에서 일반적으로 사용되는 LAN 환경에서 가장 많이 사용되는 프로토콜이에요.

LAN 환경에서 오가는 데이터들은 대부분 이러한 이더넷 프로토콜에 맞춰서 메시지를 구성했다고 보시면돼요.

 

 

위의 사진은 IEEE 802.3인 이더넷 표준화 버전의 프레임 구조를 나타낸거에요. 하나씩 살펴볼까요?

 

📚 Preamble

7바이트 즉, 56bit만큼 0과 1이 번갈아가면서 존재하는 구조로, 수신자와 송신자 간의 데이터 전송 동기화를 담당해요.

 

📚 SFD

프레임 시작을 알리는 구간으로, 10101011로 고정되어 있어요.

 

📚 Destination Address

목적지 MAC Address를 나타내요.

 

📚 Source Address

출발지 MAC Address를 나타내요.

 

📚 Length

프레임의 총 길이를 나타내요.

 

📚 Ethernet Type

뒤에 나오는 데이터가 어떤 상위 프로토콜 기반인지 알려주는 구간이에요.

 

📚 CRC

송신자가 보낸 데이터와 수신자가 받은 데이터의 해시 패턴을 비교해서 무결성이 보장되도록 만든 구간이에요.

 

 

ARP (Address Resolution Protocol)

위의 그림에서 상대방의 디바이스 MAC Address를 알고있다는 가정을 하고 데이터를 전송 했었는데요. 실제로는 어떻게 상대방의 MAC Address를 알 수 있는걸까요?

 

📚 IP (Internet Protocol Address)

먼저, ARP를 이해하기 위해서는 IP Address에 대해서 간략하게 알아야해요.

IP Address는 3계층 - 네트워크 계층에서 사용하는 논리적 주소에요.

4바이트 (32bit)로 구성되어 있고 1바이트씩 '.'으로 구분하여 주소를 나타내고 있어요.

IP Address는 3계층 주소이기 때문에, 실제로 내부망이 아닌 외부망 즉, 인터넷을 사용하는데 쓰이는 주소에요!

 

상대방 디바이스 MAC Address를 얻기 위해서는 이러한 IP Address를 필요로 하는데요. 과정을 한번 살펴볼게요.

 

LAN 환경에 신참 디바이스 A가 들어왔어요.

 

 

 

디바이스 A는 디바이스 C에게 데이터를 보내고 싶은데, IP 주소밖에 알지 못한다고 가정할게요.

 

 

📚 ARP Packet 구조

이제 ARP 프로토콜을 이용해야 하는데, 그 전에 ARP Packet 구조를 한번 살펴볼게요.

 

📚 하드웨어 타입 (2 바이트)

네트워크 타입을 나타내요. (이더넷은 = 1)

 

📚 프로토콜 타입 (2 바이트)

현재 사용하고 있는 프로토콜을 나타내요. (IPv4)

 

📚 하드웨어 길이 (1 바이트)

MAC Address 길이를 나타내요.

 

📚 프로토콜 길이 (1 바이트)

IP Address 길이를 나타내요.

 

📚 Operation (2 바이트)

1 이면 요청, 2 이면 응답을 나타내요.

 

 

디바이스 A는 디바이스 C의 MAC Address를 알기위해서, 다음과 같이 ARP Packet을 만들어요.

 

여기서 주목할 점은 상대방의 MAC Address를 모르기 때문에, 받는쪽 MAC Address를 00:00:00:00:00:00 으로 값을 넣어줬다는 거에요!

 

ARP Packet은 3계층 - 네트워크 계층과 2계층 - 데이터링크 계층 중간에 위치하기 때문에 Frame으로 감싸는 작업이 필요해요. 다음과 같이 Frame을 만들 수 있겠네요.

 

 

 

이제 Frame을 만들었으니, 스위치로 전송해볼게요.

스위치는 Frame 구조를 확인하고, 목적지 MAC Address가 ff:ff:ff:ff:ff:ff로 되어 있어서 브로드캐스팅을 수행해요.

 

 

 

Frame을 받아서 ARP Packet을 까봤을 때, 디바이스 B는 자신에게 온 IP 주소가 아니므로, 해당 메시지를 폐기 해버려요.

디바이스 C는 자신에게 온 요청이므로 응답 메시지를 만들어야겠죠?

 

디바이스 C는 다음과 같이 ARP Packet을 만들어요.

 

자신의 MAC Address를 담은 응답 Packet을 만들었어요.

 

해당 Packet을 담은 Frame도 다음과 같이 만들어요.

 

 

마지막으로, 디바이스 C에게 디바이스 A에게 자신의 MAC Address를 담은 메시지를 보내서 A에게 전달해줘요.

디바이스 A는 이제 디바이스 C에 대한 MAC Address를 기억할 것이고, 이제 디바이스 C에게 데이터를 전송할 수 있어요!


 

 

마치며..

이렇게 전체적으로 LAN 환경에서 디바이스 간의 통신 방식과 관련 개념을 알아보았는데요.

 

실제로는 더욱 복잡하게 디바이스 통신이 이뤄지지만 그림을 그려가면서 최대한 쉽게 이해하기위해 글을 작성하다보니 놓친 부분이나 미숙한 부분이 있을 것 같아요.

정리 글에 부족한 점이 있거나 틀린 부분이 있다면 댓글 남겨주시면 감사하겠습니다.

 

다음에는 WAN 환경에서의 디바이스 통신을 다뤄볼 예정입니다!

 

 

 


참고자료