리눅스 네트워크의 이해
해외주문/바로드림/제휴사주문/업체배송건의 경우 1+1 증정상품이 발송되지 않습니다.
패키지
북카드
키워드 Pick
키워드 Pick 안내
관심 키워드를 주제로 다른 연관 도서를 다양하게 찾아 볼 수 있는 서비스로, 클릭 시 관심 키워드를 주제로 한 다양한 책으로 이동할 수 있습니다.
키워드는 최근 많이 찾는 순으로 정렬됩니다.
작가정보
저자(글) 크리스찬 벤베누띠
저자 크리스찬 벤베누띠(Christian Benvenuti)는 이탈리아의 볼로냐 대학교에서 컴퓨터 과학 석사학위를 받았다. 몇 년간 트리에스테(Trieste)에 위치한 이론 물리학 국제센터(ICTP)에서 외부 협업 관련 프로젝트의 과학 컨설턴트로 일했다. 이곳에서 리눅스 커널 기반의 애드혹 소프트웨어를 개발했으며, 네트워킹과 관련된 몇몇 교육 과정의 전임 강사로 활동했다. 이 교육 과정은 주로 유럽, 아프리카, 남아메리카의 개발도상국 과학자들을 위해 개설돼 리눅스 시스템을 기반으로 한 내용을 다뤘으며, 이 국가들은 ICTP가 수년간 리눅스 사용을 촉진시키기 위해 집중했던 국가들이었다. 종종 ICTP 구성원과 Collaborium.org에 의해 설립된 비영리 단체들과 함께 개발도상국의 리눅스 사용 촉진을 위한 활동을 했다.
지난 몇 년 동안은 실리콘밸리에 위치한 시스코 시스템즈(Cisco Systems)에서 소프트웨어 엔지니어로 일하며 스위칭과 고성능 네트워크 보안 분야를 연구 중이다.
번역 공용준
역자 공용준은 카카오에서 클라우드 컴퓨팅 셀 리딩을 맡고 있으며, 데이터 센터 자동화와 프라이빗/퍼블릭 클라우드 서비스와 그에 필요한 기술들을 연구, 개발해서 실제 서비스에 적용하고 있다. 중소기업 발전을 위해 한국정보화진흥원에서 중소기업 기술 자문위원, 한국 데이터베이스 진흥원 자문위원으로도 활동하고 있다. 2011년에 정통부 산하의 클라우드 정책 연구단 기술고문을 역임했으며, 주요 저서로는 『클라우드 API를 활용한 빅데이터 분석』(에이콘, 2015), 『실전 클라우드 인프라 구축기술(한빛, 2014)』이 있다.
번역 김세영
역자 김세영은 웹, 애플리케이션, 서버관리, 커널 등 다양한 분야에 관심이 있으며, IT 서적 번역에도 몇 권 참여한 새내기 번역가이기도 하다. 다양한 분야의 지식을 어떻게 하면 효율적으로 습득, 유지 관리할 수 있는지에 대해 고민하고 있다. 현재는 캐노니컬에서 근무중이며, 우분투의 발전을 위해 노력하고 있다.
번역 박현지
역자 박현지는 인하대학교 지리정보공학과를 졸업했다. 주식회사 SK C&C(구 SK C&C) 클라우드 컴퓨팅 사업 팀에서 인턴 생활을 했고, 대학교 졸업 후 SK 주식회사 C&C에 입사해 현재까지 근무 중이다. 최근 3년간 빅데이터 실시간 처리 및 활용 부분을 담당해 왔으며 올해부터는 ICT R&D 조직에서 머신 데이터의 실시간 수집, 처리, 저장, 검색에 대한 연구를 진행 중이다.
번역 정지오
역자 : 정지오
연세대 컴퓨터공학과를 졸업했다. IBM, 네이버, 넥슨코리아, KT클라우드웨어, 비디를 거치면서 네트워크 및 클라우드와 관련된 일을 하고 있다.
목차
- I부. 소개
1장. 도입
__기본 용어
__공통 코딩 패턴
__사용자 공간 도구
__소스코드 훑어보기
__기능이 패치로 제공될 때
2장. 주요 데이터 스트럭처
__소켓 버퍼 스트럭처: sk_buff Structure
__net_device 스트럭처
3장. 사용자 공간과 커널 간 인터페이스
__개요
__procfs와 sysctl
__ioctl
__넷링크
__설정 변경의 직렬화
II부. 시스템 초기화
4장. 알림 체인
__알림 체인의 목적
__개요
__체인 정의
__체인에 등록
__체인에 이벤트 알림
__네트워크 서브시스템의 알림 체인
__/proc 파일 시스템을 통한 튜닝
__4장에서 다룬 함수와 변수
__4장에서 다룬 파일과 디렉터리
5장. 네트워크 장치 초기화
__시스템 초기화 개요
__장치 등록과 초기화
__NIC 초기화의 기본 목적
__장치와 커널 간 통신
__초기화 옵션
__모듈 옵션
__장치 처리 계층 초기화: net_dev_init
__사용자 공간 헬퍼
__가상 장치
__/proc 파일 시스템을 사용한 튜닝
__5장에서 다룬 함수와 변수
__5장에서 다룬 파일과 디렉터리
6장. PCI 계층과 네트워크 인터페이스 카드
__6장에서 설명하는 데이터 스트럭처
__PCI NIC 디바이스 드라이버 등록
__전원 관리와 Wake-on-LAN
__PCI NIC 드라이버 등록의 예
__큰 그림
__/proc 파일 시스템을 통한 튜닝
__6장에서 다룬 함수와 변수
__6장에서 다룬 파일과 디렉터리
7장. 컴포넌트 초기화를 위한 커널 인프라스트럭처
__부팅 시 커널 옵션
__모듈 초기화 코드
__최적화된 매크로 기반 태깅
__부팅 시 초기화 루틴
__메모리 최적화
__/proc 파일 시스템을 통한 튜닝
__7장에서 다룬 함수와 변수
__7장에서 다룬 파일과 디렉터리
8장. 장치 등록과 초기화
__장치 등록 순간
__장치 해지 순간
__net_device 스트럭처의 할당
__NIC 등록과 해지 개요
__장치 초기화
__net_device 스트럭처의 구조
__장치 상태
__장치 등록과 해제
__장치 등록
__장치 등록 해제
__네트워크 장치의 활성화와 비활성화
__장치 큐잉 정책 상태 갱신
__사용자 공간에서 장치 관련 정보의 설정
__가상 장치
__락킹
__/proc 파일 시스템을 통한 튜닝
__8장에서 다룬 함수와 변수
__8장에서 다룬 파일과 디렉터리
III부. 전송과 수신
9장. 인터럽트와 네트워크 드라이버
__결정과 트래픽 방향
__프레임 수신 시 드라이버 알림
__인터럽트 핸들러
__softnet_data 스트럭처
10장. 프레임 수신
__기타 기능과 상호작용
__장치의 활성화와 비활성화
__큐
__커널의 프레임 리셉션 알림: NAPI와 netif_rx
__디바이스 드라이버와 커널의 구인터페이스: netif_rx의 첫 부분
__혼잡 관리
__NET_RX_SOFTIRQ의 처리: net_rx_action
11장. 프레임 전송
__전송의 활성화와 비활성화
12장. 인터럽트에 대한 이해와 참고 사항
__통계
__/proc와 sysfs 시스템을 통한 튜닝
__III부에서 다룬 함수와 변수
__III부에서 다룬 파일과 디렉터리
13장. 프로토콜 핸들러
__네트워크 스택 개요
__적절한 프로토콜 핸들러의 실행
__프로토콜 핸들러 구조
__프로토콜 핸들러 등록
__이더넷과 IEEE 802.3 프레임
__/proc 파일 시스템을 통한 튜닝
__13장에서 다룬 함수와 변수
__13장에서 다룬 파일과 디렉터리
IV부. 브리징
14장. 브리징: 개념
__리피터, 브리지, 라우터
__브리지와 스위치
__호스트
__브리지로 LAN 병합
__다른 LAN 기술을 브리징
__주소 학습
__다중 브리지
15장. 브리징: 스패닝 트리 프로토콜
__기본 용어
__계층적으로 스위치된 L2 토폴로지의 예
__스패닝 트리 프로토콜의 기본 구성 요소
__브리지와 포트 ID
__브리지 프로토콜 데이터 유닛(BPDU)
__활성화된 토폴로지의 정의
__타이머
__토폴로지 변경
__BPDU 캡슐화
__설정 BPDU의 전송
__인입 프레임 처리
__수렴 시간
__새로운 스패닝 트리 프로토콜에 대한 개괄
16장. 브리징: 리눅스에서 구현
__브리지 장치의 개념
__주요한 데이터 스트럭처
__브리징 코드의 초기화
__브리지 장치와 브리지 포트 생성
__새로운 브리지 장치 생성
__브리지 장치의 설정 루틴
__브리지 삭제
__브리지에 포트 추가
__브리지 장치 활성화와 비활성화
__브리지 포트 활성화와 비활성화
__브리지 포트의 상태 변경
__큰 그림
__포워딩 데이터베이스
__인입 트래픽 처리
__브리지 장치에 전송
__스패닝 트리 프로토콜(STP)
__netdevice 알림 체인
17장. 브리징: 기타 주제
__사용자 공간 설정 도구
__/proc 파일 시스템을 통한 튜닝
__/sys 파일 시스템을 통한 튜닝
__통계
__IV부에서 다룬 데이터 스트럭처
__IV부에서 다룬 함수와 변수
__IV부에서 다룬 파일과 디렉터리
V부. 인터넷 프로토콜 버전 4(IPv4)
18장. IPv4: 개념
__IP 프로토콜: 개요
__IP 헤더
__IP 옵션
__패킷 단편화/단편화 제거
__체크섬
19장. IPv4: 리눅스 기초와 특징
__주요 IPv4 스트럭처
__일반 패킷 처리
__IP 옵션
20장. IPv4: 포워딩과 로컬 전달
__포워딩
__로컬 전송
21장. IPv4: 전송
__전송을 위한 주요 함수
__인접 서브시스템으로의 인터페이스
22장. IPv4: 단편화 처리
__IP 단편화
__IP 단편화 제거
23장. IPv4: 기타 주제
__수명이 긴 IP 피어 정보
__IP 헤더의 ID 필드 선택
__IP 통계
__IP 설정
__IP 오버 IP
__IPv4: 무엇이 문제인가?
__/proc 파일 시스템을 통한 튜닝
__V부에서 다룬 데이터 스트럭처
__V부에서 다룬 함수와 변수
__V부에서 다룬 파일과 디렉터리
24장. 4계층 프로토콜과 원시 IP 다루기
__가용 L4 프로토콜
__L4 프로토콜 등록
__L3에서 L4로 전송: ip_local_deliver_finish
__IPv4 대 IPv6
__/proc 파일 시스템을 통한 튜닝
__24장에서 다룬 함수와 변수
25장. ICMPv4
__ICMP 헤더
__ICMP 페이로드
__ICMP 타입
__ICMP 프로토콜을 이용한 애플리케이션
__큰 그림
__프로토콜 초기화
__25장에서 다룬 데이터 스트럭처
__ICMP 메시지 전송
__ICMP 메시지 수신
__ICMP 통계
__전송 계층으로 오류 통지 전달
__/proc 파일 시스템을 통한 튜닝
__25장에서 다룬 함수와 변수
__25장에서 다룬 파일과 디렉터리
VI부. 인접 서브시스템
26장. 인접 서브시스템: 개념
__인접 호스트란?
__인접 프로토콜이 필요한 이유
__공유 매체
__리눅스 구현
__인접 프로토콜 프록싱
__인접 상태와 네트워크 접근 불가 탐색(NUD)
27장. 인접 서브시스템: 인프라스트럭처
__주요 데이터 스트럭처
__L3 프로토콜과 인접 프로토콜의 공통 인터페이스
__인접 인프라스트럭처의 일반적인 작업
__neighbour 스트럭처의 참조 카운트
__neighbour 항목 생성
__이웃 제거
__프록시로 동작
__L2 헤더 캐싱
__프로토콜 초기화와 제거
__서브시스템 간 상호작용
__인접 프로토콜과 L3 전송 함수의 상호작용
__큐잉
28장. 인접 서브시스템: 주소 결정 프로토콜(ARP)
__ARP 패킷 포맷
__ARP 트랜잭션의 예
__Gratuitous ARP
__다중 인터페이스에서의 응답
__설정 가능한 ARP 옵션
__ARP 프로토콜 초기화
__neighbour 스트럭처의 초기화
__ARP 패킷의 송신과 수신
__인입 ARP 패킷 처리
__프록시 ARP
__예제
__외부 이벤트
__ARPD
__역주소 결정 프로토콜(RARP)
__ND(IPv6)에서 ARP(IPv4)보다 개선된 점
29장. 인접 서브시스템: 기타 주제
__이웃의 시스템 관리
__/proc 파일 시스템을 통한 튜닝
__VI부에서 다룬 데이터 스트럭처
__VI부에서 다룬 파일과 디렉터리
VII부. 라우팅
30장. 라우팅: 개념
__라우터와 라우트, 라우팅 테이블
__라우팅의 필수 요소
__라우팅 테이블
__룩업
__패킷 수신과 패킷 전송
31장. 라우팅: 고급
__정책 라우팅의 개념
__다중 경로 라우팅의 개념
__다른 커널 서브시스템과의 상호작용
__라우팅 프로토콜 데몬
__Verbose 모니터링
__ICMP_REDIRECT 메시지
__공유 미디어
__역방향 필터링
32장. 라우팅: 리눅스 구현
__커널 옵션
__주요 데이터 스트럭처
__라우트와 주소 범위
__1차, 2차 IP 주소
__제네릭 헬퍼 루틴과 매크로
__전역 락
__라우팅 서브시스템 초기화
__외부 이벤트
__다른 서브시스템과의 상호작용
33장. 라우팅: 라우팅 캐시
__라우팅 캐시 초기화
__해시 테이블 구성
__다중 경로 캐싱
__DST와 호출 프로토콜 간의 인터페이스
__라우팅 캐시 플러싱
__가비지 컬렉션
__인출 ICMP REDIRECT 속도 제한
34장. 라우팅: 라우팅 테이블
__라우팅 해시 테이블 구성
__라우팅 테이블 초기화
__라우트 추가, 삭제
__정책 라우팅과 정책 라우팅의 영향을 받는 라우팅 테이블 정의
35장. 라우팅: 룩업
__상위 레벨 관점의 룩업 함수
__헬퍼 루틴
__테이블 룩업: fn_hash_lookup
__fib_lookup 함수
__수신과 전송을 위한 함수 설정
__입력/출력 라우팅 루틴의 일반적인 구조
__입력 라우팅
__출력 라우팅
__다음 홉 선택상의 다중 경로의 영향
__정책 라우팅
__출발지 라우팅
__분류자 기반의 정책 라우팅과 라우팅 테이블
36장. 라우팅: 기타 주제
__사용자 공간 설정 도구
__통계
__/proc 파일 시스템을 통한 튜닝
__포워딩 활성화와 비활성화
__VII부에서 다룬 데이터 스트럭처
__VII부에서 다룬 함수와 변수
__VII부에서 다룬 파일과 경로
출판사 서평
★ 이 책에서 다루는 내용 ★
■ 네트워킹에서의 주요 문제
■ 인접인프라스트럭처와 프로토콜(ARP)
■ 네트워크인터페이스카드(NIC)장치 드라이버
■ 브리징
■ 시스템 초기화
■ 라우팅
■ 계층 2(연결 계층) 작업과 구현
■ ICMP
■ 계층 3(IPv4)작업과 구현
★ 이 책의 대상 독자 ★
이 책은 네트워킹에 대한 지식을 갖고 있는 사람과 인터넷 엔진(즉, IP 등)이 어떻게 운영체제의 첫 번째 계층 상단에서 동작하는지 궁금한 사람들에게 유익할 것이다. 하지만 각 주제에 대한 이론적인 소개도 해뒀으므로, 입문자들도 금방 따라갈 수 있을 것이다. 어려운 주제들은 충분한 예제들을 통해 이해하기 쉽게 했다.
리눅스는 기본 IP만 지원하지 않고, 꽤 많은 고급 기능을 제공한다. 이 기능들이SMP(Symmetric Multiprocessing)와 커널 선점 방식 같은 커널의 특징들과 함께 충분히 제 역할을 발휘하기 위해서는 섬세하게 다뤄져야 한다. 리눅스 커널의 네트워킹 코드가 독자들이 학습하고 지식을 쌓기 위한 좋은 장이 될 것이다.
또한 독자가 내 의도를 이해하고 배우는 데 흥미를 가진다면 이 책으로부터 만족스러울 만큼 충분한 내용들을 얻을 수 있을 것이다.
★ 이 책의 구성 ★
네트워킹 코드에서 다룰 주제에 따라 1개의 장(chapter)만으로 충분한 것도 있지만, 7개의 장까지 할애한 주제도 있다. 여러 장을 차지할 만큼 복합적이거나 규모가 큰 주제의 경우, 먼저 해당 주제에 대한 이론적인 부분과 개요를 시작 부분에서 다룬다. 모든 참고 사항과 보조 항목들은 해당 부의 마지막 장 ‘기타’ 절에 있다. 얼마나 큰 주제 항목이든 장이 구성되는 틀은 동일하다.
각 주제별로 구현에 대한 설명은 다음과 같은 항목들을 포함한다.
ㆍ 큰 그림: 해당 커널 컴포넌트가 네트워크 스택의 어디에 해당하는지 보여준다.
ㆍ 주요 데이터 스트럭처와 그림에 대한 간략한 설명: 이들이 서로 어떻게 연관돼 있는지 설명해준다.
ㆍ 컴포넌트와 인터페이스 관계인 다른 커널 기능에 대한 설명: 예를 들어 알림 체인이나 데이터 스트럭처는 상호 참조적이다. 네트워킹 코드를 뛰어넘는 수많은 훅(hook)들을 고려했을 때 방화벽은 이러한 커널 특징의 예 중 하나다.
ㆍ 플로차트의 확장 가능한 사용법, 코드 이해를 도울 그림, 규모가 크고 복잡한 함수에 대한요약된 로직
참고 내용들은 모두 다음과 같은 항목들을 포함하고 있다.
ㆍ 가장 중요한 데이터 스트럭처에 대한 필드별 상세 설명
ㆍ 빠르게 참고해볼 수 있는 모든 함수와 매크로, 데이터 스트럭처에 대한 간략한 설명이 담긴 표
ㆍ 해당 장에서 다룬 커널 소스 구조에 위치해 있는 파일 목록
ㆍ 해당 장의 주제가 된 내용과 커널을 설정하기 위해 사용되는 가장 일반적인 사용자 공간도구들 간의 인터페이스에 대한 설명
ㆍ /proc에 생성되는 파일에 대한 설명
리눅스 커널의 네트워킹 코드는 이동 표적일 뿐만 아니라 패스트 러너(fast runner)다. 이 책에서 모든 네트워킹 기능을 다루지는 않는다. 이 책을 읽는 중에도 신규 기능들은 추가되고 있을 것이다. 개인 사용자 혹은 단체, 대학 프로젝트에서의 요청으로 많은 신규 기능이 생겨나지만, 이 기능들이 전반적인 사용자에게 유용한 것이라고 판단됐을 때 공식 커널에 등록된다. 이러한 기능들에 대한 자세한 구현 내용을 다루면서 기능이 포괄적으로 구현됐을 때 어떠한 양상을 보일지에 대한 아이디어도 제공하고자 노력했다. 이는 코드를 수정하거나 어떻게 신규 기능을 구현할지 배울 때 매우 유용할 것이다. 예를 들어 어떠한 기능이든지 간에 다음 항목들을 고려해봐야 한다.
ㆍ 어떻게 데이터 스트럭처와 락 기능을 설계할 것인가?
ㆍ 사용자 공간 환경설정 도구가 필요한가? 필요하다면 기존 시스템이나 ioctl 명렁어, /proc 파일, 넷링크 소켓을 호출해 커널과 상호작용하는가?
ㆍ 신규 알림 체인이 필요하진 않은가? 그리고 기존 체인에 등록해야 하지는 않는가?
ㆍ 방화벽과는 어떠한 관계가 있는가?
ㆍ 캐시나 가비지 컬렉션 메커니즘, 통계 등에 대한 요구는 없는가?
이 책에서 다루는 주제들은 다음과 같다.
■ 사용자 공간과 커널 간의 인터페이스
3장에서는 커널 내에서 대응되는 대상들과 상호작용하기 위해 사용되는 환경설정 도구와 통신하기 위한 메커니즘에 대한 간략한 개요가 나온다. 자세히 다루지는 않을 예정이지만, 커널 코드의 해당 부분에 대해 이해하는 데 도움이 될 것이다.
■ 시스템 초기화
II부에서는 네트워킹 코드의 주요 컴포넌트를 초기화하는 방법을 설명하고, 어떻게 네트워크 장치가 등록되고 초기화되는지 다룬다.
■ 디바이스 드라이버와 프로토콜 핸들러 간의 인터페이스
III부는 어떻게 인입(들어오는 혹은 수신하는) 패킷이 디바이스 드라이버에 의해 상위 계층 프로토콜로 전달되는지, 그리고 그 반대 방향 또한 어떻게 전달되는 것인지에 대해 상세히 설명한다.
■ 브리징(bridging)
IV부에서는 투명 브리징(transparent bridging)과 스패닝 트리 프로토콜(spanning tree protocol), L3에 라우팅하는 상대인 L2에 대해 설명한다.
■ IPv4(인터넷 프로토콜 버전 4)
V부에서는 IPv4 계층에서 패킷들의 수신과 전달, 로컬 전송이 어떻게 이뤄지는 것인지 설명한다.
■ IPv4와 전송 계층(L4) 프로토콜 간의 인터페이스
20장은 로컬 호스트로 전달되도록 요청된 IPv4 패킷이 어떻게 전송 계층(L4) 프로토콜로 전달되는지에 대해 다룬다(TCP, UDP 등).
■ ICMP(Internet Control Message Protocol)
25장은 ICMP의 구현에 대해 설명한다(이 책에서 다루는 유일한 전송 계층(L4) 프로토콜이다).
■ 인접 프로토콜
인접 프로토콜들은 주어진 자신의 IP 주소들을 고려해 로컬 네트워크 주소를 찾는다. VI부는 다양한 프로토콜의 일반적인 구조와 IPv4가 사용하는 ARP 인접 프로토콜에 대한 세부 내용을 다룬다.
■ 라우팅
이 책에서 가장 많은 부분인 VII부에서는 라우팅 캐시와 테이블에 대해 다룬다. 정책 라우팅, 다중 경로와 같은 고급 기능들에 대해서도 다룬다.
★ 지은이의 말 ★
오늘날 네트워킹은 그 어느 때보다도 더 많은 관심을 받고 있다. 최신 전자 제품들은 네트워킹 기능을 내장하고 있으며, 인터넷의 규모와 활용 폭은 계속해서 커지고 있다. 임베디드 기기 제작자들이 강력하며 자유로운 사용성을 제공하는 리눅스처럼 기능이 풍부한 오퍼레이팅 시스템을 선택하는 것은 그리 놀라운 일이 아니다. 이러한 네트워킹 기능은 어떠한 종류의 네트워킹 기기에든 오퍼레이팅 시스템이 최적화될 수 있게 해준다. 이미 보유하고 있는 기능들의 구현은 물론, 새로운 기능 추가도 쉽게 해준다. 독자가 임베디드 기기 개발자거나 리눅스 사용 경험이 있는 학생이라면 이 책이 매우 유용할 것이다.
리눅스를 사용하는 순수 소프트웨어 기반 제품의 성능은 특화된 하드웨어의 도움을 받는 상용 제품들과 비교될 수 없다. 이는 물론 소프트웨어를 비판하는 것이 아니라, 전용 하드웨어와 일반 CPU 간의 속도 차이로 인한 결과임을 인정해야 한다는 의미다. 하지만 리눅스는 분명 소프트웨어 기반의 저가형 상용 제품과 견줄만하다. 물론 단순한 리눅스 커널의 확장은 벤더가 하이브리드 시스템상에서 리눅스를 적절히 사용할 수 있게 해준다. 이는 필수 디바이스 드라이버의 작성 문제일 뿐이다.
또한 리눅스는 대학 프로젝트 구현에서 자주 선택되는 오퍼레이팅 시스템이다. 모두가 이를 공식적인 커널로 (적어도 즉시는) 만들지는 않는다. 일부는 공식 커널로 만들어지지만, 나머지는 단순히 공식 커널의 패치로 온라인에서 사용할 수 있게 한다. 잠재적으로 수백만 사용자들이 여러분이 기여한 리눅스 커널을 사용하게 된다는 것은 매우 만족스럽지 않겠는가? 여기에는 딱 하나의 단점이 있을 뿐이다. 여러분의 기여가 정말 의미 있는 것이라면 수많은 감사와 도움 요청 메일을 감당할 수 없을 것이다.
리눅스의 인기는 수년간 계속해서 커지고 있으며, 앞으로도 분명 그럴 것이다.
나는 볼로냐 대학에서 10여 년 전에 컴퓨터 사이언스 학과를 졸업했으며, 여기서 처음으로 리눅스를 접했다. 얼마나 멋진 소프트웨어 작품이던가!
집에 있던 i286/486 컴퓨터로 이미지 프로세싱 프로젝트를 수행했기 때문에, 학교 랩에 있던 몇 안 되는 썬(Sun)사 워크스테이션을 차지하기 위해 경쟁할 필요가 없었다.
그때부터 리눅스와 맺은 인연은 계속됐다. 게다가 어셈블리 언어로 개발하는 것과 다양한 베이직(BASIC) 통용어에 대해 알게 되면서, C64 세대에 대한 좋은 인상들이 대체되기 시작했다. 나는 C64 세대에 속해 있었고, 얼마 동안 C64에서 처음 느꼈던 프로그래밍 경험에 대한 기쁨과 리눅스 커널에서의 여정을 비교하게 됐다.
내가 처음으로 네트워킹 세계를 접했을 때 리눅스에서 사용할 수 있는 도구들을 사용해보기 시작했다. 또한 이탈리아 UNESCO 센터에서 일할 기회가 있었는데, 리눅스를 기반으로 그들의 네트워킹 코스를 개발했다. 그곳에서 모든 종류의 네트워크 기기들과 문서가 갖춰져 있고 리눅스를 연구하고 합작해볼 수 있는 기회가 많은 연구실을 이용할 수 있었다.
안타깝게도 나는 아주 작은 부분까지도 모두 완벽히 이해해야 직성이 풀리는 성격이었다(하지만 이 덕분에 독자들에겐 유익했을 거라 믿는다). 그래서 나는 UNESCO에서 커널 코드를 살펴보기 시작했다. 이는 내 지식도 채워주고, 사용자 공간 환경설정 도구를 만드는 데에도 도움이 됐다. 환경설정 도구가 구체적인 옵션을 제공하지 않을 때마다 나는 구체적인 옵션을 추가하는 것이 단순한 작업으로 가능한 것일지 아니면 커널에 중대한 변경을 요하는 일일지 알 수 있었다. 따라서 이러한 종류의 연구에 계속해서 파고들었다.
리눅스 커널(2.0, 2.2 버전 개정)의 확장판으로써 일부 도구를 개발한 이후, 오퍼레이팅 시스템과 네트워킹에 대한 애정이 나를 실리콘 밸리로(Cisco Systems)로 이끌었다. 언어를 배울 때 인간의 언어든 프로그래밍 언어든 간에 이런 규칙이 있다. 습득한 언어가 많을수록 새로운 언어를 쉽게 배울 수 있다. 즉 각 언어의 장단점을 알고, 그렇게 언어가 만들어진 이유를 이해하는 것 등이 용이해진다. 오퍼레이팅 시스템에도 이는 똑같이 적용된다.
나는 리눅스 커널의 다른 분야들과 달리 네트워킹 코드와 관련해서는 좋은 서적이 없음을 발견하고, 그 부분을 채워보기로 결심했다. 이 책이 내가 수년 전에 있었더라면 좋았을 거라 생각해왔던 좋은 입문 서적이 되길 소망한다.
이 책은 오라일리O'Reilly의 다른 두 커널 관련 서적들(「Understanding the Linux Kernel」과 「Linux Device Drivers」과 함께, 리눅스 커널 내부에 대해 학습할 수 있을 좋은 입문서다. 이 책들은 상호보완적이며, 여기에서 다루지 않은 내용이 있다면 다른 보충 서적들도 참고해보자.
이왕이면 커피와 함께 음악을 틀어놓고 어떻게 이 기능들이 구현됐는지 찬찬히 이해하려 노력해보는 것이 어떨까. 이렇게 해본다면 다른 그 어떤 방법보다도 지식이 오래 유지될 것이다. 지름길보다 돌아서 가는 길에서 얻는 것이 많을 때도 있는 것처럼 말이다.
★ 옮긴이의 말 ★
이전에는 컴퓨터나 서버를 사면 처음 하는 일이 OS 설치였는데, 이제는 구입할 때 이미 OS가 설치된 상태이므로 가장 먼저 하는 일은 웹브라우저를 띄운 다음 인터넷이 작동하는지 확인하는 것이다. 고정 IP를 받든 DHCP를 통해 동적 주소를 할당받든 현 시대의 IT 엔지니어에게 네트워크는 없으면 안 되는 필수 요건이 됐다.
몇 년 전 소프트웨어 정의 네트워크(SDN, Software Defined Network)라는 용어가 유행하기 시작했다. SDN은 오픈플로우(openflow)라는 새로운 패킷 제어 프로토콜을 기반으로 회선 장애나 트래픽이 몰릴 경우 중앙의 오픈플로우 제어기가 이를 감지해 자동으로 정상 라인이나 트래픽 분산을 가능하게 할 수 있는 기술이라고 하여 엄청난 반향을 일으켰고, 실제로 일부 오픈플로우 제어기는 엄청난 가격에 팔리기도 했다.
시스코, 주니퍼 같은 벤더 쪽 이외에도 서비스 업체인 구글, 페이스북, 카카오 등 회사들도 자사가 사용 중인 소프트웨어 정의 네트워크를 논문이나 오픈소스로 공개하고 있다. 최근 SDN의 주요 특징은 별도의 네트워크 장비나 프로토콜을 새로 지정하는 형태가 아니라, 네트워크 하드웨어는 화이트박스라고 불리는 공용 하드웨어를 사용하고(마치 조립식 컴퓨터와 같다) 그 위에 네트워크 전용 OS라고 불리는 NOS를 위치시키는 형태로 진행되고 있다.
그리고 대부분의 NOS업체들은 리눅스를 기반으로 커널 패치, 프로그램 등을 올려 판매하고 있다. 그러다 보니 다시금 리눅스 네트워크 스택들을 알아야 하는 시대가 되었다. 기존 네트워크 장비가 CLI나 특별한 툴을 통해 설정을 했다면 이제는 리눅스 명령어들의 조합을 통해 설정해야 하고, 이전에는 네트워크 장비의 특정 프로토콜에 의존하던 것을 이제는 일반적인 프로토콜이나 프로그램을 통해 모든 네트워크 장비를 다뤄야 한다. 반대로 네트워크 장비가 리눅스를 기반으로 운영되므로 개발자들도 네트워크 장비를 설정할 수 있게 됨으로써 이제는 서버 개발자들이 네트워크 기능을 개발하기 위해 리눅스 네트워크를 좀 더 자세히 알아야 할 필요가 생겼다.
이 책은 커널 2.4 기반의 네트워크 스택과 인프라스트럭처를 기본 개념과 동작 원리, 각 스택과 계층 간의 상호작용에 대해 코드레벨까지 설명하므로 리눅스 네트워크를 이해하는 데 아주 큰 도움이 될 것이다.
기본정보
ISBN | 9788960778719 | ||
---|---|---|---|
발행(출시)일자 | 2016년 06월 30일 | ||
쪽수 | 1136쪽 | ||
크기 |
188 * 250
* 41
mm
/ 2034 g
|
||
총권수 | 1권 | ||
시리즈명 |
오픈소스 프로그래밍
|
||
원서명/저자명 | Understanding Linux Network Internals/Christian Benvenuti |
Klover
e교환권은 적립 일로부터 180일 동안 사용 가능합니다.
리워드는 작성 후 다음 날 제공되며, 발송 전 작성 시 발송 완료 후 익일 제공됩니다.
리워드는 리뷰 종류별로 구매한 아이디당 한 상품에 최초 1회 작성 건들에 대해서만 제공됩니다.
판매가 1,000원 미만 도서의 경우 리워드 지급 대상에서 제외됩니다.
일부 타인의 권리를 침해하거나 불편을 끼치는 것을 방지하기 위해 아래에 해당하는 Klover 리뷰는 별도의 통보 없이 삭제될 수 있습니다.
- 도서나 타인에 대해 근거 없이 비방을 하거나 타인의 명예를 훼손할 수 있는 리뷰
- 도서와 무관한 내용의 리뷰
- 인신공격이나 욕설, 비속어, 혐오발언이 개재된 리뷰
- 의성어나 의태어 등 내용의 의미가 없는 리뷰
리뷰는 1인이 중복으로 작성하실 수는 있지만, 평점계산은 가장 최근에 남긴 1건의 리뷰만 반영됩니다.
구매 후 리뷰 작성 시, e교환권 200원 적립
문장수집
e교환권은 적립 일로부터 180일 동안 사용 가능합니다. 리워드는 작성 후 다음 날 제공되며, 발송 전 작성 시 발송 완료 후 익일 제공됩니다.
리워드는 한 상품에 최초 1회만 제공됩니다.
주문취소/반품/절판/품절 시 리워드 대상에서 제외됩니다.
구매 후 리뷰 작성 시, e교환권 100원 적립