Internet Protocol (IP)
IP의 위치

- Internet Protocol (IP) : packetizing, forwarding, delivery of a packet의 책임을 가진다.
- Internet Control Message Protocol (ICMP) : delivery 할 때 발생하는 에러 처리를 하여 IP를 돕는다.
- Internet Group Management Protocol (IGMP) : multicasting 할 때 IP를 돕는다.
- Addres Resolution Protocol (ARP) : 주소 매핑 할때 사용
IPv4 Datagram 형식
- IP에 패킷을 datagrame으로 불린다.
- datagrame은 두 파트로 이루어진 variable-length를 가진다.
- Header : 20 ~ 60 bytes
- routing과 delivery를 위한 정보로 이루어진다.
- payload (data) : transport layer에서 내려온 데이터

- 이더넷 프레임의 데이터 부분(최대 1500 bytes)에 넣어줘야 하기 때문에 잘라서(fragmentation) 전달해줘야 한다.
IPv4 datagrame 형식

- Source IP address : 송신측 IP 주소
- Destination IP address : 수신측 IP 주소
- Total length : 총 길이 (가변) - 16bits
- 최소 길이 : 20bytes
- 최대 길이 : 65,535bytes
- 데이터 길이 : (총 길이) - (HLEN) * 4
- VER : IP 버전, 예) IPv4는4
- HLEN : 헤더 길이, 4bit 밖에 안되기 때문에 4bytes 단위로 표시를 함
- 최소 길이 : 5 (5x4bytes = 20bytes) 0101
- 최대 길이 : 15 (15x4bytes = 60bytes) 1111
- Flags : Flagmentation이 있는지 없는지 나타냄
- bit 0 : 사용 x
- bit 1 : Don't Fragment (DF), 1이면 fragment를 하지 마라
- bit 2 : More Fragment (MF), 1이면 fragment가 더 존재한다.
- Fragmentation offset : 0에서 부터 얼마나 떨어져 있는가?, 8 바이트 단위로 나타냄
- Protocol : IP datagram에서 사용하는 protocol 정의
- ICMP, UDP, IGMP, OSPF, TCP
- Time-to-live (TTL) : hop count와 함께 패킷 생존 기간을 제한
- router를 하나 지나갈때마다 1씩 감소, 0이되면 폐기 -> ICMP Time Exceed 메세지를 수신자에게 보냄
- Header checksum : 오류 체크, Header만 본다.
- desitnation address, protocol field, fragmentation field 등의 오류가 생기면 IP에 비정상적인 동작이 발생할 수 있다.
- router를 지나갈때마다 header의 checksum을 계산하여 checksum field와 비교한다.
- Service type : 품질 정의
- Identification : 구별을 위해 하나의 데이터그램에 대해서 번호 부여한다.
- Options : test나 debug를 위해 사용한다.
- Payload : checksum에 포함되지 않는다.

예시 1
- 처음 8비트가 (01000010)2로 IPv4 패킷이 도착했다
- 수신자는 패킷을 폐기한다. 왜 그럴까?
solution
- 가장 왼쪽 4비트(0100)2가 버전을 보여준다. -> correct
- 다음 4 bits (0010)2 -> 올바르지 않은 header length (2X4=8)
- header의 최소 사이즈가 20이기 때문이다.
예시 2
- IPv4 패킷에서 HLEN의 값은 (1000)2이다.
- 이 패킷에 의해 전송되는 옵션의 수는 몇 바이트입니까?
solution
- HLen이 8이므로 header의 total number의 8X4 = 32 bytes이다.
- 처음 20bytes는 기본 헤더이고, 다음 12bytes는 옵션이다.
예시 3
- IPv4 패킷에서, HLEN의 값은 5이고, 전체 길이 필드의 값은 (0028)16이다.
- 이 패킷에 의해 몇 bytes의 데이터가 운반되고 있나?
solution
- HLEN 값은 5이며, 이는 헤더의 총 bytes 수가 5×4 또는 20 bytes(옵션 없음)임을 의미한다.
- 전체 길이는 (0028)16 또는 40bytes이며, 이는 패킷이 20bytes의 데이터(40-20)를 운반하고 있음을 의미한다.
예시 4
- IPv4가 다음과 같이 16진수 형태로 도착했다.

