Routing
이다.edge router
:core router
:forwarding
:
move packets from router's input to appropriate router output.
routing
:
determine route taken by packets from source to destination.
Router에는 각각의 routing table이 있는데, overhead가 크다.
그래서 SDN(Software Defined Networking)을 사용하여 Server에서 다 결정 해서 정해진 경로로만 forwarding함
Data plane
:
Control plane
:
memory
bus
crossbar
memory
:bus
:crossbar
:input port queuing
이다.HOL(Head-of-the-Line) blocking
이라는 문제가 발생한다.HOL blocking
라고 한다.Scheduling mechanism
이다.FIFO scheduling
:tail drop
:priority
:random
:(결론)
priority 방식은 이론적으로 ideal하지만, 실제 환경에서는 쓸 수 없다.
internet은 기본적으로 fair하기 때문에 priority를 부여할 수가 없음.
그래서 실제로는 FIFO scheduling의 tail drop 방식을 사용한다.
➡️ 먼저 들어온 packet부터 내보내고, 마지막에 들어온 packet을 drop
routing protocol
, ICMP protocol
, IP protocol(핵심)
들이 있음routing protocol
:ICMP protocol
:IP protocol
: network layer의 핵심 protocol이다. IP datagram format
:ver
:
version.
우리가 사용하는 IP protocol version은 IPv4이다.
head.len
:
header length
type of service
:
priority를 부여하기 위해 만들어졌지만, 다양한 문제들로 사용하지 않음
length
:
total datagram length.
16-bit identifier
:
밑에 32 bit source IP address와 32 bit destination IP address가 있는데,
16-bit identifier는 왜 필요할까?
사실은 (16-bit identifier, flags, fragment offset)이 하나의 set이다.
이 set는 IP fragmentation을 위해 사용된다.
IP datagram은 network에서 가다보면,
해당 link에서 보낼 수 있는 최대 크기인 MTU(Maximum Transfer Unit)를 초과하는 경우가 생긴다.
이러한 경우에 IP datagram을 잘라야 한다.
그런데 fragmentation을 할 때, 유의해야 한다.
예를 들어, 1000bytes IP datagram이 있다.
MTU가 300bytes라면? 300, 300, 300, 100bytes로 보내면 되는가?
안 된다.
잘라진 packet들이 어떤 packet인지 알 수가 없다.
위와 같이 잘랐다면, 어떤 packet은 header의 일부분만 있고, 또 다른 packet은 header의 나머지 부분과 payload의 일부만 있고 ...
이러한 문제점이 있기 때문에, fragmentation을 할 때는 항상 data만 fragmentation을 한다.
그리고 각각의 자른 data가 뭔지 알기 위해 header는 항상 붙어있어야 한다.
원래 하나의 data를 잘라서 각각에 header를 붙였으면, 모두 똑같은 32 bit source IP address와 32 bit destination IP address를 갖고 있다.
그리고 잘라진 fragment들은 모두 하나의 packet이라는 것을 알려주기 위해서,
자를 때 각각의 fragment에 같은 16-bit identifier를 부여해주는 것이다.
flag
:
이 packet이 잘려졌는지? 아닌지?
fragment offset
:
이 packet이 원래 data의 어디서부터 시작되는 부분인지?
➡️ datagram은 in-order(순차적으로)로 오지 않는다.
보낼 때는 frag1, frag2, frag3으로 보냈는데 받는 애는 어떤 순서로 들어올지 모른다.
그렇기 때문에 받은 애 입장에서는 오는 대로 해당 위치에 data를 잘 넣어서 fragmentation하기 전의 Packet으로 복원해야 한다.
assembling은 반드시 destination port에서 해야 한다.
network core에서 assembling하게 된다면, 서로 path가 다르기 때문에 중간에 fragmentation을 모을 수 없다.
time to live
:
maximum number of hops 이다.
죽어있는 server 또는 존재하지 않는 server의 address로 packet을 보냈다고 가정하자.
router들은 계속해서 해당 address를 찾는다.
그런데 해당 주소는 현재 없으니까 찾을 수 없이 무한히 떠돌게 된다.
그래서 router를 통과할 때마다 hop(time to live값)이 하나씩 줄어든다.
만약 time to live값이 0이 되면, 해당 packet을 파기한다.
upper layer
:
transport로 무엇을 쓰는가. TCP? UDP?
Header checksum
:
data는 checksum을 하지 않고 header만 checksum을 한다.
왜 data는 checksum을 하지 않는가?
➡️ transport layer(TCP/UDP)에서 data를 이미 checksum했기 때문에 network layer에서는 자신의 header만 checksum을 하면 된다.
options
:
routing에 관련된 것임 (skip...)
정리)
fragmentation을 어디서 하는가?
➡️ 하나의 datagram의 size보다 MTU가 작은 곳에서 fragmentation을 한다.
assembling을 어디서 하는가?
➡️ 반드시 destination port에서 해야 한다.
network core에서 assembling하게 된다면, 서로 path가 다르기 때문에 중간에 fragmentation을 모을 수 없다.
example
: subnet part
와 host part
로 이루어져 있다.CIDR(Classless InterDomain Routing)
:/23
의 의미는 상위 23 bits가 subnet part라는 것이다.host의 개수가 줄어들고, host는 server처럼 계속 연결된게 아니라 간헐적으로 붙기 때문에
host를 더욱 효율적으로 관리하도록 하는 방법이 DHCP
이다.
DHCP (Dynamic Host Configuration Protocol)
:
DHCP server가 연결을 요청하는 host에게 동적으로 일정 시간동안 IP address를 부여한다.
DHCP 4-step
:
여기서 중요한 것은 인터넷을 하기 위해서는 IP address가 필요한데,
IP address가 없는 상태에서 DHCP server와 packet들을 주고 받아야 하는 것이다.
그래서 broadcasting을 사용함. (? . ? . ? . 255)
NAT
NAT(Network Addresss Translation)
:만약 학교 안의 system들끼리 사용하는 것은 전혀 문제가 없음.
문제는 학교 밖의 인터넷을 사용해야 한다.
만약 10.0.0.1로 외부 router에 요청한다면? 외부 router는 그 IP address가 존재하지 않기 때문에 응답을 무시함.
우리 학교 router도 마찬가지로,
한쪽은 subnet(10.?)으로 연결되어 있고(LAN side address),
core쪽은 실제 internet쪽의 address(WAN side address)로 연결되어 있다.
외부에서 볼 때는 WAN side address만 보인다.
이러한 기능을 하기 위해 router에서 NAT(Network Addresss Translation) table
을 추가한다.
(1) router에서는 10.0.0.1, 3345를 받으면? NAT table에 138.76.29.7, 5001을 생성한다.
(2) 이제 Source IP는 138.76.29.7, 5001로 바뀜.
(3) web server(port:80)에서 reply받은 packet을 138.76.29.7, 5001로 전달.
(4) router에서는 138.76.29.7, 5001을 받으면? LAN side address인 10.0.0.1, 3345로 전달.
NAT
와 DHCP
가 같이 사용된다면?NAT라는 기술이 사용되기 전에, IPv4 address가 고갈될 것이라는 문제가 제기되어 IPv6가 나왔다.
IPv6
:
"32bit address(IPv4)를 128bit로 확장하자"
IPv6를 굳이 써야 하는가?
: No... NAT!
IPv4에서 IPv6로 바꾸려면 전세계 router를 모두 바꿔야 하고,
NAT를 쓰게되면서 사설 IP를 쓰다보니, IP가 더이상 부족하지 않다.
기존의 router들을 전부 건들이지 않아도 된다.
그래서 IPv6는 생각보다 많이 쓰이지 않고 있다.
tunneling
:Generalized Forwarding
:
traditional한 routing 기술.
router가 어떤 algorithm을 돌리느냐에 따라서 router의 overhead가 매우 크다.
SDN
:
router의 routing table 관리를 routing management server에서 centralized하게 관리, 수정한다.
forwarding을 결정하는 것은 forwarding table을 보고 하는데,
만약 SDN에서 forwarding table을 미리 관리, 수정해준다면
router에서 과거 방식처럼 복잡한 routing protocol을 통해서 dynamic하게 직접 바꿀 필요 없이 할 일이 간단해진다.
OpenFlow
:Pattern
: header fields 안에 어떤 값이 match되면? event를 발생시킴Actions
: pattern이 matching되었다는 event에 대해서, 어디로 가라.Priority
: Counters
: 받은 packet의 #bytes, 개수Rule
, Action
, Stats
으로 나눌 수도 있다.Example
: