IT/OracleLinux-1Z0460

리눅스 네트워크

알콩달콩아빠 2022. 5. 19. 19:16
728x90
반응형

안녕하세요

 

뚱보 프로그래머 입니다.

 

네트워크!

아주 중요합니다..

 

네트워크 개요

네트워크 관리 업무는 크게 초기 설정과 문제점 해결(trouble shooting)로 나눌 수 있다. 초기 설정은

설치 과정에서 정확하게 설정이 되면 특별한 경우가 아닌 한 변경할 필요가 없지만 문제점 해결은 예상하지 못한 일을 다루는 업무이니 만큼 기본적이고 포괄적인 개념이 필요하다.

 

1. 네트워크 기초

1] 네트워크 개념

정보기술에서 말하는 네트워크는, 통신선로에 의해 서로 연결되어 있는 일련의 연결점들을 의미한다. 네트워크는 다른 네트워크와 연결될 수 있고, sub 네트워크를 포함할 수 있다. 네트워크는 공간적인 거리에 따라 LAN (local area network), MAN (metropolitan area network) 그리고 WAN (wide area network) 등으로 나뉘어 지고  네트워크 구성형식에 따라  버스형, 성형, 고리형 등으로 나뉘어진다.

우리가 주로 관심을 가지는 인터넷은 네트워크의 네트워크이라 불리어 진다.

 

2] 프로토콜

프로토콜의 본래의 의미는 외교에서 의례 또는 의정서를 나타내는 말이지만, 네트워크 구조에서는 표준화된 통신규약으로서 네트워크 기능을 효율적으로 발휘하기 위한 협정이다. , 통신을 원하는 두 개체간에 무엇을, 어떻게, 언제 통신할 것인가를 서로 약속한 규약이다.

두 컴퓨터가 서로간에 데이터를 송수신한다면 데이터 블럭의 시작은 STX로 하고, 데이터 블럭의 마지막은 ETB로 표시하자”, “내가 데이터를 보내려고 할 때 ENQ이라는 문자를 보내면, 너에게 데이터를 보낼 것이라는 의미이니까, 네가 ACK라는 긍정응답 문자를 내게 보내주면 데이터를 전송하고, NAK라는 부정응답문자를 내게 보내오면 보내지 않는 것으로 하자”.“패리티를 이용해서 에러체크를 하고 에러가 발생하여 네가 NAK를 보내오면 내가 데이터를 재전송을 하는 것으로 하자 라는 식으로 약속을 정해 놓은 것이다.

컴퓨터 네트웍의 규모가 증가되고 네트웍을 이용한 정보전송 수요가 다양화되며, 소프트웨어와 하드웨어 시스템이 계속 증가되는 최근의 환경에서, 효율적인 정보 전달을 하기 위해서는 프로토콜의

기능이 분화되고 복잡해질 수 밖에 없다. 따라서 이러한 환경적인 요구를 만족하기 위해서 프로토콜 계층화의 개념이 필요하게 되었다.

프로토콜 계층화의 개념은 마치 구조적 프로그래밍 개념과 비슷한데, 각 계층은 과 같으며 각 계층의 수직적 상하관계는 top-down 구조와 같다. , 네트웍의 프로토콜 계층화는 하위계층이 상위계층을 서비스하는 것과 같으며 호출 프로그램과 피호출 프로그램의 매개변수 상호전달 방식 또한 상위계층이 하위 계층의 서비스를 받을 때와 같은 매개변수 전달방식과 같다.

ISO(International Standards Organization)에서는 프로토콜을 7개의 계층으로 정리하였다. OSI 모델이라 불리는 것으로 계층화되어 있으므로 종종 네트워크 스택이라 하기도 한다.

 

3]  OSI Stack

1) 응용 계층

2) 표현 계층

3) 세션 계층

4) 전송 계층

5) 네트워크 계층

6) 데이터 링크 계층

7) 물리 계층

 

계층화는 네트워크 프로토콜을 이용하여 소프트웨어나 하드웨어를 개발할 때, 각각의 컴퓨터는 자신이 속한 스택에 대해서 3가지만 서비스한다는 발상에서 출발한다. 자신의 바로 위와 아래 스택과의 통신, 그리고 상대 컴퓨터와 주고 받을 데이터가 그것이다. 여기에 캡슐화라는 개념이 포함되는데, 이는 데이터가 네트워크를 통해 전송되기 위해 인코딩되는 과정이다. 네트워크에서는 데이터가 패킷이라는 형태로 다루어지며 응용 계층에서 생성된 패킷은 각 스택을 지나면서 필요한 정보가 추가되어 캡슐화되고  아래 계층으로 보내진다. 물리 계층에서는 물리적인 신호로 변환하여 선로를 통해 다른 컴퓨터에 보낸다. 받은 곳에서는 스택을 거슬러 올라가면서 덧붙여졌던 정보들을 벗겨내어 응용계층으로 전달한다.

이렇게 함으로써 한 부분의 프로토콜 변경이 전체에 영향을 미치지 않게 할 수 있고 프로토콜 구조가 간단해질 수 있게 되는 것이다.

 

4] TCP/IP Stack

OSI 모델의 구성은 잘 되어 있지만 실제 프로토콜로 충분히 구현되어 있지는 않다. 개발 당시에 이미 TCP/IP 모델이 널리 사용되고 있던 까닭이다. 실제로 TCP/IP는 가장 많이 사용되는 프로토콜이며 TCP IP 프로토콜을 중심으로 한 20여 가지의 프로토콜을 대표한다. 역시 OSI 7계층에 대응하도록  4계층으로 단순화한 스택으로 표현한다.

1) 응용 계층

2) 전송 계층

3) 인터넷 계층

4) 네트워크 접근 계층

 

TCP/IP는 그 자체로 프로토콜은 아니고 한 벌(suite)의 프로토콜이다. TCP는 전송제어 프로토콜이고 IP는 인터넷 프로토콜이다. TCP/IP 프로토콜은 보통 TCP/IP라고 하며 TCP IP는 각각의 개별적인

프로토콜이 아니라 TCP/IP 통신에 포함되는 많은 프로토콜을 의미한다.

또한 논리적 동작 단위를 의미하기도 하는데, TCP/IP에서는 시스템의 주소와 포트를 이용해서 다른 시스템에 존재하는 프로세스와 통신을 하게 된다.

TCP/IP에 속해 있는 프로토콜은 다음과 같이 여러 종류가 있다.

UDP(User Datagram Protocol)

ARP(Addrress Resolution Protocol)

RARP(Reverse Address Resolution Protocol)

RIP(Routing Information Protocol)

IGRP(Interior Gateway Routing Protocol)

FTP(File Transfer Protocol)

TFTP(Trivial File Transfer Protocol)

SMTP(S Mail Transfer Protocol)

SNMP(Simple Network Management Protocol)

OSPF(Open Shortest Path First)

ICMP(Internet Control Message Protocol)

 

다음은 반드시 기억해야 할 특징을 가지고 있는 프로토콜이 있다.

UDP는 비연결 프로토콜이어서 매우 빠른 전송을 하지만 오류 검출이나 전송 보장이 확실하지는 않은 프로토콜이다.

TCP는 연결 지향이므로 전달을 보장하고 오류 검출 기능이 있지만 보내는데 비용(performance cost)이 드는 프로토콜이다.

IP는 비연결이지만 상위 레이어에서 동작하는 프로토콜이다. 오류 검출 기능이 없는 경우 비신뢰성이라 간주되지만 보통 IP의 상위계층에서 오류 검출과 전달을 보장하게 된다.

 

2. TCP/IP 의 특징

1] 개방형 프로토콜 표준

특정 컴퓨터 하드웨어나 운영체제에 독립적으로 자유롭게 사용 가능하도록 개발되었다. 광범위한 지원 때문에, 인터넷을 통해서 통신하지 않더라도 TCP/IP는 서로 다른 하드웨어와 소프트웨어를 통합하는데 이상적이다.

 

2] 특정한 물리적 네트웍 하드웨어에 대한 독립성

TCP/IP는 이더넷, 토큰 링, 전화선, FDDI net, 그리고 가상적으로 어떤 다른 종류의 물리적 전송 매체에서도 실행 가능하다. 전체 네트웍에서 어떤 TCP/IP 장치라도 다른 장치를 유일하게 찾아낼 수 있는 공통적인 주소체계를 제공한다. 또한 일관성있고, 널리 사용 가능한 사용자 서비스를 위해서 표준화된 high level의 프로토콜이다.

 

3] 토플로지(위상)

네트워크의 물리적 연결 방식에 토플로지(위상)가 있다. 가장 많이 사용되는 LAN 구성 방식은 이더넷과 토큰 링이다. 토큰 링은 토큰을 가지고 있을 때만 네트워크에 접근할 수 있는 방식이며 요즈음은 많이 사용하지 않는다. 이더넷과 패스트 이더넷이 좀더 보편적인 방식인데 이더넷은 초당 10MB, 패스트 이더넷은 초당 100MB 을 전송한다. 둘 다 버스 구조의 토플로지를 사용하는데, 이는 모든 노드가 같은 선로에 물려있는 형태이다. 물리계층에서 한 컴퓨터가 다른 컴퓨터와 연결을 하려면 먼저 다른 컴퓨터가 통신을 하고 있는지를 검사한 다음 연결을 시도한다. 만일 선로가 사용 중이면 임의의 시간을 기다렸다가 다시 시도하게 된다. CSMA/CD 라는 것이 이러한 생각을 구현하고 있으며 네트워크의 데이터 충돌을 감지하면 전송을 중지하게 함으로써 LAN이 다중접속으로 발전하는데 기여한 프로토콜이다.

  

 

 

 

 

4] RFC(Request For Comments) 

RFC(Request for Comments) 인터넷 공식 문서 또는 표준으로서 배포되지만 몇몇 RFC들은 사실상 정보제공 정도의 목적을 가지고 있다. RFC 문서는 프로토콜의 세부 규격뿐만 아니라 인터넷의 여러 측면에서 사용자와 관리자를 위한 권장 사항을 포함하고 있기 때문에 인터넷 사용자와 관리자에게 매우 유용한 문서이다.

 

RFC 문서 찾아보기

이 문서는 무료로 제공되며 인터넷 사이트에서 찾아 볼 수 있다. 미리 확인한 문서 번호를 사용해서 찾으면 된다.

http://sunsite.doc.ic.ac.uk

http://www.csl.sony.co.jp/rfc/ - 색인제공

http://info.internet.isi.edu/1s/in-notes/rfc/files - 메뉴 형식

 

5] TCP/IP 프로토콜의 각 계층

1)  Application Layer  응용 프로그램 계층

사용자 응용 프로그램으로부터 요청을 받아들여 적절한 메시지로 변환하거나 데이터를 처리하여 이를 Transport Layer로 전달한다.

 

지원하는 프로토콜

FTP(File Tranfer Protocol: 파일 송수신)

FTP TCP/IP 기반의 네트워크에서 사용되는 파일 전송 프로토콜로서 컴퓨터간의 파일 송수신을 지원한다. FTP RFC(Request For Comments) 959번에 정의되었고, TCP/IP 위에서 동작하며, 하나의 호스트에서 다른 호스트로 파일을 복사할 때 효율적으로 사용된다. FTP의 장점은 NFS(Network File System) RCP(Remote CoPy)에 비해서 안정적이고 빠르다는데 있다. 1970년대 TCP/IP가 개발되면서 TCP/IP의 일부분으로 개발된 것이 지금은 대부분의 운영체제에서 기본적으로 제공해주는, 중요한 도구로 자리잡았다.

 

NFS(파일 시스템 공유)