- 패킷이 drop되기전에 이동할 수 있는 hop수는 몇 개인가?
- 데이터는 어떤 상위 계층 프로토콜에 속하는가?
solution
- time-to-live field를 찾기 위해, 처음 8 bytes를 스킵한다.
- time-to-live field는 9번째 bytes로 (01)16이다.
- 이것은 패킷이 하나의 hop만을 이동할 수 있음을 뜻한다.
- protocol field는 다음 bytes인 (02)16인데, 이것은 상위 계층 프로토콜이 IGMP임을 뜻한다.
option없는 IPv4 header에 대해 checksum을 계산하는 예시
- header를 16-bit로 나눔
- 모든 sections을 더해주고 올림 수에 대해 wrapped sum을 한 후 보수를 취해준다.
- 결과를 checksum field로 대체 한다.

checksum 계산 후 error check

- 송신측에서 똑같이 계산 후 0이 나오면 오류가 없는 것이다.

Fragmentation
- 각 router에서 frame을 decapsulate하고, procces하고, 다른 frame으로 encapsulate한다.
- frame size는 physical network에서 사용하는 프로토콜에 의존한다.
- 각 link layer protocol은 고유한 frame 형식을 가진다.

Maximum Transfer Unit(MTU)
- MTU는 data link layer에서 사용되는 최대 데이터 크기를 말한다.
- ethernet에서 최대 데이터 크기는 1500 bytes이다.
- IP Datagram의 최대 데이터 크기는 65536 bytes이다.
- MTU 값은 physical network마다 다르다.
- Ethernet : 1500, FDDI :4000, X.25 :576, Gigabit : 9000 byte
- 크기를 맞추기 위해 데이터를 잘라야 한다.

Fragmentation
- IPv4는 지정된 MTU 제한을 수용하기 위해 datagram을 조각으로 나눈다.
- Ethernet : 1500, FDDI :4000, X.25 :576, Gigabit : 9000 byte
- datagrame이 4000bytes라고 하면,
- MTU가 1400 bytes인 3개의 fragment로 fragmentation된다.
- Offset은 8 bytes block 단위로 계산된다.

Fragmentation과 관련된 3개의 field
1) identification field
- 송신측 host로 부터 datagrame을 식별한다.
2) Flag field
- 가장 왼쪽 bit : Reserved, 항상 0이어야 한다.
- 두 번째 bit : Don't Fragement(DF)
- 세 번째 bit : More Fragment(MF)
3) Fragmentation offset field
- fragment에 상대적인 위치를 보여준다.
- 8 bytes 단위로 측정된다.

Fragmentation 예시

예시
- offset 값이 100이고, HLEN 값이 5이며, total length가 100인 패킷이 도착했다.
- 첫 번째 바이트와 마지막 bytes의 수는 무엇이냐?
solution
- 첫 번째 byte는 100 X 8 = 800이다.
- total length가 100 bytes이고 header length가 20 bytes (5 X 4)이므로, datagram에는 80 bytes의 데이터가 있음을 의미한다.
- 첫 번째 byte가 800이면 마지막 byte는 879여야 한다.
Options
- IPv4 datagram의 header는 두 개의 파트로 구성된다.
- fixed part의 길이는 20 bytes이다.
- variable part는 header의 경계를 보존하기 위해 최대 40 bytes가 될 수 있는 옵션들로 구성되어 있다.

