네트워크 공부를 하기 위해서 '혼자 공부하는 네트워크'라는 책으로 공부한 내용을 정리해보고자 한다. 내용의 완결성에 상관없이 키워드 위주로 중요한 내용만 발췌해서 정리했다.
1. 컴퓨터 네트워크 시작하기
1-1 컴퓨터 네트워크를 알아야 하는 이유
- 개발자의 업무는 프로그램을 만드는 업무와 유지보수하는 업무 두가지로 나뉘는데, 전자의 경우 TCP/UDP와 같은 네트워크 지식이 없다면 스프링 프레임워크의 기능을 제대로 사용하기 어렵다. 또한 배포할 때도 DNS, HTTP/HTTPS 포트번호 등 다양한 네트워크 지식이 필요하다. 후자의 경우 간단하게는 인터넷 연결이 불안정한 것부터 잘 동작하던 웹 서버가 동작하지 않는 문제까지 네트워크 지식은 문제발생 시 해결에 큰 실마리가 된다.
1-2 네트워크 거시적으로 살펴보기
- 네트워크의 기본구조
- 모든 네트워크는 '노드', '노드를 연결하는 간선', 노드 간 주고받는 '메시지'로 구성된다. 노드는 정보를 주고받을 수 있는 장치, 간선은 정보를 주고받을 수 있는 유무선의 통신 매체라고 이해하면 쉽다.
- 호스트: 네트워크의 가장자리에 위치한 노드는 네트워크를 통해 흐르는 정보를 최초로 생성·송신하고 최종적으로 수신한다. 이는 서버 컴퓨터가 될 수도 있고 여러 IoT 기기가 될 수도 있는데, 이를 네트워크에선 호스트라고 부른다.
- 서버: '어떠한 서비스'를 제공하는 호스트이다. 파일서버, 웹서버, 메일서버 등이 있고 서브(serve: 제공하다)에서 비롯된 말이다.
- 클라이언트: 서버에게 어떠한 서비스를 요청(request)하고 서버의 응답(response)을 제공받는 호스트이다.
- 네트워크 장비: 네트워크 노드가 호스트만 있는 것은 아니며, 호스트간 주고받는 정보가 중간에 거치는 노드도 있는데 이를 중간노드라고 한다. 대표적으로 이더넷허브, 스위치, 라우터, 공유기 등이 있고 이를 네트워크 장비로 통칭할 수 있다.
- 통신매체: 그래프는 노드와 이를 연결짓는 간선(링크)으로 이루어지기에, 호스트와 네트워크 장비 또한 유무선 매체를 통해 연결되어 있어야 한다. 각 노드를 연결하는 간선이 바로 통신 매체이고 유선/무선매체가 있다.
- 메시지: 통신 매체로 연결된 노드가 주고받는 정로를 메시지라고 한다. 웹페이지·파일·메일 등의 형태이다.
- 범위에 따른 네트워크 분류
- LAN(Local Area Network): 가까운 지역을 연결한 근거리 통신망을 의미한다. 가정, 기업, 학교처럼 한정된 공간에서의 네트워크를 LAN이라 부른다.
- WAN(Wide Area Network): 먼 지역을 연결하는 광역 통신망을 의미한다. 인터넷을 '네트워크의 네트워크'라고 할 수 있는데, 인터넷이 바로 WAN으로 분류된다. 같은 LAN에 속한 호스트끼리 메시지를 주고받을 땐 인터넷이 필요없지만 다른 LAN에 속한 호스트와 메시지를 주고 받아야할 때는 WAN이 필요하다. 인터넷을 사용하기 위해 접속하는 WAN은 ISP(Internet Service Provider)라는 인터넷 서비스 업체가 구축하고 관리한다. 국내의 대표적인 ISP는 KT, LG, SK가 있다.
-메시지 교환 방식에 따른 네트워크 분류
- 회선교환(circuit switching) 방식: 먼저 메시지 전송로인 회선을 설정하고 이를 통해 메시지만 주고받는 방식이다. '회선을 설정한다'는 것은 '두 호스트가 연결되었다'나 '전송로를 확보하였다'와 같은 말이다. 주어진 시간 동안 전송되는 정보량이 비교적 일정하다는 장점이 있고, 회선의 이용효율이 낮아질 수 있다는 단점이 있으며, 대표적인 사례가 전화망이다.
- 패킷교환(packet switching) 방식: 회선 교횐의 단점을 해결한 방식으로 메시지를 패킷이라는 작은 단위로 쪼개어 전송한다. 현대 인터넷은 대부분 패킷교환 방식이며 중간 노드인 패킷 스위치는 패킷이 수신지까지 도달하도록 최적의 경로를 결정하거나 송수신지를 식별하는 역할을 한다. 대표적인 패킷스위치 네트워크 장비로는 라우터, 스위치가 있다.
- 패킷을 통해 전송하고자 하는 데이터를 페이로드(payload)라고 하고 헤더(header)라는 정보도 패킷앞에 포함된다. 때로는 패킷뒤에 트레일러(trailer)라는 정보가 포함되기도 한다. 헤더와 트레일러는 일종의 부가정보 내지는 제어정보다.
1-3 네트워크 미시적으로 살펴보기
- 프로토콜: 노드간에 정보를 올바르게 주고받기 위해 합의된 규칙이나 방법을 의미한다. 즉, 서로 다른 통신장치들이 정보를 주고 받으려면 프로토콜이 통해야 한다.
- 네트워크 참조 모델(network reference model)
네트워크를 통해 정보를 주고 받을 때는 정형화된 여러 단계를 거치는데, 이를 계층으로 표현할 수 있어 네트워크 계층 모델이라고도 한다. 이와 같이 통신과정을 계층으로 나누는 이유는 두가지이다.
- 네트워크 구성과 설계가 용이하다. 각 계층이 수행해야 할 역할이 정해져 있으므로 계층 목적에 맞게 프로토콜과 네트워크 장비를 계층별로 구성할 수 있다. 상위 계층의 장비가 하위 계층의 장비 역할을 포괄해서 수행하는 경우도 있다.
- 네트워크 문제 진단과 해결이 용이하다. 통신 과정에서 문제가 발생해도 원인을 계층별로 진단하기 수월하고 발생 지점을 쉽게 추측할 수 있다.
- OSI 모델(네트워크 7계층)
- 물리 계층: 1과 0으로 표현되는 비트 신호를 주고받는 계층. 통신 매체에 맞는 신호로 운반되도록 비트 데이터의 변환이 이루어지고 통신 매체를 통한 송수신이 이루어지는 계층.
- 데이터링크 계층: 네트워크 내 주변 장치간의 정보를 올바르게 주고받기 위한 계층. 이더넷을 비롯한 LAN 기술이 여기 속하며, 물리계층을 통해 주고받는 정보에 오류가 없는지 확인하고 MAC 주소라는 체계를 통해 송수신지를 특정할 수 있다.
- 네트워크 계층: 메시지를 다른 네트워크에 속한 수신지까지 전달하는 계층. 예컨대 네트워크 계층은 인터넷을 가능케하는 계층이며, IP주소라는 주소체계를 통해 통신하고자 하는 수신지 호스트와 네트워크를 식별하고 최적경로를 결정한다.
- 전송계층: 신뢰성·안정성있는 전송을 해야할 때 필요한 계층. 패킷이 정상적으로 전송되었는지, 유실된 정보는 없는지 등을 확인하며, 포트라는 정보를 통해 실행중인 응용프로그램의 식별이 이루어지기도 함.
- 세션계층: 세션은 다양한 상황에서 폭넓게 사용되지만 일반적으로 호스트의 응용프로그램 간 연결상태를 의미한다. 이 연결상태를 생성·유지하고 종료되면 끊어준다.
- 표현계층: 번역기 같은 역할을 하는 계층. 사람이 이해할 수 있는 언어인 문자를 컴퓨터가 이해할 수 있는 코드로 변환하거나 압축·암호화와 같은 작업이 이루어짐
- 응용계층: OSI 참조모델의 최상위 계층으로 응용프로그램과 가장 밀접하다. 사용자가 이용할 응용프로그램에 다양한 네트워크 서비스를 제공한다.
- TCP/IP 모델
OSI 모델은 이론적인 면이 대부분이라 '이상적 설계'에 가깝다면, TCP/IP 모델은 이론보다는 구현에 중점을 둔 네트워크 참조모델이다. IP는 인터넷 프로토콜의 약자로 네트워크 구현의 핵심이다.
- 네트워크 엑세스 계층: 링크계층 혹은 네트워크 인터페이스 계층이라 부르며, OSI의 링크계층과 유사함.
- 인터넷 계층: OSI의 네트워크 계층과 유사함.
- 전송 계층: OSI의 전송계층과 유사함.
- 응용 계층: OSI의 세션, 표현, 응용 계층을 합친 것과 유사함.
- 캡슐화와 역캡슐화
패킷은 송신 과정에서 캡슐화가 이루어지고, 수신과정에서 역캡슐화가 이루어진다.
- 캡슐화(encapsulation): 어떤 정보를 송신할 때 상위 계층에서 내려받은 패킷을 페이로드로 삼아 프로토콜에 걸맞은 헤더/트레일러를 붙인 뒤 하위계층으로 전달한다.
- 역캡슐화(decapsulation): 메시지를 수신할 때 캡슐화 과정에서 붙였던 헤더나 트레일러를 각 계층에서 확인한 뒤 제거하는 과정
2. 물리계층과 데이터링크 계층
물리계층과 데이터계층은 밀접하게 연관되어 있는데, 두 계층은 이더넷이라는 공통된 기술이 사용되기 때문이다. 이더넷(Ethernet)은 현대 LAN, 특히 유선 LAN 환경에서 대중적으로 사용되는 기술로, 케이블과 같은 통신매체로 연결되어 송수신 되는 프레임의 형태, 프레임을 주고받는 방법 등이 정의된 네트워크 기술이다.
2-1 이더넷
- 이더넷 표준
- 현재 이더넷은 국제적 표준화가 이루어졌고 IEEE 802.3을 기반으로 여러 숫자의 표준이 있다. 네트워크 장비를 보면 '특정 이더넷 표준을 지원한다./호환된다.'는 문구를 찾아볼 수 있다. 컴퓨터가 각기 다른 제조사의 네트워크 장비를 써도 동일한 형식의 프레임을 주고받고 통일된 형태로 작동하는 것은 통신매체가 이 표준을 준수하기 때문이다.
- 이더넷 프레임
- 물리 계층의 이더넷 표준이 통신매체라면 데이터 링크 계층의 이더넷 프레임은 상위 계층에서 받아들인 정보를 캡슐화·역캡슐화 과정을 거치며 정보를 다루는 표준을 말한다.
- 프리앰블(preamble)은 이더넷 프레임의 시작을 알리는 8바이트(64비트) 크기의 정보이다. 수신자는 이것을 통해 이더넷 프레임이 오고 있음을 알 수 있으니 송수신자 간의 동기화를 위해 사용되는 정보이다.
- MAC주소는 '물리적 주소'라고도 불리며 네트워크 인터페이스마다 부여되는 6바이트(48비트) 길이의 주소로, LAN 내의 수신지와 송신지를 특정할 수 있다. 일반적으로 고유하고 변경되지 않는 주소로 부여되며 보통 NIC(Network Interface Controller)라는 장치가 네트워크 인터페이스 역할을 담당한다. 즉, 한 컴퓨터에 NIC가 여러개 있다면, MAC 주소도 여러 개 있을 수 있다.
- 타입/길이: 타입은 이더넷 프레임이 '어떤 정보를 캡슐화 했는지' 나타내는 정보로 이더타입이라고도 부른다. 대표적으로 상위 계층에서 사용된 프로토콜의 이름이 명시되는데 0800(IPv4), 86DD(IPv6), 0806(ARP) 등이 있다.
- FCS(Frame Check Sequence)는 수신한 이더넷 프레임에 오류가 있는지 확인하기 위한 필드이다. 오류검출이 이루어지기도 하는데, 순환 중복검사라고 불리는 오류검출용 값이 들어간다.
2-2 NIC와 케이블
- NIC
- NIC는 호스트와 유무선 통신 매체를 연결하고 이러한 변환을 담당하는 네트워크 장비이다. 즉 '호스트를 네트워크(LAN)에 연결하기 위한 하드웨어'라고 정의할 수 있다.
- 네트워크 인터페이스 카드, 네트워크 어댑터, LAN 카드, 이더넷 카드 등 다양한 명칭으로 불리는데, 초기 NIC는 확장 카드 형태로 따로 연결해서 사용했기에 카드라는 표현이 붙은 것이다.
- NIC는 통신매체에 흐르는 신호를 호스트가 이해하는 프레임으로 변환하거나 반대로 호스트가 이해하는 프레임을 통신매체에 흐르는 신호로 변환한다. 따라서 호스트가 네트워크를 통해 송수신하는 모든 정보는 NIC를 거치게 되는 것이다.
- NIC는 MAC주소를 통해 자기 주소는 물론, 수신되는 프레임의 수신지 주소를 인식하는데, 이를 통해 자신과는 관련없는 수신지 MAC 주소가 명시된 프레임이라면 폐기할 수 있고 FCS필드를 토대로 오류를 검출해 프레임을 폐기할 수 있다.
2-3 허브
- 주소개념이 없는 물리계층
- 물리 계층에는 주소개념이 없ㅈ는데, 송수신지를 특정학ㄹ 수 있는 주소는 데이터링크 계층부터 존재하는 개념이다. 물리 계층은 단지 호스트와 통신 매체간의 연결과 통신 매체상의 송수신이 이루어질 뿐이니 물리 계층의 네트워크 장비는 송수신되는 정보에 대한 어떠한 조작이나 판단을 하지 않는다.
- 반면 데이터링크 계층에는 주소개념이 있다.(ex. MAC 주소) 따라서 데이터링크 이상의 계층 장비들은 송수신지를 특정할 수 있고 그를 바탕으로 조작과 판단을 할 수 있다.
-허브
- 물리 계층의 허브(hub)는 여러대의 호스트를 연결하는 장치로 리피터 허브(repeater hub)라 부르기도 한다. 특징은 아래와 같다.
- 전달받은 신호를 다른 모든 포트로 그대로 내보낸다.
- 반이중(half duplex)모드로 통신한다. 무전기처럼 송수신을 번갈아 가면서 한다. 즉, 동시에 송수신이 불가능하다.(반댓말로 전이중(full duplex))가 있다.
- 콜리전 도메인(collision domain): 허브에 호스트가 많이 연결될수록 충돌 발생 가능성이 높은데, 이렇게 충돌이 발생할 수 있는 영역을 이르는 말이다. 허브에 연결된 모든 호스트는 같은 콜리전도메인에 속한다. 충돌을 해결하려면 CSMA/CD 프로토콜을 사용하거나 스위치 장비를 사용해야한다.
- CSMA/CD: 반이중 이더넷 네트워크에서 충돌을 방지하는 대표적인 프로토콜이다. Carrier Sense(캐리어감지) Multiple Access(다중 접근) Collision Detection(충돌 검출)의 약자로, 먼저 전송가능한 상태인지 확인하고 다른호스트가 전송중이지 않을 때 전송하며, 다수의 호스트가 접근해 충돌이 발생하면 임의의 시간만큼 대기한 후 전송한다는 의미다.
2-4 스위치
스위치는 데이터링크 계층의 네트워크 장비로 2계층에서 사용한다고 하여 L2 스위치라고도 부른다. 여러 포트에 호스트를 연결할 수 있다는 점은 허브와 유사하지만, MAC 주소를 학습해 특정 주소를 가진 호스트에만 프레임을 전달할 수 있고 전이중 모드 통신을 지원한다. 따라서 CSMA/CD 프로토콜이 필요하지 않아 성능상 이점이 있다.
- MAC 주소학습: MAC 주소 학습을 위해 포트와 연결된 호스트의 MAC 주소간의 연결관계를 메모리에 표 형태로 기억하는데, 이를 MAC 주소 테이블이라 한다.
- 플러딩(flooding): MAC 주소 학습은 프레임 내 '송신지 MAC 주소'필드를 바탕으로 이루어진다. 스위치가 처음 호스트 A에서 프레임을 수신하면, MAC 주소와 연결된 포트를 MAC 주소 테이블에 저장한다. 하지만 여전히 수신지 호스트 C가 어느 포트에 연결되었는 지 알수 없는데, 이때 스위치는 마치 허브처럼 송신지 포트를 제외한 모든 포트로 프레임을 전송한다. 이 때 B와 D는 자신과 관련없는 프레임을 전송받았으니 폐기한다.
- 위의 방식으로 테이블에 정보가 쌓이면 필터링을 하고 내보낼 포트만 제외하고 모든 포트를 가리개로 가리는 듯한 형태로 전송될 포트에 실제로 프레임을 내보내는데 이를 포워딩이라고 한다.
- 에이징: MAC 주소 테이블에 등록된 특정 포트에서 일정시간동안 프레임을 전송받지 못했다면 해당 항목은 삭제되는 것.
- VLAN
- 스위치의 중요한 기능 중 하나로 VLAN(Virtual LAN)이 있는데, 한대의 스위치로 가상 LAN을 만드는 것이다. 허브는 송신지 포트를 제외한 모든 포트로 신호를 내보내기에 네트워크상 불필요한 트레픽이 늘어날 수 밖에 없고, 이는 성능저하로 이어진다.
- 스위치에 연결된 호스트 중에서도 메시지를 주고받을 필요가 없어서 같은 네트워크(LAN)상에 속할 필요가 없는 호스트가 있을 수 있는데, 이때 VLAN을 구성하면 한대의 물리적 스위치라 해도 여러대의 스위치가 있는 것처럼 논리적인 단위로 LAN을 구획할 수 있다. 호스트의 물리적인 위치와 관계없이 논리적인 LAN을 구성할 수 있는 것이다.
- 포트기반 VLAN: 가장 대중적인 방식으로 스위치의 포트가 VLAN을 결정하는 방식이다. 사전에 특정 포트에 VLAN을 할당하고 해당 포트에 호스트를 연결함으로써 VLAN에 포함시킨다. VLAN 트렁킹(Trunking)은 두 대 이상의 VLAN 스위치를 효율적으로 연결하여 확장하는 방법인데, 스위치간 통신을 위한 특별한 포트인 트렁크 포트에 VLAN 스위치를 서로 연결하는 방식이다.
- MAC 기반 VLAN: 사전에 설정된 MAC 주소에 따라 VLAN이 결정되는 방식으로 송수신하는 프레임속 MAC 주소가 호스트에 속할 VLAN을 결정하는 방식이다.
느낀점
'혼자 공부하는 네트워크'의 2챕터까지의 내용을 정리해보았는데, 아직까지는 기초적인 지식만 있는 것 같다. 나는 네트워크 전문가가 아닌 개발자로 일할 것이고 필요한 지식만 골라 습득하면 되기에 여태껏 네트워크 공부를 등한시 해왔는데, 기본적인 단어의 뜻을 모르니 AWS를 이용하는 데에도 어려움을 겪었고, 이대로 현직에 들어가면 결국 다시 공부해야 되겠다는 생각이 들어 이번 기회에 책을 펼쳐봤다.
네트워크에서 쓰이는 OSI 7계층, 포트포워딩 등은 면접에서도 나오는 주제이고 블로그 포스팅은 여기까지만 하겠지만 책은 끝까지 독파해볼 생각이다.