'Programming/Network programming'에 해당되는 글 2건

  1. 2008.03.31 TCP 혼잡제어 (1)
  2. 2007.11.11 TCP/IP
TCP 는 Transmission Control Protocol 의 줄임말로, 실제 TCP 대신 흐름제어소켓이라고 말하기도 한다.

이 프로토콜은 네트워크로 연결된 호스트간의 데이터를 안전하게 전달하기 위한 목적으로 사용되며

다음과 같은 특징을 가진다.

1. 전용통신선로(Session) 을 확보한다. ( 3-way hand shaking 을 이용한다. )

2. 데이터 변조를 검사할 수 있다.

3. 데이터에 일련번호를 주어서 순서가 뒤바껴서 도착하더라도 원상태로 복구가 가능하다.

4. 데이터가 누락되었거나 변조되었을 경우 재전송 요구를 할 수 있다.

이를 위해 TCP 는 flow control 과 congestion control 두 개의 메커니즘을 이용하여  end-to-end 간의

신뢰성있는 전송을 보장한다.

Flow control : sender 가 receiver 로부터 advertised window(receive window) 크기를 받은 후,

                    그것보다 적게 보냄으로써 네트워크상의 흐름을 조절한다.

Congestion control : sender 가 네트워크의 상황을 보고 스스로 흐름을 조절한다.

                             라우터가 부하를 감당할 수 없게되어 패킷이 손실되거나 지연되는 경우를
                             'congestion' 이라고 한다.

그러면 본격적으로 congestion control 의 네 가지 메커니즘을 설명한다.

1.) Slow start

Congestion window 라는 새로운 윈도우 개념을 추가한 것이다.
 
새로운 패킷을 망으로 전송하는 비율과 receiver 에서 전송되는 ACK 를 관찰하면서 congestion window 의

크기를 exponential 하게 증가시키는 방식이다.

sender 는 그 연결에서 쓰이는 최대 세그먼트 크기 ( 1MSS ) 로 혼잡 윈도우 크기를 초기화 한 후, 최대

크기 세그먼트를 한 개 보낸다. 만일 이 세그먼트가 시간이 초기화되기 전에 ACK 가 오면 congestion window

는 4로 증가하여 congestion window 의 크기가 exponential 하게 증가하게 된다. 보통 64K 의 초기 값을

가지는 slow start threshold 값까지 slow start 를 수행한다.

2. ) Congestion avoidance

일정시간동안 ACK 가 오지않거나 ( time out ) 일정 수의 duplicate ACK  가 수신되면 sender 는 패킷이

손실되었음을 알게 된다.

avoidance 와 slow start 는 함께 수행되며, 각 연결마다 congestion window 와 slow start threshold

두 개의 변수를 유지한다.

3. ) Fast transmission

세그먼트가 무질서하게 수신될 경우 TCP 는 즉시 duplicate ACK 를 발생시킨다.

이 때의 ACK 는 가장 최근에 정상적으로 받은 패킷에 대한 ACK 와 동일하기 때문에 sender 의 입장에서

duplicate ACK 로 인식하게 된다.

보통 TCP sender 는 3 개의 duplicate ACK 가 수신되면 패킷 손실로 간주하고 time out 전에 패킷을

재전송한다.

4) Fast recovery

fast retransmission 수행후 slow start 가 아닌 congestion avoidance 단계를 수행한다.

이 경우 slow start 를 수행하지 않는 이유는 duplicate ACK 는 단지 패킷의 손실을 알려주므로

혼잡시에만 수행하는 slow start 를 수행할 필요가 없기 때문이다. ( receiver 와 통신이 되고 있음을 의미 )

다른 세그먼트가 수신될 때만 receiver 는 duplicate ACK 를 발생시키기 때문에 duplicate ACK 를 발생시킨

세그먼트는 망을 떠나 receiver 버퍼에 저장되어있음을 뜻한다.

그러므로 두 sender, receiver 사이에는 여전히 데이터가 전송되고 있으므로 slow start 를 수행하여

급격히 데이터 흐름을 감소시킬 필요가 없는 것이다.
Posted by 행복한 프로그래머 궁금쟁이박

댓글을 달아 주세요

  1. itman 2013.02.09 20:19  댓글주소  수정/삭제  댓글쓰기

    궁금한게 있는데 여쭤봐도 될런지요.

    tcp sender가 3개의 중복 ack가 수신되면 패킷손실로 간주한댔는데 3개의 중복ack인 이유가 있나요? 1개나 2개 혹은 다른 갯수가 포함안되는 이유를 알수 있을까요?

TCP/IP
이번 첫 연재의 내용은 TCP/IP에 대해 알아보는 것이다.
컴퓨터 통신에 관심이 있는 사람이라면 매우 자주 들어보았을 단어이다.
이번 기회에 확실히 알고 넘어 가도록 하자.

양종윤(인하 대학교 전자 계산 공학과 전문가 시스템 연구실)

들어가며
TCP/IP, OSI 7 계층은 컴퓨터 네트워크에 대해 조금이라도 관심을 가지고 있
는 사람이라면 아마도 한번쯤 들어본 단어일 것이다. OSI 7계층이
ISO(International Standard Organization)에 의해 만들어진 것이고 TCP/IP는
유닉스에서 쓰이는 현재 인터넷의 네트워크 프로토콜이라는 사실도 알 사람은
이미 다 아는 사실이다.
자 그럼 여기서 쉬운 퀴즈를 하나 내겠다. OSI와 TCP/IP 중 어느 것이 먼저
생겼을까? 정답은 TCP/IP이다. 흔히 표준이란 것이 시장의 지배적인 회사나
단체의 상품이 나오게 되면 그때서 그것을 표준으로 하는 경우가 대부분이고
OSI의 경우도 마찬가지이다. 최초 미국 대학사이의 정보 교환을 목적으로 한
ARPANET에서 ARPA 인터넷으로 발전하여 전세계적으로 그 프로토콜인
TCP/IP가 쓰이게 되자 ISO에서 이를 기반으로 좀 더 세분화하여 만든 것이
OSI 7계층인 것이다. TCP/IP는 4계층인 반면 OSI는 7계층인 이유가 여기 있
는 것이다.
이제 유닉스의 최대 장점이자 아직도 다른 시스템에서 넘보지 못하는 아성을
구축하고 있는 유닉스 네트워크의 세계로 들어가 보기로 하자. 아래의 그림은
TCP/IP와 관련된 유닉스의 프로토콜과 그 응용을 보인 것이다. 전체의 파악을
위해 항상 염두해 두기 바란다.

컴퓨터 네트워크 용어
네트워크 분야에서 용어의 정립은 매우 중요하다. 이제부터 설명하는 용어는
앞으로의 글을 이해하는데 가장 필수적이므로 확실히 이해하고 지나가기 바란
다.

1. 네트워크
약간씩 차이는 있을 수 있으나 독립된 컴퓨터들이 상호 연결된 컴퓨터들의 집
합을 의미하는 것으로 생각하면 될 것이다. 단 여기서 마스터, 슬래이브 관계의
컴퓨터 연결은 제외한다.
분산 시스템과의 차이는 분산 시스템이 모든 사용자에게 시스템 자체가 하나인
것처럼 보이게 하는 즉, 자동으로 일을 분산 처리하는 반면 네트워크에서는 사
용자가 작업을 명시적으로 각 기계에 지정하여 수행한다는 것이다. 분산 시스
템은 매우 특별한 소프트웨어를 가진 특별한 형태의 네트워크인 것이다. 여기
서 특별한 소프트웨어란 스스로 일을 처리하여 사용자에게는 여러 컴퓨터가 마
치 하나인 것처럼 보이게 하는 기능을 가진 소프트웨어를 일컫는다.

