2024.06.21 - [공부하자/Linux] - [Linux]linux-ubuntu 20.04 실전 기본 명령어 -2(사용자 및 권한관리)
**이전 글**
네트워크상태확인
리눅스 환경에서 네트워크를 다루려면 가장 기본이 되는 네트워크 설정과 상태정보를 읽을 수 있어야 한다. 본 포스팅에서는 그때 사용하는 명령어와 그 정보를 읽는 방법을 다뤄보겠다.
1) 네트워크 설정과 상태 확인
#네트워크 정보 확인
ifconfig: 가장 기본적으로 사용하는 명령어로 네트워크인터페이스의 설정과 상태정보를 출력해준다.
ifconfig
`eth0`과 `lo`라는 이름으로 의미 모를 글자들이 적혀있다. 대략 `inet`은 ip주소가 되겠구나 라는 추측은 할 수 있을 듯하다.
아래에서 자세하게 설명하겠지만 `eth0`은 설치 시 세팅된 기본 이더넷 인터페이스로 별도의 세팅을 하지 않았다면 `eth0`이 실제 물리적인 네트워크와의 연결을 담당하고 실제로 네트워크 통신을 담당한다고 볼 수 있다. 만약 외부에서 내 우분투로 접근하려면 `eth0`의 ip를 필요로 한다.
각각의 의미는 아래에서 자세히 살펴보도록 하고 지금은 ifconfig명령어는 네트워크 관련 정보를 출력하는구나만 알고 넘어가자.
2) ifconfig 주요 필드의 의미
ifconfig명령어로 출력되는 필드들의 의미를 하나씩 살펴보자 이 것들을 이해하는 데는 기본적인 네트워크 지식이 필요하다. IPv4나 IPv6 같은 기본적 지식은 검색을 통해 채우도록 하자.
#인터페이스 이름(`eth0`, `lo`...)
eth0:
현재는 두 가지의 네트워크 인터페이스를 확인할 수 있다. `eth0` 과 `lo`인데 `eth0`은 우분투 설치 시 기본으로 세팅되는 네트워크 인터페이스로 유선 이더넷 인터페이스를 의미한다. 이더넷(ethernet)의 `이더(ehe)`를 표현한 것으로 무선 인터페이스는 `wlan0` 등으로 표현된다.
lo:
이름 짓기 규칙을 보면 `lo`도 어떤 단어의 앞글자를 딴 것이라고 합리적으로 추측해 볼 수 있다. 실제로 `lo`는 루프백(loopback)에서 따와서 루프백 인터페이스라고 불린다. 주로 시스템에서 자체 통신을 위해 사용되는 인터페이스를 말한다. 네트워크 인터페이스의 종류에 대해서는 아래에서 다루겠다.
#flags
`flags`는 인터페이스의 상태와 옵션을 나타낸다. 예를 들어 `UP(활성화됨)`, `BROADCAST(브로드캐스트 지원)`, `MULTICAST(멀티캐스트 지원)` 등을 포함할 수 있다.
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>
#mtu(Maximum Transmission Unit)
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
` mtu`란 네트워크 인터페이스의 최대 전송크기를 말한다. 단위는 `바이트(byte)`로 즉 여기서는 1500바이트가 최대전송단위임을 알 수 있다. 이더넷 환경에서는 기본 1500바이트가 디폴트 값이라고 한다.
#inet, netmask, broadcast
inet: IPv4주소를 말함.
netmask: 서브넷 마스크
broadcast: 브로드캐스트 주소
inet 172.xxx.xxx.xxx netmask 255.255.240.0 broadcast 172.xxx.xxx.xxx
#inet6
inet6: IPv6주소를 나타냄.
prefixlen: 서브넷 접두사 길이를 나타냄
scopeid: 주소의 범위와 유형을 나타냄.
inet6 fe80::xxx:xxxx:xxxx:xxxx prefixlen 64 scopeid 0x20<link>
IPv6로 표현된 ip 주소와 서브넷접두사 길이(64비트), 링크 로컬 주소임을 의미한다.
#ether, txqueuelen
ether: MAC주소
exqueuelen: 전송 큐 길이
ether xx:xx:xx:xx:xx:xx txqueuelen 1000 (Ethernet)
MAC주소와 전송큐의 길이가 1000 임을 나타낸다.
#RX packets, TX packets
RX packets 470 bytes 74575 (74.5 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 25 bytes 1822 (1.8 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
RX packets: 수신된 패킷 수
- bytes: 수신된 데이터 바이트 수
- errors: 수신 중 발생한 오류 수
- dropped: 드롭된 수신 패킷 수
- overruns: 오버런 된 수신패킷 수
- frame: 프레임 오류 수
TX packets: 전송된 패킷 수
- bytes: 전송된 데이터 바이트 수
- errors: 전송 중 발생한 오류 수
- dropped: 드롭된 전송 패킷 수
- overruns: 오버런된 전송패킷 수
- carrier: 캐리어 오류 수
- collisions: 충돌 수
각각의 의미를 자세하기 이해하는 것은 전송 단위인 패킷에 대한 이해가 필요한데 여기서는 전송 단위로 `패킷`이라는 것이 사용되고 네트워크의 상태를 진단하기 위해서 받은 패킷과 전송한 패킷의 개수, 혹은 오류 갯수 등을 사용하는구나 정도 알고 넘어가면 될 듯하다.
3) 외부에서 네트워크상태 확인(PING 날리기)
패킷이라는 것이 감이 잘 잡히지 않을 수 있기 때문에 실습을 통해 패킷이동을 확인해 볼 수 있다.
우선 `ifconfig` 를 사용해 현재까지 주고받은 패킷의 개수를 확인해 보자. 받은 패킷(RX packets)은 현재까지 882개로 확인이 가능하다. 그리고 전송한 패킷(TX packets)은 28개이다.
이제 해당 우분투 환경으로 `ping`을 날려보자, `ping`이란 간단하게 설명하면 네트워크의 상태를 외부에서 확인하기 위해 해당네트워크로 패킷을 보내고 다시 반환되어 오는 패킷을 분석해 주는 프로그램을 말한다. `ping을 날린다`, 혹은 `ping을 쏜다` 등의 표현으로 자주 사용하고 있다.
말보다는 보는 것이 더 이해가 빠르니 실습을 해보도록 하자. 일단 cmd창을 켠다. 나는 윈도 환경에서 wsl로 리눅스 환경을 구성했기 때문에 윈도우와 리눅스가 한 컴퓨터에서 실행되고 있지만 각각 별개의 네트워크를 가지고 있다. 때문에 cmd(윈도우)에서 리눅스(우분투)로 ping 테스트가 가능하다. wsl을 사용하지 않는다면 다른 기기 혹은 os에서 테스트 가능할 것이다.
ping ip주소
`ifconfig`를 통해 알아낸 ip주소를 가지고 cmd창에서 우분투로 ping을 날려본다. 총 4번의 패킷이 전송되었고 4번을 반환받았다는 것을 알 수 있다. ping명령어는 위와 같은 정보를 사용자에게 제공함으로 인해 외부에서 네트워크상태를 간편하게 알 수 있도록 해준다. ping을 악용하는 경우도 있어서 특정 서버에서는 막아놓기도 한다.
여기서 기억해야 할 것은 총 4번의 패킷을 보냈고 4번의 패킷을 받았다는 것이다. 이제 우분투에서 받은 패킷(RX packets)과 전송한 패킷(Tx packets)이 각각 4개씩 늘어났다면 두 개의 네트워크가 성공적으로 상호작용 했다고 생각할 수 있을 것이다. 직접 확인해 보자.
다시 우분투로 돌아와서 `ifconfig`를 쳐보자
총 4개씩의 패킷만 이동할 줄 알았지만 실제로는 패킷이 더 많이 이동한 것을 확인할 수 있다. 예상이 틀렸다. 왜일까?
#tcpdump
실제로 일어나는 패킷의 이동을 확인하기 위해 사용하는 명령어가 있다.
sudo tcpdump -i 네트워크인터페이스명
sudo tcpdump -i eth0
이 명령어를 사용하면 실시간으로 패킷이 들어오고 나가는 것을 모니터링할 수 있다. 이 명령어를 통해 실시간으로 패킷흐름을 파악해 보자. tcpdump명령어를 사용한 후 cmd창에서 다시 우분투로 ping을 날려본다.
네트워크 주소가 적나라하게 드러나 있어서 모자이크를 했다. 로그 내용자체보다는 주고받은 패킷의 양이 8개보다 많다는 사실만 알고 넘어가자.
로그를 확인해 보니 실제 ping요청 외에도 다양한 패킷의 이동이 동시에 일어나는 것을 알 수 있었다. 내부에서 ping 이외에도 다른 네트워크 요청들이 보이지 않게 일어난 것이다. ping 명령어를 통해 ICMP Echo Request와 Echo Reply 패킷이 오고 가는 동안, DNS 역방향 조회, mDNS, IPv6 및 ARP와 관련된 추가적인 네트워크 활동이 발생한다는 것을 알 수 있었다. 이로 인해 예상보다 많은 패킷이 이동한 것이다.
이번 시간에는 ifconfig명령어를 통해 내부에서 네트워크상태를 확인하는 방법과 외부에서 네트워크를 확인하는 방법을 알아보았다. 또한 패킷의 이동이 실제로 일어나는 모습을 확인해 보았다. 다음 포스팅에서도 이어서 네트워크에 대한 리눅스 명령어들을 알아보도록 하겠다.
'공부하자 > Linux' 카테고리의 다른 글
[Linux]linux-ubuntu 20.04 실전 기본 명령어 -4(네트워크2) (0) | 2024.06.27 |
---|---|
[Linux]linux-ubuntu 20.04 실전 기본 명령어 -2(사용자 및 권한관리) (0) | 2024.06.21 |
[Linux]linux-ubuntu 20.04 실전 기본 명령어 -1(파일시스템) (0) | 2024.06.20 |