Introduction
- IP는 Network Layer에 존재한다.

datagrams
- network layer단계에서의 Packet은 datagram이라 부르며 header와 data로 나누어져있다.
- header : 20-60bytes로 routing과 delivery 부분에서 중요하다.

- 여기서 간략하게 말하자면 ...
- VER : Protocol의 버전을 의미하며 우리는 4를 이용
- HLEN : 헤더의 길이를 나타낸다.
- Service Type : 덜 중요...
- Total Length : padding을 포함하는지 안하는지 알 수 있다.
- 두번째 라인은 모두 fragmentation과 관련이 있다.
- Identification : 해당 packet의 id
- Flags : DF(Don't fragment)필드와 MF(More fragment)필드 존재
- Fragmentation Offset : Packet의 시작주소로부터 얼마나 떨어져있나
- Time to live : TTL이라 불리며 LOOP를 방지할 때 이용, router이동시마다 1씩 감소
- Protocol : UDP냐 TCO냐
- Header checksum, Source IP Address, Destination IP Address
🔊 Total Length
- 헤더를 포함한 datagram의 총 길이를 나타낸다.
- 전체길이가 필요한 이유
- ethernet frame으로 캡슐화될 때 최소 46 바이트가 되어야하는데 이를 채우지 못하면 padding이 붙게된다. 그러므로 실질적인 바이트의 길이를 나타내기위하여 필요하다.
- Multiplexing
- datagram의 data 속에는 ICMP, IGMP, TCP, UDP, OSPF 등의 정보가 들어간다.
🔊 Fragmentation
- datagram이 다른 network로 이동할 때 캡슐화와 역캡슐화가 진행된다. datagram이 frame으로 캡슐화가 진행될 때 MTU, 즉 캡슐화 가능한 최대 길이를 넘어선 안된다.
- 최대 길이를 넘은 datagram은 fragmentation이 필요하다.
🏷️ Flags field
- 3bits
- 빈거
- D : Do not fragment
- M : More fragmets, 뒤에 단편화된 packet이 존재한다는 뜻
🏷️ offset
- 만약 데이터의 길이가 4000bytes일 경우 이를 자르는 과정을 수행해야한다. offset은 13bits로 8K까지만 표현이가능하지만 실제론 16만정도가 표현가능해야한다. 3bit가 더 필요하므로 offset을 표시할 땐 시작지점 / 8을 이용하여 모두 표현 가능하다.

🔊 Options
- datagram은 가변부분(header)과 불가변부분이 존재한다.
Option 구조

- Type
- option copy(1bit) (1이면 첫번째 fragment만 copy, 0이면 모든 fragmentatin에 copy)
- class(2bits)
- 00 Datagram Control
- 10 Debugging and management
- Number(5bits)
- 00000 End of option
- 00001 No operation
- 00011 Loose source route
- 00100 Timestamp
- 00111 Record route
- 01001 Strict source route
- Type의 Number
- 위의 두개는 Single-byte로 거의 아무것도 안하는 땜빵같은 용도로 쓰인다. 옵션 쓰일 때 맨앞 혹은 맨뒤에 넣어 채워준다.
- 밑의 네개는 Multiple-byte로 좀 더 중요한 개념이다. 몇개는 헤더의 내용도 함께 외우는 것이 좋다.
🔈 Record-route option (7)

- 각 address칸은 처음엔 비어져있고 router를 거치면서 채워져가는 방식이다.
🔈 Strict-source-route option (137)

- 각 address주소는 시작시에 모두 채워져있다. 이는 자기 주소를 제외한 route의 경로가 적혀있으며 지날때마다 router가 해당 option을 update해야한다.
🔈 Loose-source-route option (131)
- 좀 더 위의 option보다는 유들하지만 잘 안써서 개념만 숙지하면 된다.
🔈 Time-stamp option (68)

- Flag
- flag 0 : timestamp만 적는다.
- flag 1 : IP address와 timestamp가 적힌다.
- ping : domain 연결가능한지와 RTT를 보여준다.
$ ping naver.com
- R- : 거쳐간 IP 주소를 출력하는 옵션 - record-route
$ ping R- naver.com
- traceroute : route와 그곳에 도달하는 RTT 값을 3번 출력한다.
$ traceroute naver.com
- -g : loose source routing
- -G : strict source routing
$ traceroute -g 153.18.251.4 naver.com
🔈 Checksum
- 2bytes씩 잘라서 다 더한 후 complement한다.
🔊 Reassembly table

- 분할된 packet을 재조합하기위하여 사용하는 테이블이다. off을 가지고 순서를 결정한다.
- 만약 하나의 조각이라도 오지않으면 전체를 버리고 다 다시받아야한다.
- 같은 ID끼리 Linked List 형태로 관리한다.