유닉스 계열 운영체제간 파일 시스템을 공유한다. 원격 호스트의 파일 시스템을 로컬 파일시스템처럼 사용할 수 있는 기능을 제공한다.

 

POP

메일을 수신하는 프로토콜

 

SMTP(Simple Mail Transfer Protocol: 메일 송수신)

멀티 벤더 환경하에서 제공되는프로토콜로서 텍스트형 전자우편을 특정 사용자에게 보내는 프로토콜이다.

 

TELNET(원격 접속)

TELNET은 네트워크를 통한 가상 단말 기능을 제공한다.  TELNET상에서의 가상 단말 기능은 TCP/IP 프로토콜상의 TELNET 프로토콜로 실현된다.

 

SNMP(Simple Network Management Protocol: 네트워크 망 관리)

SNMP는 네트워크 관리 기능을 제공하는 프로토콜로서 사용자의 시스템에 장애 유무를 정기적으로 관리자에게 보내게 된다. 만약 사용자의 시스템에 장애가 발생될 경우 트랩(Trap)을 사용하여 관리자에게 통보한다.

 

DNS(도메인 네임 시스템)

도메인 네임과 IP Address간의 네임 resolv를 서비스한다.

 

HTTP( www 서비스)

HTTP(HyperText Transfer Protocol) RFC 1945번에서 정의되었으며, 웹 서버에 의해서 제공되는 웹 페이지를 주고 받기 위해서 사용되는 프로토콜로, 초창기에는 사용자가 요구한 데이터를 보내고 나면 연결을 끊어서 서버의 부담이나 네트워크 트래픽을 줄였다. 예를 들어 10개의 그림에 대한 링크를 갖고 있는 단순한 HTML을 웹 브라우저가 요구했을 경우, 11번 사용자와의 연결이 이어졌다 끊어졌다 하는 과정을 거치게 된다. 이것이 HTTP/1.0 버전이고, 그 이후 1999 7 7 1.1 버전이 발표되었다. HTTP/1.1에서는 좀 더 빠른 속도와 연결의 유지(persistent connections), 파이프라인, 캐싱 등을 제공하고 있다. 그리고 중요한 특징은 HTTP 상에서 사용자의 패스워드가 외부에 유출되지 않는다는 특징이 있어, 전자상거래 등 사용자 인증이 필요한 서비스에서 중요한 역할을 하고 있다.

 

NNTP(Network News Transfer Protocol: 뉴스 송수신)

전자 뉴스의 전송을 제공해주는 프로토콜로서 신뢰성있는 스트림형의 데이터 전송 프로토콜(TCP)을 사용하여 네트웤에 있는 뉴스 데이터베이스를 가입자가 검색하고 읽기가 가능하도록 하는 프로토콜이다.

 

2) Transport Layer

Application Layer로부터 받은 데이타를 세그먼트(segment) 형태로 만들어 네트워크를 통해 상대방까지 전달하는 역할을 담당한다.

Transport Layer TCP UDP 두 가지 Protocol이 제공된다.

 

(1) TCP(Transmission Control Protocol)

연결지향, 또는 접속 지향(Connection-oriented) 전송 프로토콜로 세그먼트가 상대측까지 제대로 전달되었는지 응답(Ack)을 주고 받음으로써 점검을 한다. TCP IP에 의해 전달되는 패킷의 오류를 검사하고 재전송을 요구하는 등 보다 정교한 제어를 담당한다. 즉 패킷을 전송할 두 지점을 네트워크상에 있는 최단 경로를 찾아서 1:1로 직접 연결한 뒤에 패킷을 주고 받기 때문에 전송과 오류 수정에 있어 신뢰도가 높다. 하지만 두 지점을 직접 제어해야 하기 때문에 다른 프로토콜에 비해 상대적으로 많은 전송 시간이 필요하다.

TCP는 전송된 패킷에 에러가 없고, 두 번 이상 전달되어 중복되지 않고 순서대로 받을 수 있도록 신뢰성을 보장한다. 신뢰성을 유지하기 위한 각종 정보를 추가적으로 가지고 있어야 하기 때문에 성능이나 속도를 양보해야 한다. 그러나 안전성과 신뢰성이 뛰어나 사용자 데이타 전송, 대용량 전송에 이용된다.

     

(2) UDP(User Datagram Protocol)

UDP는 데이터를 올바른 애플리케이션 프로세스로 전달하기 위해 메시지 헤더에 있는 16비트의 Source Port Destination Port를 사용한다. 비연결형(Connectionless) 전송 프로토콜로 세그먼트를 보내기만 하고 응답(Ack)을 주고 받지 않는다. UDP는 네트워크에 최소의 부담으로 데이타를 전송하는데 이용된다. 따라서, 제대로 전달되었는지 확인하지 않는 특성을 갖고 있고, 오류 수정을 하지 않는다. 오류 수정 등의 기능은 없지만 TCP에 비해 속도가 빠르며, 직접 연결에 따른 네트워크 부하를 줄일 수 있다. 시스템 내부 메시지 전달과 데이타 전달, 소규모 데이터 전송 등 네트워크에 부담을 최소화하는데 이용된다. TCP의 신뢰성이 보장되는 않는데, 패킷의 중복 전달이라든지, 패킷 전달의 실패가 있을 수 있다.

 

3) Internet Layer

Transport Layer에서 받은 패킷을 목적지까지 효율적으로 전달하는 역할을 담당한다. 패킷이 목적지에 제대로 도착되었는지의 여부와 데이타의 손상 여부에 대해서는 Transport Layer에서 처리한다. 그리고 세그먼트에 IP 헤더를 추가하여 패킷을 만들어 Network Interface Layer로 넘겨준다.

Internet 계층의 역할은 데이타그램(datagram, IP 프로토콜에서 다루는 패킷 데이타)을 정의하고, 데이터그램을 라우팅하는 역할을 담당하고 있다. 데이타그램이 가지고 있는 정보는 데이타를 보내는 호스트의 주소, 데이타를 받을 호스트의 주소, 그리고 실제 전송해야 할 데이타, 기타 운영에 필요한 몇가지 항목들을 가지고 있다.

Internet 계층에서는 데이터그램의 이런 정보, 특히 주소를 판독하고 네트워크에서 주소에 맞는 네트워크를 찾아가서 해당되는 호스트가 데이타그램을 받을 수 있도록 데이타그램을 전송하게 된다.

ICMP, IP, ARP, IGMP 등이 이 계층에 속한다.

 

(1) ICMP(Internet Control Message Protocol)

인터넷에서 오류 메시지의 생성 및 검사 메시지와 IP에 관련된 정보를 제공하는 통신 규약을 의미한다. ICMP의 메시지에는 목적지 도착 불능, 플로우 제어, 게이트웨이로부터의 경로 변경 요구, 에코 요구/응답, 타임 아웃, 파라미터 에러 등이 있다. ICMP 제어 메시지는 IP 패킷의 형태로 전달된다. IP 프로토콜은 비연결형으로 패킷이 확실히 전송된다는 보장이 없기 때문에 라우터나 노드(호스트)등에서 오류가 생겨 목적지까지 도달하지 못하게 되는 경우가 생기게 된다. 이 때 송신측의 상태를 알려줄 필요가 있는데 이 때 필요한 것이 ICMP 프로토콜이다. ICMP 프로토콜은 송신쪽의 상황과 목적지 노드의 상황을 진단하는 기능을 하게 된다.

 

ICMP 메시지의 종류

ICMP는 크게 오류 통지를 위한 오류 메시지와 진단용 문답 메시지 두 종류로 구분할 수 있다.

① ICMP Destination Unreachable (ICMP 목적지 도착 안함) 메시지

라우터가 특정 노드의 패킷을 목적지에 보내지 못할 경우, 송신 노드에 대해 'ICMP Destination Unreachable 메시지'를 보내게 된다. 이 메제지 안에는 목적지까지 전송되지 못한 이유를 나타내는 정보를 포함하게 된다. 목적지 노드의 IP 주소의 경로를 찾아내지 못한 라우터는 이를 다시 송신측 라우터로 이 메시지를 되돌려 보내게 되는 것이다. 송신측 노드는 이 메시지를 해석해 보고 패킷이 목적지에 도착하지 못했음을 알 수 있게 된다.

 

② ICMP Redirect(ICMP 재지정) 메시지

라우터가 송신측 노드에 적합하지 않은 경로 설정이 되어 있을 경우 그 노드에 대한 최적화된 경로를 재 지정해 주는 ICMP Redirect 메시지를 보내게 된다.

 

③ ICMPTime Exceeded(ICMP 시간 초과) 메시지

패킷이 네트워크 사이에서 무한정 돌아가지 않도록 하기 위해 각 라우터들이 패킷을 처리할 때마다 TTL(Time To Live: 생존 시간)을 감소시키다가 그 값이 '0'이 되면 패킷을 폐기하기 위해 송신측 라우터에 'ICMP Time Exceeded(ICMP 시간 초과) 메시지'를 되돌려 보냄으로서 패킷이 폐기된 사실을 알리게 된다.

 

④ ICMP Information Request(ICMP 정보 요청) 메시지

자신의 IP 주소를 알아 내기 위해 'ICMP Information Request 메시지'를 보내고, 그에 대한 'ICMP Information Reply(ICMP 정보 응답) 메시지'를 받아서 자신의 IP 주소를 인식하기 위한 메시지를 말한다. 지금은 RARP로 대체되고 있다.

 

⑤ ICMP Timestamp Request(ICMP 시간 소요 요청) 메시지

'ICMP Timestamp Request 메시지'는 송신쪽 노드가 상대방 노드의 현재 시간값을 알기 위해 송신하는 메시지를 말한다. 이에 대해 대상 노드는 'ICMP Timestamp Reply(ICMP 시간 소요 응답) 메시지'로 답신을 하게 된다. 이 메시지에는 송신쪽이 데이터를 다시 보내는 시간과 대상 노드가 수신한 시간 및 응답하기 직전의 시간 정보가 들어가 있다. 송신쪽은 이 정보를 통해 네트워크 통과 시간을 계산할 수 있게 된다.

 

⑥ ICMP Address Mask(ICMP 주소 마스크) 메시지

자기 기계의 서브넷 마스크를 알기 위해 'ICMP Address Mask 메시지'를 보내고, 그에 대해 'ICMP Address Mask Reply(ICMP 주소 마스크 응답) 메시지'에 의해 마스크 값을 알 수 있게 된다.

 

⑦ ICMP Source Quench(ICMP 소스 억제) 메시지

저속 광역 회선 등을 사용할 경우에는 IP 라우터의 WAN쪽에서 집중이 발생할 수 있다. 이 집중을 완화시키기 위해, 송신측 큐 값이 '0'으로 남아 송신 불능 상태가 되면 'ICMP Source Quench 메시지'를 송신측 노드측에 보내게 되고, 송신측은 이 메시지의 정보를 해석하여 회선의 어딘가가 혼잡하다는 것을 인식하고 송신 패킷의 양을 제어하게 된다.

 

⑧ ICMP Echo Request(ICMP 반향 요청) 메시지

송신측의 전송 패킷이 목적지 노드 또는 라우터에 도착했는지 여부를 확인하는데 사용합니다. 송신측 노드는 목적지 노드에 대해 'ICMP Echo Request(ICMP 반향 요청) 메시지'를 송신하고, 목적지 노드로부터 'ICMP Echo Reply(ICMP 반향 응답 메시지'가 회신되면 패킷이 무사히 전송된 것으로 인식하게 된다.

 

(2) IP(Internet Protocol)

