기초컴퓨터네트워크 19 (IP - 중요)

TonyHan·2021년 5월 19일
0

=== IP (Internet Protocol) ===

1. Internet Protocol (IP)

ip가 하는 주된역활은 송신자에서 수신자로 패킷을 잘 전달해주는 것이다.

• A Network layer protocol
• Allows delivery of packets across heterogeneous systems

라우터나 호스트들을 연결해주는 매채, data link layer의 protocol이 다 다를 수 있다. 위와 같이 와이파이, 랜선, PPP가 존재할 수 있다. 그래서 어떤 시스템이냐에 따라서 다 시스템이 다를 수 있다. 그러나 그 시스템들이 다 인터넷에 연결이 되어 있으면 데이터가 다 이동할 수 있게 해야 하는데 그 역활을 ip가 담당하게 된다.

IP: A Network Layer Protocol

• Packet flow without Network layer

Hop-to-hop delivery는 서로 직접연결된 host나 device 사이를 이야기 한다. 직접연결된 시스템 사이에서는 data link layer가 데이터 전달 역활을 해줄 수 있는데 A->D는 불가능하다.

• Packet flow with Network layer

end-to-end가 가능해 진다.
“Multi-hop” communication possible using routers : 여러 hop을 거치어서 라우터로 갈 수 있게 해준다.

Hourglass model

• IP is the unified protocol required for all routers to implement
• Networks may implement different transport, data link, and physical layer protocols, but they all must implement IP

layer 1,2는 매체와 관계가 있지만 layer 3부터는 매체와 관계가 없다는 것을 확인할 수 있다. 그리고 각 layer 별로 protocol이 다 다른것을 확인할 수 있다.

어떤 layer, device 별로 선택할 수 있는 protocol이 다양하게 있다는 것을 볼 수 있다.

모든 layer에서 protocol이 너무 다양하면 universal한 통신이 불가능해진다. 그래서 전체적으로 일치된 protocol을 사용해야 하는데 그것이 바로 ip라고 한다. 그래서 컴퓨터 device에서 ip를 사용하지 않으면 통신을 할 수 없다고 보면된다.

IP: Service Model

ip가 제공해주는 서비스

  • Packet delivery model
    • Connectionless : 송수신자간의 connection을 만들지 않는다.
    • Best-effort (unreliable) : 최선을 다한다. 보장해주지 않는다.
      • Packets may get lost : loss 가능
      • Packets can be delivered out-of-order : 보낸순서와 다를 수 있다.
      • Duplicate copies may be delivered : 패킷이 복제될 수도 있다.
      • Packets can be delayed for a long time : 딜레이가 오래걸릴 수 있다.
  • Global Addressing Scheme : ip address를 이용해서 모든 device는 통일된 address scheme을 사용하게 된다.
    • Provides a way to identify all hosts in the network

2. IP: Packet Format

• IP Header is attached in front of the packet
• 20 bytes with no option, up to 60 bytes with option

network-layer에서 data앞에 header을 붙이게 된다. 기존 data에 transport-layer header도 그냥 data로 취급한다.

그래서 ip header의 format은 위와 같이 생기었다. 반드시 5줄(20byte)는 있어야 한다. Option까지 붙으면 60byte가 된다. 보통은 20byte가 붙어 있다.

IP header

• VER: IPv4 or IPv6
• HLEN: length of the header
– unit: word = 4 bytes – If the header is 20 bytes, then HLEN = 5

VER : 버전(IPv4, IPv6)
HLEN : 헤더의 길이 (0000 - 1111 * 4로 구한다. 즉 기본이면 HLEN = 5이다.)
Service
• Service: service class of the packet : 어떤 traffic인지를 알려준다. 그래서 라우터가 이것을 참고해서 우선순위를 결정하거나 처리하는 방식을 다르게 하는등의 일을 하게 된다.
– The packet is processed at the router based on the service
classIntroduction to Computer Networks


(요약 - 중요)

Service class

앞의 3bit는 우선순위이다.
• Precedence: priority (0-7) : 우선순위를 나타낸다.(7이 가장 높다)
– 7: the highest priority
– When the router needs to drop a packet, it first drops the packet with the lowest priority : 패킷 drop 시 priority를 보고 packet drop을 할 수 있게 된다.

ip라는 것은 표준 (standard)이다. 여러 device들이 한회사가 다 만들지 않는다. 여러 device 간에 통신이 되기 위해서 이러한 메세지 format이 통일이 되어야한다. 그래서 통일된 message format을 통일된 형태로 만들어서 어떠한 제조사가 만들어도 통일되도록 한다.
그래서 앞의 3bit는 통일이다.

라우터가 어떤 동작을 해야하는 가는 표준에 명시되어 있지 않다. 이건 제조사의 라우터가 어떻게 행동해야 한다고 결정한다.

그래서 표준에 명시되어 있는 내용은 이것을 따르지 않으면 아예 통신이 안되는 경우는 표준으로 명시되어 있고 동작자체에 큰 영향을 주지 않는 경우는 표준에 명시해 놓지 않고 제조사가 결정에 따라 처리할 수 있도록 한다.