Security of Datagram
- security는 IPv4 protocol에 대한 보안이 제공되지 않았다.
- IPv4 protocol은 인터넷 사용자들이 서로 신뢰할 때 시작되었다.
- 오늘날의 internet은 더 이상 안전하지 않다.
IP protocol의 세 가지 security issue
- packet sniffing : (복사해서) 훔쳐가기, 다른 용도로 사용
- packet modification : 패킷을 변조시킴
- IP spoofing : 패킷을 위조함
IP Sniffing
- 침입자가 IP 패킷을 가로채고(intercept) 복사(copy)할 수 있다.
- 공격자는 packet의 내용을 변경하지 않는다.
- 다른 목적으로 사용한다.
-> packet의 암호화(encryption)는 공격자를 막을 수 있다. (복사해가도 쓸모없게 만듦)
Packet Modification
- 공격자는 pcaekt을 가로채서 내용을 변경하고 새 packet을 수신자에게 전송한다.
-> Data Integrity 메커니즘은 packet이 변경되었는지 확인한다. (Data Integrity를 보장해주는 방법 적용), Data Integrity를 증명하도록 한다.
integrity : packet이 원래 데이터 그대로이다.
IP Spoofing
- 공격자는 잘못된 송신측 IP 주소 IP packet을 만들고 대상 server로 전송한다.
-> origin authentication 메커니즘을 사용하여 방지할 수 있다. (송신측 IP 주소가 위조된 것이 아님, 데이터 출발 packet이 그대로 도착 한 것임을 인증)
- 예) DDoS (Distributed Denial of Service)
- 송신측 IP 주소를 위조한다.
- 3 단계 과정으로 경로 설정을 할 때, 송신측 주소가 가짜가 되면 수신측은 마지막 응답이 오기를 기다리는데, 송신측 주소가 가짜이므로 응답이 오지 않는다.
- 서버는 메모리를 소모하게 되고 더 이상 서비스를 하지 못하게 된다.
IPSec(IP Security) : secure netowrk protocol
- network protocol에서 동작됨
- sources of IP packet을 검증 (Autentication)
- 송신측에서 보낸 packet이 맞다는 것을 인증
- old packet의 replaying 방지
- packet integrity(무결성) and/or confidentiality(기밀성) of packet(Encryption)
두 가지 모드로 IPSec이 동작한다.
- Transport mode (for end-to-end)
- Tunnel mode (for VPN)
Transport mode (for end-to-end)

- Data link layer로 보내기전에 IPsec Layer가 있어 IPsec Header/Trailer를 붙이고 새로운 IP Header를 붙여서 보냄
Tunnel mode (for VPN) in Router

- Network layer 위에 IPSec Layer를 두고 IPSec Header/Trailer를 붙여줌
- router와 router 사이에 Tunnel을 형성해서 전달
IPSec Protocol 모음
- Authentication Header (AH)
- Encapsulating Security Payload (ESP)
- Internet Key Exchange (IKE)
- IP Payload Compression (IPcomp)
AH(Authenticcation Header)
- source authentiaction을 제공
- data integrity 제공
- confidentiality를 위한 보호 기능이 없음

- 인증을 위해 추가함
Encapsulating Security Payload (ESP)
- AH가 제공하는 모든 것을 제공한다.
- confiddentiality도 제공한다. (대칭 키 암호화)

- 암호화를 이용해서 데이터를 더 추가가 된다.
ICMPv4
IPv4
- erorr-reporting과 error-correcting 메커니즘이 없음
- host와 management querie에 대한 메커니즘이 없음
Internet Control Message Protocol version 4 (ICMPv4)
- 위의 두가지 결함을 보완하기(compensate) 위해 설계 되었다.
- 두가지 categories
- error-reporting messages
- query messages
error-reporting messages는 problems을 report한다.
- router나 host(destination)은 IP packet을 처리할 때 문제가 발생할 수 있다.
query messages에 의한 특정 정보
- node는 자신의 이웃을 검색할 수 있다.
- host는 자신의 network에서 router를 검색하고 학습할 수 있다. (이웃 router에 대한 정보를 구함)
- rotuer는 node가 message를 redirect하는 데 도움을 줄 수 있다. (메시지를 다른 경로로 보내고 싶을 때)
ICMPv4 Messages Format