2. 인터넷(인터넷워크)
요즘 매우 흔히 들을 수 있는 단어이다. 그러나 이 말의 정확한 의미를 아는
사람은 그리 많지 않을 것이다. 인터넷이란 서로 다른 네트워크에 있는 컴퓨터
사이의 통신을 위한 두개 이상의 서로 다른 네트워크 연결을 의미한다.
인터넷의 목적은 물리적으로 다른 네트워크의 성질을 감추고 하나의 잘 구성된
단위 네트워크처럼 동작하도록 하는데 있다.
두개의 서로 다른 물리적 네트워크를 연결하는 한 방법은 두 네트워크를 붙이
는 게이트웨이를 사용하는 것이다. 때때로 라우터(router)라고도 한다.

3. 메시지, 프레임, 패킷
메시지란 의미를 지니는 데이터의 단위인 반면 다른 것들은 의미를 지니지 않
는다.
프레임은 저 수준의 네트워크 하드웨어를 언급할 때 쓰이는 패킷의 다른 명칭
이며 패킷은 각각 헤더와 데이터로 구성되어 네트워크에서 전송되는 데이터 형
태이다.

4. 게이트웨이, repeater, bridge
3개 모두 두 네트워크를 연결하는데 쓰이는 것들이지만 다른 점은 연결이 되는
위치이다.
repeater는 물리 층에서 단순히 전기적 신호를 복사하며 bridge는 데이터 링크
층에서 프레임을 다른 네트워크로 복사한다. 그리고 라우터는 네트워크 층에서
경로를 설정하여 패킷을 전송한다.
게이트웨이는 2개 이상의 네트워크를 상호 연결하는데 쓰이는 개체를 지칭하는
포괄적 용어이다.

참고:TCP/IP에서의 게이트웨이는 네트워크 층의 라우터를 지칭한다.

때때로 게이트웨이란 용어는 네트워크층 위의 각 층에서의 특정 대화를 수행
하는 소프트웨어를 나타내기도 한다. 그 예로 메일 게이트웨이는 전자 메일을
다른 형태로 변경한다.
repeater는 보통 하드웨어 장치이며 bridge와 라우터는 하드웨어 혹은 소프트웨
어로 구현될 수 있다. 라우터(게이트웨이)는 보통 위의 기능을 수행하는 전용
기계이다.
호스트가 하나 이상의 네트워크 인터페이스를 가지는 경우 multihomed 되었다
고 한다.

5. Fragmentation과 Reassembly
대부분의 네트워크 층은 데이터 링크 층의 특성에 따라 그들이 다룰 수 있는
최대 패킷 크기를 가진다. 이것이 MT U(Maximum Transmission Unit) 인데
간혹 전체적인 의미로도 사용된다.
이서네트의 경우 최대 1500바이트를 넘지 못하며 토큰 링의 경우는 4464바이트
를 넘지 못한다.
이러한 MTU로 인해 혹은 그 외의 이유로 생긴 것이 Fra gmentation인데
Fragmentation이란 데이터 스트림을 더 작은 조각으로 나누는 것이다. 어떤 네
트워크에서는 Segmen tation이란 단어를 쓰기도 한다. fragmentation의 역은
reas sembly이다. TCP/IP의 경우 IP층에서 이루어진다.

6. 라우팅(routing)
통신 네트워크는 2개의 기본 형태를 가진다.

(1) circuit-switched : 공중전화 시스템이 그 대표적 예로 일단
연결이 설정된 후에 비로소 통신하는 방식이다.
(2) packet-switched : 인터넷이 한 예이다. 전송할 정보들을 작
은 조각(패킷)으로 나누어 통신 선로를 서로 공유하며 보내는 방
식이다.

패킷이 갈 수 있는 각각의 길을 route라고 한다.
이 경로 결정은 네트워크 층에서 이루어지는데 실제 패킷이 전달되는 시간은
여러 상황에 따라 시시각각 변하므로 예측하기 매우 힘들다.

7. Mutiplexing과 Demultiproxing
multiplexing이란 여러 개를 하나로 연결하는 것을 의미한다. 네트워크 층에서
는 여러 개를 하나로 연결하는 것을 의미하는데 네트워크 층에서는 하나 이상
의 사용자 프로세스가 동시에 여러 규약을 사용 할 수 있는것인데 주어진 규약
이 데이터를 IP층에서 내려보낼 때 보내는 프로세스가 어느 규약에서 나온 것
인지를 알리는 것이다. 예를 들면 어떤 한 사용자 프로세스가 TCP와 UDP 프
로토콜을 모두 사용하는 경우가 될 것이다. 반대로 UDP가 IP층에서 데이터를
받는 경우 데이터를 규약을 통해 받아야 할 프로세스에게 알리는 것이
Demultiplexing(하나에서 여러 개로)이다. 이것을 위해 UDP/TCP는 사용자 프
로세스를 구분하기 위해 포트 번호를 가진다.

8. 포트(Port)
IP 주소는 하나의 시스템을 구분하고 포트는 특정 서비스나 프로세스를 구분한
다(TCP/UDP). 포트는 특정 메일박스 프로토콜을 지정하는 IP 주소를 보조하
는 2바이트 숫자이다.
9. Broadcast, Mutilcast
unicast 메시지는 특정 호스트로 데이터를 전송할 때 쓰이는 메시지이며
broadcast 메시지는 네트워크의 모든 호스트로 데이터를 보낸다. 그리고
multicast 메시지는 네트워크의 특정 그룹의 호스트로 데이터를 보낸다.
broadcast의 경우 다른 네트워크로 forwarding이 되지 않는다. 또한 이서네트
의 경우 broadcast일 때 특정 주소 비트가 1로 세트된다.

10. nesting(encapsulation)
각 프로토콜의 패킷이 다음 프로토콜에 의해 발생되는 패킷의 데이터 부분이
되는 것.

11. Modes of Service
OSI의 어떤 층 중 2개의 peer entity사이에서 제공되는 통신 서비스의 종류를
기술하는데는 여러 파라미터가 있다. 여기서는 transport 층이 응용 층에 제공
하는 서비스에 초점을 두고 설명한다.

(1) connection-oriented (virtual circuit)와 connectionless
(2) sequencing
(3) error control
(4) flow control
(5) byte stream 혹은 message
(6) full-duplex 혹은 half-duplex

connection-oriented 서비스는 통신 시작 전에 응용 프로그램 사이에 논리적인
연결이 되어 있어야 한다. 이것을 가상 회선이라 한다.
응용 프로그램 입장에서는 전용선을 가지는 것과 같은 착각을 일으키게 한다.
보통 다음의 3단계를 가진다.

(1) connection establishment
(2) Data transfer
(3) connection termination

connectionless 서비스(Datagram)는 데이터그램(datagram)이라 불리는 메시지
를 전송하는데 각각은 독립적이므로 전송을 위한 모든 정보를 가지고 있어야
한다. TCP/IP의 경우 TCP는 connection-oriented 서비스를 제공하며 UDP는
connectionless 서비스를 제공한다.
ISO/OSI 네트워크 모델
OSI(Open System Interconnection)란 여러 프로토콜들의 국제적 표준화를 위
해 ISO가 만든 개방형 시스템을 연결하는 모델이다.
OSI 모델은 그 자체가 네트워크 아키텍처는 아니다. 왜냐하면 OSI모델이 각
층에서 사용될 정확한 서비스나 프로토콜을 지정하고 있지는 않기 때문이다.
OSI는 단지 각 층이 무엇을 해야 할지만을 말하고 있다. OSI 모델은 7개의 계
층으로 구성된다.

