

- IP packet
- data: TCP, UDP segment가 들어감
- field
- version
- length
- source IP address: 메세지 생성해서 보내는 사람의 IP 주소
- destination IP address: host의 IP 주소
- checksum: error check
- time to live: router 거칠 때마다 -1씩 해주어서 0이되는 순간 패킷을 버림
- 네트워크 상황에서 routing/forwarding table이 잘못된 경우 무한 루프를 돌 수 있기 때문에 수명을 정해 놓음
- upper layer: data에 들어가는게 TCP, UDP 중 무엇인지 알려줌
- IP header: 20byte + TCP header: 20byte
= header 40byte(overhead) + message
IP Address
- 32 bit 주소 체계 -> 2^32개의 ip 주소를 가질 수 있음
- 8비트씩 끊어서 10진수로 바꿔서 읽음
- host의 network interface를 지칭하는 주소
- router는 interface가 여러개이므로 IP Address도 다양함
Hierarchical Addressing
- IP 주소를 배정하는 법
- 무작위 배정 -> forwarding table의 entry개수가 너무 늘어나서 길어짐
-> 계층화

- network id(24 bits)->prefix+host(8 bits)
- subnet mask: 주소 중 어디까지가 network id인지 나타내는 것
- 같은 network에 속하면 같은 prefix를 가진 ip address를 가지고 다른 network에 속하면 다른 prefix 가진 ip address를 가짐
Classful Addressing
과거
- 인터넷의 구성 요소: network -> 크기는 모두 다른 자신의 prefix를 가짐
- ip 주소의 class를 나눔
- class A,B,C 각각 /8,/16,/24
- network id 앞이 8/16/24bit라는 뜻
- host 2^24,2^16,2^8
- 비효율적이라서 class 개념 제거
Classless Inter-Domain Routing (CIDR)

Longest Prefix Match Forwarding

- router는 packet을 받아 destination address에 맞는 forwarding table entry를 찾아 매칭
- 여러개가 매칭이 될 경우 longest prefix와 매칭
- forwarding table을 채우는 것은 routing
IP addressing: CIDR
- 현재 IP 주소는 32bit 공간을 사용하되 실제로는 2부분으로 나눠져 있음
- prefix+host
- prefix 부분은 network size에 따라 유연하게 조정 가능
Subnets

- 같은 prefix를 가진 device interface들의 집합
- router를 거치지 않고 접속 가능한 host들의 집합
- router는 interface를 여러개 가지므로 ip 주소도 여러개 가짐 -> 이 그림에선 3가지
IP4 vs IP6
- IP4는 32bit -> 2^32hosts -> 40억
- IP6는 128vit -> 2^128hosts -> 셀 수 없음
- 그러나, 현재 IP4 버전 사용
- 즉, 40억개의 주소공간을 공유 = NAT 트릭 사용
Network Address Translation

- 인터넷 내부에서 고유 IP 주소를 사용
- 내부에서는 유일하되 다른 네트워크에서 이 IP 주소 사용 가능
- 이 IP 주소 가진 packet 외부로 나가면 안됨
- 외부로 보낼 때 router에서 source IP address, port를 gateway router의 주소로 변경해줌

- IP address의 재사용이 가능해짐
- 문제점: IP packet의 source IP, port number를 router에서 변경함
- 계층 개념 violation
header 정보, data 부분을 변경하게 됨
- server 사용 불가
port number는 process를 찾아갈 때 쓰는 것인데 host 찾을 때 사용해버림