- Type, Code, Checksum 부분이 같음
- Query messages에는 ID가 들어감 (질의하고 응답을 해야하기 때문)
- Echo request and replay : 특정 노드에 대해 echo를 보내면 그 노드가 reply함
- Timestamp request and reply : packet에 Timestamp를 기록함
- Error-reporting messags는 문제가 발생했음을 알려주기만 하면된다.
- Destination unreachable (목적지 주소가 잘못됨)
- Source quench (너무 바쁨 - 그만 보내는 것을 요청)
- Time Exceeded (TTL 초과)
- Parammeter Problem : 파라미터에 문제가 생김
Error Reporting Messages
- Destination Unreachabl
- Source quench
- network에 congestion이 발생하여 datagram이 삭제되었음을 송신자에게 알려준다.
- 송신측에서는 datagram 전송 속도를 늦춰야한다.
- Redirect (경로 변경)
- source가 잘못된 router를 사용하여 데이터를 보낼대 사용된다.
- router가 redirect하여 기본 gateway를 변경해야한다는 것을 송신측에 알려준다. (원래의 경로를 다르게 바꿔서 전송)
- Time Exceed
- TTL field가 0이 되어 폐기된 datagrame을 source에 알려준다.
중간에 있는 router들이 에러가 발생했을때 송신자에게 보냄
Query Message
- Echo Request/Reply
- host나 router가 echo request를 다른 host나 router로 전송한다.
- 만약 alive(활성화)되어 있으면, echo reply message로 응답한다.
- Example : ping, traceroute
- Timestamp Request
- 두 장치 간에 round-trip time을 찾는 방법
- 두 장치가 synchronize되어 있는지 확인하기 위함
round-trip time : 두 장치 사이에 얼마나 시간이 걸리는지 알아 볼때 사용
Debugging Tools
Ping
- ping 프로그램은 IP(Internet Protocol)에서 host에 도달할 수 있는지 테스트하기 위해 사용된다.
- Ping은 대상 host로 ICMP echo request packet을 보내고 ICMP echo reply를 기다림으로써 동작한다.
- 프로그램은 errors, packet loss, statical summmary of results를 보고하는데, 일반적으로 minimum, maximum, mean round-trip time과 standard deviation of the mean를 포함한다.

traceroute(Unix), tracert (window)
- 송신측에서 수신측까지 packet의 경로를 추적하는데 사용한다. (목적지까지 어떤 경로를 가는지)
- 경로를 따라 방문하는 모든 router의 IP 주소를 찾을 수 있다.
- Application layer 프로그램이지만 client 프로그램만 필요하다.
- Traceroute 프로그램은 two error-repoting으로 부터 도움을 받는다.
- Destination Unreachable Message
- Time Exceeded Message
Use of ICMP in traceroute
- 첫 번째 traceroute message는 TTL 값을 1로 설정하여 전송된다.
- 첫 번째 라우터가 packet을 drop하고 Time-exceed message가 송신측으로 전송된다.
- 네 번재 message가 송신측에 도착한다. (Port 번호를 다르게 해서 보내어 송신측에 도착할 수 없다.)
- port 번호를 찾을 수 없기 때문에 이 호스트는 packet을 drop한다. -> Destination Unreachable message가 송신측으로 전송된다.

traceroute 예시

- Unix 예시
- 4 hop만에 도착
- 30 hops max -> 최대 hop을 말함, 예) 40 hop이면 안됨
simple echo-request message Checksum 계산법

- checksum은 전체 message에 대해 계산된다. (header와 data)
- mesasge를 16 bit word로 나눈다.
- word가 더해지고 보수를 취한다. 송신측은 checksum field에 이값을 넣는다.
Summary
IPv4
- end-to-end delivery, unreliable, connection-less service
unreliable : 믿을 수없음, rotuer는 전달만하고 송신측과 수신측 사이에 IP는 책임을 지지 않는다. -> transport에서 함
- datagrame은 각각 header와 payload 두가지 구성 요소를 가진다.
- header의 길이는 20~60 bytes이고, total size는 65,535 bytes까지 가능하다.
- datagram은 송신측에서 수신측으로 이동하는 동안 한 번 이상 fragementation 될 수 있다.
- fragmentation의 재조립은 destination에서 수행된다.
- datagrame의 checksum은 header에 대해서만 계산된다.
ICMPv4 - IP 지원
- ICMP message는 diagnositc 또는 control 목적으로 사용되거나 IP 동작에 error에 대응하기 위해 생성된다.
- Error Report and Query Messages