1. 물리 층(Physical layer)
물리 층은 통신 채널을 통한 순수 데이터(raw bit)들의 전송과 관련된다.
디자인 이슈는 한 쪽에서 보낸 1비트를 다른 한쪽에서 어떻게 하면 그대로 전
송 받을 수 있을지를 확실하게 할 수 있는가 하는 점이다.
전형적인 문제로는 1(0)비트를 어떻게 나타낼 것인가, 전송의 방향은 어떻게 할
것인가, 최초 연결의 설정은 어떻게 할 것인가 등이다. 이러한 물리 층의 디자
인은 전기공학의 측면에서 생각될 수 있는 것이다.

2. 데이터 링크 층(Data Link layer)
데이터 링크 층의 주 업무는 순수 데이터 전송 설비를 네트워크 층에서 보았을
때 에러가 없어 보이는 전송 라인으로 변환시켜 주는 것이다. 즉, 송신자는 데
이터를 데이터 프레임이라는 작은 조각으로 나누어 순차적으로 전송하고 수신
자에 의해 되돌아오는 acknoledgement 프레임을 처리하여 에러에 대한 처리를
해 준다. 이런 프레임의 양쪽 끝에는 프레임의 경계를 알기 위해 특정 비트 패
턴을 붙인다.
프레임의 손상, 손실, 중복에 관해 처리하는 것도 담당한다.

3. 네트워크 층(Network layer)
네트워크 층은 서브넷(subnet)의 동작을 제어하는 것과 관련된다.
주요 디자인 이슈는 어떻게 패킷이 소스에서 목적지로 경로가 설정될지를 결정
하는 것이다.
라우트는 정적 테이블을 이용하여 터미널 세션과 같은 각 대화의 시작점에 결
정될 수 있다. 또는 현재의 네트워크 부하를 감안하여 동적으로 결정될 수도
있다.
네트워크 포화(congestion)의 제어도 이 네트워크 층이 맡는다.
heterogenous 네트워크(이형 네트워크 - 서로 다른 구조의 네트워크)가 서로
연결될 때 발생하는 여러 문제들, 즉 허용 패킷의 크기 문제나 어드레싱(이름
부여) 차이 문제들의 해결도 담당한다.
Broadcast 네트워크에서는 라우팅 문제가 간단하므로 네트워크 층이 매우 얇게
되거나 아예 없는 경우가 많다.

4. 트랜스포트 층(Transport layer)
기본 기능은 세션 층에서 데이터를 받아 필요하면 더 작은 부분으로 나누고 이
것을 네트워크 층으로 전송한 후 각 조각들이 모두 목적지로 바르게 도착했는
지를 확인하는 것이다. 덧붙여 세션 층을 하드웨어의 변화에 의한 변경으로부
터 분리한다.
일반적인 조건에서 트랜스포트 층은 세션 층이 요구하는 각 트랜스포트 층에
대해 구별되는 네트워크 연결을 생성한다. 만약 트랜스포트 층이 고효율이 필
요한 경우 네트워크 연결사이에서 데이터를 분할하여 다중 네트워크 연결을 생
성한다. 반면 네트워크 연결의 유지비용이 많이 드는 경우 트랜스포트 층은 비
용 절감을 위해 같은 네트워크 연결로의 트랜스포트 연결을 통합(multiplexing)
할 수 있다.
모든 경우 트랜스포트 층은 multiplexing을 세션 층에 대해 투명하게 해야 한
다.
트랜스포트 층은 또한 최종적 네트워크 사용자인 세션 층에 어떤 타입의 서비
스를 제공할지를 결정한다. 가장 유명한 형태의 트랜스포트 연결은 보낸 순서
대로 메시지를 전송하는 에러 없는 점대점(point-to-point) 채널이다. 또 다른
트랜스포트 서비스의 종류로는 전송 순서에 대한 보장 없는 독립된 메시지 전
송과 여러곳으로의 메시지의 방송(broadcasting)이다. 이러한 서비스의 종류는
연결이 구축될 때 결정된다.
트랜스포트 층은 진정한 end-to-end(source-to-destination)층이다. 다시 말하
면 소스 기계의 프로그램이 메시지 헤더와 제어 메시지를 이용해 목적지의 다
른 비슷한 프로그램과 대화한다. 1-3층은 각 기계와 그 주변 사이의 프로토콜
일 뿐 궁극적인 소스와 목적지 기계에 의한 것은 아니다. chained 형태인 1-3
층과 다른 점은 4-7층이 end-to-end 라는 것이다.
많은 호스트가 다중 프로그래밍 되므로 즉, 여러 개의 연결이 이루어지는 데
있어 메시지가 어떤 연결에 속하는지 알기 위한 정보도 또한 포함한다.
트랜스포트 층은 여러 메시지를 한 채널로 통합할 뿐 아니라 네트워크사이 연
결의 해제와 설정을 관리해야 한다. 이것을 위해서는 이름 부여 방법이 필요하
다. 또한 정보의 흐름을 조절하는 메커니즘도 있어야 한다.

5. 세션 층(Session layer)
크게 인증과 검증을 처리한다.
세션 층은 다른 기계의 사용자가 그들 사이의 세션을 설정하도록 한다. 세션은
트랜스포트 층과 같이 보통의 데이터 전송을 한다. 그러나 어떤 응용에서는 더
개선된 서비스를 제공한다. 또한 세션은 원격 로그인을 하거나 파일을 전송하
게 한다.
세션 층의 서비스 중 하나가 다이얼로그 컨트롤이다. 즉, 동시에 양 방향으로
할 것인가 한 방향으로만 전송할 것인가 등을 결정하는 것이다.
관련 세션 서비스가 토큰 매니지먼트이다. 이것은 토큰을 가진 쪽에서 적절한
행동을 취할 수 있게 한 것이다. 또 다른 세션 서비스가 syncronization이다.
파일을 전송할 때 중간에 끊기게 되는 경우 이 전에 끝났던 부분에 체크포인트
를 삽입하여 전송을 재개하면 다시 그곳에서부터 시작하게 하는 것이다.

6. 프리젠테이션 층(Presentation layer)
크게 데이터 문제와 압축을 처리한다.
프리젠테이션 층은 전송되는 정보의 문법과 의미에 관계된다. 서비스의 한 예
로는 기계마다 서로 다른 데이터 표현형식의 통일을 위해서 데이터를 표준 형
식으로 encode하는 것이다. 또한 데이터 압축과 암호화 등에도 관련된다.

7. 애플리케이션 층(Application layer)
최종사용자에게 서비스를 제공한다(mail, login 등).
애플리케이션 층은 일반적으로 쓰이는 여러 프로토콜을 포함한다. 예로 서로
다른 형식의 터미널 타입의 호환을 위해 가상의 네트워크 버츄얼 터미널을 정
의하여 실제 터미널을 이것으로 매핑하는 것이다. 또 다른 기능으로는 파일
전송이 있다. 서로 다른 파일 이름 지정 방법이나 문자 라인의 표현 방식을 서
로 호환되도록 하는 것이다.
이 외에도 e-mail, remote job entry, directiory lookup 등의 일도 수행한다.
TCP/IP 네트워크 모델
1. 링크 층
네트워크 하드웨어와 디바이스 드라이버를 책임진다.
TCP/IP는 이서네트와 토큰 링, RS-232 시리얼 라인에서 구현되었다.

