ifconfig관련 해서 검색해보던중, WhaTap에 좋은 글이 있었다.
리눅스 네트워크 관리에 필요한 <ifconfig> 사용법 11가지 | 와탭 블로그
네트워크 인터페이스 관리와 모니터링을 위한 가장 기본이 되는 도구인 ifconfig를 와탭과 함께 알아봅시다.
www.whatap.io
역사는 반복된다고 했던가. 인터넷 초창기 개발자들은 직접 서버의 네트워크를 구성하고 모니터링해 가면서 서비스를 만들었습니다. 그리고 분야가 점점 세분화되면서 서버의 네트워크 구성은 전문 엔지니어들의 영역으로 발전해 나갔습니다. 하지만 클라우드는 시스템 엔지니어링에 관한 전문 영역을 가져가면서 개발자들에게 기본적이며 논리적인 부분의 시스템 엔지니어링 역할을 요구하고 있습니다. 그리고 데브옵스는 시스템 엔지니어와 개발자 모두에게 기본적인 시스템 지식을 요구하고 있습니다. 그래서 개발자가 서비스를 모니터링하는데 필요한 네트워크 명령어인 ifconfig에 대해 알아보려고 합니다.
ifconfig는 “interface configuration”의 약자로 리눅스의 네트워크 관리를 위한 인터페이스 구성 유틸리티입니다. 리눅스 명령 줄 인터페이스 중에서 ifconfig는 top과 함께 가장 많이 쓰입니다.
ifconfig 명령은 현재 네트워크 구성 정보를 표시하고 네트워크 인터페이스에 IP 주소, 넷 마스크 또는 broadcast 주소를 설정하고 네트워크 인터페이스의 별칭을 만들고 하드웨어 주소를 설정하고 네트워크 인터페이스를 활성화 또는 비활성화하는 등 다양한 곳에 사용됩니다.
네트워크 인터페이스?
우선 네트워크 인터페이스가 무엇인지 알아야겠다.
NIC(Network Interface Card)라 불리는 컴퓨터 하드웨어 장치가 있다.
네트워크 인터페이스는 네트워크와 개인 컴퓨터가 연결되는 지점이다. 일반적으로 NIC를 말하지만, 물리적인 형태로 구현될 필요가 없다.
소프트웨어적으로 네트워크 인터페이스가 구현될 수도 있다.
예를 들어, loopback 인터페이스(IPv4주소로 127.0.0.1, IPv6주소로 ::1을 사용하는)는 물리적인 형태가 없이 네트워크 인터페이스 역할을 하는 소프트웨어이다.
ifconfig를 사용하면 이러한 소프트웨어적으로 네트워크 인터페이스를 관리할 수 있다.
What Is a Network Interface? (The Java™ Tutorials > Custom Networking > Programmatic Access to Network Par
The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Java Language Changes for a summary of updated
docs.oracle.com
ifconfig
- [enp0s3] : 네트워크 인터페이스
- [flags] : 네트워크 카드의 상태 표시
- [mtu] : 네트워크 인터페이스의 최대 전송 단위(Maximum Transfer Unit)
- [inet] : 네트워크 인터페이스에 할당된 IP 주소
- [netmask] : 네트워크 인터페이스에 할당된 넷마스크 주소
- [broadcast] : 네트워크 인터페이스에 할당된 브로드캐스트 주소
- [inet6] : 네트워크 인터페이스에 할당된 IPv6 주소
- [prefixlen] : IP 주소에서 서브 넷 마스크로 사용될 비트 수
- [scopeid] : IPv6의 범위. LOOPBACK / LINKLOCAL / SITELOCAL / COMPATv4 / GLOBAL
- [ether] : 네트워크 인터페이스의 하드웨어 주소
- [RX packets] : 받은 패킷 정보
- [TX packets] : 보낸 패킷 정보
- [collision] : 충돌된 패킷 수
- [Interrupt] : 네트워크 인터페이스가 사용하는 인터럽트 번호
하나하나 읽어보면 정말 많은 정보를 나타내준다는 것을 알 수 있다.
간단한 주소변경부터, MAC주소 변경, 가상 네트워크 생성까지 ifconfig안의 명령어를 통해 수행할 수 있다.
enp2s0? lo?
나의 우분투 리눅스 환경에서는 enp2s0와 lo가 열심히 돌아가고 있는 것을 확인했다.
둘은 모두 네트워크 인터페이스로 네트워크와 컴퓨터가 연결되는 지점이다.
enp2s0는 리눅스의 하드웨어장치인 이더넷 인터페이스이다. flag를 통해 장치상태를 확인할 수 있고, 그 상태에는 UP, BROADCASTE, MULTICAST, RUNNING 등이 포함될 수 있다.
lo는 실제 네트워크 장치가 아니라 로컬 통신 전용 가상장치이다. 각종 테스트 환경을 제공한다. ping을 테스트할 수도 있다.
How to use IFCONFIG on Debian
David Adams is a System Admin and writer that is focused on open source technologies, security software, and computer systems.
linuxhint.com
실제 헤더 예시를 보고 유추해보자!
REQEST HEADERS
cookie: 클라이언트가 저장된 쿠키와 함께 서버에 요청을 보냈다.
if-modified-since: value에 표시된 날짜는 브라우저 캐시에 저장된 미디어파일의 마지막 수정날짜로, 해당 날짜와 서버에서 리소스가 수정된 날짜와 일치한다면, 캐시에 저장된 미디어를 사용하겠다. 따라서 서버는 따로 바디를 지정하지 않은채 304(Not Modified)를 보내준다.
if-none-match: 서버가 미디어 파일을 클라이언트에 보낼때 ETag 고유값을 보내는데, 이는 브라우저 캐시에 저장을 한다. 요청시 보낸 ETag 값이 서버에 존재하는 미디어 파일의 ETag 값과 같다면 304(Note Modified)를 바디없이 응답해준다. 위의 날짜 버전과 달리 서버에서 케시 제어 로직을 관리할 수 있다는 장점이 있다.
RESPONSE HEADERS
age: 원 서버에서 응답후 프록시 캐시에 머문 시간을 말한다. 초단위로 242505초간 프록시 캐시에 머물렀음을 알 수 있다.
cache-control: 응답이 public 캐시에 저장되어도 된다. 즉 민감한 개인정보를 포함하지 않고 있다. max-age는 캐시의 유효기간을 말하며 s-maxage는 프록시 캐시에만 적용된다.
ΕΤag: 해당 value 값과 요청의 if-none-match 값이 같으므로 304(Not Modified)응답과 함께 바디(body)없이 헤더만 보낸다.
이외에도
- Cache-Control: no-cache
- 데이터는 캐시해도 되지만, 항상 원(Origin)서버에 검증하고 사용
- Cache-Control: no-store
- 데이터에 민감한 정보가 있으므로 저장하면 안됨(메모리에서 사용하고 빨리 삭제)
- Expires: Mon, 01 Jan 1990 00:00:00 GMT
- 캐시 만료일을 정확한 날짜로 지정한 것으로 HTTP/1.0부터 사용, 현재는 max-age로 더 유연하게 사용.(둘이 함께 쓰인다면 Expires 무시)
- Cache-Control: must-revalidate
- 캐시 만료 후 최초 조회 시 원 서버에 검증해야함.
- 원 서버 접근 실패 시 반드시 오류가 발생해야함 504(Gateway Timeout) 이 부분에서 no-cache와 차이
'네트워크, 보안, 프로토콜 > 네트워크 기초' 카테고리의 다른 글
[네트워크]Cache (0) | 2022.03.10 |
---|---|
[네트워크]프록시(Proxy) (0) | 2022.03.10 |
[네트워크 기초]OSI 7계층과 HTTP의 진화, Socket과 Port의 차이점 (0) | 2022.03.09 |