해당 포스팅은 한양대학교 이석복 교수님의 컴퓨터네트워크 강의를 정리한 글입니다.
http://www.kocw.net/home/search/kemView.do?kemId=1169634
1. History of NATs
- IP 주소 공간은 이제 한계치에 도달해버렸다... 2^32개의 주소공간이 최대인데, 이미 넘겨버렸는데 어떻게 해결할 것인가에 대한 대책이 필요했다.
- IPv6가 고려되었지만, 프로토콜을 전부 바꾼다는것은 쉽지 않은 과정이다.
- 그래서 NAT를 사용하게 되었다.

- 즉 local network에서만 사용하는 IP 주소를 따로 NAT에서 할당해주며, 사실상 네트워크에서 작용하는 IP주소는 NAT의 IP 주소이다.
2. Dynamic Host Configuration Protocol (DHCP)
- host가 동적으로 IP 주소를 네트워크에 참여했을 때, 받을 수 있도록 하는 것이다.
- 즉, 네트워크 안의 컴퓨터에 자동으로 네임 서버 주소, IP 주소, 게이트웨이 주소를 할당해준다.
- 보통 GateWay Router에 NAT와 DHCP가 같이 있다.

1) DHCP client-server scenario
- 처음 client가 도착하게 되면, source는 무명(
0.0.0.0의 IP주소), dest는 broadcast(255.255.255.255)로 DHCP discover를 시도한다.
- DHCP는 해당 신호를 받아서, 요청한 broadcast IP주소와 client의 PORT num을 새겨서 DHCP offer를 전송한다.
- 이때, client는 DHCP를 선택하는데, 다시 broadcast로 DHCP request를 전송한다. (다른 선택 안된 DHCP 서버에도 선택되었음을 알려줘야하기 때문에 broadcast로 전송한다.)
- DHCP ACK를 통해 ACK의 IP주소를 전달해준다.

3. IP fragmentation, reassembly
- Network link는 MTU (max.transfer size)를 가지고 있다.
- 만약 4000 byte의 패킷을 보냈는데 MTU가 1500byte라면, fragmentation을 통해서 network layer들을 통과하고, final destination에서 다시 합쳐진다.


- offset을 8로 나누는데 8의 의미는 큰 의미는 없다고 하심 -> 생각해보았을때 아마 바이트 단위로 자르는 것이 아닐까 유추?
- flag는 뒤에 또 fragment가 있는지에 대한 여부이다. 중간에 유실된 경우에는 어차피 reassemble이 안되어서 패킷을 다시 보내게 된다.