2. 네트워크 층
기본 통신, 어드레싱, 라우팅을 책임진다.

(1) IP 데이터그램
모든 IP 데이터그램은 출발지와 도착지 주소를 가진다. 즉, 각 데이터그램이 독
립적인 경로를 가질 수 있다는 말이다.
또한 fragmentation이 책임도 가지며 기본적인 flow control도 제공한다.

(2) 인터넷 어드레스(전체 32비트)
multihomed인 경우 모든 인터넷 주소는 고유한 호스트를 지칭하지만 각 호스
트가 고유한 주소를 가지지는 않는다.

(3) 서브넷 어드레스
어떤 클래스의 인터넷 주소를 가진 기관이 원하는 경우 서브네트워크를 제공하
기 위해 가능한 호스트 주소 공간을 분할 할 수 있다.
예를 들면 class B의 주소를 가지는 경우 호스트 ID에 150개의 호스트를 할당
하고 이것들을 10개의 물리적 네트워크로 구성하기위한 첫 번째 방법으로는 물
리적인 구성을 무시하고 호스트 ID를 1에서 150까지 부여하는 것이다. 이 방법
은 모든 게이트웨이가 각각의 호스트가 어디 있는지 알아야 한다. 이 경우 새
로운 호스트를 추가할 때 각 게이트웨이의 라우팅 테이블의 갱신이 필요하다.
두 번째 방법이 서브넷을 이용하는 것이다. 즉 호스트 ID비트 중 8비트를 서브
넷 ID로 쓰는 것이다. 이 경우 첫 번째 방법과는 달리 게이트웨이 시스템은 서
브넷 ID를 가지고 라우팅에 사용한다. 새로운 호스트의 추가에도 갱신이 불필
요하다.

(4) Address Resolution
이서네트의 경우 48비트를 사용하는데 인터페이스 보드 제작 사에서 고유 번호
를 부여한다.
IP층이 인터넷 주소를 이서네트 주소로 변환하는 것을 Address Resolution이라
하고 디스크 없는 워크스테이션이 부트될 때 인터넷 주소를 결정하는 것을
Reverse Address Resolution이다.
ARP는 호스트가 특별한 패킷을 broadcast하여 특정 인터넷 주소를 가진 호스
트가 그 이서네트 주소에 응답하도록 할 수 있다. 응답을 받은 requesting 호스
트는 이서네트 주소를 인터넷 주소로 매핑하여 다음 데이터를 전송할 때 같은
주소를 계속 사용해 패킷을 전송하는 것이다.
RARP는 RARP서버가 32 비트 인터넷 주소와 대응되는 48비트 이서네트 주소
를 각 워크스테이션에 대해 가진다. 워크스테이션이 초기화 될 때 이서네트 주
소를 하드웨어 인터페이스로부터 얻어 이서네트 RARP 패킷(이서네트 주소를
가지고 인터넷 주소를 질의)을 broadcast한다. 이 때 RARP 서버만이 응답한
다.

3. 트랜스포트 층
네트워크에서 프로그램사이의 통신을 책임진다. TCP/UDP가 있는데 UDP는 IP
와 구별되는 2가지의 특징을 가진다.

> 포트 번호를 가진다.
> optional checksum를 가진다.

위의 2가지는 IP를 직접 사용하지 않고 UDP를 사용하는 충분한 이유가 된다.

4. 애플리케이션 층
최종 사용자 응용 프로그램들로 FTP, TFTP, BOOTP 등이 있다.

TCP/IP의 구성요소
1. 인터넷 프로토콜(IP)
실제 데이터를 한 기계에서 다른 기계로 보낸다.
모든 TCP, UDP, ICMP, IGMP 데이터가 IP 데이터그램으로 전송된다.
IP는 unreliable(비신뢰성), connectionless(비연결성) 데이터그램 전송 서비스를
제공한다. 비신뢰성의 예로는 만약 라우터 버퍼가 다 찬 경우 IP는 데이터그
램을 버리고 ICMP 메시지를 출발지로 되돌려 보낸다. 비연결성이란 각각의 데
이터그램이 다른 데이터그램과 독립적으로 다루어짐을 의미한다. 예를 들면 패
킷 A,B를 보내는 경우 둘은 서로 다른 경로를 경유하여 B,A순으로 도착할 수
있다는 것이다.

2. 인터넷 제어 메시지 프로토콜(ICMP)
에러 메시지, 라우팅 어시스턴스, echo request를 포함하는 IP에 대한 저 수준
의 지원
ICMP는 IP층의 일부로 여겨지곤 한다.
ICMP는 에러 메시지와 주의를 요하는 다른 조건들을 가지고 통신한다. ICMP
메시지는 보통 IP layer와 TCP나 UDP 같은 높은 계층에서도 작동한다.
어떤 ICMP 메시지는 사용자 프로세스에게 되돌려질 에러를 발생한다. ICMP
메시지는 IP 데이터그램에서 전송된다. 즉 IP 데이터그램에 encapsulation됨을
의미한다.

3. Address Resolution 프로토콜(ARP)
네트워크의 논리적 주소를 물리적인 하드웨어 주소로 변환한다.

4. User Datagram 프로토콜(UDP)와 Transmission Control 프로토콜(TCP)
IP를 통해 하나의 프로그램에서 다른 프로그램으로 데이터를 보내고(TCP),
UDP는 각 메시지에 대한 검증 없는 전송을 수행한다. UDP와 달리 TCP는 신
뢰성 있는 connection-base 전송을 한다.

호스트의 주소 지정
어떤 한 기계에 부여할 수 있는 주소는 크게 2가지인데 물리적인 주소(이서네
트 등의 주소)와 논리적인 주소(인터넷 주소)이다.

1. 하드웨어에 의한 가장 낮은 수준의 주소관리
(addressing)

▶ 이서네트의 경우는 6바이트의 주소를 할당한다.
▶ 토큰링은 2, 4, 6바이트의 주소를 가진다.
▶ point-to-point 네트워크(SLIP/PPP)는 주소를 가지지 않는다.
2. 인터넷 어드레싱
IP 어드레싱으로 알려진 것으로써 세계적으로 고유한 값을 가지며 시스템 종속
적인 성질을 가진다. 4바이트 IP 주소는 각 네트워크 장치에 할당된다.

3. IP 주소와 하드웨어 주소와의 매핑
링크 계층에 의해 구현되어 진다.
Broadcasting되는 네트워크에서는 ARP가 자동으로 해준다. 유닉스 시스템에
서는 IP 주소를 텍스트 이름으로 연관시켜 준다(‘/etc/hosts’ 파일을 사용하
거나 DNS를 사용한다).
인터넷 주소
인터넷 주소는 4바이트 주소로 네트워크 부분과 호스트 부분으로 나뉜다. 호스
트 부분은 네트워크에서의 시스템(기계)을 지정한다. 네트워크 부분은 주소가
참조하는 논리적 네트워크를 지정한다. 네트워크 부분에서 라우팅 결정이 이루
어진다. 관례적으로 10진수로 쓰인다.

인터넷 주소의 분류
전부 5개로 분류한다.

1. A 클래스
주요 네트워크로서 거의 할당하지 않는다. 형식은 N.H.H.H 이다(N이 네트워크
부분, H가 호스트 부분).