IP는 인터넷을 구성하는 핵심 요소로 인터넷 전송 기본 단위인 Datagram 정의, 인터넷 주소 체계 정의, Network Access  Layer Transport Layer 사이의 데이타 이동, 원격 호스트로의 Datagram Routing, MTU(Maximum Transfer Unit)라는 제한에 의한 Datagram의 분할(Fragmentation)과 재배열(Re-assembly) 수행 등의 기능을 한다.

인터넷 프로토콜이 인터네트워킹을 할 수 있도록 해주는 능력은 각 노드에 유일한 주소를 부여하는 구조에 기인한다. 각 노드의 주소는 IP 프로토콜에 의해 해석되기 때문에 보통 IP 주소라 부른다. TCP/IP 네트워크에 있는 각각의 노드는 유일한 주소를 부여받는다. 주소는 실제 네트워크나 네트워크의 한 호스트를 가리킨다.

기본적으로 IP 프로토콜은 데이타 세그먼트를 패킷으로 만들어 이를 목적지까지 전달하는 역할을 담당하지만 전달 여부를 보장하지 않는다. 그리고 Internet Layer에서 원격 네트워크간 패킷의 전달을 담당하는 장치가 바로 라우터(router)인데, 주로 최적 경로를 결정하고 결정된 경로로 패킷을 전달하는 역할을 한다.

 

[1] 데이터그램의 분할(fragmentation)

모든 네트워크에는 MTU(maximum transmission unit), 즉 최대 전송 단위가 있다. 만약 한 네트워크에서 받은 데이터그램이 다른 네트워크의 MTU보다 더 크다면 전송을 위해 그 데이터그램을 더 작은 조각들로 나눌 필요가 있다.

 

[2] 데이터그램을 Transport 계층으로 전달하기

IP가 해당 호스트로 보내진 데이터그램을 최종적으로 받게 된 후, 해당 데이터그램의 데이터 부분을

올바른 Transport 계층으로 전달해야 한다. 이는 데이터그램 헤더부분의 Protocol number를 사용함으로써 가능한다.

 

[3] IP의 연결 방식과 TCP의 역할

IP가 비연결형인 이유는 물리적 계층이 가지는 신뢰성 때문이다. , 물리 계층의 신뢰성이 높으므로 데이터의 송수신 확인 없이도 목적 노드로의 전송이 가능하기 때문이다. 이 때문에 사용자는 목적지 노드가 실제로 어디에 있는지 신경 쓰지 않고 통신할 수 있게 되는 것이다. , 목적지 노드의 식별자인 IP 주소만 알고 있으면 기본적으로 그 이외의 것은 신경 쓰지 않고도 통신할 수 있게 되는 것이다. 또한 데이터의 수신여부의 확인은 IP보다 상위 계층인 전송 계층의 TCP 프로토콜에서 확인하는 것이 신뢰성이 높기 때문에 굳이 네트워크 계층에서 확인할 필요가 없게 된다. TCP 프로토콜의 존재 이유가 여기에 있다.

IP의 비연결형 방식으로 가질 수 있는 가장 큰 특징으로는 고속 데이터 전송이 가능하다는 점이다. 통신을 할 때마다 여러 가지 처리가 뒤따르는 연결형과는 달리 비연결형은 통신 처리가 단순해 지므로 그만큼 고속 전송이 가능해 지기 때문이다.

 

(3) ARP(Address Resolution Protocol)

개별 호스트는 비록 독자의 IP 주소를 할당받지만 실제의 데이타 전달은 하드웨어 주소를 알아야 한다. 따라서 이 두가지의 주소를 매칭시킬 필요가 있는데 동적으로 특정 프로토콜에 의해서 필요할 때마다 목적지 호스트의 하드웨어 주소를 찾는 것을 구현한 것이 ARP이다. , IP 주소와 라우팅 테이블은 데이터그램을 특정 물리적 네트워크로 보내지만 데이터가 네트워크를 통해 전달될 때는 네트워크에 의해 사용되는 Physical Layer Protocol을 지켜야만 한다.

TCP/IP 네트워크의 아래에 있는 물리적 네트워크는 IP 주소 지정 방식을 이해하지 못한다. Network Access 계층(Protocol)의 작업 중 하나는 IP 주소를 물리적 네트워크 주소(이더넷 주소)로 변환하는 것이다. 이 기능을 수행하는 프로토콜은 ARP이다. ARP IP 주소와 이더넷 주소간의 변환 테이블을 유지한다. ARP IP 주소를 변환해 달라는 요청을 받으면 테이블 내의 주소를 확인해 본다. 만약 그 주소가 발견되면 요청한 호스트에게 이더넷 주소를 반환한다. 만약 테이블에서 주소가 발견되지 않으면 ARP는 이더넷의 모든 호스트에게 패킷을 브로드캐스트한다. 이 패킷은 찾고자 하는 이더넷 주소에 해당하는 IP 주소를 담고 있다. 만약 패킷을 받은 호스트가 그 IP가 자기의 주소임을 확인하면 이더넷 주소를 요청한 호스트에게 전송함으로써 응답한다. 그러면 그 응답은 ARP 테이블에 캐쉬된다.

이의 역으로 Address 변환을 실현하는 것을 RARP(Reverse Address Resolution Protocol)이라 한다.

[root @edu00 linux]#arp –a

arp 명령은 현재 접속되어 있는 커넥션에 대한 도메인(-n 옵션은 IP 주소) MAC 주소를 보여준다.

 

[1] ARP 동작 과정

컴퓨터간의 통신에서 목적지 IP 주소만 알아서 통신이 이루어지는 것은 아니다. 각 노드와의 통신을 위해서는 IP 주소와 이에 대응하는 물리적인 주소 즉 하드웨어 주소(MAC 어드레스)를 알아야만 한다. 일반적으로 컴퓨터는 자신의 하드웨어 주소는 인식하지만 목적지의 하드웨어 주소는 인식하지 못한다. 이러한 이유 때문에 목적지 IP 주소를 단서로 하여 하드웨어 주소를 알아 내기 위한 방법으로 ARP(Address Resolution Protocol: 주소 결정 프로토콜)이라는 프로토콜이 쓰이게 된다.

 

[2] ARP를 이용한 통신 메커니즘

실제로 ARP를 이용하여 하드웨어 주소를 알아내기 위해서는 ARP 요청 패킷과 ARP 응답 패킷 두 종류가 필요하게 된다.

다음의 예를 보자.

 

노드 A가 노드 B에 접속하려 할 때 노드 A는 노드 B MAC 주소(하드웨어 주소)를 알아내기 위해 노드 B IP 주소(130.1.1.2)의 정보가 들어있는 ARP 요청 패킷을 보낸다. 이때 같은 세그먼트 안의 다른 노드는 이 ARP 요청 패킷을 수신하여 내용을 해석한다. 대상 IP 주소에 해당하는 노드 B MAC 주소(하드웨어 주소)를 알려주기 위해 ARP 응답 패킷을 노드 A로 반송하게 된다. , ARP 요청 패킷이란 IP 주소에서 MAC 주소를 알기 위해 보내는 패킷이며, ARP 응답 패킷은 이 ARP 요청의 대상 IP 주소에 해당하는 노드가 자신의 MAC 주소를 알려주기 위해 반송하는 패킷을 말한다.. 이처럼 ARP 응답과 요청에 의해 IP 주소로부터 하드웨어 주소를 알 수 있으므로 통신이 가능해 지는 것이다.

 

ARP 요청과 응답에 의해 얻어진 하드웨어 주소는 대개 ARP 패스라는 표에 등록되어 IP 주소와 하드웨어 주소에 관한 정보가 ARP 캐시에서 지워질 때까지 유지가 되므로, 한 번 처리된 IP 주소에 대한 ARP 요청 및 응답은 이 후 처리할 필요가 없이 바로 알 수 있게 된다.

 

(4) RARP(Reverse Address Resolution Protocol)

RARP 프로토콜은 ARP와 반대로 MAC address IP로 매핑시키는 역할을 한다. 하지만 대부분의 모든 호스트들이 통신을 하기 위해 ARP를 사용하는 것과는 달리 RARP는 특별한 경우에만 사용이 된다. 그 특별한 경우란 디스크없는 컴퓨터가 처음 전원이 들어 왔을 때 RARP 서버로부터 IP를 부여받을 때이다.

디스크 없는 컴퓨터는 중요한 데이터를 중앙 서버에 두며, 각 클라이언트가 디스크가 없이 서버의 데이터를 받아 사용하도록 하는 것으로 각 클라이언트에 사용자가 마음대로 프로그램을 설치 할 수 없도록 하고 전체 하드웨어 비용을 줄이는 이점이 있다. 현재는 보다 진보된 프로토콜인 BOOTP, DHCP 가 사용된다. 일반적으로 자체의 디스크 기억장치가 없는 웍스테이션이나 지능형 터미널에 의해 이용된다.

 

4)  Network Access Layer

이더넷 카드 등으로 연결된 물리적인 네트워크를 의미하며, 프레임을 물리적인 회선에 올리거나 내려 받는 역할, 즉 보내는 쪽은 상위 계층에서 받은 패킷을 프레임으로 만들어서 물리적인 회선에 올리게 되고, 받는 쪽은 필요한 데이타를 추출하여 조잡한 프레임을 패킷으로 변환하여 상위계층으로 전달한다.

IP Datagram을 네트워크에서 전송되는 Frame으로 만드는 작업과 IP 주소를 네트워크에서 사용되는 물리적 주소로 대응시키는 작업을 포함한다.

[root @edu00 linux]#ping -b 211.170.43.124

[root @edu00 linux]#arp -a

[root @edu00 linux]#tcpdump -x -i eth0 port 80

 

3. IP 헤더

1] IP 헤더의 정의

IP 헤더 안에는 IP 통신을 하기 위한 모든 정보가 들어 있으며, IP 데이터에 붙어 상위층에서 받은 데이터를 IP 헤더에 포함시켜 하위층에 건네 주고, 하위층에서 받은 데이터의 IP를 해석하여 필요할 경우 상위층으로 건네주는 역할을 하게 된다.

 

2] IP 헤더의 구성

다음은 IP 헤더의 구조와 각각의 역할에 대한 설명이다.

 

1) VER(Version): 버전

IP 헤더의 버전 번호로서 4비트로 이루어져 있다.

2) IHL(Internet Header Length): 헤더 길이

IP 헤더의 크기를 나타내며 4비트 크기로 이루어져 있다.

3) TOS(Type of Service): 서비스 유형

송신중인 IP의 서비스 품질을 나타내며 8비트로 이루어져 있다.

다음은 TOS의 서비스 유형이다.

비트 번호 서비스 유형
0,1,2 우선 순위
3 낮은 지연시간 요청
4 높은 처리 능력 요청
5 높은 신뢰성 요청
6,7 사용하지 않음

4) TL(Total Length): 패킷 길이

IP 헤더와 IP 데이터를 포함함 패킷 전체의 옥텍 길이로서 16비트로 이루어져 있다.

5) ID(Identification): 식별자

데이터를 상위계층에 넘겨 줄 때 참고가 되는 정보로서 16비트로 이루어져 있다. 상위 계층은 이 정보를 기준으로 분할된 데이터를 다시 구성한다.

6) FL(Flag): 플래그

패킷 분할에 관한 제어를 나타내며 3비트로 이루어져 있다.

각 비트는 다음과 같은 의미를 지니다.

비트번호 의미
0 사용하지 않음
1 분할 여부 ( 0: 분할 가능, 1: 분할 불가)
2 분할 패킷인 경우 마지막 패킷여부 판단
( 0: 마지막 분할 패킷, 1: 중간 분할 패킷)

 

7) FO(Fragment Offset): 분할 간격

원본 데이터 중 분할된 정보의 위치를 나타내며, 13비트로 이루어져 있다.

8) TTL(Time To Live): 활성화 지속 시간

