2020. 1. 11. 22:37 Docker & Kubernetes

Dockerfile

 

Dockerfile
 
 
  1. 어플리케이션을 컨테이너 화할 때 아래의 과정을 거친다.
  • 마스터 이미지(ubuntu, centos 등) 컨테이너 생성
  • 어플리케이션 환경 구성 및 소스코드 탑재
  • 컨테이너 이미지로 commit
 
위의 과정을 Dockerfile을 만들고 build 명령어를 통해 한번에 할 수 있음.
Dockfike :
  • 최종 이미지 생성을 위한 컨테이너에 설치 할 패키지, 소스 코드, 실행 할 명령어와 셸 스크립트 등을 하나의 파일에 기록 해둔 것
  • 과정 단순화 및 깃과 같은 개발 도구를 통해 어플리케이션 빌드 및 배포를 자동화 가능
  • 이미지를 생성하는 방법을 기록해 놓은 Dockerfile 을 배포 할 수 있음
  • 이미지 설치 자동화 및 배포!!
 
  1. Dockerfile 작성
# mkdir dockerfile
# cd dockerfile
# vi Dockerfile
docker 엔진은 Dockerfile을 읽을 때 현재 디렉토리에서 찾는다
Dockerfile이 있는 디렉토리는 비어 있어야 한다. Dockerfile 만 존재 -> 이미지 빌드 시 컨텍스트(Context) 때문
 
 
Dockerfile 기초 명령어
  • 한 줄에 하나의 명령
  • 명령어 명시한 뒤에 옵션
  • 명령어는 소문자도 상관없으나 일반적으로 대문자로 표기