1.*.*.* ~ 128.*.*.*값을 가진다.
2. B 클래스
비교적 큰 사이트에 할당한다. 일반적으로 서브넷된다. 실제 얻기 어려운 주소
이다. 형식은 N.N.H.H 이다.

128.1.*.* ~ 191.255.*.*값을 가진다.
3. C 클래스
비교적 얻기 쉬운 주소이다.
형식은 N.N.N.H 이고 192.1.1.*~223.255.255.*값을 가진다.

4. D 클래스
Multicast 주소로 아직 개발중인 클래스이다.

224.*.*.* ~ 239.*.*.* 값을 가진다.
5. E 클래스
실험용으로 쓰이는 주소이다. 240.*.*.* ~ 254.*.*.* 값을 가진다.

참고:0.*.*.*와 127.*.*.* , 255.*.*.* 주소는 일반 IP 주소로는 쓰지 않고 특수
목적에 사용한다. 0.*.*.*는 자신의 네트워크를 지칭하며 127.*.*.*는 실제
가 아닌 가상의 네트워크인 loop back 네트워크를 가리킨다. 255.*.*.*는
broadcast 주소로 쓰인다.

Routing
시스템의 라우팅 테이블에 의한 라우팅이 이루어진다.
netstat 명령어로 라우팅 테이블을 검색할 수 있다.

inhavision.inha.ac.kr> netstat -r -n
Routing tables
Destination Gateway Flags Refs Use Interface
Netmasks:
Inet 255.255.255.0

Route Tree for Protocol Family 2:
default 165.246.10.250 UG 31 1911758 tu0
127.0.0.1 127.0.0.1 UH 1 4 lo0
165.246.10 165.246.10.162 U 8 330973 tu0

1. 라우팅 테이블 관리
(1) 정적 관리
route 명령어를 이용하여 주로 부팅할 때 추가해 준다.

(예) route add net 202.87.240.0 202.87.242.23 1

(2) 데몬에 의한 동적 관리

2. 라우팅 프로토콜
라우팅 프로토콜은 네트워크 사이의 정보 교환을 위해서 라우팅 데몬에 의해
사용되는 것이다.

각 프로트콜은 크게 2가지로 분류된다.
하나는 IGP(Interior Gateway Protocol)이고 다른 하나는 EGP(Exterior
Gateway Protocol)이다.
IGP는 autonomous system(하나의 중앙 제어에 묶인 네트워크 집합)의 라우팅
정보를 관리한다. EGP는 autonomous system들 사이의 라우팅을 관리한다.
EGP에 등록하기 위해서는 InterNIC의 autonomous system으로써 등록해야 한
다.
등록양식은 internic.net의 ftp나 HOSTMASTER@internic.net에 있다.

3. 라우팅 프로토콜의 종류
(1) Routing Infomation Protocol(RIP)
(2) Open Shortest Path First (OSPF)
(3) Interior Gateway Routing Protocol (IGRP)
(4) Exterior Gateway Protocol(EGP)
(5) Border Gateway Protocol(BGP)
(6) Distance Vector Multicast Routing Protocol(DVMRP)
RIP,OSPF,IGRP는 interior 프로토콜이다.
EGP, BGP는 exterior 프로토콜이다.
DVMRP 는 IP 멀티캐스팅 구현 실험에 사용된다.

RIP는 옛 XNS 프로토콜로 IP 네트워크에 채택되어 표준 유닉스 routed 데몬
에 의해 사용된다. cost metric은 hop cou nt로써 패킷이 흐르는 각 기계를 1
hop으로 계산하다. 이유는 경로가 길어지면 RIP가 도달할 수 없는 것으로 인
식하기 때문이다(16router 이상의 길이에선 RIP를 사용하기 힘들다).

OSPF는 최근 많이 쓰이는 새 프로토콜로 크고 복잡한 topology에 잘 동작한
다.
RIP에 비해 여러 장점을 가지는데 하나의 목적지로 여러 경로 관리에 좋은 점,
고수준 라우팅 정보를 공유하는 부분만으로 네트워크 분할이 가능한 점 등이
다.

IGRP는 대중적이지만 점점 사라지는 추세의 프로토콜이다.
EGP는 ARPANET 게이트웨이에 의해 불려진 오래 된 프로토콜로 cost metric
을 이용하며 특정 네트워크 topology를 가정한다. 최근 BGP로 대치되는 추세
이다.
BGP는 EGP에 autonomous 시스템의 복잡한 토폴로지에 대한 지원을 추가한
것이다.

4. ICMP Redirects
어떤 문제가 발생했을 때 송신자에게 알려주는 것이 ICMP redirect 패킷이다.
ICMP redirect 패킷을 받은 호스트는 라우팅 테이블을 갱신한다.

5. Subnetting
주소의 호스트 부분의 일부를 네트워크 부분으로 확장되도록 비트를 빌려주는
것을 서브넷이라 한다.
예를 들면 B 클래스의 4바이트 주소는 N.N.H.H로 해석되는데 만약 subnetting
이 3 바이트를 네트워크 넘버에 할당되면 주소는 N.N.N.H로 해석된다. 결국
하나의 B 클래스 네트워크 주소가 254개의 C 클래스와 유사한 네트워크로 바
뀐다.
바이트 경계로 네트워크와 호스트 부분으로 나누는 것은 일반적이다. 일반적이
지는 않지만 C 클래스도 2 바이트를 빌려주어 서브넷하는 경우도 가능하다.
서브넷은 서브넷 마스크를 통해 지정한다. 서브넷 마스크는 비트열로써 네트워
크 비트는 1로 호스트 비트는 0으로 이루어진다.
서브넷 마스크는 부팅될 때 ifconfig명령으로 네트워크 인터페이스 컨피그에 지
정한다. 커널은 일반적으로 기본 IP 클래스를 디폴트로 사용한다.

6. CIDR : Classless Inter-Domain Routing
(= Supernetting)
라우팅 소프트웨어는 IP 주소의 어느 비트들이 네트워크를 나타내는지 알 수
있어야 한다. 과거에는 주소 클래스 기반의 non-local 라우팅이 안되었다. 서브
넷은 autonomous 시스템 안에서만 이루어졌다.
인터넷의 급속한 성장으로 라우팅 문제가 발생했는데 해결은 한 번에 하나 이
상의 네트워크를 다루는 군집(aggregate) 라우트를 정의하는 것이었다.
CIDR(RFC1519)는 네트워크 넘버의 lower bit를 감추기 위해 마스킹을 사용하
여 효과적으로 하나의 라우트로 여러 네트워크를 묶는다. 그룹으로 묶기 위해
서는 주소가 인접해야 한다.

(예)199.128.0 199.128.1 199.128.2 199.128.3은 mask 0xFFFFFC00으로 묶인다.

전체 라우트 수를 줄이기 위해 supernetting은 주소할당과 수행될 라우팅을 계
층적이 되도록 하였다. 예로 ISP(Internet Service Provider)는 클라이언트에게
나누어주기 위해 큰 supernet를 배당 받을 수 있는 것이다.

7. 라우팅 전략 선택하기
라우팅 전략은 크게 4가지가 있다.
(1) 라우팅이 없다.
(2) 정적 라우팅
(3) 대부분 정적이고 클라이언트들은 RIP 업데이트를 참조
(4) 동적 라우팅

