- Network Layer protocol
- IP 상 packet = datagram
- Packet Delivery Model(host - router - router - host)
- connectionless (IP 전달 할 때 연결되어있을 필요가 없다)
- Best-effort(unreliable)
- packets들은 손실될 수 있고,
- 보낸 순서가 이상하게 바뀔수도 있고,
- 중복으로 전달 될 수 있고,
- 오랜시간동안 지연될 수 있다.
- 만약, Network Layer가 없다면 물리적으로 host들이 연결된 경우만 통신 가능합니다. 라우터를 사용하여 "multihop" 통신을 가능하게 합니다.
- IP는 모든 라우터들에게 요구되어지는 프로토콜입니다.(hourglass model)
- Header(20~60 byte) + Data(Payload)
- 20 bytes = 4byte 5 = 32bits 5
- VER(4): 0100[4] / 0110[6]
- HLEN(4): header 크기
- 단위가 word이므로, 실제 byte크기는 4를 곱해야한다.
- ex) 60byte -> 1111[15], 20byte -> 0101[5]
- Service Type(8):
- Service Class(Old)
- Precedence(3): 패킷의 우선순위
- 라우터가 패킷을 드랍할 때 가장 낮은 우선순위를 사용한다.
- TOS bits(4): service 유형
- 데이터그램을 어떻게 처리할지 정의하는 서비스 유형(TOS) 를 나타낸다.
- 지연을 최소화/비용을 최소화/normal/처리량 최대 등
- Service Class(Revised)
- DSCP(6): 우선순위 기존 0~7에서 더 세분화
- ECN(2): 데이터 길막힘 알려줌
- Total length(16): header + data의 byte 길이=datagram size
- Identification(16):
- Flags(3):
- Fragmentation offset(13):
- Time to live(8): packet의 수명
- 라우터 1개 거칠때마다 1씩 감소되며, 0인 경우 drop된다.
- 라우팅 오류로 무한 루프인 경우 자원이 되는 현상을 방지한다.
- data 가까운 곳만 보낼래! TTL=2 (범위 정하기 가능)
- Protocol(8): transport, 즉 상위 계층의 protocol
- TCP : 6 / UDP : 17
- 이 데이터가 TCP/UDP로부터 온거야~!!
- Header checksum(16): 오류 감지
- 송신) header 나머지 bit 다 채우고 난뒤, 계산된 값
- 수신) 수식 다시 계산, checksum과 같으면 header 정상 도착
- Source IP address(32)
- Destination IP address(32)
- Option:
- HLEN 값 최소 5
- HLEN값 = 1000 -> 40byte -> option field가 20byte!
ex) HLEN = 5, total length = 0x0028
-> header=20byte, total length=40byte
-> data = 40 - 20 = 20byte
ex) IPv4 packet 앞부분: 0x45000028000100000102
16진수 1자리 = 4bit
- 4/5/00/0028:
- 버전 4, 헤더크기 20byte, service class:normal, total length 40byte
- 0001/0000
- 01/02: TTL->1, Protocol->2
IP Fragmentation
: 데이터그램의 크기가 data link layer가 처리할 수 잇는 크기보다 클 경우 근원지 호스트나 라우터에서 쪼갠다.
(단편화된 데이터그램은 더 작은 MTU가진 네트워크에서 다시 단편화 될 수 있다.즉, 여러번 단편화 가능)
중간 라우터에서는 단편호된 데이터그램을 처리하게 제어하거나 어느 경로로 전송 될지 모른다.
최종 목적지 호스트에서 재조립한다!
MTU
- Maximum Transfer Unit(최대 전송 단위)
- data link layer가 처리할 수 있는 IP packet의 최대 크기
- frame size가 너무 크면, 오류 발생가능성이 높고, 검출을 못하기 때문에 MTU보다 큰 경우는 나눠서 보내줘~
- datalink Protocol마다 다른 MTU 가진다.
ex) Ethernet MTU: 1500byte
- IP datagram = header(20) + data(1480)
- IP가 단편화할때, data 1480byte를 나눠야한다.
Fragmentation How?
:IP 패킷이 MTU보다 크다면, payload를 여러개의 패킷으로 나눈다.
단, IP header는 각 fragment에 붙어야한다!
ex) MTU = 1500이면 header 크기 제외하면, 1480이 최대 data크기
-> 목적지 호스트에서 재조립하기 위해서는, 단편화하는 호스트나 라우터는 flag, offset, 식별자를 저장합니다.
-> packet total length와 checksum도 변한다!
-> 단편 하나라도 다 도착안하면, 패킷 다 버린다.