패킷이 네트워크상에서 존재하는 지속 시간(단위: )을 나타내며 8비트로 이루어져 있다. 이 값이 '0'이 되면 패킷은 폐기된다.

9) PROT(Protocol): 프로토콜

상위 계층의 프로토콜의 종류를 나타내며 8비트로 이루어져 있다.

) 1 (ICMP), 6 (TCP), 17 (UDP)

10) HC(Header Checksum): 헤더 책섬

IP 헤더 책섬을 나타내며 16비트로 이루어져 있다.

11) SA(Source IP Address): 송신측 IP 주소

송신측 IP 주소를 나타내며 32비트로 이루어져 있다.

12) DA(Destination IP Address): 목적지 IP 주소

목적지 IP 주소를 나타내며 32비트로 이루어져 있다.

13) OPTION(Option): 옵션

보통은 사용하지 않으며, 시험이나 디버그 할 때 사용되며, 유동적인 길이를 가지고 있다.

14) PAD(Padding): 패딩

옵션을 선택하여 헤더가 32비트 정수 배가 되지 않는 경우 패딩(자리 채우기)을 통해 정수 배로 만든다.

15) DATA(Data): 데이터

데이터가 들어가는 부분을 나타낸다.

 

4. 네트워크 구성

1)  프로토콜과 포트

Transport Layer Application Layer에 데이타를 전달하기 위해서 포트 번호를 사용한다. 이런 포트들을 사용하여 호스트가 네트워크 상의 다른 호스트와 동시에 세션을 지원할 수 있다. /etc/services 파일을 참조한다.

 

2)  IP Address

TCP/IP 네트워크 상의 모든 호스트는 각기 고유한 IP 주소를 가지고 있다. , 호스트 컴퓨터에 있는 네트워크 인터페이스를 구별하는데 사용되는 것이 IP 주소이다.

IP 주소는 32 비트(4바이트)로 구성된 것으로 쉽게 기억하기 위해 4개의 10진수 형태로 표시하여, 각 숫자들 사이에 .(dot)을 붙여 표기한다.

IP 주소는 네트워크 주소를 나타내는 네트워크 ID와 호스트 주소를 나타내는 호스트 ID 부분으로 나눌 수 있다.

 

192.168.3.1

 IP 주소가 192.168.3.0 네트워크에 속해있는 주소라고 할 때, 192.168.3은 네트워크 ID를 나타내는 부분이고, 마지막 자리 1은 호스트 ID를 나타내는 것이다.

,  IP 주소는 192.168.3.0 네트워크(네트워크 주소를 나타낼 때는 호스트 주소 부분을 0으로 표시함)에 속하는 호스트 1을 가리키는 것이다.

 

1] A 클래스(N.H.H.H)

이 클래스에서 네트워크 ID IP 주소의 왼쪽 첫번째 바이트이다. IP 주소 첫번째 자리의 1bit '0'이며 네트워크 ID 0-127까지 나타낼 수 있다. 따라서 IP 주소는 0.0.0.0 - 127.255.255.255까지 가능하나 0.0.0.0 127.0.0.0은 각각 기본 라우터와 루프백 네트워크 주소를 나타내는 특수 용도로 사용하고 있다. 사용 가능한 네트워크 주소는 1 - 126까지이다.

 

2] B 클래스(N.N.H.H)

이 클래스에서 네트워크 ID IP 주소의 왼쪽 2 바이트이다. IP 주소 첫번째 자리의 2 bit '10'이며, 네트워크 주소는 128.0 - 191.255까지이다.

 

3] C 클래스(N.N.N.H)

이 클래스에서 네트워크 ID IP 주소의 왼쪽 3 바이트이다. IP 주소 첫번째 자리의 3 bit '110'이며, 네트워크 주소는 192.0.0 - 223.255.255까지이다.

 

4] 예약 주소

어떤 주소는 예약된 주소여서 일반적인 호스트에는 부여할 수 없다.

0 자기자신”, 1 모두를 의미한다.

호스트 주소가 모두 0이면 네트워크 주소를 의미한다.

호스트 주소가 모두 255이면 브로드캐스트 주소이다.

네트워크 주소가 127이면 loopback 주소로 규정하고 있으며 이 주소로 보내지는 어떤 데이터도 호스트로 다시 돌아온다. 그래서 네트워크 상황을 고려하지 않고도 현재 네트워크 소프트웨어가 제대로 동작하는지 체크할 수 있다.

최근의 RFC문서에서는 0 ‘this’, 1 ‘all’로 규정하고 있다.

 

3) 넷마스크

netmask는 해당 네트워크의 크기 즉 네트워크에 포함되는 호스트의 수를 결정한다. IP 주소에서 C 클래스의 경우 최대 254개의 호스트를 네트워크에 연동하여 사용할 수 있다.

 

4) 멀티플렉싱

호스트 내에서 데이터를 올바른 소프트웨어 모듈로 전달하는 프로토콜과 포트번호를 의미하며 여러 곳에서 오는 데이터를 하나의 데이터 흐름으로 결합한다. 그리고 하나의 프로토콜이 둘 이상의 응용 프로그램을 서비스할 수 있다. IP의 경우에는 둘 이상의 전송 프로토콜들에 대해서 서비스를 수행할 수 있다.

이는 멀티플렉싱(Multiplexing) 기능을 이용해서 둘 이상의 상위 프로토콜에 의해 동시에 전달되는 데이타들을 정확하게 해당 위치로 전송할 수 있으며, 해당 위치에 전송된 데이타들은 멀티플렉싱의 역변환 작용인 디멀티플렉싱(demultiplexing) 기능을 이용해 원래의 데이타를 그대로 추출해 낼 수 있다.

 

5)  TCP/IP의 동작과정

데이타를 전송하고자 하는 호스트측에서 데이타를 TCP 패킷들로 나눈다. 각각의 패킷에는 호스트의 주소, 패킷을 원래의 데이타로 합칠 때 필요한 정보, 그리고 패킷 전송에서 발생할 수 있는 오류를  검출하기 위한 정보 등을 헤더로 만들어 실제 전송할 데이타의 앞부분에 덧붙이게 된다. 다음으로 IP TCP 패킷을 받아 목적지 호스트에 대한 정보를 TCP 패킷 앞에 추가시키게 된다. 서브넷은 IP 패킷에 그들의 고유한 주소 정보를 추가한다. SLIP(Serial Line Internet Protocol)/PPP는 전화선 혹은 다른 매체를 이용해 패킷을 목적지 호스트가 포함된 라우터나 게이트웨이에게 전송한다. 물리적인 계층은 실제로 신호를 전달하는 동축케이블이나 광섬유 혹은 무선 랜을 사용할 수 있다. 패킷이 목적지에 도착하게 되면 목적지 호스트는 실제 데이타 앞에 추가된 헤더들을 제거하고 응용 프로그램에서 사용할 수 있는 데이타로 변환하게 된다.

TCP/IP상에서는 실제 전송되는 데이타보다는 이 데이타를 전송하는데 필요한 각종 정보가 더 많이 필요하다. 그래서 실제 전송되는 사용자의 데이터보다는 데이타 앞에 추가되는 헤더들의 크기가 더 크다. 이런 단점을 해결하기 위해 가상 전송 경로(Virtual Path)를 미리 정의해 두고 전송하는 방법이 있다.

 

다음은 네트워크를 구성하는 기본적인 요소들이다.

1] 라우터(router)

하나 이상의 메트릭을 사용해 네트워크 트래픽을 포워딩해야 하는 최적 경로를 결정하는 네트워크 계층 장치로, 네트워크 계층 정보를 기초로 한 네트워크에서 다른 네트워크로 패킷을 포워딩한다. 때로 게이트웨이라 불린다.

  

2] 게이트웨이(gateway)

IP 네트워크 구조에서 라우팅 장치를 의미하며, 라우터와 혼용되고 있다. 특별히 게이트웨이의 역할은 서로 다른 네트워크 사이에서 정보를 변환하는 역할을 담당하는 시스템이다.

 

3] 라우팅 테이블

게이트웨이는 네트워크 사이에서 데이터의 경로를 지정해 주지만, 게이트웨이 뿐만 아니라 모든 네트워크 장치들과 호스트들도 라우팅 결정을 내려야만 한다. 라우팅은 네트워크 단위로 이루어지기 때문에 IP는 주소의 네트워크 부분에 기반하여 라우팅 결정을 내린다.

 

- 목적지 호스트가 로컬 네트워크에 있으면 데이터는 목적지 호스트로 전달된다.

- 목적지 호스트가 원격 네트워크에 있으면 데이터는 로컬 게이트웨이로 넘겨진다.

 

4] 소켓

잘 알려진 port는 원격 컴퓨터가 특정 네트워크 서비스를 위해 어떤 포트로 접속해야 하는지 알 수 있도록 해주는 표준화된 포트번호이다. 송신자와 수신자 모두 특정 프로세스에 연관된 데이타는 특정 포트를 사용할 것이라는 것을 알기 때문에 접속과정을 단순화시켜준다.

IP 주소와 포트 번호의 조합을 소켓이라 한다. 소켓은  전체 인터넷 안에서 하나의 네트워크 프로세스를 단일하게 나타낸다.

 

5] 프로토콜 번호

프로토콜 번호는 데이타그램 헤더에 위치하고 있다. 그 값은 데이타가 지나가야만 하는 IP 상위의 계층들의 프로토콜을 구분해준다. Unix 시스템에서 프로토콜 번호는 /etc/services에 정의되어 있다. 이 파일은 프로토콜 이름과 그 이름에 연결된 프로토콜 번호를 담고 있는 일종의 표이다. 256에서 1024번까지의 포트번호들은 유닉스 시스템을 위해 개발된 서비스에 사용된다. 포트번호는 특정 전송 프로토콜 내에서만 유일하다. , TCP UDP 모두 같은 포트번호를 할당할 수 있다. 프로토콜과 포트번호의 조합이 데이타가 전달되어야 하는 특정 프로세스를 단일하게 지정한다.

 

5. 네트워크 설정

1) 초기 설정하기

네트워크에 제대로 연결하기 위해서는 다음과 같은 순서가 필요하다.

1] NIC IP 주소를 부여한다.

2] 게이트웨이와 라우팅 경로를 설정한다.

3] DNS 서버를 지정한다.

4] 설정을 확인한다.

 

2) 네트워크 구성 개념

1] IP Address

각 호스트 컴퓨터에 있는 네트워크 인터페이스를 구별하기 위해 사용하는 고유한 번호로 일반적으로 IP 주소는 32비트로 구성되어 있으며 총 4개의 10진수 형태로 표시한다. 4개의 10진수를 이루는 각 숫자들 사이는 .(dot)을 붙여 표기하는데, 0부터 255까지의 숫자로 구성되어 있다.

 

2] netmask

로컬 네트워크와 외부 네트워크를 구별하기 위해 사용하는 방법으로 하나의 거대한 네트워크를 여러 개로 나누고 나누어진 네트워크를 서로 연결하여 사용하는 것을 말한다.

 

3] network

자신이 속해있는 네트워크 범위 주소를 network 주소로 사용한다.

 

4] broadcast

어떤 네트워크 전체에 메시지를 보내는 방법으로 boradcast를 사용한다.

 

5] host

컴퓨터 시스템의 이름이며 실제로 컴퓨터가 인식하는 이름은 아니다.

 

6] 게이트웨이

외부 네트워크와 통신하는데 꼭 필요한 특정 IP 주소를 게이트웨이 주소라 하는데 이는 서로 다른 별개의 네트워크를 연결하기 위한 것이다.

 

7] nameserver