• TOS bits: Type of Service : 뒤의 4bit인데. 이런 서비스가 중요하다는 것을 알려주기 위한것이다.
– None or only one of the bit can be 1

그래서 D,T,R,C 순으로 이 트래픽은 어떠한 것이 중요하다고 명시해 놓는것이다.

• Types of service

넷 중 하나만 켜져있을 수 있다.

• Packet types and their service classes

예시로 위와 같이 존재할 수 있다.

IP header

• Total length: the total packet length (header + data) : header + data를 합치어서 패킷의 전체 length를 알려준다.
– unit: byte

16bit를 할당했기에 2^16 - 1 = 65535byte가 된다.


• Identification, Flags, Fragmentation offset
• Related to fragmentation and assembly
– Explained later


  • Time to live: the life of the packet : 패킷의 수명이다.
    • unit: number of hops : 송신자 host에서 출발해서 다음 라우터에 도착하면 한 hop을 간거다 그때 TTL이 하나 줄어들게 된다.
    • decremented after going through each router
    • when TTL becomes 0, the packet is no longer forwarded : TTL이 0이 되면 더이상 다음 hop으로 안가고 더 이상 안가게 된다.
      - If it did not reach the destination, it is dropped

가장 중요한 용도는 네트워크에서 무한루프를 돌거나 하는 경우가 생길 수가 있다. 그런경우 패킷이 죽지않고 계속 살아있기 때문에 이런경우를 해결하기 위해서 사용된다.

가까운 라우터까지의 범위를 한정하기위해서 TTL을 사용하기도 한다.


• Protocol: protocol of the upper layer (transport)

ip를 사용하고 있는 상위 layer protocol인 뭔지에 대해서 적어주게 된다. (ICMP, IGMP, OSPF는 네트워크 레이어이기는 하지만 일단 사용하는 protocol이 무엇인지 명시하기 위해서 적어놓는다.)


• Header checksum: used for error detection : 에러 detection용도, 다른 값에 의해서 결정이 되는 것이다.


• Source IP address (32 bits)
• Destination IP address (32 bits)

dest는 반드시 알아야 한다.
src는 에러가 났을때 ICMP를 통해서 src address에 알려준다.


• Option: optional, may not be present
– Other 20 bytes are mandatory fields
– Thus, the minimum HLEN is 5
– When option fields are present, HLEN is larger than 5

HLEN이 5면 option field가 없는거고 그보다 크면 option에 무언가가 있다고 판단하게 된다.

(중요)IP header: exercise

패킷이 와서 header을 읽었더니 아래와 같은 경우
• The initial 8 bits of an IPv4 packet was the following

01000010
VER : 4 | HLEN :2

문제는 ip header는 최소 20byte인데 HLEN이 2 이기 때문에 8byte이다. 즉 잘못된 format이기 때문에 drop을 시킨다.

• The router drops the packet since it is an erroneous packet. Why?


• HLEN value of an IPv4 packet is 1000 (in binary). What is the length of option fields in its IP header?

HELN이 8이기 때문에 header의 크기는 32byte이다. 그러면 option field는 12byte이다.


• HLEN of a packet is 5, and the total length field has the value 0x0028. What is the length of data in this IP packet?

HLEN이 5이기 때문에 20byte이고 total length field는 0x0028 = 40byte이다. 그래서 ip header은 20byte이고 data는 20byte이라는 것을 알 수 있다.


• The initial part of an IPv4 packet is like the following:

0x45000028000100000102

4|5|00|0028|
0001|0000|
01 : TTL | 02 : protocol

• What is the time-to-live of this packet?
TTL은 1이다.

3. MTU (Maximum Transfer Unit)

• Every data link layer protocol has an upper limit of IP packet

data link layer에 지정이 된 MTU라는 값이 존재한다.

Ethernet과 같은 경우 1500byte가 MTU로 되어 있다. network layer에서 내려온 패킷이 1500byte를 넘기어서는 안된다는 것이다.

• Different protocols have different MTUs
– MTU depends on forwarding and error detection methods

MTU가 link layer에서 다 지정이 되어 있다.


(요약)
패킷을 나누어서 보낼 수 있는 최대 크기 = MTU
Fragmentation, Reassembly가 존재

거대한 데이터 그램이 들어오면 3개의 작은 데이터 그램으로 나누어 보내준다.


Fragmentation

네트워크 레이어에서 제한보다 크면 링크 레이어에서 처리해주지를 못한다. 짤라주지도 않는다. 그래서 네트워크 레이어에서 이걸 처리해주어야 한다. 그것을 Fragmentation이라고 부른다.

그래서 header 2번째 줄에 있던것들이 fragmentaiton과 관련된 기능들이다.

• If size of an IP packet is larger than MTU, then the packet needs to be fragmented into multiple packets
– The IP header is attached to each fragment

만약 4000 byte 데이터를 보내기로 하였고 MTU가 1420 byte였다고 하면 네트워크 레이어에서는 이를 ip header을 제외한 1400 byte로 자르게 된다.

