일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 동적계획법
- OS
- Direct12
- 컨디션 변수
- 알고리즘
- 파일시스템 구현
- codility
- 그리디알고리즘
- 그리디 알고리즘
- 스케줄링
- 렌더링 파이프라인
- 다이나믹프로그래밍
- 프로그래머스
- 멀티쓰레드
- 다이나믹 프로그래밍
- 운영체제
- 타입 객체
- 자료구조
- 백준
- directx
- 락
- I/O장치
- 영속성
- DirectX12
- 쓰레드
- 디자인패턴
- 멀티프로세서
- DirectX 12
- 병행성 관련 오류
- 병행성
- Today
- Total
기록공간
[서버 가이드북] 2. 네트워크 기초 지식 본문
네트워크 기술 이해하기
일반적으로 말하는 LAN은 크게 LAN 케이블을 이용하여 데이터를 전송하는 '유선 LAN'과 전파를 이용하여 데이터를 전송하는 '무선 LAN'으로 나눌 수 있다. 이 중 서버를 연결할 때는 유선 LAN을 사용하는 것이 기본이다. 왜냐하면 아무리 고속의 무선 LAN이라 할지라도 속도나 품질 면에서 유선 LAN을 따라오려면 아직 멀었기 때문이다. 무선 LAN은 아직까지는 클라이언트측만을 위한 것이다.
OSI 참조 모델과 프로토콜
네트워크를 학습할 때 가장 먼저 이해해야 하는 개념이 'OSI 참조 모델'이다. OSI(Open System Interconnection) 참조 모델은 국제표준화기구(ISO)가 컴퓨터의 통신 기능을 계층 구조로 나눠서 정리한 모델로, 쉽게 말하면 '통신할 때의 규칙의 모음' 과 같은 것이다. 네트워크에서는 이러한 규칙을 '프로토콜'이라고 부른다. 예를 들면 우리가 웹 사이트를 볼때 URL 앞에 http를 입력할 것이다. 여기서 'http'가 프로토콜에 해당한다. HTTP는 Hyper Text Transfer Protocol의 약자로, 웹 서버와 웹 클라이언트에서 데이터를 송수신 할때 사용하는 통신 프로토콜이다.
OSI 참조 모델에서는 프로토콜을 (물리 계층[1], 데이터링크 계층[2], 네트워크 계층[3], 전송 계층[4], 세션 계층[5], 표현 계층[6], 응용 계층[7]) 총 7계층으로 분류한다. 각각의 계층은 전혀 다른 역할을 하고 가지고 있으며 따로따로 작동하도록 되어 있다. 이를 통해 계층들이 서로 영향을 받지 않으며 계층별로 분리된 트러블 슈팅을 할 수 있다.
OSI 참조 모델은 많은 프로토콜로 구성되어 있지만 실제 네트워크에서 사용하는 프로토콜을 극히 일부로, 상당히 한정되어 있다. 제 1, 2 계층에서는 '이더넷', 제 3계층은 'IP', 'ICMP', 'ARP', 제 4계층은 'TCP', 'UDP', 그리고 제 5계층부터 제 7계층은 '애플리케이션 프로토콜'을 사용한다.
프로토콜의 역할
프로토콜이 가지고 있는 역할 중 가장 중요한 것은 '캡슐화' 와 '캡슐 해제화'이다. 네트워크 통신에서는 OSI 참조 모델의 계층을 넘어설 때마다 데이터를 캡슐에 넣고 꺼낸다. 캡슐화와 캡슐 해제화는 애플리케이션 데이터를 보내는 서버와 그것을 받는 클라이언트를 예로 생각하면 쉽게 이해할 수 있다.
위의 그림을 보면 서버에서 실행하는 처리가 캡슐화이다. 서버는 상위 계층에서부터 하위 계층으로 캡슐화 처리를 하여 전송용 데이터를 만들어 간다. 서버는 가공한 서버 애플리케이션 데이터를 전송 계층에 전달한다. 전송 계층에서는 이 데이터를 TCP/UDP 세그먼트에 넣어 네트워크 계층으로 전달한다. 네트워크 계층은 받은 세크먼트를 IP 패킷에 넣어 데이터링크 계층으로 전달한다. 데이터링크 계층은 패킷을 이더넷 프레임에 넣어 물리 계층으로 전달한다. 물리 계층에서는 받은 프레임을 신호로 보내기 좋은 비트로 변환시킨 후 전기나 광 신호로 만들어 보낸다.
이와 반대로 클라이언트에서 실행하는 처리가 캡슐 해제화이다. 클라이언트는 하위 계층에서부터 상위 계층으로 캡슐 해제화 처리를 하여 원래의 애플리케이션 데이터로 되돌려 간다. 물리 계층에서 신호를 받으면 비트로 변환한 후 프레임을 만들어 데이터링크 계층으로 전달한다. 데이터링크 계층은 프레임에서 패킷을 꺼내 네트워크 계층으로 전달한다. 네트워크 계층은 패킷에서 세그먼트를 꺼내 전송 계층으로 전달한다. 전송 계층은 세그먼트에서 데이터를 꺼내 클라이언트 애플리케이션에게 전달한다.
이더넷과 MAC 주소
제 1, 2 계층에서 필수불가결한 규격이 '이더넷'이다. 유선 네트워크의 거의 대부분은 이더넷을 사용하고 있다. 이너넷은 네트워크 계층으로부터 받은 패킷에 프레임의 처음을 나타내는 '프리앰블(preamble)'과 목적지와 출발지를 나타내는 '헤더', 비트 오류 체크에 사용하는 'FCS(Frame Check Sequence)'를 추가하여 프레임을 만든다.
이더넷은 'MAC 주소'라는 48비트로 된 식별자를 사용하여 컴퓨터를 식별한다.
a8:66:7f:04:00:80
00-50-56-c0-00-01
MAC 주소는 위와 같이 8비트마다 하이픈이나 콜론으로 구분하여 16진수로 표기하는데, 상위 24비트와 하위 24비트가 각각 다른 뜻을 가진다. 상위 24비트는 미국전기전자학회가 제조업체별로 할당한 코드이다. 이를 OUI(Organizationally Unique Identifier)라고 하는데, 이 부분을 보면 제조업체를 알 수 있다. 하위 24비트는 제조업체에서 기기별로 고유한 값으로 할당한 코드이다. 이런 구조로 이루어져 있기에, 각 기기에 할당되는 MAC 주소는 전 세계에서 하나밖에 없는 고유한 값이 될 수 있다.
스위칭
이더넷은 '스위치'라는 네트워크 기기를 중심으로 하여 컴퓨터를 배치해 가는 '스타형 토폴로지' 연결 형태를 채택하고 있다.
유선 네트워크의 경우 컴퓨터는 LAN 케이블을 경유해 스위치에 연결되어 있다.
스위치는 프레임(제 2계층 데이터)이 들어온 'LAN 포트 번호'와 그 프레임의 '출발지 MAC 주소'를 테이블(대응표)로 만들어 일정 기간 동안 기억해 둔다. 이를통해 불필요한 프레임 전송을 막고 이더넷 네트워크의 통신 효율을 향상시킨다. 스위치가 수행하는 프레임 전송을 '스위칭'이라고 하며, 스위칭에서 사용하는 LAN 포트 번호와 출발지 MAC 주소 테이블을 'MAC 주소 테이블' 이라고 한다. 스위치는 다음과 같은 순서로 테이블을 만들어 필요한 포트에게만 프레임을 전송하도록 하고 있다.
1. 프레임을 받은 스위치는 프레임의 LAN 포트 번호와 출발지 MAC 주소를 테이블에 기록
2. 목적지 MAC 주소 정보가 테이블에 있으면 그 정보를 바탕으로 프레임을 전송, 없으면 모든 포트에게 프레임의 복사본을 송신하는데, 이때 해당되는 컴퓨터만 프레임을 수취하고 그 외의 컴퓨터는 프레임을 파기.
3. 그 후는 프레임이 들어올 때마다 MAC 주소 테이블의 정보를 갱신. 더 이상 사용하지 않는 정보는 일정 시간이 경과하면 삭제
IP와 IP 주소
제 3계층에서 가장 중요한 프로토콜은 'IP(Internet Protocol)'이다. 오늘날의 네트워크는 거의 대부분 IP를 사용한다.
IP는 제 4계층(전송 계층)으로부터 받은 세그먼트에 'IP 헤더'를 붙여 패킷으로 만든다. IP 헤더는 패킷의 목적지를 나타내는 택배 전표와 같다. 패킷은 바다 밑부터 산속까지 전 세계의 모든 네트워크를 경유하기 때문에 IP 헤더는 그러한 환경 차이를 흡수할 수 있도록 많은 필드로 구성되어 있다.
IP는 'IP 주소'라는 32비트로 된 식별번호를 사용하여 컴퓨터를 식별한다. IP 주소는 '192.168.1.1' 같이 8비트마다 점으로 구분하여 10진수로 표기하는데, 점으로 구분된 그룹을 '옥텟'이라고 하며, 맨 처음부터 제1 옥텟, 제 2 옥텟 등과 같이 부른다.
IP 주소는 단독으로 사용하는 것이 아닌 '서브넷 마스크'라는 32비트로 된 값과 세트로 사용한다. IP 주소는 서브넷 마스크로 분할된 '네트워크부'와 '호스트부'로 구성되어 있다. 네트워크부는 네트워크 자체를 나타내고 있으며, 호스트부는 해당 네트워크에 연결되어 있는 단말을 나타내고 있다. 서브넷 마스크는 이 둘을 구분하는 표식과 같은 것으로, '1'이 네트워크부, '0'이 호스트부를 나타내고 있다.
서브넷 마스크는 '10진수 표기'와 CIDR 표기'라는 2종류의 표기 방법이 있다. 10진수 표기에서는 IP 주소처럼 32비트를 7비트씩 4개의 그룹으로 나눈 후 각각을 10진수로 변환하여 점으로 구분하여 표기한다. CIDR 표기에서는 IP 주소 다음에 슬래시와 '1'의 개수를 추가하여 표기한다.
예를 들어 '172.16.1.1'이라는 IP 주소에 '255.255.0.0'이라는 서브넷 마스크가 설정되어 있다면 '172.16.1.1/16'으로 표기하는데 이로써 '172.16'이라는 네트워크의 '1.1' 이라는 호스트라는 것을 알 수 있다.
여러 가지 IP 주소
IP 주소는 약 2의 32승(43억개) 개까지 존재할 수 있다. 하지만 어떤 주소나 마음대로 사용해도 좋은가 하면 그렇지 않다. 사용 용도나 사용 장소에 따라 어디부터 어디까지를 어떻게 사용해야 하는지가 정해져 있다.
IP 주소는 사용 용도에 따라 클래스 A부터 클래스 E까지 5개의 주소 클래스로 나눌 수 있다. 그 중에서 일반적으로 사용하는 것은 클래스 A부터 클래스 C까지로, 컴퓨터에 설정하여 일대일 통신(유니캐스트)에서 사용한다. 이 3개의 클래스 차이는 네트워크 규격의 차이이다. 클래스 A, B, C 순으로 규격이 작아진다. 클래스 D, E는 특수한 용도로 사용하므로 일반적으로는 사용하지 않는다. 주소 클래스는 32비트 중 맨 처음 1~4비트로 분류한다. 이 비트에 따라서 사용할 수 있는 IP 주소의 범위가 필연적으로 정해져 있다.
IP 주소는 사용 장소에 따라 '글로벌 IP 주소'와 '프라이빗 IP 주소'로 분류할 수도 있다.
글로벌 IP 주소는 인터넷에서 고유한 IP 주소이다. ICANN(Internet Corporation for Assigned Names and Numbers) 라는 민간 비영리 법인이 네트워크에서 고유한 값이 되도록 관리하고 있다.
프라이빗 IP 주소는 조직이나 가정 등의 LAN에서 자유롭게 할당해도 좋은 IP 주소이다. 클래스에 따라 다음과 같이 정해져 있다.
라우팅
이더넷으로 만든 네트워크와 네트워크를 연결할 때 사용하는 네트워크 기기가 '라우터'이다. 라우터는 미리 만들어 놓은 '라우팅 테이블'을 이용하여 패킷을 전송한다. 라우터가 수행하는 패킷 전송을 라우팅(경로 설정) 이라고 한다. 라우팅 테이블은 '목적지 네트워크'와 목적지 네트워크로 가기 위해 보내야 할 곳의 IP 주소(넥스트 홉)으로 구성되어 있다. 라우터는 패킷을 받으면 패킷의 목적지 IP 주소와 라우팅 테이블 목적지 네트워크를 대조한다. 목적지 IP 주소가 목적지 네트워크에 있으면 넥스트 홉의 IP 주소로 패킷을 전송하고, 없는 경우에는 패킷을 파기한다.
라우팅 테이블을 만드는 방법은 '정적 라우팅'과 '동적 라우팅'이 있다.
정적 라우팅은 수동으로 라우팅 테이블을 만드는 방법으로, 목적지 네트워크와 넥스트 홉을 하나하나 설정한다. 정적 라우팅은 모든 라우터에 대해 설정이 필요하지만 알기 쉽우며 관리하기 쉽기 때문에 소규모 네트워크 환경에서 주로 사용한다.
동적 라우팅은 인접하는 라우터들이 라우팅 정보를 서로 교환하여 라우팅 테이블을 자동으로 만드는 방법이다. 라우팅 정보를 교환하기 위한 프로토콜을 '라우팅 프로토콜'이라고 한다. 동적 라우팅은 동작을 이해하기가 좀 어렵지만 네트워크 환경의 변화에 대응하기도 쉬우며 장애 내구성을 향상시킬 수 있기 때문에 중간 규모부터 대규모 네트워크 환경에서 주로 사용한다.
ARP
MAC 주소(물리)와 IP 주소(논리)는 서로 협조하면서 사용해야 한다. 이 두 주소를 협조하면서 이용할 수 있도록 하는 물리와 논리의 다리 역할을 하고 있는 것이 'ARP(Address Resolution Protocol, 주소 결정 프로토콜)'이다.
ARP가 하는 일은 IP 주소와 MAC 주소를 대응 시키는 것이다. 컴퓨터는 제 3계층으로부터 받은 패킷을 프레임으로 만들어 케이블로 흘려보내야 한다. 하지만 받은 패킷만으로는 프레임을 만들기 위한 정보가 부족하다. 왜냐하면 출발지 MAC 주소는 알 수 있지만 목적지 MAC 주소는 모르기 때문이다. 이 때 ARP를 이용해 IP 주소로부터 MAC 주소를 구한다.
데이터를 송신하는 컴퓨터가 제 3계층으로부터 패킷을 받으면 패킷의 목적지 IP 주소를 본다. 그것이 동일한 네트워크에 있는 컴퓨터의 것이라면 그 IP 주소를 ARP에서 조회(ARP Request)하여 응답 결과(ARP Reply)를 'ARP 테이블'에 등록시킨 후 그 정보를 바탕으로 프레임을 만든다. 한편 다른 네트워크에 있는 컴퓨터의 것이라면 기본 게이트웨이의 MAC 주소를 ARP에서 조회하여 똑같은 처리를 수행한다. 기본 게이트웨이란 자신 이외의 네트워크로 갈 때 사용하는 출구가 되는 IP 주소로, 방화벽이나 라우터의 IP 주소가 기본 게이트웨이가 되는 경우가 많다. 자신이 모르는 네트워크의 목적지 IP 주소로 가는 패킷인 경우 일단 기본 게이트웨이의 MAC 주소로 송신하는 것이다.
TCP와 UDP
제 4계층(네트워크 계층)은 통신 제어와 서비스의 식별을 수행하는 계층이다. 제 4계층은 애플리케이션이 요구하는 통신 요건을 '신뢰성'과 '신속성'으로 분류하여 서로 다른 프로토콜을 마련하고 있다.
데이터를 중요하게 생각해 확실하게 주고받고 싶을 경우 'TCP(Transmission Control Protocol)'를 사용한다. TCP는 통신할 컴퓨터끼리 서로 확인 메시지를 보내면서 데이터를 주고받음을 통해 통신의 신뢰성을 높인다. 보통 웹이나 메일, 파일 공유 등과 같이 데이터를 누락시키고 싶지 않은 서비스는 TCP를 사용하고 있다.
그에 반해 데이터 신뢰성을 제쳐두고 무조건 빠르게 보내고 싶을 때는 'UDP(User Datagram Protocol)'를 사용한다. UDP는 데이터를 보내면 그것으로 끝이므로 신뢰성은 없지만 확인 절차를 생략할 수 있기 때문에 빠른 통신이 가능하다. VoIP(Voice over IP)나 실시간 방송 등 무엇보다 속도가 중요한 서비스는 UDP를 사용하고 있다.
TCP와 UPD는 '포트 번호'라는 숫자를 이용해 컴퓨터 안의 어떤 애플리케이션에게 데이터를 전달하면 될지를 식별한다. 포트 번호는 0 ~ 65535(2바이트) 까지의 숫자로 되어 있으며, 범위에 따라 용도가 정해져 있다.
0 ~ 1023은 '잘 알려진 포트(well-known port)' 라고 해서 웹 서버나 메일 서버 등과 같이 일반적인 서버 소프트웨어가 클라이언트의 서비스 요청을 대기할 때 사용한다. '1024 ~ 49151'은 '등록된 포트(registered port)'로 , 제조업체의 독자적인 서버 소프트웨어가 클라이언트의 서비스 요청을 대기할 때 사용한다.
나머지 49152 ~ 65535는 '동적 포트(dynamic port)'로, 서버가 클라이언트를 식별하기 위해 사용한다.
포트 번호는 다음 그림과 같은 흐름으로 사용된다.
NAT와 NAPT
기업이나 가정의 LAN에서 사용하는 프라이빗 IP 주소를 인터넷에서 사용하는 글로벌 IP 주소로 변환하는 기술을 'NAT(Network Address Traslation)'와 'NAPT(Network Address Port Translation)'이라고 부른다. NAT와 NAPT의 처리는 라우터나 방화벽에서 수행한다.
NAT는 프라이빗 IP 주소와 글로벌 IP 주소를 일대일로 연결하여 변환한다. NAT는 LAN에서 인터넷으로 연결할 때에는 출발지 IP 주소를 변환한다. 반대로 인터넷에서 LAN으로 연결할 때는 목적지 IP 주소를 변환한다.
NAPT는 프라이빗 IP 주소와 글로벌 IP 주소를 n대1 로 연결하여 변환한다. NAPT는 LAN에서 인터넷에 액세스할 때 출발지 IP 주소뿐만 아니라 출발지 포트 번호도 같이 변환함으로써 n대1 변환을 구현하고 있다. 여기서는 LAN에 있는 클라이언트가 인터넷에 있는 서버와 통신할 때를 예로 들어 NAPT의 처리를 구체적으로 설명하겠다.
1. 라우터는 클라이언트로부터 받은 패킷의 출발지 IP 주소를 프라이빗에서 글로벌로 변환한다. 이때 출발지 포트 번호도 변환하여 그 변환 정보를 기억한 후 서버에게 전송한다.
2. 서버는 클라이언트로 부터 패킷을 받아 그 처리 결과를 클라이언트에게 되돌려 준다.
3. 라우터는 받은 패킷의 목적지 IP 주소와 목적지 포트 번호를 미리 만들어 놓은 변환 정보를 바탕으로 원래대로 되돌리고 클라이언트에게 반환한다.
본문과 그림은 '그림 한 장으로 보는 서버 가이드북' 을 참고하였습니다.
'Network' 카테고리의 다른 글
서버 이중화란? (2) | 2021.09.29 |
---|---|
WebRTC란? (0) | 2021.09.03 |
[서버 가이드북] 1. 서버(Server) 란? (1) | 2021.07.21 |
[TCP] 3-way-handshake & 4-way-handshake (0) | 2021.07.14 |
웹 애플리케이션 (0) | 2020.11.21 |