도메인 네임을 IP Address로 그리고 IP Address를 도메인 네임으로 해석하는 기능을 담당한다.

 

3) 네트워크 설정 tools

1] netconfig

콘솔상에서 네트워크를 설정하는 유틸리티로 명령행 프롬프트에서 실행한다. 이 명령을 통해 설정된 네트워크 정보는 /etc/sysconfig/network 파일과 /etc/sysconfig/network-scripts/ifcfg-eth0 파일, 그리고 /etc/resolv.conf 파일에 쓰여진다.

[root @edu00 /root]#netconfig

 

2] netcfg

X 윈도우 상에서 실행되는 유틸리티로 네트워크 관련 여러가지 작업을 설정할 수 있다. 일반적인 네트워크 설정을 비롯하여 IP Alias IP Forwarding을 설정할 수 있으며 netconfig와 같이 설정된 내용은 네트워크 관련 파일에 저장된다.

[root @edu00 /root]#netcfg

 

3] netconf

리눅스 통합 설정 유틸리티인 linuxconf의 모듈로서 네트워크 관련 부분만 따로 설정할 수 있는 유틸리티이다.

[root @edu00 /root]#netconf

 

4] linuxconf

리눅스 통합 설정툴이며 리눅스 설정을 그래픽 모드에서 설정할 수 있으며 사용자의 편의를 위해 다양한 기능을 제공한다.

[root @edu00 /root]#linuxconf

 

4) 네트워크 설정 파일

1] /etc/hosts

IP Address와 호스트 네임을 매핑시킨다. 일반적으로 이 파일에 등록된 IP Address와 호스트 네임은 네임서버를 거치지 않는다.

[root @edu00 linux]#vi /etc/hosts

127.0.0.1             localhost.localdomain localhost

211.170.43.124 edu00.net

 

2] /etc/resolv.conf

시스템이 속해 있는 네임서버 IP를 등록하는 파일이며 일반적으로 search nameserver라는 키워드를 이용한다. search라는 키워드로 검색이 가능한 도메인은 최대 6개이며 nameserver 키워드로 설정 가능한 네임서버의 수는 3개이다.

[root @edu00 linux]#vi /etc/resolv.conf

search eduxx.net dacom.com

nameserver 164.124.101.2

 

3] /etc/sysconfig/network

[root @edu00 linux]#vi /etc/sysconfig/network

NETWORKING=yes

# FORWARD_IPV4=no                   

# IP 패킷을 전송하거나 전송받을 때, 게이트웨이나 라우터로 사용할 때 yes

HOSTNAME=edu.edu00.net

DOMAINNAME=edu00.net

GATEWAY=192.168.1.254

GATEWAYDEV=eth0

 

4] /etc/sysconfig/network-scripts/ifcfg-eth0

[root @edu00 linux]# vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

BOOTPROTO=static

# 시스템이 dhcp를 사용한다면 dhcp로 등록한다.

IPADDR=192.168.1.10

NETMASK=255.255.255.0

NETWORK=192.168.1.0

ONBOOT=yes

 

5] /etc/rc.d/init.d/network

[root @edu00 linux]# /etc/rc.d/init.d/network restart

 

5)  네트워크 설정 명령어

1]  ifconfig

ifconfig 명령을 사용하여 네트워크 인터페이스 장치 즉, 이더넷 카드를 설정하고 상태를 확인할 수 있다. Ifconfig는 네트워크 인터페이스 카드의 IP 주소, netmask 등의 주소를 설정하고, 네트워크 인터페이스 장치의 작동을 활성화/비활성화 시킬 수 있다.

 

(1) 사용형식

#ifconfig interface ip_address [up/down] option

interface명 부분에 네트워크 인터페이스 장치 이름을 사용하는데, 첫번째 인터페이스일 경우 eth0, 두 번째 인터페이스일 경우 eth1 등의 이름을 갖게 된다. ip_address 부분에는 각각의 이더넷 카드에 부여할 IP Address나 도메인명을 입력하거나 /etc/hosts 파일을 통해서 찾아진 호스트의 이름일 수 있다. up/down은 장치를 활성화 또는 비활성화시키는 부분이며 option 부분에는 netmask network 설정을 할 수 있다.

 

(2) 옵션

up : 인터페이스를 사용 가능하게 하는 옵션으로, IP 주소가 ifconfig 명령과 함께 사용된다면 굳이 사용하지 않아도 되는 옵션으로, 각 인터페이스 정보에서 UP RUNNING이라고 나타나는 것이 이 옵션에 의한 정보이다.

 

down  인터페이스를 사용하지 않을 때 이용하는 옵션으로, 이 옵션을 사용하게 되면 해당 라우팅 정보까지 모두 사라진다.

 

netmask mask_address : 해당 인터페이스에 대해 서브넷 마스크를 지정하는 옵션으로, 0x로 시작하는 16진수를 이용해도 되지만 일반적인 IP 주소 표기 형태를 이용하는 것이 사용에 편리할 수 있다. 어느 것을 사용하든 편리한 것을 mask 값으로 지정하면 된다.

 

pointopoint address : 단순히 두 호스트에 대한 링크를 지정할 경우에는 Point-to-Point IP 링크를 이용할 수 있는데, 이때 사용하는 옵션으로 SLIP PLIP 인터페이스가 설정되어 있어야 한다. Point-to-Point 주소가 사용된다면 인터페이스 정보에서 POINTOPOINT가 출력된다.

 

broadcast address : 브로드캐스팅 주소는 IP 주소 중에서 hostid 영역을 모두 1로 설정한 주소인데, 이 값을 설정하여 네트워크와 관련된 내용을 다른 시스템으로부터 얻어와야 할 경우 등에 사용되며, 브로드캐스팅 주소가 설정되면 BROADCAST 라는 말이 인터페이스 정보에서 출력된다.

 

irq : 특정 시스템에 의해서 사용되는 IRQ(Interrupt Request Number)를 설정할 때 사용하는 옵션으로 일반적으로 PLIP를 사용할 때 유용하다.

 

metric number : 해당 인터페이스의 라우팅 테이블에 라우팅 값을 추가하기 위한 옵션으로, 라우팅 값은 해당 네트워크의 라우팅 테이블들을 생성하는 RIP(Routing Information Protocol)에 의해서 사용된다. ifconfig에 의해서 기본적으로 사용되는 라우팅 값은 0이다. 하지만 RIP 데몬을 가동하지 않는다면 굳이 이 값을 설정할 필요는 없으며, 설사 RIP 데몬을 가동한다 하더라도 라우팅 값은 변경할 일이 거의 없을 것이다.

 

mtu bytes : 인터페이스가 한 번의 처리로 전송할 수 있는 데이터의 크기로 Maximum Transmission Unit의 약자이다. 일반적으로 이더넷의 경우 1500 비트 정도의 패킷을 한 번에 전송할 수 있다.

 

arp : 네트워크 카드의 물리적인 주소(MAC 주소)를 이용해서 IP 주소를 획득할 수 있는 Address Resolution Protocol을 사용할 수 있도록 설정하는 것으로, 브로드캐스팅이 가능한 네트워크에서는 기본적으로 사용이 가능하도록 설정된다.

 

-arp : arp를 사용하지 않도록 하는 것으로, NOARP라는 항목이 인터페이스 정보에 출력된다.

 

promisc : 브로드캐스팅이 가능한 네트워크에서 이 옵션이 설정되면, 설정된 인터페이스가 네트워크 상의 모든 패킷을 받아들이게 되는데, 네트워크 트래픽을 분석(패킷 필터링이나 이더넷 스누핑: Ethernet snooping)할 필요가 있을 때 사용하는 옵션이다. tcpdump와 같은 프로그램이 이 옵션을 이용하게 된다. 반면에 외부의 침입자도 이 옵션을 이용하여 트래픽을 분석하게 되면 관리자의 패스워드를 획득할 수도 있다. 이런 경우를 방지하기 위해서는 외부 사용자가 내부 네트워크에 물리적으로 연결을 하지 못하게 하는 방법을 사용하거나 ssh나 커버로스(Kerberos)와 같은 보안 프로토콜을 사용해야 한다. 이 옵션이 설정되면 PROMISC 항목이 출력된다.

 

-promisc : promisc 옵션을 해제한다.

 

allmulti : 멀티캐스팅 주소를 설정하는 것으로, 이더넷을 기반으로 한 화상회의 등에 유용하게 사용될 수 있다. 이 옵션이 설정되면 멀티캐스트 패킷은 모두 받아들이게 되며, 설정되면 ALLMULTI 항목이 출력된다.

 

-allmulti : 멀티캐스팅 주소를 더 이상 사용하지 않을 때 이용하는 옵션이다.

 

(3) 사용 예

[root @edu00 linux]#ifconfig

현재 작동하는 모든 네트워크 인터페이스를 보여준다.

eth0                    Link encap:Ethernet         Hwaddr 00:50:BF:21:AE:84

                    inet addr:192.168.1.3 Bcast:192.168.1.255 Mask:255.255.255.0

                    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

                    RX packets:165285 errors:0 dropped:0 overruns:0 frame:0

                    TX packets:132184 errors:0 dropped:0 overruns:0 carrier:0

                    collisions:0 txqueuelen:100

                    Interrupt:11 Base address:0xc000

 

lo                        Link encap:Local Loopback

                    inet addr:127.0.0.1 Mask:255.0.0.0

                    UP LOOPBACK RUNNING MTU:3294 Metric:1

                    RX packets:7151 errors:0 dropped:0 overruns:0 frame:0

                    TX packets:7151 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:100

eth0 lo는 현재 시스템에 설정된 인터페이스 장치를 보여준다. eth0는 이더넷 장치인 NIC를 나타내고 lo는 로컬 루프백 장치로 네트워크 디버깅용으로 사용한다. lo 인터페이스의 IP 주소는 127.0.0.1 localhost라는 더미(dummy) 호스트 이름과 함께 자주 사용되는 주소가 등록되어 있다. 127.0.0.1 A 클래스에 속하는 주소이기 때문에 서브넷 마스크가 255.0.0.0이다. 하지만 브로드캐스팅 주소는 보이질 않는데, 이는 loopback에서는 브로드캐스팅이라는 것이 별다른 의미가 없기 때문이다. 실제로 시스템에 네트워크 카드가 존재하지 않더라도 loopback을 이용해서 각종 네트워크 환경을 테스트해볼 수 있다. ping localhost telnet localhost라는 명령을 내리면 마치 네트워크가 존재하는 것처럼 시스템이 작동할 것이다. 그리고 사용자의 시스템에 네트워크이 설정 되어 있지 않더라도 lo 로컬 루프백 장치는 설정이 되어 있어야 하는데, 이는 시스템에서 네트워크 환경 기반으로 구동되는 프로그램들을 위함이다.

 

먼저 eth0 부분을 보면 Link encap:Ethernet은 네트워트 인터페이스의 종류와 장치에 사용중인 프로토콜이 이더넷임을 의미한다. Hwaddr은 이더넷 카드에 있는 고유의 하드웨어 주소로 48비트로 되어 있으며 일반적으로 하드웨어 주소를 MAC(Media Access Control) address라고도 한다.

inet addr IP Address를 나타내고 Bcat는 브로드캐스트를 말하고 Mask는 넷마스크 값을 나타낸다.

UP은 인터페이스 활성화를 의미하며 BROADCAST는 브로드캐스트를 사용한다는 의미이고, RUNNING은 장치가 지금 동작중이라는 의미이다.

MTU Maximum Transmission Unit으로 한번에 최대 전송 패킷의 크기를 말한다. 보통 디폴트로 1500을 지정한다.

Metric은 라우팅 비용에 기초해서 만들어진 라우팅 테이블(Metric)에 대한 정보가 나타난다.