목적지 host에서는 조립하는 방법, 순서를 알아야 한다. 그래서 Offset 이라는 것이 존재한다. 첫번째 fragment는 0000이고 두번째는 1400이다. 이것을 ip header에 적어주게 되는데 이때는 offset값이 8byte이기 때문에 시작주소를 8로 나눈값이 들어가게 된다.

• Identification: packet identifier
– All fragments of the same packet has the same identification number

같은 fragment는 같은 패킷을 쓰게 한다.

  • Flag
    • If the bit ‘D’ is 1: this packet should not be fragmented : 이 패킷은 fragment 하지마라.
      • If packet size is larger than MTU, packet is discarded : 만약 라우터를 지나가는데 라우터 MTU가 패킷보다 작은 경우 그 패킷을 그냥 버려버린다.
    • If the bit ‘M’ is 1: there are more fragments after this : 내가 fragment중 마지막이 아니다.
      • If ‘M’ is 0, this is the last fragment, or this is the only fragment : 0이면 내가 마지막 fragment이다.
  • Fragmentation offset
    • The position of this fragment in the original packet

      • unit: 8 bytes
      • only considers data bytes (refer to the figures in the next slides)

      Fragmentation offset은 13bit가 된다. 그래서 8byte이다. 왜냐하면 패킷의 최대 길이는(2^16 - 1 = 65535)이고 이를 8로 나누었을때(8191.875)의 값이 나온다. 그렇다면 13bit로 표현할 수 있는 값의 범위는(2^13 - 1 = 8191)이기 때문에 시작 주소만을 가리키기에는 충분하다.

Fragmentation offset


ip header은 우선 고려하지 않고 data 부분이 몇번째 부터 시작하느지를 먼저 적는다.

IP fragmentation: example

Fragment가 더 작아질 수 있다. 그때 나온 Fragment가 fragment 2.1, 2.2이다.

Fragmentation & reassembly

• Fragmentation can take place at any node
• Reassembly only occurs at the final destination
– If the packet is reassembled at an intermediate node, it may need to be fragmented again

• The whole packet is discarded if one of the fragment does not arrive at the destination

맨 마지막에서만 reassembly를 하게 된다. 이건 MTU가 중간에 달라질 수도 있고 fragment가 중간에 모두 다른 경로로 갈 수 있기 때문이다.

만약에 fragment가 하나라도 손실되었다면 패킷을 drop한다.


(요약)
4000 byte datagram에 대해 MTU가 1500byte인 경우.
20 byte = IP Header
3980 byte = payload
1480 byte로 잘라내어야 20byte 헤더를 붙일 수 있다.
패킷 ID는 모두 동일
OFFECT은 1480를 8로 나누값이 들어간다. 몇번째인지 알기 위함
fragflag로 마지막 바이트인지 알 수 있다.

(중요)Fragmentation & reassembly: exercise 1

• A packet has arrived, and its ‘M’ bit is 0. What is the meaning of this?

• Answer: either of the following
– This packet is not fragmented
– This packet is fragmented, and this fragment is the last one


M이 0인 경우의 의미

  • fragment가 안되었거나
  • fragment라면 마지막 것이다

• A packet has arrived, and its ‘M’ bit is 1. What is the meaning of this?

• Answer
– This packet is fragmented, and this fragment is not the last one


M이 1인 경우의 의미

  • 패킷이 fragment되었고 이 패킷이 마지막 fragment가 아니다.

• A packet has arrived, and its ‘M’ bit is 1, and the fragmentation offset is 0. What is the meaning of this?

• Answer
– This packet is fragmented and this is the first fragment (there are more fragments after me)

M이 1이고 offset이 0인 경우의 의미

  • 패킷이 fragment되었고 가장 첫번째 fragment이다.

• A packet has arrived, and its fragmentation offset is 100. What is the meaning of this?

• Answer
– This packet is fragmented, and the position of this fragment is 800 bytes (only counting data bytes)

fragment offset의 값이 100인 것의 의미

  • 800 byte부터 시작하는 fragment이다.

• A packet has arrived. Its fragmentation offset is 100, HLEN is 5, and total length is 100. What is the first and last position of this fragment in the original packet? (the first and the last bytes)

• the first byte: 100 x 8 = byte #800
• the last byte
– total length: 100 bytes
– header length: 20 bytes
– data length: 100
– 20 = 80 bytes
– Thus, the last byte is the byte #879

offset은 100, HLEN은 5, total length는 100

  • 시작위치는 800이고
  • 헤더의 크기는 20
  • 그럼 데이터는 총 길이 80(100-20)
  • 따라서 first : 800, Last : 879

• Assume IP header is always 20 bytes

• An IP packet has a size of 5140 bytes (including header)

• If data link layer MTU is 1500 bytes, then how should
the packet be fragmented?

header 20을 제외하고 1480까지 들어갈 수 있다.
0 - 1479 (1480)
1480 - 2959 (1480)
2960 - 4439 (1480)
4440 - 5119 (680)


• The packet should be fragmented as follows.
– MTU = 1500

profile
신촌거지출신개발자(시리즈 부분에 목차가 나옵니다.)

0개의 댓글