일반 라우팅 원칙은 다음과 같다.
(1) stand-alone 네트워크는 라우팅이 없다.
(2) 네트워크 밖으로 경로가 하나이면 그 네트워크의 클라이언트들은 long 게
이트웨이에 대해 디폴트 라우트.
(3) 한쪽은 여러 게이트웨이이고 다른 쪽은 world 게이트웨이인 경우 explicit
static 라우팅을 전자에, 디폴트 라우팅을 후자에 적용한다. 양쪽이 여러
게이트웨이이면 동적 라우팅적용.
(4) RIP를 사용하더라도 gated가 어떤 라우트들이 나가게 되는지를 지정하도
록 한다.
(5) 클라이언트들이 라우팅 업데이트에 대해 수동으로 참조하게 하려면
routed -q를 사용한다(gated도 가능).
(6) RIP가 주 라우팅 프로토콜이 아니면 gated로 passive 클라이언트를 위해
그 라우팅 정보를 번역하여 broadcast한다.
(7) routed는 모든 사람에 대해 참조하고 모든 것을 믿는다. gated는 더 많은
업데이트에 대한 조절을 제공한다.
(8) 네트워크가 political/administrative 경계를 걸치면 동적 라우팅을 요구한다.
(9) 중복되거나 루프를 포함하는 동적 네트워크는 가능하면 OSPF를 사용한다.
(10) EGP를 쓰려면 이웃의 autonomous 시스템에게 묻는다.

Setting up a Network
네트워크를 세팅하는 순서는 대략 다음과 같다.

(1) 네트워크의 물리적, 논리적 구조를 계획한다.
(2) IP 주소를 할당한다.
(3) 네트워크 하드웨어를 설치한다.
(4) 부팅될 때 네트워크 인터페이스를 컨피그하도록 호스트를 셋업한다.
(5) 라우팅 데몬을 셋업하거나 정적 라우트를 셋업한다. 둘다 할 수도 있다.

1. 인터넷 주소 얻기와 할당
네트워크 넘버는 InterNIC Registration Service에 의해 할당된다. 할당되는 IP
주소는 네트워크 인터페이스에 할당되는 것이다.

2. ifconfig : 네트워크 인터페이스 컨피그
ifconfig 명령어는 네트워크 인터페이스를 인에이블, 디스에이블 하거나 IP 주
소, broadcast 주소, 관련 서브넷 마스크를 셋업하며 다른 옵션이나 파라미터를
세트한다.

(예) ifconfig en0 128.138.240.1 up netmask 255.255.255.0
이서네트의 경우 일반적인 칩이 인텔(ie) 나 AMD(le) 이다. netstat -i 명령어
는 무슨 인터페이스가 시스템에 존재하는지 찾는다. 솔라리스에서는 ifconfig
plumb 명령으로 네트워크 인터페이스를 처음에 부착시켜 주어야 한다.
IP 주소를 컨피그하는 경우 Family항목을 inet으로 세트해야 한다. 어떤
ifconfig명령 버전은 생략될 때 자동으로 inet로 인식한다(HP와 BSDI는 inet으
로 명시). loopback 인터페이스는 lo0로 불린다. 로컬 호스트가 stand-alone 기
계에서도 네트워크 프로토콜과 서비스가 잘 작동하도록 하는 가상의 하드웨어
로 반드시 127.0.0.1(localhost)로 IP 주소를 할당해야 한다.
일반 옵션으로는
(1) netmask - 인터페이스에 대하여 서브넷 마스크를 세트한다(선, 솔라리스에
서는 /etc/networks, /etc/netmask파일의 논리적 이름을 쓸 수도 있다).
(2) broadcast - 인터페이스에 대하여 IP broadcast 주소를 지정한다. 바른
broadcast 주소는 호스트 부분이 모두 1로 세트된 것이다(SunOS에서는 0으
로).
(3) metric - 라우팅에 영향을 주는 옵션으로 보통 한 쪽에서 다른 쪽의 네트
워크로 패킷이 전송되는 시간이 1 hop인데 metric옵션은 인터페이스에 관련된
hop count로써 실세계의 비효율을 고려해 가상으로 높게 잡을 수 있다.

(예) ifconfig en0 128.138.240.1 up netmask 255.255.255.0 broadcast
128.138.240.255 -> 네트워크 클래스 B
‘ifconfig en0’와 같이 사용하면 현재의 컨피그 상태를 보여준다.

3. route : Configure static routes
route명령은 정적 라우트를 정의한다. 즉 명시적으로 라우팅 테이블을 가지는
것이다.
라우팅은 IP 계층에서 수행된다. 다른 호스트로 향하는 패킷이 도착하면 그 목
적지의 주소가 커널의 라우팅 테이블의 엔트리와 비교된다. 목적지의 네트워크
번호가 라우트의 것과 일치하면 패킷은 해당 라우트와 연관되는 다음 게이트웨
이 IP 주소로 진행된다.

라우팅에는 2가지의 특별한 경우가 있다.
첫 번째로 패킷은 직접 연결된 네트워크 위의 어떤 호스트를 향하는 경우 다음
게이트웨이는 지역 호스트의 자체 네트워크 인터페이스가 된다. 이 경우 패킷
은 직접 목적지로 보내지게 된다. 이러한 형태의 라우트는 네트워크 인터페이
스의 컨피그에 추가된다.
두 번째는 목적지 주소와 부합되는 라우트가 없는 경우 디폴트 라우트가 있으
면 그대로 수행되고 없으면 ICMP의 ‘network unreachable’메시지가 송신자
에게 보내진다. 디폴트 라우트는 보통 패킷을 다른 영리한 게이트웨이에게 보
낸다. 각 route 명령은 하나의 라우트를 추가하거나 삭제한다.

route [-f] add(delete) [type] 목적지 gateway hop-count

route -f 명령은 라우트 테이블에서 모든 게이트웨이 엔트리를 제거한다.
[type]은 net, host 문자열을 가지는데 네트워크 주소가 아니라 특정 호스트를
지칭하는 완벽한 IP 주소에 부합되는 호스트 라우트를 제공한다.
참고: BSDI, OSF/1 시스템은 route -f 대신 route flush를 사용하며 net,
host 대신 -net, -host를 사용한다.

네트워크 디버깅
1. ping
ping 명령어는 ICMP 프로토콜의 ECHO-REQUEST 데이터그램을 이용하여
특정 호스트로부터 응답을 요구한다. 최하위층의 프로토콜로써 서버 프로세스
에게 아무 요구도 하지 않는다. 단지 서버가 동작하는지만을 체크한다.
또한 네크워크가 제대로 설정이 되있는지, 즉 라우팅이나 Address Resolution
scheme, 네트워크 게이트웨이 등을 확인 할 때도 좋다. 솔라리스, SunOS에서
는 ping에 -s 옵션을 주면 자세한 출력을 보여준다.
최근의 ping 명령어는 packet count 인자가 없으면 무한적으로 출력을 표시하
므로 로 중지시켜야 한다. 아래는 그 출력예를 보인 것이다.

inhavision.inha.ac.kr> ping dragon
PING dragon (165.246.10.3): 56 data bytes
64 bytes from 165.246.10.3: icmp_seq=0 ttl=255 time=0 ms
64 bytes from 165.246.10.3: icmp_seq=1 ttl=255 time=0 ms
....
64 bytes from 165.246.10.3: icmp_seq=34 ttl=255 time=0 ms
64 bytes from 165.246.10.3: icmp_seq=35 ttl=255 time=0 ms
64 bytes from 165.246.10.3: icmp_seq=36 ttl=255 time=0 ms
64 bytes from 165.246.10.3: icmp_seq=37 ttl=255 time=0 ms
64 bytes from 165.246.10.3: icmp_seq=38 ttl=255 time=0 ms

