이 포스팅은 네트워크 기초 시리즈 5 편 중 1 번째 글 입니다.
네트워크 용어 정리
- IP 주소
- 인터넷 통신을 위해 네트워크 상에서 장치들이 서로를 인식하고 통신하기 위해 사용하는 번호
- IPv4 체계
- 32비트로 구성된 주소 체계
- 0~255 사이 십진수 넷을 구분하여 사용
- 2^32 = 약 42억 → IPv6
- 공인 IP
- 저 주소는 ICANN(
아이캔앤) 이라는 기관이 국가별로 사용할 IP대역을 관리함 - KISA(인터넷 진흥원)에서 우리나라에서 사용할 주소 관리
- IP 주소가 4개의 클래스로 나눠지는데, 앞에서부터 순차적으로 더 강한 권한을 가지고 있다.
- A 클래스 하나당 256256256개의 주소를 갖는 방식
- 그럼, 결국 높은 클래스를 부여받은 기관의 경우, 하위 IP주소를 마음대로 가지고 놀 수 있다.
- 문제는, 인터넷 발전 초기에 이걸 마구 뿌려, 현시점에는 공인 IP를 배분하기 상당히 어렵다.
- 그래서 내 장비에 주소를 할당받고 싶은 경우, 미리 많이 할당된 기관, 서버 운영업체 같은 곳에다가 돈을 지불하고 사는 방식으로 진행하게 된다.
- 저 주소는 ICANN(
- 사설 IP
- 전체 IP 주소가 있는데, 이게 전부 공인 IP로 사용되는 것은 아니다.
- 이렇게 특수한 목적으로 제외한 IP중, 사설 IP로 사용되는 대역이 따로 존재한다.
- 이 사설 IP 대역은, 인터넷 상에 연결되어있지 않기 때문에, 임의의 사용자가 마음대로 부여하고 사용이 가능하다.
- A 클래스 : 10.0.0.0 ~ 10.255.255.255
- B 클래스 : 172.16.0.0 ~ 172.31.255.255
- C 클래스 : 192.168.0.0 ~ 192.168.255.255
- 이게 잘 이해가 안되다가, C클래스를 보고 바로 이해해버렸는데, 대부분의 집에 있는 장비의 IP주소를 찍어보면 이렇게 구성되어 있다는 것을 알 수 있다.
- 대부분의 집에서 같은 IP 주소를 장비들이 사용해도 문제가 생기지 않는 것은, 이 대역이 사설 IP 대역이기 때문에 마음대로 사용이 가능해서 이다.
- 자 이러한 점은, 공인 IP에서 발생하는 문제를 해결하는 방향으로 발전되었다.
- 즉, 공인 IP 주소가 모자랄 경우에 사설 IP로 회사, 가정내에 IP 주소를 부여하고, 공유기 등에 고정 IP를 부여한 다음에 인터넷에 접속해버리는 것.
- 그럼 이렇게 되면, 우리집에 들어오는 패킷을 우리집에 있는 디바이스들에 배정된 사설 IP주소를 찾아 배정해 주어야 하지 않을까?
- 그게 바로 공유기(라우터)이다.
- 단, 당연하게도 이렇게 사설 IP를 배정 받은 컴퓨터를 공인 IP를 가진 컴퓨터가 알 수 없다. 사설 IP이기 때문이다.
- 자 이러한 상황에서 우리가 보통 하는 짓은, 집에 있는 컴퓨터로 서버에 접근하는 것이다.
- 즉, 164.124.101.2의 IP로 접근하는 것인데, 이건 가능하다. 하지만 역은 불가능하다.
- 사설 IP이기 때문에 인터넷 연결이 불가하기 때문이다.
- 고정 IP
- 고정 IP는 컴퓨터에 고정적으로 부여된 IP를 말한다.
- IP를 반납하기 전까지는 다른 장비에 부여할 수 없는 IP주소.
- 유동 IP
- 유동 IP는 장비에 고정적으로 IP를 부여하지 않고 컴퓨터를 사용할 때 남아있는 IP중에서 돌아가면서 부여하는 IP를 뜻한다.
- 10개의 IP주소가 있을 때 컴퓨터가 20대라면 고정 IP면 10대만 가용, 나머지는 논다.
- 유동 IP를 부여하는 경우 돌아가면서 사이좋게 사용이 가능하다.
- 결론
- 결론적으로, 서버를 운영하고자 하는 경우에는 공인 IP를 받아야 하고(인터넷 연결이 안되면 아예 접근이 불가)
- 고정 IP로 부여(만약 IP주소가 없을 경우, 서비스 제공 불가, 또는 다른 사람의 서버로 접속)해야 한다.
- NAT Network
- Network Address Translation (네트워크 주소 변환)
- 자 위에서 결국 우리는 공유기를 통해서 우리집에 배정된 공인 IP 주소를 가지고 각각의 장치에 배정된 사설 IP로 뿌려서 사용한다는 것을 알게되었다.
- 그럼 결국 필요한 것은, 특정 패킷이 들어왔을 때, 원하는 목적지로 갈 수 있도록 하는 매핑함수가 필요하다.
- 이걸 수행하는 것이 NAT이다.
- 장점
- 인터넷 공인 IP 주소를 절약할 수 있다.
- 당연한 이야기이다. 이런 목적으로 사용되는 친구다.
- 인터넷이란 공공망과 연결될 때, 방화벽 역할을 수행할 수 있다.
- 각각의 장치에 공인 IP가 되어 있다면, 외부에서 해당 주소로 공격해 들어올 수 있다.
- 하지만 공인 IP는 하나이고, 이것만 라우터가 밖으로 알려지게 하기 때문에 방어가 가능하다. 내부 사설 IP 주소를 알아야 공격할 수 있는데 앞단에서 원천 봉쇄하는 것.
- 인터넷 공인 IP 주소를 절약할 수 있다.
- 궁금증
- 아니 그러면 디바이스 두대가 있어. 그런데 둘다 네이버에 접속해 그러면 라우터에서 나가는 요청은 두개일거야
- 그에 대한 응답이 돌아왔을 때, 어떻게 각각의 디바이스에 패킷을 전송할 수 있을까?
- 결국 이걸 가능하게 하기 위해서는 각 디바이스가 가지는 유일한 값이 필요하다.
- 어떤 값을 들고 있으면 될까?
- MAC Address이다.
- Mac address
- 디바이스가 가지고 있는 고유의 물리적, 하드웨어 주소
- 패킷에 들어오는 mac 주소를 보고 적어둔 테이블을 기반으로 사설 IP주소를 알아낸다음 해당 디바이스로 데이터를 넘겨준다.
- 소켓 통신
- 양방향 통신을 위해 사용
- 게임, 실시간 채팅, 스트리밍 중계 등
- 일반적으로는 서버에 요청은 가능하나, 서버는 나한테 정보를 줄수는 없다.
- 요청이 있어야 응답을 주는 구조: http 통신
- 소켓 통신은 서버와 클라이언트가 특정 port를 통해 실시간으로 양방향 통신을 하는 방식
- 높은 비용
- 호스트 운영체제
- 컴퓨터 한대에 메인으로 깔린 운영체제
- 게스트 운영체제
- 부가 운영체제
- Putty
- 가상 단말기 프로그램
- ssh, telnet, tcp 접속을 위한 클라이언트
- window환경의 호스트 운영체제에서 다른 운영체제의 CLI환경에 SSH 접속 가능
- 받아서 사용하면 끝
- 호스트네임 (사용자이름@IP주소)
- 포트번호 넣어주고 뿅
- SSH
- Secure Shell
- 기존에 Telnet 사용 → 암호화를 통해 안전한 제어 가능, 중간에 가로채도 쓸모 없음
- 클라이언트와 서버로 분리됨
- 공개키, 암호키 방식으로 서버에 접속하는 방식이 있음
- 보다 안전함 → 따로 구글링 할 것
- 포트
- 항구
- IP 주소에 항구도 추가되어 있는 것
- 이 항구는 프로세스에 연결되어 있음
- 왜 필요할까?
- 컴퓨터 내에는 다양한 프로세스가 동작한다. IP주소는 하나인데, 통신을 필요로하는 프로그램이 다수일 경우 이런 방식이 필요하다.
- 이전의 공유기와 같은 방식
- 포트 포워딩
- 그럼 내가 서버에 요청을 걸었고, 서버가 응답하여 특정 파일을 우리집 공유기의 공인 IP로 쏘았다.
- 내가 요청을 했기 때문에 해당 발자취는 모두 남는다. 공유기는 이 과정에서 응답에 대해 IP주소와 mac주소를 결합하여 요청을 보낸 디바이스로 데이터를 보낸다.
- 그런데 만약에, 내가 서버역할을 한다면? 포트를 열어주고, 이쪽으로 들어오게 해야한다.
- 그런데, 공유기는 특정 포트로 요청이 들어왔을 때, 어느 사설 IP로 연결해줘야할지 모른다.
- 이럴 때 해주는 것이 포트 포워딩, 즉 이정표를 달아주는 것이다.
- OSI 7계층
- 물리 계층 (Physical Layer, L1)
- 기계적, 전기적인 통신망 접면의 정의
- 데이터를 전기적인 신호로 변환해서 주고받는 기능만 할 뿐
- 대표 장비 : 통신 케이블, 리피터, 허브 등
- 데이터링크 계층 (DataLink Layer 2, L2)
- 데이타 링크의 제어 (프레임화, 데이터 투명성, 오류 제어 등)
- 맥 주소를 가지고 통신한다.
- 대표 장비 :브리지, 스위치 등
- 네트워크 계층 (Network Layer 3, L3)
- 경로 배정, 주소, 호 설정 및 해지 등
- 데이터를 목적지까지 가장 안전하고 빠르게 전달하는 기능(라우팅)
- 주소부여(IP), 경로설정(Route)
- 전송 계층 (Transport Layer 4, L4)
- 종단 간의 신뢰성 있고 효율적인 메세지 전송(연결 관리,에러제어,데이타 분리,흐름제어 등)
- 오류검출 및 복구와 흐름제어, 중복검사 등을 수행
- TCP 프로토콜 / UDP 프로토콜
- 세션 계층 (Session Layer 5, L5)
- 응용 개체들간의 대화, 동기화 제어, 연결세션관리 등
- 데이터가 통신하기 위한 논리적인 연결
- 세션 설정, 유지, 종료, 전송 중단시 복구 등
- 동시 송수신 방식(duplex), 반이중 방식(half-duplex), 전이중 방식(Full Duplex)
- TCP/IP 세션을 만들고 없애는 책임
- 표현 계층 (Presentation Layer 6, L6)
- 전송 형식 협상, 데이타의 표현 방식 변환 등
- MIME 인코딩이나 암호화 등의 동작
- 데이터 종류 구분(해당 데이터가 TEXT인지, 그림인지, GIF인지 JPG인지의 구분)
- 응용 계층 (Application Layer 7, L7)
- 화일 전송, 접근 및 관리 및 문서, 메세지 교환 등
- 최종 목적지로서 HTTP, FTP, SMTP, POP3, IMAP, Telnet 등과 같은 프로토콜
- 일반적인 응용 서비스를 수행
- 물리 계층 (Physical Layer, L1)