Top

리눅스 네트워크의 이해

  • 원서명Understanding Linux Network Internals (ISBN 9780596002558)
  • 지은이크리스찬 벤베누띠(Christian Benvenuti)
  • 옮긴이공용준, 김세영, 박현지, 정지오
  • ISBN : 9788960778719
  • 50,000원
  • 2016년 06월 30일 펴냄
  • 페이퍼백 | 1,144쪽 | 188*250mm
  • 시리즈 : 오픈소스 프로그래밍

책 소개

요약

클라우드 시대가 다시 도래하면서 네트워크에 대한 관심이 재조명되고 있습니다. 이전 세대에서 오픈플로우(openflow)기반의 네트워크만을 SDN이라고 규정했지만, 현 시대에는 패킷 전송 자동화에 대한 전반적인 부분 그리고 클라우드/가상머신과의 조합을 통한 빠른 배포와 같은 ‘프로그램화'가 더 중요하게 인식되고 있어서 네트워크 기술만으로 이것을 정의하기는 어려워졌습니다. 그리고 네트워크 장비들도 자사의 네트워크 OS로 리눅스를 선택하는 경우가 점점 늘어나서, 리눅스의 네트워크 인프라스트럭처에 대한 이해가 점점 요구되고 있습니다. 이런 시대의 흐름에 맞추어서 이 책은 리눅스가 가지고 있는 네트워크 기능의 기본 이론은 물론 코드레벨까지 설명함으로써 네트워크 엔지니어지만 서버기반 네트워크를 잘 모르시는 분들이나 리눅스 서버 엔지니어지만 네트워크 작동 원리에 대해서 잘 모르시는 분들 모두에게 도움이 될 것입니다.

이 책에서 다루는 내용

■ 네트워킹에서의 주요 문제

