컴퓨터통신#7
LeeMir, 27 April 2021
4장 - Network Layer
Two Key Network-Layer Functions
- Network-Layer에는 두가지 Function만이 존재
- Forwarding
- Routing
Network Layer : Data Plane, Control Plane
- Data Plane
- Local, Router 각각(Per-Router)의 관점에서 기능
- Fowarding Function 수행
- nanosecond 단위의 속도로 처리
- Control Plane
- Network-Wide Logic
- Source host에서 Destination host로 가는 길에 대한 기능
- 원래 Control Plane이 하는 일이 Router에 포함되어있어서 크게 구분짓지 않았으나, SDN이 나오면서 구분지어짐
- Software-Defined Networking
- Router가 아닌 별도의 Controller(Server)에서 수행
- Data Plane이 하는 기능 이외의 기능들을 Software적으로 수행
- 원래는 Router마다 Algorithm을 갖고 서로 공유를 해야하는데, SDN에서는 Controller가 계산해서 각 Router로 뿌려줌
- millisecond 단위의 속도로 처리
- Network-Wide Logic
Network Service Model
- Internet은 Service Model이 Best Effort나 막상 보장해주는 것은 아무 것도 없음
- Congestion FeedBack은 ECN으로 함
- ATM
- Asynchronous Transfer Mode
- 2계층까지 포함
- Virtual Circuit 방식
- Packet Switching 방식의 일종
- Packet을 Cell이라고 부름(크기가 매우 작음)
- 전화망 사업자들이 영상, 문자 등 일반 Data까지 전송하려고 해서 만든 기술
- Internet에 비해 보장해주는 것이 많음
Destination-Based Forwarding
- Longest Prefix Matching
- Router에서 IP 앞부분을 보고 몇 번 Link로 내보낼 지 정함
- 몇 번 Link로 내보낼지 정해지는 IP 앞부분을 Prefix라고 부름
- TCAM(Ternary Content Addressable Memories)
- Table Size와 관계 없이 병렬로 탐색하기 때문에 한 Clock Cycle에 찾을 수 있음
- 비용이 큼
Switching Fabrics
- Three types of switching fabrics
- memory / bus / crossbar
- Switching 속도는 Input / Output Line rate의 N배(Input 개수)만큼 빨라야 함
- Memory
- Packet이 System의 Memory에 기록(Input)했다가 읽어나가는(Output) 방식
- Bus
- Input이 Broadcast되어 퍼져서 목적지로 감
- 작은 규모에서 사용할 수 있는 Router 구조
- Link의 Data Rate에 영향을 받음
- Crossbar
- ??
Input Port Queuing
- Input Port로 들어오는 속도(Line Rate)보다 Switching 속도가 느리면 Queue에서 Delay + Loss되는 문제 발생
Output Port
- Buffering
- Switching 속도가 Output Port로 나가는 속도(Transmission Time)보다 빠르면 Buffer(Queue)가 필요
- Buffer 공간이 부족하면 Datagram이 Loss될 수 있음
- Scheduling Discipline
- Queue에 보관하는 순서는 기본 FIFO(Internet에서는 FIFO를 사용함)지만, 우선순위를 부여하기도 함
- 네트워크 중립성에 어긋날 수 있음
- FIFO Scheduling
- 가득찬 Queue에 Packet이 도착해서 Discard 해야하는 상황
- Tail Drop : 새로 들어온 Packet을 버림(무시)
- Priority : 우선순위에 따라 버림
- Random : 임의로 버림
- 가득찬 Queue에 Packet이 도착해서 Discard 해야하는 상황
- Priority Scheduling
- Priority를 정하는 규칙은 Datagram의 Header를 보고 결정
- 경우에 따라 Transport Layer의 Header를 볼 수도, Application Layer의 Header를 볼 수도 있음
- Priority를 정하는 규칙은 Datagram의 Header를 보고 결정
- Queue에 보관하는 순서는 기본 FIFO(Internet에서는 FIFO를 사용함)지만, 우선순위를 부여하기도 함
The Internet Network Layer
- IP Datagram Format
- 1 word = 4 bytes
- ver : IPv4(0100)인지 IPv6(0110)인지 구분해줌
- header len : 고정 헤더 20 bytes + 가변 헤더(option) 크기를 명시해 data가 어디서부터인지 알려줌
- data에는 상위 Layer인 TCP, UDP segment가 올 수도 있으나, IP나 ICMP 같은 Network Layer Message가 다시 올 수도 있음(Internet은 Layer 개념을 고려하지 않고 설계되었기 때문)
- type of service : 다양한 종류의 Datagram들을 구분지어줌
- 잘 쓰지 않음
- Multimedia에서 QoS(Quality of Service)로 사용하기도 함
- length : 헤더 + data field까지 총 몇 bytes인지 알려줌
- 16-bit identifier : Fragmentation에서 필요
- 한 Datagram으로부터 나눠진 Fragment들은 모두 원본 Datagram과 같은 ID를 가짐
- 재조립할 때 사용
- frag flag : Fragment를 재조립할 때, 마지막 부분의 Fragment임을 명시(0이면 마지막)
- fragment offset : Fragment가 첫 Fragment로부터 얼마나 떨어져 있는지 Datagram 내 순서 명시
- 이 때, data field의 size를 8로 나누어서 offset을 계산하는데, 그 이유는 Datagram의 최대 Size는 65536 bytes인데 offset은 13-bit로, 2^13개밖에 가리킬 수 없음. 따라서 2^13개로 65536의 범위를 표현하려면 대략 8 bytes씩 나눠줘야함.
- time to live(TTL) : 홉수(hop count)를 이용해 datagram의 수명을 명시함
- 해당 router가 목적지가 아니면 hop count를 하나씩 줄임
- algorithm이 잘못되어 router들 사이에서 loop에 빠진 datagram을 없애줌
- 하나씩 늘리면서 보내서 가장 가까운 Server를 찾을 때 사용할 수도 있음
- upper layer(protocol) : data field에 있는 message가 어떤 protocol에 의해 작성되었는지 명시
- TCP = 6, UDP = 7
- header checksum : checksum
- source IP address : source IP address
- destination IP address : destination IP address
- option : 가변
- 특정 router를 지나쳐가야한다고 명시할 수도 있음
IP Fragmentation, Reassembly
- Network link는 MTU(Max Transmission Unit)라는 개념이 존재
- 2계층 Frame의 Data에 포함될 수 있는 최대 바이트 수
- 크기가 큰 IP Datagram은 여러개의 Datagram으로 나뉨(Fragmentation)
- 나뉜 Datagram은 Fragment라고 하고, 각각은 독립적으로 목적지에 전달
- 목적지에서 재조립(Reassemble)
- 재조립하기 위해 IP header에 있는 field를 사용
- 한 번 Fragmentation되었으면, 다시 Fragmentation이 일어나면 안됨
- Reassembly Buffer
- 목적지에 존재
- Fragment가 순서대로 오지 않아 Reassemble할 때 순서를 맞춰야할 필요가 있음
- 만약 Fragment가 오다가 Reassemble 과정에서 중간에 비어서 올 때까지 기다려야하더라도 Reassembly Timer가 존재해 그 시간 내에 오지 않으면 버림