end-to-end로 보낸 message가 layer 3에서 host를 찾아가는 것을 focusing하고 있음.
destination host를 찾아가야 해서 IP주소를 넣었음. 중간 라우터들이 IP주소를 보고 FIB table에서 matching해서 찾을 때, longest prefix matching: 가장 길게 완벽히 match되는 것이 entry에 있으면 그것으로 했음.
여러 개의 subnet을 구성하고 있는 (/28) 하위 subnet들은 상위 ISP에게 알려줄 때, /26까지 aggregation해서 하나만 알려주면 된다. 가능하면 적은 양의 데이터로 라우팅 하는 것이 좋기 때문에.
subnet 중 어느 하나가 다른 network로 이사가더라도, longest prefix matching을 사용하기 때문에, 추가로 갖고 있는 routing entry를 가지고 있으면 된다.
CIDR을 썼음에도 public 주소가 너무 고갈 되니까, 너도 나도 쓸 수 있게 private 주소를 사용. 내 라우터에 NAT 혹은 NAPT 기능을 enable 시켜 여러 private 주소에 하나의 public IP 주소만 할당 되도록 함.
Pop Quiz
NAT 기능이 있는 router에서는 layer 4계층의 port정보를 조작할 수 있다.
⇒ T. router는 3계층까지만 control해야 하는데 그 rule을 깬 것이 NAT. 4계층의 port번호를 조작하기도 함.
NAT의 단점?
⇒ private network에서 먼저 connection을 initiate 하는 경우엔 문제가 없으나, private network에 있는 server에 public client가 들어오는 경우, 접근을 할 수 없음. relay 방법은 peer들 사이의 중계 역할을 하여 마치 client에게는 server인 것 처럼, server에게는 client인 것처럼 대응해주어 모든 packet을 relaying 시켜줌. connection reversal 방법은 Peer C가 Client에게 먼저 connection을 열라고 중계만 해주면 Client가 initiate하여 통신할 수 있음.
Solution)
At Step 1: source address of the IP datagram: 10.0.1.21 destination address of the IP datagram: 128.119.168.188source port number for the TCP segment of the IP datagram:3376destination port number for the TCP segment of the IP datagram: 80Host 10.0.0.13 has assigned an arbitrary source port number 3376 and sends thedatagram to LAN. The datagram is received at the NAT router's right port.
At Step 2: source address of the IP datagram: 135.122.193.218destination address of the IP datagram: 128.119.168.188source port number for the TCP segment of the IP datagram:5116destination port number for the TCP segment of the IP datagram:80After receiving the datagram from host 10.0.0.13, the NAT router generates anew source port number 5116 (not already in use within the NAT table) for thedatagram and replaces the original source port number 3376 with the new sourceport number 5116. The traffic leaving the home router for the larger internethas the source IP of the NAT router which is 135.122.193.218, and thus thedatagram's source IP address now changes to 135.122.193.218. The destinationaddress and the port number remain the same. The NAT table, after step 2, lookslike (see Figure 4.25 in text):
WAN-side address : 135.122.193.218, 5116
LAN-side address : 10.0.1.21, 3376
At Step 3: source address of the IP datagram: 128.119.168.188destination address of the IP datagram: 135.122.193.218source port number for the TCP segment in the IP datagram:80 destination port number for the TCP segment in the IP datagram:5116This arriving datagram was sent by remote host 128.119.168.188 in response tothe datagram sent by this NAT router in Step 2 above.
At Step 4: source address of the IP datagram: 128.119.168.188destination address of the IP datagram: 10.0.1.21source port number for the TCP segment of the IP datagram: 80destination port number for the TCP segment of the IP datagram: 3376When this datagram arrived at NAT router's left port from the Internet, therouter indexed the NAT translation table using the destination IP address anddestination port number to obtain the appropriate IP address(10.0.1.21) anddestination port (3376) for the destination host in the home network. Therouter then rewrites the datagram's destination address and destination port number,andforwards the datagram into the home network.
IPv4와의 차이를 아는 것이 중요.
Pop Quiz
IPv4 헤더에 있는 checksum은 Payload에 있는 전체 field에 대해 integrity check를 한다.
⇒ F. IPv4 헤더에 있는 checksum 필드의 이름은 headerCheckSum
. header에 대해서만 checksum을 수행. Payload에 대해서는 하지 않음.
IPv4 router가 fragmented된 패킷을 assembly한다.
⇒ F. router에서는 assembly하지 않고, host에서 수행.
initial motivation: speed processing/ forwarding
IPv6가 생겨날 때 쯔음 fiber optic이 발달하며 error rate이 줄어들어 checksum field를 없애 버림.
IP fragmentation도 수행하지 않음. outlink bandwidth가 작을 경우 drop 하고 ICMP로 송신자에게 report.
no fragmentation allowed at router but enabled at host (host는 IPv6도 fragmentation을 수행)
128-bit address is represented as 16-bit hexadecimal fields(0-F) separated by colons.
IPv4와 다르게, NIC 하나에 여러 개의 IPv6 addresses들이 할당될 수 있다.
unlike IPv4, multiple IPv6 addresses can be allocated to one NIC card.
IPv4의 fixed 되지 않은 20 byte헤더와 달리 IPv6는 fixed된 40 byte 헤더를 가짐.
주소가 길어진 것이지 기능은 더 줄어듦. (128 bits src addr, dest addr = 16 byte + 16 byte = 32 byte)
flow label
: 20 bit할당. 패킷들의 flow를 조절하려고 함. 실패
next hdr
: data field에 another header가 들어올 수 있음. (header를 가리키고 이어져 extension 가능)
hop limit
: ghost traffic을 잡는 TimeToLive
와 같음.
data field에 있는 것이 다른 protocol의 메시지가 아니라 또다른 IPv6 header일 수 있음.
Option과 padding이 없어짐.
header가 고정되어 있으니 header length 필요 없음. (버전만 확인하고 40 byte 확 읽으면 됨)
host에선 해도 router에서는 fragmentation 하지 않으니 frag 필드 필요 없음 (id, flags, offset)
고품질로 발전되어 링크가 error이 거의 없으니 checksum 필드 뺐음.
Time to live → Hop limit
Type of Service → Traffic Class
Total length → Payload length
Upper layer Protocol → next header
어떻게 network가 IPv4와 IPv6 모두에게 작동하도록 만들까?
Dual Stack
router가 하나의 interface에 두 주소를 모두 setting.
NAT-PT (NAT-protocl translation)
protocol translation btw. IPv4, IPv6. (Payload 안의 주소도 필요시 바꿔줘야 함)
Tunneling !!!
IPv6 datagram carried as payload in IPv4 datagram
<img width="1021" alt="스크린샷 2020-12-13 오전 12 45 25" src="https://user-images.githubusercontent.com/45806836/101988370-7f3b5a80-3cdc-11eb-972d-0d1f03a0ecad.png">
IPv6의 datagram을 IPv4 datagram 안의 Payload에 encapsulate. 마치 Layer2 frame처럼.
<img width="984" alt="스크린샷 2020-12-13 오전 12 46 54" src="https://user-images.githubusercontent.com/45806836/101988411-b3af1680-3cdc-11eb-9bad-64660eeb4849.png">
IPv4 Payload = IPv6 Packet, 접목하는 지점에는 어쨌든 Dual stack이 필요함. IPv4를 터널처럼 지나감.
routing protocol은 한 가지 일만 한다. destination based forwarding을 어디로 할지 결정.
router들은 서로 정보를 주고 받을 뿐이지, path selection 알고리즘도 각각의 라우터에서 running.
중앙에서 router들을 모두 보고 forwarding + a의 제어를 할 수 있다면? (기존 라우터의 middleware 기능)
logically-centralized routing controller는 기존 라우터의 middleboxes기능과 link-layer function까지 모두 통합. (Single Point of Failure을 대비해 여러 개의 서버를 하나인양 logically라고 함)
flow: Match를 볼 때 flow 단위로 볼 수 있다.
generalized forwarding: simple packet-handling rules
--- Dual stack : all nodes (router and hosts) have IPv4 and IPv6
--- NAT64 : translate address and protocol between IPv4 and IPv6
--- Tunneling : IPv6 packet is encapsulated into IPv4 payload
-- match : 2,3,4 layer header
-- action : load balancing, replacing address&port, selective dropping, deep inspection, etc as well as forwarding