FROM
기본 이미지 지정, local 에 없을 경우 자동으로 pull(다운)
MAINTAINER
개발자 정보, 이메일 등, docker 1.13.0 버전 이후 사용 안함
LABEL
이미지에 메타데이타 추가, 메타데이타는 "키:값" 형태로 지정
RUN
이미지 생성을 위해 컨테이너 내부에서 실행되는 명령
Dockerfile 빌드 중에는 입력 불가능 -> 옵션도 같이 설정 (apache2 -y)
RUN ["실행가능파일","명령 줄 인자 1", "명령 줄 인자 2, …] 형태로 사용가능, 이는 JSON 배열의 입력 형식을 따르기 때문에 JSON 형식과 일치 해야함.
ADD
파일을 이미지에 추가
추가 파일은 Dockerfile이 위치한 디렉토리인 컨텍스트(Context)에서 가져옴(같은 위치)
["추가할 파일 이름", ….. "컨테이너에 추가될 위치"]
여러 개 파일 추가 가능
WORKDIR
명령어를 실행하는 디렉토리를 나타냄
배시 셸의 cd 명령어와 같음
EXPOSE
Dockerfile의 빌드로 생성된 이미지에서 노출 할 포트 설정
호스트 포트와 바인딩 된 것이 아닌 사용 할 것임을 나타내는 것
컨테이너를 생성하는 run 명령어에서 모든 노출된 컨테이너의 포트를 호스트에 퍼블리시하는 -P 플래그와 함께 사용된다
CMD
컨테이너가 시작될 때 마다 실행 할 명령어 설정(apache web server 자동 실행)
Dockerfile 에서는 한번만 실행 됨
 
 
Dockerfile 빌드
# docker build -t mybuild:0.0 ./
-t : 생성될 이미지 이름 지정, 지정 안하면 16진수형태로
맨뒤 ./ : Dockerfile 이 저장된 경로, 외부 URL 로 부터 가지고 올 수 도 있음.
 
컨텍스트에 대한 정보는 이미지 빌드시 맨 위에 출력되는 내용
 
Dockerfile 로 생성한 이미지로 컨테이너 생성
# docker run -d -P --name myserver mybuild:0.0
-P : 이미지에 설정된 EXPOSE 의 모든 포트를 호스트에 연결하도록 설정, 연결 시 호스트에서 사용가능 한 포트를 차례로 연결하므로 확인이 필요 ( # docker port myserver )
 
정상적으로 생성되고 실행 되는지 확인-> web 접속
 
컨텍스트는 단순 파일 뿐 아니라 하위 디렉토리도 전부 포함하게 되므로 빌드에 불필요한 파일이 포함되지 않도록 컨텍스트 파일만 존재 하는 것이 좋음 => 이것을 방지 하기 위해서 .dockerignore 라는 파일을 작성하여 명시된 파일을 컨텍스트에서 제외(.gitignore 유사)
.dockerignore 파일은 Dockerfile 파일과 같은 위치에
*.html :  html 확장 자를  가지는 모든 파일 제외
*/*.html : 하위 모든 디렉토리 html 확장 자를 가지는 모든 파일 제외
test.html? : ? 자리에 들어 오는 모든 파일 제외
!test.html : ! 파일은 포함
 
  1. Doxckerfile 을 이용한 컨테이너 생성과 커밋
Dockerfile 에서 명령어 한 줄(ADD, RUN 등)이 실행될 때마다 이전 Step에서 생성된 이미지에 의해 새로운 컨테이너가 생성되며, Dockerfile 에 적힌 명령어를 수행하고 다시 새로운 이미지 레이어로 저장된다.
 
 
따라서 이미지의 빌드가 완료되면 Dockerfile의 명령어 줄 수 만큼의 레이어가 존재하게 되며, 중간에 컨테이너도 같은 수만 큼 생성되고 삭제된다.
Removing intermediate containner 10kjhds4834rjf => 임시로 생성된 컨테이너 삭제
삭제되기 전에 출력되는 ID는 커밋된 이미지 레이어를 나타냄
 
캐시를 이용한 이미지 빌드
Dockerfile2 이름으로 아래 내용을 저장
 
Dockerfile -f(또는 --file) 로 지정하여 빌드 할 수 있음.
Dockerfile2 를 지정하여 빌드 한다.
using cache 25b7d4634324 . RUN apt-get update Step 4/4 --> using cache --> 44acB4eaBa0d Successful lg built 44acB4eaBa0d Successful lg tagged mgcache:0.0 -f Dockerf ilea -t mgcache:0.0 . '/>
 
출력 내용 중 Using cache 는 이전에 빌드 했던 Dockerfile에 같은 내용이 있으면 새로 빌드 하지 않고 같은 명령어 줄까지 이전에 사용한 이미지 레이어를 활용하여 생성함
 
이미지 빌드 오류 시 :
마지막으로 생성된 임시 컨테이너가 삭제되지 않고 남는다.
지정 이미지 이름이 아닌 <none>:<none> 으로 생성
삭제는 rmi 명령어 이용 => # docker rmi (이미지 ID)
 
캐시 기능을 사용하지 않고 빌드 할 경우에는 --no-cache 옵션을 추가하여 사용하면 기존 이미지를 사용하지 않고 새롭게 이미지를 빌드한다.
캐시로 사용할 이미지를 직접 지정할 수 있습니다. --cache-from  옵션을 사용
# docker build --cache-from nginx my_nginx:0.0
 
 
  1. 기타 Dcokerfile 명령어
ENV
Dockerfile 에서 사용될 환경 변수 지정
run 명령에서 -e 옵션을 사용해 같은 이름의 환경변수를 사용하면 기존 값을 덮어 슨다.
# vi Dockerfile
 
FROM Ubuntu:14.04
ENV test /home
WORKDIR $test
RUN touch $test/mytochfile
배시 셸 쳐 럼 ${env_name:-value}는 env_name 의 환경 변수의 값이 설정 되어있지 않으면 value 사용하고 ${env_name:+value} 는 env_name 의 환경 변수의 값이 설정 되어있으면 value 사용하고, 설정 되어 있지 않으면 빈 문자열로 적용합니다.
# vi Dockerfile
 
FROM Ubuntu:14.04
ENV my_env my_value
RUN echo ${my_env:-value} / ${my_env:+alue} / ${my_env2:-value} / ${my_env2:+value}
 
VOLUME
빌드된 이미지로 컨테이너를 생성했을 때 호스트와 공유할 컨테이너 내부의 디렉토리를 설정
JSON 배열 형식으로 여러개 사용 가능
# vi Dockerfile
 
FROM Ubuntu:14.04
RUN mkdir /home/volume
RUN echo test >> /home/volume/testfile
VOLUME /home/volume
 
ARG
빌드 명령을 실행 할 때 추가로 입력 받아 Dockerfile 내에서 사용될 변수의 값을 적용
# vi Dockerfile
 
FROM Ubuntu:14.04
ARG my_arg
ARG my_arg_2=value2
RUN touch ${my_arg}/mytouch
 
입력은 --build-arg 옵션을 이용
# docker build --build-arg my_arg=/home -t myarg:0.0
 
USER
컨테이너 내에서 사용될 사용자 계정의 이름이나 UUID를 설정하면 그 아래 명령어는 해당 사용자 권한으로 실행
RUN 으로 사용자의 그룹과 계정을 생성한 뒤에 사용
RUN groupadd -r author && uderadd -r -g quthor demo
USER demo
...
 
ONBUILD
ONDUILD, FROM, MAINTAUNER를 제외한 RUN, ADD 등 이미지가 빌드 될 때 수행되어야 하는 각종 Dockerfile 의 명령어를 나중에 빌드 될 이미지를 위해 미리 저장해 놓는 것.
부모 이미지의 자식 이미지에만 적용되며, 자식 이미지는 ONBUILD  속성을 상속 받지 않음
# vi Dockerfile
 
FROM Ubuntu:14.04
RUN echo "this is onbuild test!"
ONBUILD RUN echo "onbuild!" >> /onbuild_file
이미지 빌드하거나 활용할 소스코드를 ONBUILD ADD 로 추가해 좀 더 깔끔하게 Dockerfile 을 사용 할 수 있슴.
# vi Dockerfile
 
FROM Ubuntu:14.04
RUN mkrid -p /usr/src/app
WORKDIR /usr/src/app
ONBUILD ADD . /usr/src/app
ONBUILD RUN mvn install
 
STOPSIGNAL
컨테이너가 정지될 때 사용될 시스템 콜의 종류 지정. 기본 값은 SIGTERM
# vi Dockerfile
 
FROM Ubuntu:14.04
STOPSIGNAL SIGKILL
 
 
HEALTHCHECK
이미지로부터 생성된 컨테이너에서 동작하는 어플리케이션의 상태를 체크하도록 설정
예시 :
1분마다 curl -f 옵션 값 실행해 nginx 어플리케이션의 상태를 체크하며, 3초 이사이 소요되면 이를 한 번의 실패로 간주하고, 3번이상 타임아웃이 발생하면 컨테이너는 unhealthy 상태로 설정
# vi Dockerfile
 
FROM nginx
RUN apt-get update -y && apt-get install curl -y
HEALTHCHECK --interval=1m --timeout=3s --retries=3 CMD curl -f http://localhost || exit 1
--interval : 컨테이너 상태를 체크하는 주기
CMD curl -f … : 상태를 체크하는 명령
--timeout  : 설정 시간을 초과하면 상태 초과 실패
--retries : 지정 횟수 만큼 명령 반복
 
설정 후에 이미지를 생성 하면 "docker ps" 를 실행 하면 해당 컨테이너의 STATUS 정보가 추가된 것을 확인 할 수 있음.
상태 체크에 대한 로그는 컨테이너의 정보에 저장
 
SHELL
사용하고자 하는 셸을 설정
# vi Dockerfile
 
FROM node
RUN echo "hello, world"
SHELL ["/usr/local/bin/node"] => 사용 할 셸 지정
RUN -v                             => 빌드 시 셸 버전 출력
리눅스 셀 : /bin/sh -c echo hello, world
윈도우 셸 : cmd /S /C echo hello, world
 
ADD, COPY
로컬 디랙토리에서 읽어 들인 컨텍스트로부터 이미지에 파일을 복사하는 역할.
ADD : 로컬 파일 뿐 아니라 외부 URL 및 tar 파일에서도 파일을 추가할 수 있음. (비 권장: 빌드 시 추가 파일이 명확하지 않음)
COPY : 로컬 파일 만 추가 가능.(권장 :  빌드 시 추가될 파일이 명확 함)
# vi Dockerfile
 
FROM ubuntu:14.04
copy test.html /home/
copy ["test.html", "/home"]
 
ADD test.tar /home => 자동으로 풀어 준다.
 
ENTRYPOINT, CMD
CMD : 컨테이너가 시작 될 때 실행 할 명령어 설정
ENTRYPOINT :
  • CMD 와 유사하게 컨테이너 시작 될 때 실행 할 명령어 설정
  • 커맨드를 인자로 받아 사용 할 수 있는 스크립트의 역할 가능
entrypoint 설정 예시
# docker run -it --entrypoint="echo" --name demo ubuntu:14.04 /bin/bash
 
출력으로 /bin/bash 출력된다.
entrypoint 가 설정되지 않으면 cmd에 설정된 명령어 그대로 사용되지만, entrypoint 가 설정 된 경우에는 층 는 단지 entrypoint 에 대한 인자의 기능을 함.
컨테이너는 CMD 와 entrypoint 중 하나는 설정되어야 한다. 안 그럼 에러
 
스크립트 파일을 entrypoint의 인자로 사용해 컨테이너가 시작될 때마다 해당 스크립트 파일을 실행 하도록 설정 가능
이미지 내에 스크립트 파일이 존재해야 함.
절차 :
  • 설정 및 실행에 대한 스크립트 파일 생성
  • ADD 또는 COPY 로 스크립트를 이미지 내에 포함
  • ENTRYPOINT를 작성한 스크립트로 지정
  • 이미지 빌드
  • 스크립트에서 필요한 인자는 Docker run  명령어에서 cmd 로 entrypoint의 스크립트에 전달
 
예시 :
# vi Dockerfile
 
FROM ubuntu:14.04
RUN apt-get update -y && apt-get install apache2 -y
ADD entrypoint.sh /entrypoint.sh
RUN chmod+x /entrypoint.sh
ENTRYPOINT ["/bin/bash", "/entrypoint.sh"]
이미지 빌드 후 컨테이너가 시작되면서 entrypoint.sh 파일을 실행.
 
CMD, ENTRYPOINT 형식  : 실제 컨테이너에서 /bin/sh -c /entrypoint.sh /bin/sh -c echo test 실행
CMD echo test
# -> /bin/sh -c echo test
 
ENTRYPOINT /entrypoint.sh
# -> /bin/sh -c /entrypoint.sh
 
JOSN 형식 : 실제 컨테이너에서 /bin/bash /entrypoint.sh echo test 실행
CMD ["echo",  "test"]
# -> echo test
 
ENTRYPOINT ["/bin/bash", "/entrypoint.sh"]
# -> /bin/bash /entrypoint.sh
 
 
  1. 도커 허브에서 Dockerfile 빌드
도커 허브에서 이미지를 자동으로 빌드(Automated Build)하도록 설정 할 때에도 사용 할 수 있음.
단, 자동으로 빌드된 도커 허브의 저장소는 기존 저장소와 별개로 생성해야 함.
 
연동 방법 :
  • Public and private : push 되면 도커 허브가 해당 브랜치로부터 소스코드를 받아와 이미지를 빌드
웹 훅과 디프로이 키를 설정 필요, 깃 허브 저장소 읽기/쓰기 권한 필요
  • Limited Access :  일기 권한 만
push 후 자동으로 빌드 안됨 로그인 후 직접 빌드 해야 함
 
Dockerfile은 깃허브에 push 하는 소스 코드에 포함되어야 함.
도커 허브 저장소를 최초로 생성했을 때 자동으로 이미지를 빌드하지 않으므로 한 번 이상 깃 허브의 저장소에 push 해야 이미지가 생성됨.
 
깃하브 저장소 사용방법 : https://guides.github.com/activities/hello-world
 
  1. Dockerfile로 빌드 시 주의 점
여러 개의 RUN 명령어를 하나로 줄 일 수 있다면 이미지 레이어의 개수도 또 한 하나로 줄어든다.
왜 명령마다 하나의 레이어가 생성되므로 하나로 줄이면 레이어도 하나로 된다.
# vi Dockerfile
 
FROM ubuntu:14.04
RUN mkdir /test
RUN fallocaye -l 100m /test/dumy
RUN rm /test/dumy
 아래 처럼 한 줄로 변경
# vi Dockerfile
 
FROM ubuntu:14.04
RUN mkdir /test && fallocaye -l 100m /test/dumy && rm /test/dumy
 
docker export, import 명령어를 사용해 컨테이너를 이미지를 만듦으로써 이미지의 크기를 줄일 수 도 있음.
 
Posted by jgpaper
  1. 라우터 개념
  1. 인터넷을 사용하기 위해서, 서로 다른 네트워크간 통신하기 위해서 그리고 브로드캐스트 영역을 나눠주기 위해서 꼭 필요 합니다.
  2. 지능을 가진 경로 배정기라고 말 할 수 있습니다.
  3. 자신이 가야 할 길을 자동으로 찾아서 갈 수 있는 능력을 가진 것을 말합니다.
  4. 다음 두 가지 일을 합니다.
    1. Path Determination(경로 결정) : 데이터 패킷이 목적지까지 갈 수 있는 길을 검사하고 어떤 길로 가는 것이 가장 적절한지를 결정합니다. 라우팅 알고리즘(라우팅 프로토콜)을 사용 됩니다.
    2. Switching(스위칭) : 결정된 경로로 데이터 패킷을 보내는 것 입니다.
  1. 라우팅 알고리즘
    1. 라우팅 테이블을 만들어서 관리합니다. 라우팅 테이블에는 어디로 갈려면 어떻게 가라는 지도 정보가 들어 있습니다.
  1. 라우터의 특성상 PC처럼 CPU도 가지고 있고, 메모리도 가지고 있고, 또 인터페이스도 가지고 있습니다.
  2. 라우터는 소프트웨어와 하드웨어로 구성됩니다. 라우터에 들어가는 소프트웨어를 IOS(Internetwork Operating System)이라 고 합니다.
 

 
  1. 라우팅 프로토콜/라우티드 프로토콜
  1. 라우티드 프로토콜(Routed Protocol) : 말그대로 라우팅을 당하는 즉, 라우터가 라우팅을 해주는 고객을 뜻합니다. TCP/IP, IPX, AppleTalk 등 라우티드 프로토콜에 해당 합니다.
  2. 라우팅 프로토콜(Routing Protocol) : 라우터에 살면서 라우티드 프로토콜들에게 목적지까지 가장 좋은 길을 갈 수 있게 해 주는 역할을 합니다. RIP, IGRP, OSPF, EIGRP 등이 있습니다. 다른 말로 라우팅 알고리즘이라고 합니다.
 
  1. 스태틱 라우팅 프로토콜 / 다이내믹 라우팅 프로토콜
  1. 라우팅 프로토콜은 Static 과 Dynamic 라우팅 프로토콜로 구분 합니다.
  2. Static Routing Protocol
    1. 가장 좋은 경로를 찾아서 일일이 입력해 주는 것입니다.
    2. 라우터 자체에는 부담이 별로 없고, 라우팅 속도도 빨라지고 성능이 좋아지게 됩니다.
    3. 네트워크 대역폭을 절약 할 수 있습니다.
    4. 외부에 자신의 정보를 알리지 않기 때문에 보안에도 강합니다.
    5. 수동으로 입력하고 문제가 발생하면 수동으로 문제를 해결해야 합니다.
  1. Dynamic  Routing Protocol
  1. 라우터가 할 일이 많아서 부담을 준다.
  2. 라우팅 프로토콜을 이용하여 어떤 길이 가장 좋은 길인지 계산을 해야 합니다.
  3. 일정 시간 마다 바뀐 정보를 확인하고 경로를 계속 업데이트 해야 합니다.
  4. RIP, IGRP, OSPF, EIGRP 등이 여기에 속 합니다.  
 
  1. 라우팅 테이블
  1. 라우터는 목적지와 목적지를 가려면 어느 인터페이스로 가야 하는지를 자신의 라우팅 테이블에 가지고 있습니다.
  2. E0 : 인더넷 인터페이스 0번을 나타냅니다.
  3. S0 : 시리얼 인터페이스 0번을 나타냅니다.
  4. T0 : 토큰링 인터페이스 0번을 나타냅니다.
  5. 인터페이스 번호는 0부터 시작 합니다.
 

  1. 라우터가 어떤 경로를 찾을 때 사용 하는 것이고, 이것은 사용하는 라우터의 프로토콜에 따라 달라지며, 또 라우터는 항상 최적의 경로를 찾아 이것을 라우팅 테이블에 유지하고 있습니다. 해당 정보는 RAM에 저장되어 전원이 꺼져도 보관됩니다.
 
  1. AS 및 내/외부용 라우팅 프로토콜
  1. AS(Autonomous System)
    1. 하나의 네트워크 관리자에 의해서 관리되는 라우터들의 집단입니다. 쉽게 말해 한 회사나 기업, 또는 단체의 라우터 집단이라고 할 수 있습니다.
    2. ISP 업체들이 보유 하고 있는 라우터 그룹이 하나의 AS가ㅏ 됩니다.
    3. 라우터들은 AS 내의 라우터들만 알고 있으면 되고 AS외부로 나갈 때는 ASBR(autonomous System Boundary Router)이라는 문지기 라우터를 통해서 나갑니다.
    4. ASBR은 자신의 AS와 인접해 있는 다른 AS에 대한 정보를 가지고 있으며, 들어오는 AS 나 나가는 AS에 대한 정보를 제공 하는 역할을 합니다.
  1. 내/외부용 라우팅 프로토콜
  1. AS 내부에서 사용하는 라우팅 프로토콜 : Interior Routing Protocol 또는 Interior Gateway Protocol(IGP)
  2. AS 외부에서 사용하는 라우팅 프로토콜 : Exterior Routing Protocol 또는 Exterior Gateway Protocol(EGP)
  3. Interior Routing Protocol(IGP) : RIP, IGRP, EOGRP, OSPF 등이 있다.
  4. Exterior Routing Protocol(EGP) : EGP, BGP 등이 있습니다.
 
  1. 라우터 구성 방법
  1. 콘솔 : 기본 설정을 할 때 사용 합니다. 시리얼 포트 사용합니다.
  2. 텔넷 : 라우터의 구성 일부를 변경하고자 할 경우에 사용 합니다. TCP/IP를 이용 합니다.
  3. AUX(Auxiliary) : 텔넷으로 라우터 접근이 불가능하고 콘솔로 연결해서 구성하기에 너무 먼 곳에 있을 경우 모뎀을 연결하여 사용 설정 합니다.
  4. 네트워크 관리 시스템(NMS) : 그래픽 방식의 지원으로 구성 방법 중 가장 쉬운 방법입니다.
  5. TFTP 서버
  1. 서버에서 직접 라우터로 세팅을 해주는 방식이 아닙니다.
  2. 이미 다른 곳에서 만들어 놓은 라우터 구성 파일을 TFTP 서버에 저장해 두었다가 라우터로 다운로드해 주는 방식입니다.
  3. 다운로드에 사용되는 프로토콜이 TFTP(Trivial File Transfer Protocol : 단순형 파일 전송 프로토콜) 입니다.
 
  1. 라우터의 주요 모드
  1. 라우터는 몇가지 모드 화면으로 들어가게 되는데 유저 모드, 프리빌리지드(Privileged) 모드, 구성(Configuration) 모드. 셋업(Setup) 모드, RXBOOT 모드 등이 있습니다.
  2. RXBOOT 모드
    1. 평소에는 사용 할 수 없습니다.
    2. 라우터의 패스워드를 잊어버리거나 라우터 이미지 파일(IOS)에 문제가 생긴 경우에 복구를 위해 사용 합니다.
  1. 셋업(Setup) 모드
    1. 라우터를 처음 구매해서 파워를 켰을 때 또는 라우터 구성 파일이 없는 경우에 부팅 시 자동으로 들어가는 모드 입니다.
  1. 유저 모드
    1. 주로 테스트, 현재 상태를 볼 수 있습니다.
    2. 구성 파일을 볼 수는 있어도 변경은 불가능 합니다.
    3. 유저도므에서 빠져 나오려면 exit 명령어를 사용 합니다.
  1. 프리빌리지드(Privileged) 모드(운영자 모드)
    1. 라우터 운영자 모드입니다.
    2. 유저 모드에서 enable 명령을 사용하여 들어갑니다.
    3. 라우터의 구성을 볼 수 있고 변경이 가능합니다. 모든 권한이 있습니다.
    4. 프리빌리지 모드를 빠져 나오려면 disable 명령을 사용 합니다.
  1. 구성(Configuration) 모드
  1. 라우터의 구성 파일을 변경하는 경우에 사용합니다.
  2. 엔지니어 분들은 꼭 알아야 합니다.
  3. 해당 모드에 들어가기 위해서는 프리빌리지드 모드에서 들어 갑니다.
  4. config terminal 명령을 이용하여 들어 갈 수 있습니다.
  5. 빠져 나올 때는 'Ctrl+Z' 을 이용합니다.
 
  1. 라우터의 내부
  1. 인터페이스
    1. 이더넷 인터페이스 : 허브나 스위치로 연결하는 인터페이스
    2. Serial 인터페이스 : DSU나 CSU와 연결하는 인터페이스
  1. RAM
    1. 라우터 운용 시스템이 있습니다.
    2. 라우터 고유 운영체제 IOS가 올라가 있습니다.
    3. 라우팅 테이블이 있습니다.
    4. 라우터 구성 파일이 있습니다.
    5. ARP 캐시니, 패스트 스위칭에 대한 캐시 등을 가지고 있습니다.
  1. NVRAM(Non Volatile RAM)
    1. 비 활성 메모리 입니다.
    2. 라우터 구성 파일을 백업 합니다.
    3. 라우팅 테이블은 백업 할 필요가 없습니다. 구성에 몇 초 안 걸리기 때문입니다.
  1. Flash 메모리
    1. 라우터 운영 체제인 IOS가 저장 되어 있습니다.
    2. 라우터에 따라서 플래시 메모리를 교체하거나 확장이 가능합니다.
    3. NVRAM에 비해 플래시 메모리 용량이 큽니다.
    4. IOS를 업그레이드 할 때 사용되는 프로토콜이 TFTP입니다.
  1. ROM(롬)
  1. 라우터의 가장 기본적인 내용들이 들어 있습니다.
  2. 파워가 켜지면 어떤 순서로 라우터 스스로의 상태를 점검하고 또 어디서 운영체제(IOS)를 가져다가 메모리에 올릴 것인지 등의 정보를 가지고 있습니다.
  3. PC에서의 CMOS 역할을 합니다.

 
  1. 디스턴트 벡터(Distance Vector)와 링크 스테이트(Link State)
  1. 라우팅 프로토콜 알고리즘의 한 분류입니다.
  2. 디스턴트 벡터(Distance Vector)
  1. 디스턴스(Distance : 거리)와 벡터(Vector : 방향)만을 위주로 만들어진 라우팅 알고리즘 입니다.
  2. 목적지까지의 거리(홉 카운트 등)와 그 목적지까지 가려면 어떤 인접 라우터(Neighbor Router)를 거쳐서 가야 하는 방향만을 저장 합니다.
  3. 따라서 인접 라우터들과 주기적으로(30초에 한번) 라우팅 테이블을 교환해서 자신의 정보에 변화가 생기지 않았는지를 확인하고 관리 합니다.
  4. 장점
    1. 한 라우터가 모든 라우팅 정보를 가지고 있을 필요가 없기 때문에 라우팅 테이블을 줄일 수 있어서 메모리를 절약 합니다.
    2. 라우팅의 구성 자체가 간단합니다.
    3. 여러 곳에서 표준으로 사용 되고 있습니다.
  1. 단점
      1. 라우팅 테이블에 아무런 변화가 없더라도 정해진 시간마다 한 번씩 꼭 라우팅 테이블의 업데이트가 일어나기 때문에 트래픽을 쓸데 없이 낭비 합니다.
      2. 라우팅 테이블에 변화가 생길 경우 이 변화를 모든 라우터가 알 때까지 걸리는 시간(Convergence time)이 너무  느립니다. 이는 바로 업데이트 정보를 확인 할 수가 없고 정해진 라우팅 테이블 갱신 시간에 이루어 지기 때문입니다.
    1. 단점들 때문에 큰 네트워크에는 적용하지 못 합니다. 작은 규모의 네트워크에 적용할 경우에는 구성의 편리와 메모리의 절약 등의 장점을 이용 할 수 있습니다.
    2. RIP(Routing Information), IGRP(Interior Gateway Routing Protocol) 가 있습니다.
  1. 링크 스테이트(Rink State)
  1. 한 라우터가 목적지까지의 모든 경로 정보를 다 알고 있습니다.
  2. 링크에 대한 정보를 토폴러지 데이터베이스로 만듭니다.
  3. 토폴러지 데이터베이스를 가지고 라우터는 SPF(Shortest Path First)라는 알고리즘을 계산하게 됩니다.
  4. SPF(Shortest Path First) : 최단 경로 우선 알고리즘
    1. 말 그대로 어디로 가야 가장 빨리 갈 수 있는가를 계산합니다. 이 계산 결과를 가지고 라우터는 SPF 트리를 만들게 됩니다.
    2. 출발지에서 목적지 까지를 마치 나뭇가지처럼 펼쳐 놓은 다음 가장 빠른 경로를 찾아가는 방식입니다.
    3. 트리가 만들어지면 라우터는 그 트리 정보를 이용해서 라우팅 테이블을 만들게 됩니다.
  1. 장점
    1. 모든 경로를 알고 있기 때문에 중간에 링크의 변화가 생겨도 이를 알아내는데 걸리는 시간이 짧습니다.
    2. 라우팅 테이블의 교환이 자주 발생하지 않고, 또 교환이 일어나는 경우에도 테이블에 변화가 있는 것만을 교환하기 때문에 트래픽 발생을 줄여줄 수 있습니다.
  1. 단점
    1. 라우팅 정보를 관리하기 때문에 메모리를 많이 소모합니다.
    2. SPF 계산 등 여러가지 계산을 해야 하기 때문에 라우터 CPU가 하는 일이 많습니다.
  1. 대규모 네트워크에 설치되는 고용량 라우터에 적용합니다.
  2. OSPF(Open Shortest Path First) 가 있습니다.
 
  1. CDP(Cisco Discovery Protocol)
  1. 시스코 장비를 찾아내는 기능 입니다.
  2. Data Link 계층입니다.
  3. IP 주소 세팅이 필요 없습니다.
  4. 멀티캐스트를 이용해서 시스코 장비들을 찾아냅니다.
  5. 상대편의 상황을 확인하고 자신의 정보를 주기 위해서 60초마다 CDP 패킷을 내보냅니다. 이때 만약 CDP 패킷이 들어와야 할 시간 동안 들어오지 않는다면, 최대 180초 동안은 기존에 가지고 있던 정보를 가지고 기다리는 holdtime이 발생 합니다.
  6. Holdtime dl 0이 될 때까지 스위치로 부터 CDP 패킷을 받지 못하면 라우터는 해단 스위치 정보를 CDP에서 삭제 합니다.
  7. CDP를 통해서 정보를 알아내는 것이 싫다면 disable 시킬 수 있습니다. 라우터 전체를 disable 하는 방법과 특정 인터페이스로 가는 CDP만 막는 방법이 있습니다.
 
  1. Trace
  1. 출발지에서 목적지 뿐 아니라 중간에 거치는 경로에 대한 정보와 소요 시간까지도 확인 할 수 있습니다.
  2. TTL(Time To Live)을 이용합니다.
  3. TTL
    1. 라우터 하나를 거칠 때마다 1씩 감소해서 0이 되면 패킷을 버리면서 에러가 발생하도록 한 값입니다.
    2. 패킷이 네트워크에서 무한히 루핑을 도는 현상을 막기 위해서 사용 합니다.
    3. 타임아웃이 걸리면 최대 40번의 경로를 기다려야합니다.
  1. 작동 방법
  1. Trace 시작
  2. TTL 1로 패킷을 전송
  3. 첫 번째 라우터를 넘어가면서 TTL 0이 되고 에러메시지가 발생
  4. 203.210.200.1 4msec 4msec 4msec 로 돌아온다.
  5. 다음은 TTL 2로 패킷을 전송
  6. 첫 번째 라우터를 지나 두 번째 라우터를 지난 다음에 TTL 0으로 바뀌고 에러 메시지가 발생
  7. 203.210.100.2 12 msec * 12 msec 로 돌아온다.
  8. 이렇게 목적지에 도달 할 때까지 반복됩니다.

'Network > 시스코 네트워킹 요약' 카테고리의 다른 글

Part 6-2. VLAN  (0) 2017.10.11
Part 6-1. 스패닝 트리  (0) 2017.10.11
Part 5. IP 주소  (0) 2017.10.11
Part 4. 허브/브리지/스위치  (0) 2017.10.11
Part 3. TCP/IP  (0) 2016.02.25
Posted by jgpaper
  1. 가상의 랜(Virtual LAN)
  1. VLAN을 사용하면 한대의 스위치를 마치 여러 대의 분리된 스위치처럼 사용 할 있습니다.
  2. 여러 개의 네트워크 정보를 하나의 포트를 통해 전송할 수 있습니다.
  3. 하나의 스위치에 연결된 장비들도 브로드캐스트 도메인이 서로 다를 수 있습니다.
  4. 하나의 포트를 사용해서 여러 개의 정보를 네트워크로 전달 합니다.
 
  1. VLAN 주요 특징
  1. 스위치에서만 지원하는 기능입니다.
  2. 한대의 스위치를 여러 개의 네트워크로 나누기 위해서 사용 합니다. 따라서 VLAN 간의 통신은 오직 라우터를 통해서 가능 합니다.
  3. Trunk Port(트렁크 포트) : 하나의 포트를 통해서 서로 다른 여러 개의 VLAN을 전송할 수 있게 하는 포트를 말 합니다.
  4. 패킷에 VLAN 정보도 같이 전송되어 어느 VLAN에 속한 패킷인지를 목적지에서 구분할 수 있습니다.
  5. Static VLAN : 스위치의 각 포트들을 원하는 VLAN에 하나씩 배정해 주는 방식 입니다.
  6. Dynamic VLAN : 포트별로 고정 VLAN을 배정 하지 않고 그 포트에 접속하는 장비의 맥어드레스를 보고 그 주소에 따라 VLAM을 다르게 배정하는 방식입니다. VMPS(VLAN Membership Policy Server)에게 장비의 맥어드레스를 알려 주고 일르 이용해 확인 후 전달 세팅합니다.
 
  1. VLAN - 트러킹과 VTP(VLAN Trunking Protocol)
  1. 각 스위치에 여러 개의 VLAN이 있기 때문에 원래는 각 VLAN별로 링크를 만들어주어야 하지만, 그렇게 되면 너무 많은 링크가 필요하기 때문에 마치 셔틀버스처럼 모든 VLAN이 하나의 링크를 통해서 다른 스위치나 라우터로 이동하기 위해 트렁킹을 만듭니다.
  2. VLAN의 패킷을 트렁킹으로 보낼 때 VLAN 별로 식별하기 위해 이름을 붙입니다. 붙이는 방법에 따라 두가지의 트렁킹 방식이 있습니다.
    1. ISL 트렁킹 : 시스코에서 만든 트렁킬 프로토콜로 시스코 장비끼리만 사용 합니다.
    2. IEEE 802.1Q : 트렁킹에 대한 표준 프로토콜 입니다.
  1. IEEE 802.1Q
    1. Native VLAN(네이트 VLAN) : 패킷에 어떤 VLAN인지 표식이 없는 패킷이 하나 존재 할 때 이 패킷은 모두 특정 VLAN 으로 보냅니다. 이 VLAN을 네이티브 VLAN이라고 합니다.
    2. 모든 스위치 네트워크에서 유일하게 한 개의 VLAN 만을 네이티브 VLAN으로 세팅할 수 있습니다.
  1. ISL(Inter-Switch Link)
    1. 시스코만의 트렁킹 프로토콜입니다.
    2. IEEE 8022.1ㅃ 와 같습니다. 단지 네이티브 VLAN은 지원 하지 않습니다.
  1. 트렁킹은 여러 개의 VLAM을 한 번에 전송하는 방식 입니다.
  2. VTP(VLAN Trunking Protocol)
  1. 스위치들 간에 VLAN 정보를 서로 주고받아 스위치들이 가지고 있는 VLAN 정보를 항상 일치시켜 주기 위한 프로토콜 입니다.
  2. 시스코만의 프로토콜 입니다.
  3. VLAN의 정보가 변경이 필요 한 경우 VTP 서버에서 한번만 VLAN 정보를 설정하면 VTP 서버는 다른 스위치와의 트렁크 링크를 통해서 VLAN 정보를 자동으로 업데이트합니다.
  4. VTP간에 주고 받는 3가지 메시지
메시지
설명
Summary Advertisement
 VTP서버가 자기에게 연결되어 있는 스위치들에게 매 5분마다 한 번씩 전달 하는 메시지로 VTP 도메인 구성에 대한 Revision 넘버를 보냅니다.
Subset Advertisement
VLAN의 구성이 변경되었을 때나 VTP 클라이언트로부터 Advertisement Request 메시지를 받았을 때 전송되며, 실제 VLAN 정보는 이 Subset Advertisement에 저장되어 전달 됩니다.
Advertisement Request
Zmffkdldjhsxmrk ㅍ쎼 서버에게 Summary Advertisement와 subset Advertisement를 요청 하는 용도로 사용 됩니다.
  1. VTP 3가지 모드
VTP 모드
설명
서버 모드
(Server Mode)
Lan을 생성하고, 삭제하고, VLAN의 이름을 바꿔줄 수 있으며, VTP 도메인 안에 있는 나머지 스위치들에게 VTP 도메인 이름과 VLAN 구성, Configuration Revision 넘버를 전달해 줄 수 있습니다. 비 휘발성 RAM인 NVRAM에 젖아 합니다.
클라이언트 모드
(Client Mode)
VTP 서버가 전달해준 VLAN 정보를 받고, 또 받은 정보를 자기와 연결된 다른 쪽 스위치에 전달하는 것만 가능 합니다.
트랜스페어런트 모드
(Transparent Mode)
VTP 도메인 안에 있으나 서버로부터 메시지를 받아 자신의 VLAN을 업데이트하거나 자신의 VLAN을 업데이트 한 정보를 다른 스위치로 전달하지 않습니다. 직접 VLAN을 만들고, 삭제할 수 있으며, 이 정보를 자기만 가지고 있습니다. 다른 스위치와 스위치 사이에 있을 경우 VTP 메시지를 전달해 주는 통로 역할은 하지만 관여하지 않는다.
  1. Config Revision 값은 VLAN이 새로 만들어지거나 지워질 경우 1씩 추가됩니다. VTP 클라이언트는 이 값이 높은 것을 최신정보로 하여 업데이트 합니다.
  2. VTP Advertisement 를 주고받을 수 있는 트렁크의 종류는 I니 링크, IEEE802.1Q 링크, LAN Emulation(LANE) 링크가 있습니다.
  3. VTP Pruning 은 트렁크로 이동하는 VLAN 트래픽 중에서 갈 필요가 없는 트렁크쪽으로 트래픽이 흘러가지 못 하도록 하는 기능 입니다.
 
  1. VLAN의 구성
  1. VTP 도메인 이름을 만들고 VTP 모드를 설정합니다. 그리고 VLAN을 구성해 줍니다.
  2. VLAN 에 대해 아무것도세팅하지 않았을 때도 디폴트 VLAN은 이미 세팅 되어 있습니다.
  3. 각 스위치 마다 만들 수 있는 VLAN의 개수는 모두 다릅니다. 이는 스위치의 모델이나 용량에 따라 정해지기 때문입니다.
  4. 스위치의 IP주소 세팅은 VLAN 1에 합니다. 매니지먼트 VLAN 역할을 담당하는 VLAN 1에 합니다.
  5. VLAN을 추가하고 삭제하는 작업은 VTP 서버 모드와 VTP 트랜스페어런트 모드에서만 가능 합니다.
  6. 서브 인터페이스란 인터페이스 하나를 다시 작게 나눈 것을 말합니다. VLAN을 쓸 때 사용하기 위해서입니다. 라우터는 스위치의 트렁크 포트와 연결되어 있고 스위치의 트렁크 포트를 통해서 라우터로 들어오는 다수의 VLAN과 접속 할 수 있게 인터페이스를 논리적으로 나누어 사용 할 수 있습니다.

'Network > 시스코 네트워킹 요약' 카테고리의 다른 글

Part 7. 라우터  (0) 2017.10.11
Part 6-1. 스패닝 트리  (0) 2017.10.11
Part 5. IP 주소  (0) 2017.10.11
Part 4. 허브/브리지/스위치  (0) 2017.10.11
Part 3. TCP/IP  (0) 2016.02.25
Posted by jgpaper
이전버튼 1 2 3 이전버튼

블로그 이미지
jgpaper

최근에 올라온 글

최근에 받은 트랙백

Yesterday
Today
Total

달력

 « |  » 2026.9
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