NAT: network address translation
NAT: 로컬(private) 네트워크에 있는 모든 장치들은 하나의 IP 주소를 공유함
NAT 기능을 가진 networking 장치 ex) 공유기
로컬 네트워크를 떠나는 모든 데이터그램은 같은 소스 ip 주소를 가짐
포트 번호는 다르기 때문에 포트 번호로 구분함
<장점>
- 하나의 IP를 여러 디바이스가 사용
- 로컬 네트워크 내의 IP 주소 바꿔도 바깥에 알릴 필요 없음
- ISP를 바꿔도 프라이빗 IP를 바꿀 필요 없음
- 외부에서 로컬 네트워크 내의 장치에 접근할 수 없기 때문에 보안적으로 좋음
<implementation>
- outgoing datagram: 소스 ip주소와 포트 번호를 nat ip주소와 새 포트 번호로 대체
- 라우터의 translation table에 소스 ip, 포트 번호와 nat 소스 ip, 새 포트 번호 쌍을 기억
- incoming datagram: translation table을 이용하여 nat ip 주소,
새 포트 번호를 원래 소스 ip 주소와 포트 번호로 바꿔줌
IPv6
128bit 주소 사용
추가 기능: 40바이트의 고정된 헤더 길이(option 없음), flow 개념 추가
* format
ver: 6
pri: 플로우 안의 데이터그램의 우선순위 지정
flow label: 같은 플로우에 속하는 데이터그램들을 라벨링
payload len: 데이터 길이
next hdr: udp or tcp
hop limit: v4의 ttl과 같음
source address(128bit)
destination address(128bit)
payload(data)
없어진 것: checksum, fragmentation/reassembly, option
Transition from IPv4 to IPv6
* tunneling: v6 데이터그램을 v4의 데이터로 집어넣음
Generalized forwarding: match plus action
forwarding 2종류: destination-based forwarding, generalized forwarding
* flow: 개별 라우터에서 개념을 정의함, 여러 헤더 필드들을 조합하여 define
* flow table: 기존에 forwarding table만 생각 -> 정보가 더 추가됨 (match, action)
* generalized forwarding에서 사용하는 방법
- match: 헤더의 필드들 값을 보고 패턴이 맞는지 확인
- actions: matched 패킷일 때 뭐할건지 (drop, forward, modifty, encapsualte)
- priority: 애매할 때의 우선순위
- counters: #bytes, #packets
* openFlow(표준 프로토콜, API) 예시
- destination-based forwarding (기존 방식): 목적지 ip 주소 forward
- firewall: tcp 포트 22번으로 들어오면 drop
* openFlow abstraction (match+action을 통해 많은 것을 추상화)
- Router: match(longest dest ip prefix), action(forward)
- Switch: match(destination MAC address), action(forward or flood)
- Firewall: match(IP 주소, TCP/UDP 포트 번호), action(permit or deny)
- NAT: match(IP 주소, 포트 번호), action(rewrite address and port)
Middleboxes
인터넷 내부에 존재하며 기존 라우터와 다른 역할을 하는 장치
ex) firewall, NAT
* NFX(network functions virtualization): 범용 하드웨어에 네트워크 장치 역할을 부여
ex) 서버급 컵퓨터
Architectural Principles of the Internet
- simple connectivity
- IP protocol: narrow waist
- intelligence, compexity at network edge // 현재는 많이 깨짐