■ 인접인프라스트럭처와 프로토콜(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」과 함께, 리눅스 커널 내부에 대해 학습할 수 있을 좋은 입문서다. 이 책들은 상호보완적이며, 여기에서 다루지 않은 내용이 있다면 다른 보충 서적들도 참고해보자.
이왕이면 커피와 함께 음악을 틀어놓고 어떻게 이 기능들이 구현됐는지 찬찬히 이해하려 노력해보는 것이 어떨까. 이렇게 해본다면 다른 그 어떤 방법보다도 지식이 오래 유지될 것이다. 지름길보다 돌아서 가는 길에서 얻는 것이 많을 때도 있는 것처럼 말이다.

지은이 소개

크리스찬 벤베누띠(Christian Benvenuti)

이탈리아의 볼로냐 대학교에서 컴퓨터 과학 석사학위를 받았다. 몇 년간 트리에스테(Trieste)에 위치한 이론 물리학 국제센터(ICTP)에서 외부 협업 관련 프로젝트의 과학 컨설턴트로 일했다. 이곳에서 리눅스 커널 기반의 애드혹 소프트웨어를 개발했으며, 네트워킹과 관련된 몇몇 교육 과정의 전임 강사로 활동했다. 이 교육 과정은 주로 유럽, 아프리카, 남아메리카의 개발도상국 과학자들을 위해 개설돼 리눅스 시스템을 기반으로 한 내용을 다뤘으며, 이 국가들은 ICTP가 수년간 리눅스 사용을 촉진시키기 위해 집중했던 국가들이었다. 종종 ICTP 구성원과 Collaborium.org에 의해 설립된 비영리 단체들과 함께 개발도상국의 리눅스 사용 촉진을 위한 활동을 했다.
지난 몇 년 동안은 실리콘밸리에 위치한 시스코 시스템즈(Cisco Systems)에서 소프트웨어 엔지니어로 일하며 스위칭과 고성능 네트워크 보안 분야를 연구 중이다.

옮긴이의 말

이전에는 컴퓨터나 서버를 사면 처음 하는 일이 OS 설치였는데, 이제는 구입할 때 이미 OS가 설치된 상태이므로 가장 먼저 하는 일은 웹브라우저를 띄운 다음 인터넷이 작동하는지 확인하는 것이다. 고정 IP를 받든 DHCP를 통해 동적 주소를 할당받든 현 시대의 IT 엔지니어에게 네트워크는 없으면 안 되는 필수 요건이 됐다.
몇 년 전 소프트웨어 정의 네트워크(SDN, Software Defined Network)라는 용어가 유행하기 시작했다. SDN은 오픈플로우(openflow)라는 새로운 패킷 제어 프로토콜을 기반으로 회선 장애나 트래픽이 몰릴 경우 중앙의 오픈플로우 제어기가 이를 감지해 자동으로 정상 라인이나 트래픽 분산을 가능하게 할 수 있는 기술이라고 하여 엄청난 반향을 일으켰고, 실제로 일부 오픈플로우 제어기는 엄청난 가격에 팔리기도 했다.
시스코, 주니퍼 같은 벤더 쪽 이외에도 서비스 업체인 구글, 페이스북, 카카오 등 회사들도 자사가 사용 중인 소프트웨어 정의 네트워크를 논문이나 오픈소스로 공개하고 있다. 최근 SDN의 주요 특징은 별도의 네트워크 장비나 프로토콜을 새로 지정하는 형태가 아니라, 네트워크 하드웨어는 화이트박스라고 불리는 공용 하드웨어를 사용하고(마치 조립식 컴퓨터와 같다) 그 위에 네트워크 전용 OS라고 불리는 NOS를 위치시키는 형태로 진행되고 있다.
그리고 대부분의 NOS업체들은 리눅스를 기반으로 커널 패치, 프로그램 등을 올려 판매하고 있다. 그러다 보니 다시금 리눅스 네트워크 스택들을 알아야 하는 시대가 되었다. 기존 네트워크 장비가 CLI나 특별한 툴을 통해 설정을 했다면 이제는 리눅스 명령어들의 조합을 통해 설정해야 하고, 이전에는 네트워크 장비의 특정 프로토콜에 의존하던 것을 이제는 일반적인 프로토콜이나 프로그램을 통해 모든 네트워크 장비를 다뤄야 한다. 반대로 네트워크 장비가 리눅스를 기반으로 운영되므로 개발자들도 네트워크 장비를 설정할 수 있게 됨으로써 이제는 서버 개발자들이 네트워크 기능을 개발하기 위해 리눅스 네트워크를 좀 더 자세히 알아야 할 필요가 생겼다.
이 책은 커널 2.4 기반의 네트워크 스택과 인프라스트럭처를 기본 개념과 동작 원리, 각 스택과 계층 간의 상호작용에 대해 코드레벨까지 설명하므로 리눅스 네트워크를 이해하는 데 아주 큰 도움이 될 것이다.

옮긴이 소개

공용준

카카오에서 클라우드 컴퓨팅 셀 리딩을 맡고 있으며, 데이터 센터 자동화와 프라이빗/퍼블릭 클라우드 서비스와 그에 필요한 기술들을 연구, 개발해서 실제 서비스에 적용하고 있다. 중소기업 발전을 위해 한국정보화진흥원에서 중소기업 기술 자문위원, 한국 데이터베이스 진흥원 자문위원으로도 활동하고 있다. 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 초기화의 기본 목적
    • 장치와 커널 간 통신
    • 초기화 옵션
    • 모듈 옵션
    • 장치 처리 계층 초기화: netdevinit
    • 사용자 공간 헬퍼
    • 가상 장치
    • /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의 첫 부분
    • 혼잡 관리
    • NETRXSOFTIRQ의 처리: netrxaction

  • 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로 전송: iplocaldeliver_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장. 라우팅: 룩업
    • 상위 레벨 관점의 룩업 함수
    • 헬퍼 루틴
    • 테이블 룩업: fnhashlookup
    • fib_lookup 함수
    • 수신과 전송을 위한 함수 설정
    • 입력/출력 라우팅 루틴의 일반적인 구조
    • 입력 라우팅
    • 출력 라우팅
    • 다음 홉 선택상의 다중 경로의 영향
    • 정책 라우팅
    • 출발지 라우팅
    • 분류자 기반의 정책 라우팅과 라우팅 테이블

  • 36장. 라우팅: 기타 주제
    • 사용자 공간 설정 도구
    • 통계
    • /proc 파일 시스템을 통한 튜닝
    • 포워딩 활성화와 비활성화
    • VII부에서 다룬 데이터 스트럭처
    • VII부에서 다룬 함수와 변수
    • VII부에서 다룬 파일과 경로

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안