----dragon PING Statistics----
39 packets transmitted, 39 packets received, 0%
packet loss
round-trip (ms) min/avg/max = 0/0/0 ms
위의 경우 39개의 패킷을 dragon 호스트에 보냈고 보낸 패킷을 모두 받았으며
잃어버린 패킷이 없음을 나타낸다. 즉 호스트가 제대로 연결됨을 의미한다. 끝
줄은 전송된 39개의 패킷의 최소, 평균, 최대 반응 시간을 나타낸 것인데 위의
경우는 시간이 너무 작아 0으로 나온 것이다(같은 네트워크 사이에서의 전송이
므로).

2. netstat 명령어
netstat 명령어는 네트워크와 관련된 상태정보를 보여준다. 다음은 보여줄 수
있는 상태의 종류이다.

(1) 네트워크의 연결 상황을 보여준다( 옵션 없이 사용 ).
(2) 인터페이스 설정 정보를 검사한다( -i 옵션 ).
(3) 라우팅 테이블을 조사한다(-n, -r 옵션, 여기서 -n 옵션은
호스트의 주소를 숫자로 표시하라는 옵션).
(4) 여러 네트워크 프로토콜에 대한 운용 상태 정보를 보여준다
(-s 옵션).

인자없이 쓰는 경우 활성화된 TCP 와 UDP 포트의 상황을 볼 수 있다. 또한
-a 옵션을 쓰면 연결을 기다리는 비활성화 된 서버도 볼 수 있다.

inhavision.inha.ac.kr> netstat
Active Internet connections
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp 0 0 inhavision.20 pc11.stat.inha.a.1034 TIME_WAIT
tcp 0 0 inhavision.20 pc11.stat.inha.a.1033 TIME_WAIT
tcp 0 0 inhavision.ftp pc11.stat.inha.a.1032 ESTABLISHED
tcp 0 0 inhavision.pop3 165.246.161.23.4176 TIME_WAIT
tcp 0 0 inhavision.4842 blue.nowcom.co.k.telne SYN_SENT
tcp 0 0 inhavision.4840 blue.nowcom.co.k.telne ESTABLISHED
tcp 0 0 inhavision.telnet 165.246.11.58.1026 ESTABLISHED
tcp 0 0 inhavision.telnet 165.246.11.58.1024 ESTABLISHED
tcp 0 0 inhavision.telnet 165.246.11.8.1022 ESTABLISHED
tcp 0 736 inhavision.telnet annex.11074 ESTABLISHED
tcp 0 0 inhavision.4835 songdo4.telnet ESTABLISHED
tcp 0 0 inhavision.telnet 165.246.11.41.1145 ESTABLISHED
tcp 0 0 inhavision.4825 mv35ii.telnet ESTABLISHED
tcp 0 0 inhavision.4824 blue.nowcom.co.k.telne ESTABLISHED
tcp 0 0 inhavision.telnet owl.2166 ESTABLISHED
tcp 0 0 inhavision.telnet 165.246.11.5.1024 ESTABLISHED
tcp 0 0 inhavision.telnet 165.246.11.73.1028 ESTABLISHED
tcp 0 0 inhavision.4813 blue.nowcom.co.k.telne ESTABLISHED
tcp 0 0 inhavision.telnet 165.246.31.44.1120 ESTABLISHED
tcp 0 0 inhavision.telnet 165.246.10.200.1222 ESTABLISHED
tcp 0 1 inhavision.4762 blue.nowcom.co.k.telne ESTABLISHED
tcp 0 0 inhavision.telnet 165.246.11.123.1024 ESTABLISHED
위에서 SQ와 RQ는 로컬 호스트에 연결된 send, receive queue의 길이를 나타
낸다(TCP 연결 반대 방향은 큐의 길이가 다를 수 있다).
UDP는 비연결성 서비스 프로토콜인데 위의 상태는 TCP에 대해서만 의미를
가진다.
상태 필드에는 LISTENING, TIME_WAIT, ESTABLISH ED가 오는데
LiSTENING은 현재 서버가 연결을 위해 대기중임을 나타낸다. TIME_WAIT
는 종결 작업을 수행중인 연결에 대해 나타낸다. ESTABLISHED는 현재 연결
되었음을 나타낸다. 하나의 TCP 소켓은 동시에 여러 연결을 유지할 수 있다.
존재하지 않거나 접근 불가능한 서버의 접근 시도는 SYN_SENT 상태로 나타
낸다. -i 옵션은 네트워크 인터페이스를 보여준다고 했는데 다음은 그 예이다.
만약 간격 시간을 주면 해당 디폴트 인터페이스에 대해 그 간격마다 상태를 나
타낸다. 또한 ‘-I ifname’옵션은 다른 인터페이스 지정에 사용한다.

inhavision.inha.ac.kr> netstat -i
Name Mtu Network Address Ipkts Ierrs Opkts Oerrs Coll
tu0 1500 DLI none 3064824 16 2248661 9 51719
tu0 1500 08:00:2b:e4:aa:33 3064824 16 2248661 9 51719
tu0 1500 165.246.10 inhavision 3064824 16 2248661 9 51719
tu1 1500 DLI none 0 0 0 0 0
tu1 1500 00:00:f8:21:01:6d 0 0 0 0 0
tu2 1500 DLI none 0 0 0 0 0
tu2 1500 00:00:f8:20:68:ae 0 0 0 0 0
sl0* 296 0 0 0 0 0
lo0 1536 3788 0 3788 0 0
lo0 1536 loop localhost 3788 0 3788 0 0

위의 예에서 Ierrs와 Oerrs 필드를 유의해 보아야 한다. 두 필드의 수치가 높으
면 케이블에 문제가 있음을 의미한다. 그리고 Coll 필드는 충돌 패킷의 수를 나
타내는데 보통 전체 전송 패킷의 3 % 미만인데 이 보다 크면 네트워크가 매우
부하가 크다고 판단할 수 있다.
netstat -r 명령은 커널의 라우팅 테이블을 보여준다.

inhavision.inha.ac.kr> netstat -r -n
Routing tables
Destination Gateway Flags Refs Use Interface
Netmasks:
Inet 255.255.255.0

Route Tree for Protocol Family 2:
default 165.246.10.250 UG 31 1911758 tu0
127.0.0.1 127.0.0.1 UH 1 4 lo0
165.246.10 165.246.10.162 U 8 330973 tu0
Flags 필드의 상태는 다음의 내용을 나타낸다.

> U : 액티브
> G : 게이트웨이
> H : 호스트 라우트
> D : ICMP indirect로부터의 라우트
> GH : 중간 게이트웨이를 지나는 호스트 라우트

Refs 필드는 해당 라우트를 이용하는 현재 연결된 TCP 채널의 수를 나타낸다.
Use 필드는 이 경로를 통해 보낸 패킷의 수를 나타낸다.

‘netstat -s’ 옵션은 네트워크의 내부에 산재한 카운터들의 내용을 덤프한다.
즉 모든 IP, ICMP, TCP 네트워크 정보를 보여준다. 아래가 그 예이다. 물론
이를 완전히 이해하려면 각 프로토콜의 내부 구조까지 알아야 할 것이다. 각자
깊이 있게 공부해 보기 바란다.

