프로그래밍[Univ]/네트워크

[네트워크] IP

Cloud Travel 2012. 4. 23. 16:06

* basic

 - network of networks : 네트워크들의 네트워크

 - 네트워크와 네트워크를 연결해주는 장치 : router(라우터)


* IP

 - 네트워크 위치를 알기 위한 주소 값 

 - Network ID(Net id) + Interface id(host id)

 - 32bit로 이루어져 있고, 8bit씩 나눠서 표현을 한다. 이에따라(Net id의 길이에 따라) 3가지 유형이 존재한다.

  ⓐ class A = Net id(8) + Host id(24)

  ⓑ class B = Net id(16) + Host id(16)

  ⓒ class C = Net id(24) + Host id(8)

  ※ 현재는 유형이 존재하지 않고 CIDR방식으로 나타내준다.

   > ***.***.***.*** / x  : net id 길이가 x(임의의 길이)이고, 그외는 host id 

 - IP주소 할당법 예시

   

 - Special IP address 

  ⓐ all 0 (000.000.000.000) : This host. 주소할당시 자신의 주소를 모를때 사용

  ⓑ Net id(0) + host id : This host의 Network를 지칭

  ⓒ Net id + host id(1) : Directed broadcast for net

  ⓓ 127.*.*.* : Loop-back host. 자기자신을 지칭

 - Private IP address

  > Global internet 상에서 의미가 없다.

  > local host에서 사용하기 위해서 존재한다.

   10.0.0.0 ~ 10.255.255.255

   172.16.0.8 ~ 172.31.255.255

   192.168.0.0 ~ 192.168.255.255

  > Private address를 쓰지만 global internet과 통신을 하기 위해서는 NAT을 해야한다.

  > NAT : Network address Translation. 라우터가 private port number를 이용하여 

              private address와 global internet을 맵핑


*  Network Layer 

 - 라우터가 관리

 - 경로를 찾아서 어떤 경로로 보내줄지 결정

  

  > checksum을 한후 header를 해체한후 Time to live값을 줄이고, 다음 라우터 위치 판단후 새롭게 checksum을 

     생성한후 header를 생성후 전송한다. 

  > routing table을 이용해서 다음에 보낼 hop(router)위치를 찾는다.

  > 이로 인해 Header값이 바뀔 수도 있기 때문에, packet의 header를 다시 만들어 준다.

 - 사실상 network congestion관리는 여기서하는게 옳다.(실제론 TCP에서한다.)

 - Network layer header

   

  a) version / header length / total length : IP version / header 길이 / 전체 길이

  b) Time to live : 인터넷에 떠도는 패킷이 없게 하기 위해서. 시간으로 관리하는 것보다

                        거쳐가는 라우터 수(Hops)로 관리 하는게 좋다.

  c) Protocol : IP입장에서 상위계층에 전달하기 위해서 필요

  d) header checksum : bit의 xor연산을 통해서 검사를 한다.(이전의 check sum과 현재 소스의 bit를 비교)

                                  오류 검출시 해당 패킷을 버린다. (재전송 요청은 TCP에서 해준다)

  e) flag : 3bit으로 이뤄져 있으며 fragment의 유무와 fragment의 마지막인지 아닌지를 알려주는 역할을 한다.

  f) fragmentation offset : MTU(전송 가능한 최대의 패킷양)보다 큰 양의 packet이 온다면 MTU 크기에 맞게

                                    나눈다. 이것을 fragmentation이라고 한다.

                                    나눠진 fragmentation은 고유번호로 패킷을 구분하고, offset값으로 순서를 결정한다.

                                    offset값은 data size/8로 들어간다.

    

  ※ flag와 fragment offset은 쪼개지는 것이 발생할 때만 생성된다.

 g) option 

   > source routing : 라우터가 routing을 할 필요 없이 특정 경로를 source에서 경로를 명시

                             (Strict : 명시된 모든 경로 경유 / Loose : 중간에 생략 가능)

   > record routing : router가 지나갈 때 자신의 IP주소를 적어준다.(이동 경로 check)

   > time-stamp : router가 지나갈 때마다 시간을 찍어준다.(경과시간 check)


* IPv6 

 - 주소공간이 부족해서 주소공간을 확장하기 위해서 개발(32bit > 128bit)

 - 사설 주소의 응용으로 아직까진 IPv4를 사용중

   

 - 달라진 점

  > HLEN이 사라짐 : option이 사라짐. header 길이 고정

  > Fragment 도 하지 않는다.

  > checksum을 없엤다.(에러 제어를 하지 않는다)

  > Time To Limit 의 이름이 Hot Limit으로 변경됨

  > Flow Label추가

  > Next header pointer를 이용해 option의 위치를 가르킨다.(fragment, hlen)


* Network Layer를 도와주는 것

 - ARP ( address resolution protocol) : 링크 계층의 물리주소와 네트워크 계층의 논리 주소간의 Mapping

   

 - Proxy ARP : 자신의 network에 IP가 존재하지 않고 router를 거쳐서 할 때

  

  > Router에서 ARP 실행.

 - ICMP(Internet Control Message Protocol)

  > error reporting : 목적지 도달하지 못함. 받는 측이 받기 힘들때, TTL모두 소진시, IP parameter 이상

                           더 빠른 새로운 경로를 발견 했을 때 그 값을 전달 해준다.

  > Query Message : echo, Timestamp, subnet mask length, router 호출

  > 대표적은 ICMP 사용의 예.

   ⓐ echo

    > ping nave.com 

   ⓑ tracert -> 특정 주소까지 가는 경로 추적

     > TTL 값을 1부터 1씩 증가하면서 TTL 소진 error를 받아서 정렬하여 보내준다.

 - IGMP(Internet Group Management Protocol)

  > Network내에서 특정 group에서 Multi cast를 보내기 위한 것.

  > Broad cast, multi cast, uni cast등의 방법으로 패킷을 전달한다.

* IP주소설정

 - 하나의 컴퓨터가 특정 네트워크에 접속을 하면, IP주소, router IP주소, subnet mask(네트워크 id길이)

   DNS server IP주소를 알아야 network가 가능하다. 

 - 관리자가 직접작성하는 방법과 router가 임의로 할당해주는 방법이 존재한다.

 - router가 임의로 할당해주는 경우에는 reverse ARP(RARP)를 통해서 하나씩 모두 물어봐야한다.

   (Router에게 자신의 ethernet주소를 넘겨주고 받아온다.)

   이를 DHCP방식 이라고한다.

 - 고정 IP일 경우에는 BOOTP를 통해서 한번에 모든 값을 얻어 올 수 있다.(RARP 미사용)