data plane에 대해서 알아보자
• To send a message, we need a destination address : ip address를 생각하면된다. 패킷이 목적지까지 전달하기 위해서는 목적지의 주소가 필요하다. 이때 host의 주소를 internet address라고(ip address)라고 한다.
• Every host connecting to the Internet needs to have a unique address : 이 ip 주소는 unique해야 한다.
• IPv4
– the address system used today
– 32 bits
– possible number of hosts: 4,294,967,296 : 43억개정도의 ip address가 나올 수 있다. 하지만 이 숫자도 상당히 적다.
(중요)
IPv4는 32bit로 interface(NIC 등)에 할당된다. 인터페이스는 host/router, physical link 사이의 연결을 주도함
binary notation(32bit)의 수치가 ip address이다.
dotted-decimal notation : 2진수를 10진수로 바꾸어서 점을 찍은 것을 이야기 한다.
• Convert the following IPv4 addresses into dotted-decimal representation
– 10000001 00001011 00001011 11100111 : 129.11.11.231
– 11000001 10000011 00011011 11111111 : 193.131.27.255
• Dotted-decimal notation: wrong use case
– 111.56.045.78 : 앞에 0 들어감
– 221.34.7.8.20 : 숫자 5개
– 75.45.301.14 : 범위 넘어감
– 11100010.23.14.67 : 하나가 2진수
ip address에서도 체계를 가질수 있도록 만들었다.
• Network address + Host address : network와 host 부분을 나누는 것이다.
• Nodes in the same network has the same network address
network까지는 주소는 같고 host부분만 바꾸자는 방식이다. 그래서 지역의 네트워크 address를 공유하는 방법이다. 그래서 그 방법은 위와 같이 나뉘어 진다.(8:24 | 16:16 | 24:8)
• Ethernet address: flat (no structure) : 이더넷 address는 지역적 특성없이 제조사의 고유번호가 들어가는 형태로 address가 들어가게 된다.
• system used to allocate address space based on network size
각각 address를 나눈것을 위와 같이 class를 나뉘게 된다. classD, E는 조금 특수한 목적으로 할당되는 ip address라고 생각하면 된다.
• class A: IP address (binary notation) starts with ‘0’
• class B: starts with ‘10’
• class C: starts with ‘110’
• What are the classes of the following addresses?
– 00000001 00001011 00001011 11101111(A)
– 11000001 10000011 00011011 11111111(C)
– 14.23.120.8
– 210.115.229.74
• Network address: indicates a network as a “group of hosts”
– Class A: 7 bits : 앞의 0을 빼냐 넣냐로 8, 7비트
– Class B: 14 bits : 10
– Class C: 21 bits : 110을 넣냐 않넣냐
• Host address: indicates a host inside a network
– Class A: 24 bits
– Class B: 16 bits
– Class C: 8 bits
• For large ISPs or organizations, a class A address space is allocated
• For smaller ISPs or organizations, a class B or class C address space is allocated
클래스별로 호스트의수가 다르다. 클래스에 해당하는 네트워크 address를 할당받아서 그걸로 조직의 망을 구성하는 것을 Classful address라고 부른다.
• An organization can re-allocate its address space to organize multiple subnets : 한개의 Class 내부에서도 분리해서 여러개의 네트워크를 사용하고 싶어질 수 있다. 이럴때 ip address를 어떻게 나눌지를 생각해 보는 것이다.
• Subnet masks define partition of host part to subnet ID and host ID
앞의 24bit가 subnet의 ip이다. 그리고 뒤의 8개의 0이 subnet이 가질 수 있는 host ip이다라고 설정할 수 있다.
(요약)
IP는 subnet part, host part로 나뉘어 있다. 그래서 subnet은 고정되어 있고(같은 subnet part를 나누는 기준이 됨) host는 값이 자주 변한다.
같은 subnet에 들어가 있으면 라우터가 개입하지 않아도 상호 데이터를 주고받을 수 있다.
서브넷을 결정하는 방법 : 우리가 서브넷 마스크를 이용해서 결정하면 된다.
• "Supernetting"
– Similar to subnetting, it is also possible to use subnet mask to combine multiple network addresses : 여러개의 네트워크 address를 하나로 합친것을 보고 supernetting이라고 부른다.
예를 들어서 나는 classC를 사용하고 있는데 네트워크가 보다 더 필요해서 네트워크 어드레스의 마지막 1비트는 그냥 호스트 네트워크 용도로 사용하는 경우이다. 이를 위해서 다른 네트워크도 함께 끌고와서 사용하게 된다.
• Using subnet mask, we can define a network of any size -> Classless addressing : subnet 마스크를 쓰더라고 class를 나누지 않는 것을 보고 Classless addressing이라고 부른다.
• Classless addressing is also called “CIDR” : 다른말로 CIDR이라고 부르기도 한다.
– Classless Interdomain Routing
– Widely used in today’s routers
• Problem with classful addressing : 클래스별로 문제가 있어서 그냥 subnet mask를 쓰게 된 것이다.
– class A and B: too large
– class C: too small
– For a network of 1000-2000 hosts, a class C address space is not enough, but a class B address space is too wasteful
• As the number of networks increase, address space should be efficiently allocated
• Classful addressing is inefficient
A newer approach of address allocation
No class: addresses allocated as an address block : 이제는 클래스가 없기 때문에 어디에서 어떻게 쓰라고 조직에서 정해주어야 한다.
Three rules of address allocation : 다음 3가지 룰을 이용한다.
• Example: an organization needs 16 addresses
– allocated: 205.16.37.32 ~ 205.16.37.47
16개의 주소가 필요해서 연속이고, 지수인 상태로 아래와 같이 할당했다고 하자. 이것은 숫자이지만 실재로는 binary number이다. 이때 이 숫자의 끝은 16으로 나누어 떨어져야 한다. 예를 들어서 여기에서는 32가 16으로 나누어 떨어지니 정상이다. (반대로 205.16.37.1 ~ 로 할당하면 안된다)
• network mask
– IP address prefix that indicates the same network
– IP address: 210.115.227.98
– subnet mask: 255.255.255.0
위에서 반드시 블록으로 나누어져야 하는 이유는 subnet mask 때문이다.
그렇다면 ip address가 속하는 망은 210.115.227.0 - ...255까지인것을 확인할 수 있다.
• network mask
– n: subnet mask (prefix length)
– 205.16.37.39/28
위와 같이 subnet 마스크까지 해서 표현해준다. 숫자 28은 위에서부터 28bit까지는 1이라는 것을 의미한다.
(요약)
• An ISP was allocated an IP address block
• One of the address was 205.16.37.39/28
• What is the first address in this block?
205.16.37.39/28 -> 11001101 00010000 00100101 00100111 : 앞의 28bit가 network이고 4bit가 host이다.
The first address is 11001101 00010000 00100101 00100000
Thus, the first address is 205.16.37.32 : 그러므로 첫번재 address는 205.16.37.32이다.
• Usually, the first address in a block also indicates the address block itself
– 205.16.37.32/28 can mean the address block 205.16.37.32 – 205.16.37.47
• One of the addresses allocated to an ISP is 205.16.37.39/28.
이 문제를 풀기 위해 28를 제외한 마지막 숫자의 비트로 바꾸어 보자
0010 0111
진한 부분을 모두 1로 바꾸면 그게 last address이다.
• What is the last address in this block?
205.16.37.47
• What is the number of addresses in the block?
block은 2^4 = 16개이다.
• Routing table must store entries
– Entry: (Destination, Next Hop)
routing table이란 어떠한 목적지로 하기위해 다음은 어떤 interface로 내보내야 할지가 결정되어야 한다. 하지만 destination이 43억개나 되면 너무 라우터가 소모해야 하는 메모리가 많아진다.
• Routing table size affects performance : routing : 그래서 라우팅 테이블 사이즈가 너무 커지면 다음과 같은 문제들이 생긴다.
– Large size slows down processing : processing이 느려지고
– Too much space needed : 공간을 많이 낭비한다.
• Solution: prefix routing : 그래서 prefix routing이 해결책이 될 수 있다.
• Suppose 194.24.x.x indicates a host in Cambridge university, UK.
• From a router in Cambridge University,
– It is probable that destination address 194.24.1,1, 194.24.83.72, and 194.24.235.55 will have the same next hop router. : 라우터가 이걸 따로따로 기억할 수 없다. 그래서 이걸 합치어서 기억하는 것이다.
– Thus, for these destinations, only one route entry is maintained as the following.
– destination: 194.24.0.0/16 : 이것과 같이 라우터에서도 block을 기억한다. 앞의 16bit가 일치하면 이 라우터를 택하라는 의미가 된다. 이런것을 Prefix routing이라고 부른다.
– If the first 16 bits of the destination matches 194.24.0.0, then this entry should be used.
• Suppose addresses of hosts in universities are as follows.
그래서 Cambridge와 같은 것을 21bit가 동일하다고 표현하고 테이블에 저장하고 있는다. 나머지도 이와 유사하게 테이블에 저장하고 있는다.
• The routing table is maintained as follows.
– Cambridge: 194.24.0.0/21
– Edinburgh: 194.24.8.0/22
– Oxford: 194.24.16.0/20
이러한 방식을 routing table entry를 줄인다.
• For a packet destined for 194.24.17.4
– compare the first 21 bits with 194.24.0.0 -> no match
– compare the first 22 bits with 194.24.8.0 -> no match
– compare the first 20 bits with 194.24.16.0 -> match
– Thus the route for Oxford is used.
이제 ip header을 열어보면 dest address가 있는 것을 확인할 수 있다. 이때 194.24.17.4라고 하면 prefix subnet mask 중에서 앞 bit들이 매치되는지를 확인한다.
• If there are multiple matching entries : 여러개의 entry와 match 될 수도 있다.
– The one with the longest prefix is used : 이 경우에는 긴것을 선호하는데 나중에 다시보자
• Destination IP address: 194.24.17.25
– 11000010 00011000 00010001 00011001
• If destination IP address is 194.24.14.72, which next hop should be used?
위와 같이 19, 22 모두 일치하는 경우 긴 mask를 선택한다.
• Since both routes match, San Francisco is selected as the next hop
– Longer prefix: a more specific path : 보다 특정되어 있는 마스크이기 때문이다.
• For routers in Sogang university, routes to Cambridge, Edinburgh, and Oxford all have the same next hop. : next hop이 모두 같은 경우 꼭 세개의 entry를 가지고 있을 필요가 없다.
• In this case, the three route entries can be aggregated. (route aggregation) : 이 경우에는 라우트들을 aggregate해서 하나의 entry로 만들 수 있다. 그래서 이 ip address를 하나로 묶을 수 있는 ipaddress group을 찾아내야 한다.
• Cambridge: 194.24.0.0/21
• Edinburgh: 194.24.8.0/22
• Oxford: 194.24.16.0/20
• aggregated: 194.24.0.0/19 = 위의 세개를 이렇게 하나로 묶어버리자
• Used to reduce routing table size