inhavision.inha.ac.kr> netstat -s
ip:
2571036 total packets received
0 bad header checksums
0 with size smaller than minimum
0 with data size < data length
0 with header length < data size
0 with data length < header length
21 fragments received
0 fragments dropped (dup or out of space)
4 fragments dropped after timeout
0 packets forwarded
0 packets not forwardable
0 redirects sent
icmp:
1385 calls to icmp_error
0 errors not generated 'cuz old message was icmp
Output histogram:
echo reply: 78
destination unreachable: 1385
210 messages with bad code fields
0 messages < minimum length
0 bad checksums
0 messages with bad length
Input histogram:
echo reply: 156
destination unreachable: 873
source quench: 40
echo: 78
time exceeded: 186
78 message responses generated
igmp:
0 messages received
0 messages received with too few bytes
0 messages received with bad checksum
0 membership queries received
0 membership queries received with invalid field(s)
0 membership reports received
0 membership reports received with invalid field(s)
0 membership reports received for groups to which
we belong
0 membership reports sent
tcp:
2220561 packets sent
1391533 data packets (374488110 bytes)
15401 data packets (4036447 bytes) retrans
mitted
614095 ack-only packets (529432 delayed)
0 URG only packets
358 window probe packets
179457 window update packets
19710 control packets
2524087 packets received
1267515 acks (for 374548882 bytes)
20566 duplicate acks
0 acks for unsent data
1413242 packets (287394970 bytes) received
in-sequence
22507 completely duplicate packets
(3820434 bytes)
788 packets with some dup. data
(106444 bytes duped)
45963 out-of-order packets (20954711 bytes)
31 packets (15 bytes) of data after window
15 window probes
39623 window update packets
327 packets received after close
0 discarded for bad checksums
0 discarded for bad header offset fields
0 discarded because packet too short
6709 connection requests
11712 connection accepts
17025 connections established (including accepts)
19777 connections closed (including 8247 drops)
1864 embryonic connections dropped
1239852 segments updated rtt (of 1255340 attempts)
15642 retransmit timeouts
44 connections dropped by rexmit timeout
471 persist timeouts
760 keepalive timeouts
242 keepalive probes sent
446 connections dropped by keepalive
udp:
20616 packets sent
45597 packets received
0 incomplete headers
0 bad data length fields
0 bad checksums
1 full socket
26322 for no port (24937 broadcasts, 0 multicasts)

3. traceroute : Trace IP packets
traceroute 명령은 IP 패킷이 목적지에 도달하는데 통과하는 일련의 게이트웨이
를 보여준다. 사용형식은 목적지 호스트의 이름만을 인자로 주면 된다.

inhavision.inha.ac.kr> traceroute dragon
traceroute to dragon (165.246.10.3), 30 hops max,
40 byte packets
1 dragon (165.246.10.3) 1 ms 1 ms 0 ms
traceroute명령은 outbound 패킷의 time-to-live 필드를 세트하여 작동한다. 즉
타임 아웃이 될 때 현재의 게이트웨이가 출발지로 에러 메시지를 보내게 하여
알아내는 원리이다. 그리고 다시 time-to-live 필드값을 하나 증가시켜서 반복
한다.

4. tcpdump, etherfind, snoop : Monotor Traffic
위의 프로그램들은 네트워크에서의 traffic을 감시하여 사용자에 의해 지정된
조건을 만족하는 패킷을 찾아 프린트한다. etherfind명령은 SunOS의 tcpdump
이다. 솔라리스는 snoop를 가진다.

5. arp : Inspect and Manage Address Mapping
arp 명령은 IP주소를 하드웨어 주소로 매핑하는 커널 테이블에 접근한다.
이서네트에서 이 테이블은 ARP 프로토콜을 이용해 유지된다. 다른 하드웨어에
서는 직접 정의해야 한다.
‘arp -a’ 명령은 매핑 테이블의 내용을 보여준다. 이 테이블이 자동으로 유
지되는 경우는 최근 통신한 시스템을 보여준다. 다른쪽의 게이트웨이는 보이지
않고 해당 네트워크만을 보여준다. 다음은 그 예이다.

inhavision.inha.ac.kr> arp -a
mv35ii.inha.ac.kr (165.246.10.8) at 08-00-1b-01-21-1a
ticom.inha.ac.kr (165.246.10.9) at 02-cf-1f-e1-35-83
annex.inha.ac.kr (165.246.10.161) at 00-80-2d-01-84-83
nms.inha.ac.kr (165.246.10.2) at 08-00-20-18-e4-4a
? (165.246.10.250) at 08-00-02-05-f3-15
dragon (165.246.10.3) at 08-00-20-71-f5-00
‘arp -d 호스트명’은 테이블의 엔트리를 삭제한다.
‘arp -s 호스트명 주소’는 하나의 엔트리를 추가한다.
‘arp -f 파일명’은 컨피그 파일을 이용해 테이블을 셋업한다. 또한 arp 호스
트명 명령은 호스트의 IP주소를 보여준다.

그 외의 프로토콜
TCP/IP는 유닉스의 표준 통신 프로토콜이다. 이 외에도 APPLETALK,. IPX,
DECnet 등이 있다.

1. APPLETALK
애플 사에 의해 개발되었다. 원래 프린터 공유 목적으로 만들어 졌다. TCP/IP
와 마찬가지로 여러 하드웨어에서 동작한다. 시리얼 케이블인 경우는
LocalTalk이고 이서네트의 경우는 EtherTalk이다. 또한 MacTCP도 만들었다.

(1) EtherTalk
Phase 1은 최초로 개발된 것으로 약간의 문제가 있었다.
Phase 2는 Phase 1의 Broadcast문제를 Multicast로 대치하여 문제를 해결한
것이다. Phase 2는 SNAP(표준 802.3) 헤더의 패킷을 encapsulate 한다.

(2) LocalTalk
전화선을 사용한 네트워크를 지원한다. 230Kbps로 동작한다.

(3) AppleTalk 어드레싱
IP 주소와 같이 네트워크 번호와 노드 번호로 구성된다.

(4) AppleTalk Naming
AppleTalk 사이트에서의 디바이스들은 ‘Zone’으로 그룹핑된다. 각 엔트리
는 오브직트 이름과 타입 이름을 가진다.

2. IPX
IPX(Internetwork Packet Exchange)는 노벨 사에 의해 NetWare의 일부로 개
발된 프로토콜이다.

3. DECnet
DEC의 네트워크 상품 이름이다.
DECnet 주소는 전송 매체와는 독립적이다. 1바이트의 area(논리적 구조)와 2바
이트의 노드 번호로 조합되어 구성된다.
마치며
이번 달에는 유닉스 네트워크의 기본인 TCP/IP에 대한 기본적인 내용에 대해
서 다루었다. 사실 TCP/IP에 대해 자세히 설명하자면 책 한권은 되겠지만 이
글의 목적이 TCP/IP를 가지고 무엇을 해 보려는 것이 아니라 시스템 관리자의
입장에서 네트워크를 관리하는게 목적이므로 전체적인 윤곽과 필요한 내용만을
기술하였다.
사실 네트워크 분야라는 것이 매우 광범위하고 종류도 많아 공부하기가 여간
어려운 것이 아니다. 독자에게 부탁하고 싶은 것은 틈나는 데로 OSI 7계층에
대해 공부를 하면서 이론적인 틀을 잡으며 공부했으면 하는 것이다. 그래야 다
른 프로토콜을 새롭게 공부하는데 있어 쉽게 접근할 수 있을 것이라 생각하기
때문이다.
Posted by 행복한 프로그래머 궁금쟁이박

댓글을 달아 주세요