이번에는 Swith(HUB)에 대해 알아볼 것이다.
단일 네트워크에서 ethernet은 10Mbps~1000bps의 대역폭을 가지는데 이것은 통산 1024개의 한계를 가진다고 알려져 있다고 한다. 왜냐하면 단일 네트워크에서 1024대의 포트를 사용하게 되면 허브 & 사용 대역폭 낮추기 때문인데, 이것은 과거 얘기다.
Swtich HUB의 주요한 기능중에 하나는 address learning기능인데 이것은 Swtich HUB로 들어오는 Frame에서 보내는 사람의 MAC주소만 알게 되어 MAC table을 작성하는 것이다. 처음 네트워크를 구성할때 address learning을 하고 난 후에 패킷을 보내는데 MAC table에 없는 주소에 보내게 되는 경우가 있다. 이때는 먼저 ARP방식으로 데이터를 송신한다. 이 방식에는 Broadcast주소가 사용된다. 여기서 중요한 개념은 Broadcast한다고해서 통신 방식이 아니라 주소다. 목적지가 불특정 다수로 정해서 데이터를 송신하기 때문이다.
Ethernet 통신에서는 Unicast와 Broadcast를 주로 사용한다. 여기서 Broadcast주소는 호스트주소가 255인 네트워크가 아니라 네트워크 주소중에 마지막 주소이다. 예를 들어 네트워크 범위가 1.1.1.1~1.1.1.5라면 브로드케스트주소는 1.1.1.5다.
MAC table은 자체 RAM에 Queue방식으로 저장된다. Queue방식은 선입선출방식이라고 할 수 있다. 따라서 데이터를 저장하고 앞으로 보내는 방식을 가지며 aging에 의해 오래된 MAC주소는 삭제합니다. 삭제하는 과정은 버퍼 알고리즘이라고 하며 TTL과 LRU 두가지 방식이 있다.
TTL방식은 소규모에서 사용하며 오래된 MAC주소라고 판단하는 기준은 타이머다. MAC table에 등록시 시간을 같이 가져와서 시간이지나 0되면 삭제한다. 삭제 전에 다시 접속하게 되면 시간이 reset된다. 단점은 시간을 계산하기 때문에 cpu에 부담이 간다.
LRU방식은 대규모에서 사용하며 오래된 MAC주소 판단기준은 자리다. 이 방식은 들어오는 순서대로 stack되서 새로 들어오면 앞쪽으로 이동되기때문에 자주 사용되니 않는 MAC주소는 뒤로 이동한다.
그리고 filtering이라고 하는 기능은 해당하지 않는 목적지는 전송하지 않는 것이고, forwarding은 해당하는 목적지로 전송하는 것이다. 물론 이 두가지가 동시에 진행되어 패킷을 송수신 하는것이다. 또 floording은 MAC table에 MAC 주소가 없을때 Broadcast주소를 사용하는 방식을 의미 합니다.
몇가지 특이하게 Application Layer에서 TCP/UDP Layer을 거치지 않고 그 아래 Layer로 정보를 이동하는 경우가 몇가지 있다. 이들은 특별한 목적을 가지고 있는데 대표적으로 Ping과 ARP가 있다. Ping같은 경우는 IP Layer와 Application Layer간 멀티플렉싱과 디멀티플렉싱이 이루어진다. ARP는 DataLink Layer와 Application Layer간 멀티플렉싱과 디멀티플렉싱이 이루어진다.
Transport Layer는 TCP와 UDP가 있다. TCP는 신뢰할수있는 데이터 전송 즉, 데이터가 손상됬는지 잘 도착했는지 반드시 확인한다. 그리고 스스로 네트워크 전송 속도 조절하지만 전체적인 흐름을 보는것이 아니라 블라인드 통신방식을 이용하므로 스스로 멀티플렉싱 혹은 디멀티플렉싱을 하며 들어오는 패킷전송속도로 확인합니다. UDP는 신뢰할수있는 데이터 전송을 하지 않습니다. 즉, 데이터가 손상됬는지 잘 도착했는지 확인하지 않습니다. 따라서 속도가 TCP방식보다는 빠릅니다.
하지만 현재는 네트워크 속도가 충분히 빠르기 때문에 Application Layer에 따라 사용하고 안하고를 결정합니다. 예를 들어 만약 패킷전송이 늦어질때 재전송을 할지, 아니면 패킷이 전송되기를 더 기다릴지는 개발자가 판단하여 설정합니다.
IP주소는 bogon IP와 real IP가 있다. real IP는 class 정책과 관련이 있고, bogon IP는 특정 목적으로 사용 하는 IP다.
----------------------------------------------------------------------
UUID와 라벨명
UUID는 매체나 장치의 고유명으로써, UUID는 운영체제가 장치를 실제로 인식해야 정해진다. 따라서 Logical Volume같은 경우는 UUID가 없다. 반면, 라벨명은 임의로 지정이 가능하다.
blkid명령어는 UUID를 확인하는 명령어다. 장치명은 마더보드 포트에 연결된 것에 따라 default 되어있다. 만약 디스크1을 /dev/sdb에 디스크2를 /dev/sda에 연결했다가, 디스크1을 /dev/sda에 디스크2를 /dev/sdb에 연결하게되면 세팅값에 /dev/sd*는 고정인데 디스크가 변경되어 안에 데이터가 다르니 달라질수있다.
xfs_admin : 라벨명에 관한 설정
xfs_admin -L 라벨명 장치명 : 라벨명 지정
xfs_admin -L "--" 장치명 : 라벨명 제거
xfs_admin -l 장치명 : 라벨명 확인
여기서 알아둬아 할점은 extended 파티션은 라벨명도 없고 UUID도 없다. 왜냐하면 사용 못하기 때문이다.
findfs는 UUID혹은 라벨명으로 장치명을 확인하는 명령어이다.
free는 사용중인 메모리 확인하는 명령어이다.
- 재부팅중에 esc를 누르면 부팅 상황이 나타남 -> 부팅중 에러 확인가능
- PuTTY와 텍스트 편집기의 복사 붙여넣기 호환성
CentOS 7 버전을 설치하여 사용하고 있는데 부팅시 rc.local에 스크립트를 추가하여 명령어가 실행되게 했는데 실행 되지가 않았다.
먼저 rc.local에 접근권한이 있는지 확인 하고 없다면 콘솔에 chmod +x /etc/rc.d/rc.local을 입력하여 executable 권 한을 주어야 한다.
찾아보니 스크립트에 su root -c"/path-to-script/script.sh"를 넣어야 하는 경우도 있다고 한다.
프로세스에 대해 알아보겠다.
프로세스 명령어를 배우기 전에 foreground와 background를 설명하겠다. foreground는 쉽게 설명하면 현재 실행중인 프로그램을 의미하고, background는 종료된 프로그램은 아니고 실행중이기는 하지만 터미널에 연결되지 않은 프로그램을 의미한다. 윈도우에서 여러 프로그램을 사용중일때 사용하는 프로그램을 제외한 나머지 프로그램이 background라고 할 수 있다. foreground는 터미널 입출력 제어가 진행중이다. 반면, background는 터미널과 무관하게 메모리에서 실행되며 터미널 입출력에는 투명하다(관계가 없다). 보통은 daemon(service)프로그램이 background로 실행된다.
ps는 일종의 윈도우에서 작업관리자를 말하는것이라고 보면 편하다. 옵션은 다음과 같은것들이 있다.
-a : 현재 터미널에서 실행중인 프로세스
-e : 전체 프로세스
-f : 자세한 내용
-u : 실행 계정, 시작 시간 포함한 정보 검색
kill은 윈도우에서 작업관리자가 할수있는기능중에 프로그램 강제 종료와 같은 기능을 한다고 보면 된다.
nohup은 프로그램이 백그라운드에서 돌아가는데 계정이 로그아웃한 상태에서도 실행이 되게 하는 명령어이다. 예를들면 백업을 하고 있는데 너무 오랜시간이 걸려서 로그오프가 되게 되면 nohup이 없는 상태에서는 백업 과정이 종료되는데, nohup을 사용하면 로그오프 된 상태에서도 백업이 진행된다. 하지만 책임감이 있지는 않아서 nohup을 사용해 로그아웃된 상태에서 백업을 한 백업파일이 정상적이라는 보장은 없다.
RPM & YUM 두가지 모두 리눅스에 프로그램 설치 명령어이다. 과거 프로그램 설치는 사용자가 source코드로 compile해서 설치하고 사용했었다. 그리고 현재도 마찬가지지만 리눅스에서 프로그램설치 방법은 제조사 마다 다르다. 제조사에서 파견나와서 설치하고, 프로그램이 오작동하면 프로그램을 수정한다.
RPM은 cd가 있을때 설치가 가능하다. 따라서 rpm으로 프로그램을 설치하기 전에 패키지를 준비하고 cd를 인식시켜 설치한다. RPM패키지 구조는 '패키지명-버전-릴리즈.아키텍처.rpm'으로 되어있다. 설치는 전부 자동으로 윈도우처럼 설치시 경로지정 같은 설치상의 수정이나 유저개입은 할 수 없다. 시작하면 완료되거나 실패할때까지 기다려야 한다.
커널~OS까지 전부 RPM으로 설치가 가능하다.
RPM을 사용하는 명령어의 구조는 'rpm -옵션'이고 옵션은 아래와 같다.
-qa : 설치된 모든 패키지명
-qi : 패키지의 상세정보
-ql : 패키지의 파일 리스트
-qf : 지정한 파일이 포함된 패키지
설치 및 업그레이드에 대한 명령어는 아래와 같다.
rpm -옵션 패키지명
-i : 설치
-U : 업그레이드 (이전버젼 미설치시 -i와 동일)
-F : 업그레이드만
-v : 설치과정 출력
-h : 설치정도 출력 (#)
보통은 진행도를 알기위해 ivh, Uvh, Fvh처럼 vh도 같이 사용한다.
-e : 패키지 삭제 하는 옵션이다.
RPM의 주요 추가 옵션은 아래와 같다.
--nodeps : 의존성을 무시하고 작업한다. (삭제에 주로 이용)
--force : 같은 버전의 패키지나 파일이 있어도 무시하고 작업진행
--oldpackage : 다운그레이드시 사용
yum은 인터넷 repository에서 패키지를 내려받아 설치하는 방법이다. 따라서 인터넷만 연결되어 있다면 지원되는 모든 프로그램의 설치가 가능하다.
yum 명령어는 다음과 같다.
yum list : repositoty안에 있는 설치 가능한 모든 패키지 목록을 보여준다.
yum list [패키지명] : 지정한 패키지의 설치 여부를 확인한다.
yum repolist : 시스템에 등록된 repository list를 출력한다.
yum search 문자열 : 패키지명이나 description에 문자열이 포함된 패키지들을 출 력한다.
yum provides 경로/문자열 : 문자열이 포함된 파일이 소속된 패키지들을 출력한다.
설치 및 업데이트, 삭제
yum install -y 패키지명 : 패키지를 repository로 부터 설치한다. 다만, -y 입력하지 않아도 설치가 가능한데 -y를 입력하지 않는다면 설치중 의존성이 있는 프로그램들을 같이 설치할때마다 y나 n를 선택해야 한다.
yum update -y 패키지명 : 패키지를 repository로 부터 업데이트한다.
yum remove 패키지명 : 지정한 패키지를 삭제한다.
RPM과 YUM에서 알아야 할것은 프로그램간의 의존성이다. 이것은 프로그램을 설치하거나 실행할때 부수적으로 하지만 있어야만 실행되는 일종의 하부 프로그램 혹은 파일의 관계가 의존성이다. dynamic linking이라는 개념이 이 부분에서 사용되는데 한 파일에 여러 사용자가 access하는 연결을 말한다. 따라서 어떤 프로그램간의 의존성이 있다면 설치할때 같이 설치해야 프로그램이 실행된다. 프로그램을 삭제한다고 할때 지우고자 하는 프로그램과 연결되어있는 프로그램이 의존되어(연관되어)있기 때문에 함부로 지우면 실행이 안될수있다는 경고 메시지를 출력한다.