RX, TX 는 받은 패킷과 보낸 패킷에 대한 통계를 보여주고 데이터 송수신 중에 발생한 충돌과 큐(queue)에 쌓여있는 패킷의 양 등에 대한 정보가 나타나며 에러가 많으면 네트워크 연결부분(물리적인)을 살펴보아야 한다.

 

다음 lo 부분은 로컬 루프백 장치로 inet addr 127.0.0.1을 사용하고 Mask 255.0.0.0이다.

Ifconfig 명령어를 이용해서 시스템에 IP 주소를 192.168.10.1 netmask 255.255.255.0을 설정하기 위해서는 명령 프롬프트에 ifconfig를 입력한 다음 위에서 제시된 사용형식에 따라 입력하면 된다.

 

#ifconfig eth0 192.168.10.1 netmask 255.255.255.0

eth0는 랜카드 즉 이더넷 카드를 말하는데, 시스템에 이더넷 카드가 1개일 때 eth0, 두개일 때 두번째는 eth1 등으로 설정하여 사용할 수 있다.

 

2] route

네트워크 설정에 있어서 가장 중요한 것 중의 하나가 라우팅에 관련된 route 명령어로, 라우팅이란 패킷을 어느 곳으로 보낼 것인지를 결정하는 것으로, 이에 대한 정보를 저장하고 있는 것이 라우팅 테이블이다. 라우팅 테이블에서 외부와 통신하는 프로토콜을 게이트웨이라 하는데, 일반적으로 하나의 시스템은 게이트웨이를 통해 또 다른 네트워크에 연결된다. 이때 게이트웨이는 단순히 둘 또는 그 이상의 이더넷을 링크시킬 뿐만 아니라, 인터넷 같은 외부 세계로도 링크시킨다. 게이트웨이 서비스를 이용하려면 네트워킹 레이어에 추가적인 라우팅 정보를 설정해야 한다. 그리고 설정된 라우팅 정보를 커널에 알려주어야 하는데, 이런 목적을 달성하기 위해 route 명령어를 사용한다.

route 명령을 이용해서 게이트웨이를 설정할 수 있고 라우팅 테이블의 내용을 확인하거나 설정할 수 있다. 아무런 옵션 없이 실행하면 라우팅 테이블의 설정 상태 정보를 확인할 수 있다.

 

(1) 사용형식

#route option destination [netmask Nm][gw GW]

option 부분에서는 라우팅 테이블에 추가하거나 삭제할 수 있는 add delete를 사용할 수 있고, destination 부분에는 host 주소나 네트워크 주소 혹은 default를 설정할 수 있고, gw에는 호스트가 사용할 게이트웨이 주소를 설정할 수 있다.

 

#route

#route add default gw 게이트웨이주소

#route del default gw 게이트웨이 주소   

 

#route

Destination    Gateway   Genmask        Flags   Metric  Ref  Use   Iface

192.168.3.0   *          255.255.255.0     U     0       0    0      eth0

127.0.0.1     *          255.0.0.0          U     0       0    0       lo

Default     192.168.3.254  0.0.0.0       UG    0       0    0       eth0

구조를 살펴보면 먼저 Destination에는 목적지 네트워크나 목적지 호스트 주소가 온다. 그 밖의 외부 목적지로 연결을 하기 위해서는 여기에 원하는 주소가 추가되어야 한다. Gateway는 바로 앞의 목적지로 나가도록 해주는 게이트웨이 주소이다. Genmask는 넷마스크를, Iface는 목적지로 나갈 때 사용되는 인터페이스 카드이다.

 

해석을 하면 192.168.3.0/24로 나가는 패킷은 eth0를 이용하여 * 게이트웨이를 통해 보내진다는 의미이며 현재는 192.168.3 네트워크와 로컬 호스트가 목적지로 설정되어 있다. 외부로 나가는 방법을 정의하기 위해 마지막 줄을 설정했는데, default로 나가는 패킷은 eth0을 이용하여 192.168.3.254를 통해(게이트웨이로) 나가라는 의미이며 이 설정으로 인해 외부와 통신이 가능해진다.

 

3]  설정 확인

[root @edu00 linux]#ping www.yahoo.co.kr

[root @edu00 linux]#ping –c 1 localhost

Warning:no SO_TIMESTAMP support, failing back to SIOCGSTAMP

PING edu00(127.0.0.1) from 127.0.0.1:56(84) bytes of data

64 bytes from edu00(127.0.0.1):icmp_seq=0 ttl=255 time=136 usec

1 packet transmitted, 1 packet received, 0% packet loss

round-trip min/avg/max/mdev=0.068/0.080/0.110/0.016 ms

 

time을 보면 각 패킷이 전송되어 되돌아오는 시간을 확인할 수 있고, icmp_seq의 숫자는 도달하는 패킷의 순서를 보여준다. ^C를 눌러 종료하면 마지막 2줄이 추가되어 출력되는데, 여기에 패킷 손실 비율이 표시된다. 0%가 되어야 안정적인 네트워크라 할 수 있다.

 

6. TCP/IP 진단과 해결

1) 기본 연결 상태 점검하기 (ping)

네트워크 설정이 끝나면 수시로 네트워크의 속도나 호스트의 가동 여부 등을 살펴야 한다. 이때 사용하는 명령이 ping인데, ping 명령은 각 컴퓨터로부터 원격 호스트가 접근 가능한지 그 여부를 test한다.

사용법은 ping 다음에 단순히 원하는 호스트의 IP 주소를 입력하면 된다. ping 64 바이트의 ICMP(Internet Control Message Protocol) 패킷을 보내, 밀리 초 단위의 반응 시간(time 항목)과 패킷이 살아있는 시간(TTL: time to live 항목) 등을 계속 표시하다가 마지막으로, ping 테스트의 결과를 통계처리해서 보여주게 된다. 일반적으로 ping은 무한정 계속 ICMP 패킷을 날리기 때문에 –c 옵션을 사용해서 ping의 개수를 제한할 수도 있다. 일반적으로 ping을 이용한 접속을 점검할 때 로컬 호스트, 동일 네트워크내, 게이트웨이, 외부 네트워크내 호스트 순서로 하면 그 중에 문제가 발생하면 에러 메시지를 확인하고 설정을 수정한다.

 

1] ping 에러 메시지

(1) Unknown host

원격 호스트 이름을 네임 서버를 통해 적절한 IP 주소로 번역할 수 없는 경우, local name server나 원격 name server가 제대로 동작하지 않을 경우, 이름을 잘못 입력했거나, 원격 network과의 통신에 문제가 발생할 경우에 나타나는 메시지로 nslookup dig을 이용해 점검하거나 네임서버 설정을 점검한다.

     

(2) Network unreachable :

local system이 원격 system으로 라우팅 할 수 없을 경우를 의미하므로 라우팅 테이블을 점검한다.

 

(3) no answer :

원격 host가 응답하지 않을 경우, ping의 경우 100% packet loss

 

2] 문제점에 대한 예상 가능한 원인들

원격 호스트가 down된 경우

local 또는 원격 host가 잘못 설정된 경우

gateway network down된 경우

원격 host routing 문제점

 

3] 해결을 위한 간단한 진단

netstat ifconfig 이용해 local 설정 점검

traceroute 이용 원격 시스템으로의 routing 점검

 

2)  network 문제점 해결하기

1] ifconfig 이용해 문제 해결하기

ifconfig network interface 설정 상황을 점검한다. 잘못된 IP 주소나 서브넷 마스크 및 broadcast 주소를 확인하는데 효과적이다.

[root @edu00 linux]#ifconfig

[root @edu00 linux]#ifconfig eth0

[root @edu00 linux]#ifconfig lo

 

ifconfig 명령의 출력 설명

UP : interface 사용 가능

BROADCAST : interface broadcast를 지원

RUNNING : interface가 동작 중

MULTICAST : interface가 멀티캐스팅을 지원

ethernet address : PC IRQ I/O 기본 주소. 패킷 통제

 

2] netstat (network status)

네트워크의 연결 상태나 라우팅 테이블, 네트워크 인터페이스에 대한 입출력 등의 통계, 매스커레이딩 연결 등에 대한 정보를 제공해 주는 명령어이다. 이 명령어는 네트워크와 관련된 다양한 정보를 출력하는데, network interface, network socket, network routing table에 관련된 자세한 설명을 보여준다. 옵션을 주지 않고 실행하면 현재 네트워크 인터페이스에 관련된 각종 통계와 연결된 프로그램들의 상태와 접속 포트 등의 자세한 정보를 포함한 열려 있는 모든 소켓과 접속을 보여준다. 일반적으로 제공되는 정보의 종류는 첫번째 입력되는 옵션에 의해서 결정된다.

(1) 옵션

-r, --route : 커널의 라우팅 테이블을 보여준다.

-g, --groups : 멀티캐스팅 그룹에 대한 정보를 출력한다.

-i, --interface=name : name으로 지정된 인터페이스, 혹은 모든 인터페이스에 대한 정보를 출력한다.

-M, --masquerade : 마스커레이딩으로 연결된 리스트를 출력한다.

-s, --statistics : 각각의 프로토콜에 대한 통계 요약을 보여준다.

 

(2) 출력 정보

명령행에서 netstat라는 명령을 내리면 다양한 정보들이 출력되는데,이러한 정보를 살펴보도록 하자

#netstat | more

Active Internet connections (w/o servers)

Proto Recv-Q Send-Q Local Address           Foreign Address         State     

tcp        0     40 eduserver:ssh           211.170.43.126:2136     ESTABLISHED

Active UNIX domain sockets (w/o servers)

Proto RefCnt Flags       Type       State         I-Node Path

unix  8      [ ]         DGRAM                    793    /dev/log

unix  3      [ ]         STREAM     CONNECTED     1344446 /tmp/.ICE-unix/4642

unix  3      [ ]         STREAM     CONNECTED     1344445

unix  3      [ ]         STREAM     CONNECTED     1344443 /tmp/.X11-unix/X0

 

Active Internet connections (w/o servers)

첫 줄의 Active Inernet connections는 현재 활성화된 인터넷 연결에 대한 정보를 출력하는데, Proto는 어떤 프로토콜(TCP, UDP, raw)들이 사용되고 있는지를 나타내며, Recv-Q는 연결된 소켓에서 큐(queue)에 데이터가 쌓여있는 양을 바이트 단위로 나타내는데, 큐에 쌓여있다는 것은 해당 응용 프로그램이 인터페이스로부터 아직 읽어가지 않은 데이터 양을 의미한다. Send-Q는 원격 호스트에 의해서 읽혀 가지않은 데이터의 양이 큐에 얼마나 쌓여 있는지를 의미한다. Local Address 항목은 로컬 호스트의 소켓에서 사용하고 있는 IP 주소와 포트 번호가 출력되는데, -n(--numeric) 옵션이 지정되지 않으면 잘 알려진 포트의 경우에는 포트 번호를 출력하는 것이 아니라 /etc/services 파일에 정의된 포트 이름이 사용되고, 호스트의 주소도 IP 주소가 아닌 도메인 서버에 등록된 공식 이름이 표시된다. Foreign Address 항목은 현재 연결된 소켓에 대한 원격지의 정보를 보여주는데, Local Address 항목에 대한 내용과 동일한 적용이 된다. 그리고 States 항목은 소켓의 상태(state)에 대한 것인데, 이때 주의할 것은 UDP를 사용하는 raw 형식은 상태가 존재하지 않는다는 것이다. 소켓의 상태에 대해서 알아보자.

상태 설명
ESTABLISHED 정상적으로 소켓이 연결된 상태를 의미
SYN_SENT 소켓을 생성하기 위해서 시도하고 있는 경우
SYN_RECV 원격에서 소켓에 대한 연결 요청이 있는 경우
FIN_WAIT1 소켓이 끝나고, 연결을 닫고 있는 상태
FIN_WAIT2 연결이 끝나고, 원격에서 소켓이 끝나기를 기다리는 상태
TIME_WAIT 네트워크 상에 존재하는 패킷을 처리 완료하고 난 후 소켓이 닫혀지기를
기다리는 상태
CLOSED 소켓이 사용되지 않고 있는 상태
CLOSE_WAIT 원격에서 종료되고, 소켓이 닫혀지기를 기다리는 상태
LAST_ACK 원격에서 종료되고, 소켓이 닫혀진 상태이며, ack(acknowledgement)
기다리는 상태
LISTEN 외부의 소켓 연결에 귀 기울이고 있는 상태
CLOSING 양쪽의 소켓은 끝났지만 전달된 데이터를 아직 획득하지 못해 기다리는 상태
UNKNOWN 소켓의 상태를 파악할 수 없는 경우

이 외에 소켓의 소유자가 표시될 경우가 있는데, 이때는 User 항목이 별도록 표시된다. PID/Program name은 소켓을 생성한 PID와 프로세스를 슬래시로 구분하여 나타낸다. 이를 제대로 표시하기 위해서는 –-program 옵션이 사용되어야 하며, 슈퍼 유저의 권한이 있어야 다른 사용자들이 수행하고 있는 프로그램 목록을 볼 수 있다.

 

Active UNIX domain sockets (w/o servers)

Active UNIX domain sockets(w/o servers)이라는 항목에서 출력되는 정보들은 다음과 같다.

Proto 항목은 소켓에 의해서 사용되는 프로토콜(일반적으로 unix)이 표시된다. RefCnt 항목은 참조 횟수를 의미하는 것으로, 예를 들면 해당 소켓에 연관된 프로세스의 수 등이 표시된다. Flags 항목은 ACC(SO_ACCEPTON이 설정된 경우), W(SO_WAITDATA이 설정된 경우), N(SO_NOSPACE가 설정된 경우) 등의 값들이 표시되며, SO_ACCEPTON 상태는 연결 요청을 기다리는 프로세스에 의해 소켓이 연결되지 않은 경우를 표시하며, 나머지 두 경우는 일반적인 인터넷 환경에서는 사용되지 않는다.

다음은 소켓의 접근 형태(type)를 나타낸다.

형태 설명
SOCK_DGRAM 비연결(connectionless) 모드인 UDP에 의해서 사용되는 경우
SOCK_STREAM 연결(connection) 모드인 TCP(stream)에 의해서 사용
SOCK_RAW raw socket에 의해서 사용되는 소켓
SOCK_RDM Reliably-delivered message 서비스를 위해서 사용된 경우
SOCK_SEQPACKET 연속적인 패킷이 지원되는 경우
SOCK_PACKET raw interface access socket
UNKNOWN 아직 알려지지 않은 소켓을 사용하는 경우

다음은 소켓의 상태(state)를 나타낸다.

상태 설명
FREE 소켓이 할당되지 않은 상태
LISTENING 연결 요청에 소켓이 귀 기울이고 있는 상태
CONNECTING 연결을 설정하기 직전의 소켓 상태
CONNECTED 연결이 이루어진 상태
DISCONNECTING 연결이 끊어지고 있는 소켓의 상태
비어있는 경우 다른 소켓과 연결되지 않은 상태
UNKNOWN 어떤 경우에도 이런 상태는 볼 수 없다

PID/Program name 항목은 소켓을 열고 있는 프로세스의 IP와 프로세스의 이름이 출력된다. 그리고 Path는 소켓에 연결된 프로세스의 경로명이 표시된다.

 

(3) 사용 예

[root @edu00 linux]#netstat

[root @edu00 linux]#netstat -i

[root @edu00 linux]#netstat -nr

[root @edu00 linux]#netstat –er

 

3] traceroute (해당 목적지까지의 경로 추적)

local host에서 원격 host까지 packet routing 경로를 추적한다. 원격 host까지의 routing 경로에 해당되는 각 gateway의 이름과 IP주소 출력한다. 현재 목적지의 접속이 불가능할 때 내부 네트워크에 이상이 없으면 traceroute를 이용하여 어디에서 접속이 끊기는 지를 추적할 수 있다. 둘 이상의 인터페이스가 있을 경우 –i 옵션을 사용해 인터페이스를 지정할 수도 있다.

[root @edu00 linux]#traceroute yahoo.co.kr

* 표시는 해당 packet에 대한 응답을 받지 못할 때 *를 출력한다.

 

4] 라우팅

라우팅은 라우팅 테이블에 들어있는 내용을 기초로 해서 데이터를 전달하는 과정을 말한다. 기억해야 할 것은 모든 시스템이 데이터 라우팅에 참여하지만 모든 시스템이 라우팅 프로토콜(라우팅 테이블을 생성하는데 기본이 되는 정보들을 시스템끼리 교환하는 프로토콜)을 실행할 필요는 없다는 것이다. 이는 리눅스 시스템에서 라우팅을 설정하는데 라우팅 프로토콜이 없어도 된다는 것을 의미한다.

보통 라우팅 설정 방식은 다음의 3가지로 이루어진다.

 

(1) 최소 라우팅

인터넷에 연결되어 있지 않은 네트워크(고립된 네트워크)의 경우 최소의 라우팅 테이블만 존재하면 되는데, 최소의 라우팅 테이블은 ifconfig 명령으로 만들어질 수 있다. 우선 만들어진 라우팅 테이블을 netstat 명령을 이용해서 살펴보면 다음과 같은 형식으로 구성되어 있을 것이다.

#netstat –rn
Kernel IP routing table
Destination    Gateway      Genmask       Flags  MSS Window  irtt  Iface
127.0.0.0      0.0.0.0        255.0.0.0       U        0 0         0    lo
222.111.11.0   222.111.11.1  255.255.255.0  UG      0 0         0     eth0

첫번째 라인은 lo 인터페이스가 설정되었을 때 만들어진 loopback 경로이며, 두번째 항목은 eth0 인터페이스를 통해 222.111.11.0 네트워크로 데이터를 전달하는 경로이다. 위의 라우팅 테이블은 단지 하나의 네트워크 경로(222.111.11.0)만을 가지고 있다. 그러므로 해당 시스템은 자신이 소속된 네트워크의 호스트하고만 통신이 가능하다. , www.daum.net 호스트로 ping 명령을 실행해보면 호스트에 도달할 수 없다는 메시지가 출력될 것이다.

 

(2) 정적 라우팅

인터넷에 연결될 수 있도록 제한된 수의 게이트웨이를 제공하는 네트워크는 정적 라우팅(static routing)으로 설정될 수 있다. 해당 network에 하나의 게이트웨이만 존재할 경우 정적 라우팅은 시스템 관리자가 route 명령을 이용해서 생성할 수도 있고, 네트워크 변화가 없는, 즉 경로들이 변경되지 않는 곳에 가장 적합하다.

먼저 route 명령에 대해 알아보자

route 명령은 커널의 IP 라우팅 테이블을 관리하도록 한다. ifconfig 명령에 의해서 인터페이스가 설정되고 나면 이 인터페이스를 이용한 정적 라우팅 테이블을 관리하게 된다. 라우팅 테이블을 변경할 때는 add del 옵션을 이용하고, 이 옵션이 없다면 현재 설정된 라우팅 테이블이 표시된다.

다음은 지원되는 옵션들이다.

옵션 설명
-A family 지정된 주소 블록을 사용한다.
-F 커널의 FIB(Forwarding Information Base) 라우팅 테이블을 사용(기본 설정 값)
-C 커널의 라우팅 캐쉬에 대해서 동작
-n 호스트 이름이 아니라 숫자 형식의 주소를 표시
-e 라우팅 테이블을 netstat 표시 형식으로 출력
del 라우팅 테이블의 경로 하나를 삭제
add 라우팅 테이블의 경로 하나를 추가
target 목적지의 호스트나 네트워크 지정. IP 주소나 호스트 이름 사용 가능
-net target이 네트워크인 경우
-host target이 호스트인 경우
netmask 네트워크에 대한 경로를 추가할 때 넷마스크 지정
gw 패킷을 전송할 게이트웨이를 지정. 지정된 게이트웨이는 반드시 접근이 가능해야
하며, 이는 정적 라우팅에 대한 설정을 해야 함을 의미한다.
metric M 라우팅 테이블에서 메트릭 영역을 M으로 설정
mss M 해당 라우터를 통해 전송될 수 있는 TCP의 최대 세그먼트 크기(Maximum segment size) M 바이트로 지정. 기본값 = MTU 길이- 헤더길이.
TCP 패킷의 크기를 강제적으로 줄이려 할 때 사용
reject 경로 검색을 못하게 하기 위해서 블록킹 경로를 설치할 때 사용
dev If 특정 장치에 경로를 지정할 때 사용. 명령행에서 dev If가 가장 마지막에 사용될 때는
dev를 생략할 수 있다.

 

다음은 몇가지 예들이다.

#route add –net 192.168.10.0 netmask 255.255.255.0 dev eth0

eth0 인터페이스에 192.168.10.0 네트워크에 대한 경로를 추가한다. 함께 적용되는 넷마스크는 C 클래스임을 나타낸다. 하지만 192 IP 주소가 시작할 경우 대부분 C 클래스이기 때문에 굳이 netmask 항목은 사용하지 않아도 된다. 또한 dev라는 옵션도 생략이 가능하다.

 

#route add default gw 192.168.10.1

기본 라우팅 경로를 추가하는 예로, 이 경로를 이용하는 모든 패킷들은 192.168.10.1이라는 게이트웨이를 통과하게 된다. 기본 경로는 목적지로 가는 다른 특정한 경로가 없을 때마다 사용되고, 네트워크에 게이트웨이가 하나뿐인 경우에는 기본 경로를 이용해서 모든 트래픽이 해당 게이트웨이를 지나도록 지정한다.

 

#route add –net 10.0.0.0 netmask 255.0.0.0 reject

사설망인 10.0.0.0에 대한 라우팅을 모두 거부하도록 설정하고 있다.

 

명령행에서 아무런 옵션을 주지 않고 route 명령을 실행하면 다양한 옵션들이 제공되는데, 다음과 같다.

항목 설명
Destination 목적지 네트워크나 호스트를 의미한다.
Gateway 게이트웨이의 주소 혹은 설정이 안된 경우에는 *가 표시된다.
Genmask 목적지 네트워크에 대한 넷마스크를 의미하는 것으로, 목적지 호스트에 대해서는
255.255.255.255, 기본 라우터에 대해서는 0.0.0.0 넷마스크를 의미한다.
Flags U: 라우팅 경로가 가동중인 경우, H: 목적지가 호스트인 경우, G: 게이트웨이를 사용,
R: 동적 라우팅을 위한 라우팅 복귀, D: 데몬에 의해 동적으로 설치되거나 재지향,
M: 데몬으로부터 변경되거나 재지향, A: addconf에 의해 설치된 것, C: 캐쉬,
!: 라우팅 거부
Metric 목적지까지의 거리를 hop 숫자로 표현하며, route 값을 지정해서  개의 동등하게
좋은 경로가 있을  낮은 값을 갖도록 선택할  있게 한다. 최근 커널에 의해서는 사용되지 않지만 라우팅 데몬에 의해서 사용될 수 있다.
Ref 현재 경로를 참고하고 있는 숫자(커널에 의해서는 사용안됨)
Iface 해당 경로를 통해 패킷을 전송할 때 사용할 인터페이스

 

(3) 동적 라우팅

자신이 속한 네트워크에서 인터넷으로 나갈 수 있는 경로가 다양한 경우에 사용하는 라우팅 방식으로,

라우팅 프로토콜에 의해서 라우팅 정보를 서로 교환하면서 라우팅 테이블이 만들어지기 때문에 동적

라우팅(dynamic routing)이라고 한다. 동적 라우팅은 실제로 라우터간에 라우팅 정보를 교환하기 때문

에 관리자가 별도로 작업을 할 필요는 없다. 뿐 만 아니라 특정 경로로 가는 최단 경로를 제공해주기

때문에 둘 이상의 게이트웨이를 사용할 경우에는 동적 라우팅을 사용하는 것도 좋은 방법이다.

 

5] tcpdump (dump traffic on a network)

snoop와 동일하다. network를 통하여 전달되는 각각의 패킷들을 분석하는 TCP/IP protocol 분석 software이다.

[root @edu00 linux]#tcpdump

[root @edu00 linux]#tcpdump -a

[root @edu00 linux]#tcpdump -n

[root @edu00 linux]#tcpdump -x -i eth0 port 80

 

7. NIC 모듈 올리기

본래 네트워트 인터페이스 카드를 인식시키는 것이 네트워크 설정의 시작이 되어야 하지만 최근의 배포판은 대부분의 인터페이스 카드를 자동 인식하므로 간단하게 살펴보도록 한다. NIC는 모듈로 구동되므로 재부팅하지 않고 동작중인 커널에 적재시키는 명령어를 알아본다. NIC가 인식되고 나면 /etc/modules.conf 파일에 alias eth0 rt8139와 같은 행이 파일에 추가된다.

 

1)  명령어

1] insmod

모듈을 커널에 인스톨한다.

 

2] modprobe

해당 모듈의 종속 모듈까지 인스톨한다. 모듈을 적재하면서 의존성 검사를 한다. 모듈의 의존성에 대한 정보는 /lib/modules/<커널 버전>/modules.dep 파일에 있다. 이 파일은 depmod –a 명령으로 생성된다.

실제의 network 관련 모듈들은 /lib/modules/<커널 버전>/net 디렉토리에 있다.

 

3] lsmod

현재 적재되어 있는 모듈을 보여준다.

 

4] rmmod

적재된 모듈을 내린다.

 

2) 네트워크 카드  디바이스 드라이버 적재

1] 장치 드라이버

컴퓨터에 이더넷 카드가 장착되어 있고 랜 케이블이 이더넷 카드에 연결되어 있다면 하드웨적으로 준비는 된것이다. 하지만 이를 운영체제인 리눅스가 인식하고 사용할 수 있어야 한다. , 운영체제에서 이더넷 카드를 사용하기 위해서는 운영체제에게 이더넷 카드를 사용할 수 있도록 설정을 해야 한다. 이렇게 설정에 필요한 소프트웨어를 장치 드라이버(device driver)라고 한다. 드라이버는 응용 프로그램에서 전송하는 데이터를 이더넷 카드가 인식할 수 있도록 데이터를 변환하고, 또한 응용 프로그램에서 원하는 작업을 수행하도록 이더넷 카드에게 명령을 내리는 것으로 구성되어 있다.

각각의 하드웨어는 하드웨어 제작사별로 지원하는 명령 체계가 틀리기 때문에 임의의 드라이버를 구했다고 해서 그것이 모든 하드웨어를 지원하는 것은 아니다. 또한 하드웨어 종류별로 사용하는 메모리 영역도 달라지기 때문에 네트워크 장치 드라이버를 사운드 카드 드라이버로 사용할 수는 없다. 만약 사용자들이 드라이버 제작자라면 커널 내에서 각각의 장치가 차지하는 메모리 영역을 정확하게 알 필요가 있다. 일반적으로 이더넷 카드의 경우 0x300이나 0x360 메모리 번지부터 시작하도록 되어 있다(이 주소는 시스템이 부팅할 때 커널이 자동적으로 하드웨어의 위치를 파악하기 때문이다. 이 과정은 autoprobing이라 한다).

이더넷 카드가 메모리를 차지하고 있다는 것은 다음과 같은 의미를 가진다.

첫째는 특정 응용 프로그램은 네트워크를 통해  데이터를 전송하기 위해서 지정된 메모리 영역에 전송할 데이터를 복사(혹은 이동)해 두면 드라이버가 해당 영역의 메모리 내용을 읽어 이더넷 카드를 통해 전기적 신호로 변경해 외부에 전송하게 된다.

둘째는 응용 프로그램에서 외부의 시스템으로부터 데이터를 읽어오기 위해서는 지정된 메모리 영역의 내용을 읽어오기만 하면 된다. , 이더넷 카드는 외부의 호스트로부터 데이터를 읽어 들여 지정된 메모리 영역에 데이터를 기록해두고, 응용 프로그램이 그 영역의 데이터를 읽어들인다는 의미이다.

장치가 동작을 하기 위해서 장치 드라이버와 응용 프로그램이 항상 메모리 영역을 감시하고 있어야 할 필요는 없다. 물론 계속해서 특정 부분을 감시하는 폴링(polling)이라는 기술이 있지만 폴링을 사용하게 되면 하드웨어적인 부하가 증가하기 때문에 인터럽트(interrupt)라는 방식을 사용한다. , 응용 프로그램이 지정된 메모리 영역에 데이터를 기록하면 자동적으로 인터럽트가 발생하여, 네트워크 카드가 동작하도록 구성된 것이다. 리눅스 커널은 보통 16개의 인터럽트 채널이 있는데, 각각마다 번호(IRQ : Interrupt Request Number)를 붙인다. 이는 /proc/irq/*에서 확인이 가능하다.

 

2] 인터페이스

커널은 추상화 기능을 제공하는 인터페이스를 통해서 장치에 접근하게 된다. 리눅스에서 인터페이스는 장치를 지칭하는 이름과 동일한 경우가 많고 커널에서 정의하기 때문에 /dev 디렉토리에 장치 파일이 존재하지 않을 수도 있다. 또한 각각의 디바이스에 해당하는 인터페이스 이름은 하드웨어적인 구성에 따라 이름이 붙여지게 된다. eth0, eth1 등과 같이 불리기도 하고 혹은 sl0, sl1 등과 같이 SLIP 연결이 이루어질 때 동적으로 해당 인터페이스가 모뎀(혹은 직렬포트)에 할당된다.

그리고 dmesg 명령을 이용하여 부팅할 때 커널이 감지하는 장치와 해당 장치에 설치되는 인터페이스에 대해서 확인이 가능하다.

 

3] 기타 드라이버

리눅스 커널은 여러 가지 형태의 네트워크 카드를 위해서 다양한 하드웨어 드라이버를 지원한다.

인터페이스명 설명
lo 로컬 루프백(local loopback) 인터페이스를 나타낸다. 모든 운영체제에서 로컬 루프백은 존재하며, 이는 여러 네트워크 응용 프로그램을 위한 것 뿐만 아니라 테스트를 위한 것이기도 하다.
ethn 대부분의 이더넷 카드를 사용하는 시스템에서 사용하는 인터페이스 이름으로
n 번째 인터페이스를 의미한다.
sln SLIP 인터페이스 이름을 나타내며, 커널은 최대 4개 까지의 SLIP 인터페이스를 지원하며, 가장 먼저 접속이 이루어지는 것이 sl0이다.
plipn PLIP(Parallel Line IP) 인터페이스 이름을 의미하며, PLIP는 병렬 포트를 통해서 IP 데이터그램을 전송하게 된다. 커널은 최대 3개까지의 PLIP를 지원해주며, 시스템이 부팅할 때 PLIP 드라이버에 할당된다.

 

3] 모듈 적재

dummy net module을 만든다.

 

[root @edu00 linux]#vi dummynic.c

#define MODULE

#include <linux/module.h>

int init_module(void)

{

             printk(“Fake NIC is installed!\n”);

       return 0;

}

void cleanup_module(void)

{

             printk(“Fake NIC is uninstalled\n”);

}

[root @edu00 linux]#gcc –c –D_KERNEL__ -DMODULE –O dummynic.c

[root @edu00 linux]#insmod dummynic.o

 

8. IPv6

현재 사용 중인 IP는 네번째 버전으로 IPv4(Internet Protocol version 4)를 의미한다. 하지만 IPv4 프로토콜은 세계의 인터넷 사용 인구의 증가로 IP 주소의 부족, 컴퓨터 이외의 다른 가전 제품이 인터넷에 연결될 경우에 대비할 수 없는 문제, 시간에 민감한 동영상이나 실시간 화상회의 등의 데이터를 처리할 수 있는 메커니즘의 부재, 네트워크 계층에서의 보안 부재의 문제, 멀티미디어 데이터의 폭발적 증가에 비해 네트워크 트래픽의 저속 문제 등을 유발하였고 이러한 문제를 해결하기 위해 새로운 체계의 IP 주소를 요구하기에 이르렀다. 그래서 미국 연방 정부 주도의 NGI(Next Generation Internet: 차세대 인터넷) 프로젝트가 1996 10월부터 진행중이다. 또한 민간 주도의 Internet 2라는 프로젝트도 진행중이다.

현재 완성 단계에 이르렀고 상용화를 준비중인 IPng(IP Next Generation)를 계획하게 되었고 이의 다른 이름이 IPv6(Internet Protocol version 6)이다. IPv4의 경우 32 비트 주소 체계를 가지고 있지만 IPv6의 경우 128 비트 주소 체계를 사용하기 때문에 IP 주소의 부족은 쉽게 해결될 수 있을 것이다.

IPv6의 경우 QoS(Quality of Services)를 지원하기 위한 설정이 가능하며 멀티캐스트 기능 등 다양한 기능을 구현할 수 있도록 설계되고 있다. 또한 IPv6의 주소 헤더는 향후의 확장을 위한 예비 공간으로 확보된 상태이기 때문에 미래를 위한 준비도 되고 있다. 그리고 저비용 고대역폭을 보장하기 위해 지능적이고 효과적으로 트래픽 흐름을 제어할 수 있도록 설계되었으며 PnP(Plug-and-Play) 설계를 통해 주소를 입력할 필요 없이 호스트가 자동으로 네트워크에 접속하는데 필요한 정보를 구하는 자동 구성 기능을 가지고 있기 때문에 IP 주소를 기억해야 하는 불편도 사라지게 된다. 현 단계에서 IPv6를 사용하기 위해서는 IPv4 IPv6 주소 체계를 모두 지원하는 IPv6 DNS를 사용해야 한다.

구분 IPv4 IPv6
주소 길이 32 bit 128 bit
표시 방법 8 bit 4 부분의 10진수 16 bit 8 부분의 16진수
주소 개수  43억개 거의 무한대(43*43*43*43)
주소 할당 A, B, C, D 등의 클래스 단위의
비 순차적 할당
네트워크 규모 및 단말기 수에 따른
순차적 할당
품질 제어 Best effort 방식으로 품질 보장이 안됨(일부 QoS 지원) 등급별, 서비스별 패킷 구분
(Traffic Class Flow Label에 의한 QoS 보장)
보안 기능 IPSec 프로토콜 별도 설치 확장 기능에서 기본 제공
PnP 없음 자동 설정 기능
Mobile IP 비효율적이고 곤란 효율적이고 용이
웹 캐스팅 곤란 영역 지정 필드 증가로 용이
728x90
반응형

'IT > OracleLinux-1Z0460' 카테고리의 다른 글

DNS란  (0) 2022.05.19
인터넷 서버  (0) 2022.05.19
메모리 & 백업  (0) 2022.05.19
X윈도우  (0) 2022.05.19
프로그래밍  (0) 2022.05.19