Network Layer Protocols(1) - 네트워크 계층 프로토콜
네트워크 계층 프로토콜
- 1 main Protocol : IPv4
- Packetizing
- 패킷 포워딩
- packet delivery
- Packetizing
- 3 auxiliary protocols
- GPT : 주요 네트워크 프로토콜을 보조하기 위해 디자인된 프로토콜
- ICMPv4 : IPv4 에러 처리
- IGMP : 멀티캐스팅
- ARP : IP-MAC 주소 매핑
Datagram 포맷
- Datagram
- Packets of the IP
- Packets of the connectinless protocol : IP Datagram, UDP datagram
- GPT : 독립적인 패킷 기반의 데이터 전달 메커니즘을 사용하는 네트워크 기술
- GPT : Datagram이 라우팅되는 과정은 비연결형이고 각 패킷은 독립적으로 라우팅됩니다.
- 데이터그램은 두 가지 부분으로 구성된 가변 길이 패킷임
- Header
- 20-60 바이트(가변)
- 라우팅과 전달에 필요한 정보(SA, DA, 상위 계층의 프로토콜 정보, Length, Checksum 등등)
- 20-60 바이트(가변)
- Payload(data)
- GPT : 페이로드는 사용자 또는 애플리케이션 데이터가 실려 있는 datagram의 부분
- 서비스 데이터 : TCP, UDP, ICMP, IGMP, RIP, OSPF, BGP ...
- Header
IPv4 고정 Header Field
- Version Number
- 4-bit(VER)
- 0100(IPv4), 0111(IPv6)
- Header Length
- 4-bit(HLEN)
- 데이터그램 헤더의 총 길이 (HLEN에 4를 곱한 바이트 수)
- ex) 0101 : 5, 54 = 20*바이트**
- 헤더는 대체로 20바이트, 나머지는 옵션 헤더
- Service Type : Type of service(TOS)
- 8-bit
- 데이터 패킷의 처리 우선순위를 나타내는 QoS(Quality of Service) 매개변수를 정의
- Total Length
- 16-bit
- 헤더와 데이터를 합친 IP datagram을 바이트 단위로 나타낸 길이
- Identification(16bit), Flags(3bits), and Fragmentation Offset(13bits) : 단편화
- GPT : 이 필드들은 IP 데이터그램이 네트워크상에서 분할될 때 필요한 정보를 제공합니다. 단편화 과정에서 각각의 조각들을 재조립하는 데 사용됩니다.
- TTL : Time to Live
- 8bits
- 각 IP 패킷은 네트워크에서 일정 시간 동안만 존재할 수 있습니다
- TTL 필드는 패킷이 라우터를 거칠 때마다 감소하여, 이 값이 0이 되면 패킷을 폐기함
- Protocol : 페이로드 데이터 종류(TCP, UDP, ICMP, ...)
- 8bits
- Header checksum
- 16bits
- SA와 DA
- 각각 32bits
- 총 160bits(20바이트)
- 이 후에는 Options와 padding에 관한 bit가 붙음
- padding은 IPv4 헤더의 길이를 32의 배수로 맞춤 (32bit, 즉 4byte의 배수)
- Options이 14byte라면, Pading은 2byte(00 00)가 붙는다
- 0 - 40byte
- padding은 IPv4 헤더의 길이를 32의 배수로 맞춤 (32bit, 즉 4byte의 배수)
프로토콜 필드의 값을 이용한 Multiplexing과 demultiplexing
- 데이터그램 헤더의 Protocol 필드에는 패킷이 어떤 트랜스포트 계층 프로토콜을 사용하는지를 나타내는 식별자를 포함하고 있음
- ICMP : 01, IGMP : 02, TCP : 06, UDP : 17, OSPF : 89
- GPT : 예를 들어, 프로토콜 필드 값이 TCP를 나타내는 06이라면, 해당 데이터그램은 TCP 프로토콜 스택으로 전달됩니다.
예제(1)
- IPv4 패킷이 도착. 처음 8비트가 01000010 --> 수신측에서 버린 이유?
- 패킷에 오류가 있기 때문
- 좌측 0100은 버전 IPv4를 가리킴 (정상)
- 다음 4비트 0010 값은 헤더의 길이를 담고 있는데, 2X4 = 8바이트이다
- 헤더의 최소길이는 20바이트 이므로, 송신 중에 오류가 생긴 패킷임
예제(2)
- IPv4 패킷의 HLEN 값이 1000(2진수) 일 때, 이 패킷에 있는 헤더 옵션의 길이?
- HLEN 값이 8이므로, 패킷 헤더의 길이는 32바이트임
- 기본 헤더인 20바이트를 제외하면 12바이트가 옵션 헤더임을 알 수 있다.
예제(3)
- IPv4 패킷의 HLEN 값이 5이고, total length 필드의 값이 0028(16진수) 일 때, 이 패킷에 담겨진 데이터 길이?
- HLEN 값이 5이므로, 헤더의 길이는 20바이트
- total length 필드의 값이 40바이트이므로, 데이터 길이는 40 - 20 = 20(byte)
예제(4)
- 수신된 IPv4 패킷의 처음 데이터 열이 45000028000100000102...(16진수) 일 때
- 이 패킷이 드롭되기 전에 얼마나 더 갈 수 있는가?
- 페이로드 데이터는 어떤 데이터인가?
- Protocol 필드는 10번째 옥텟이므로 02(16진수)
- 상위계층 프로토콜은 IGMP이다
- 페이로드 데이터는 어떤 데이터인가?
* TTL 필드는 9번째 옥텟이므로 01(16진수) * 16진수 각 자리가 4bit이므로, 16진수 두 자리로 하나의 옥텟을 나타낼 수 있음 * 01이므로 다음 라우터에서 폐기됨
- 이 패킷이 드롭되기 전에 얼마나 더 갈 수 있는가?
예제(5)
- IPv4 패킷의 체크섬 계산
- 16비트 워드로 분할
- 모든 워드의 합 계산
- Wrapped sum 계산: 16비트를 초과하는 자리올림을 뒷자리에 더해줍니다
- 1의 보수계산
체크섬 값을 제외한 헤더의 모든 필드 값을 더한 다음,
올림값(wrapped sum)을 뒷자리에서 더해주고, 결과의 반전(1의 보수)값이 체크섬이 된다.
이 값을 헤더의 Checksum 필드에 넣어 줌
Wrapped Sum = Sum mod FFFF Checksum = FFFF - Wrapped Sum
- GPT : 목적지에서는 동일한 방식으로 합을 계산하여 모든 비트가 1이 되어야 합니다(체크섬과 합쳐서). 만약 모든 비트가 1이 아니라면, 이는 데이터 전송 중 오류가 발생했다는 것을 의미함
- ex) wrapped sum이 0000 0000 0000 0001이고, checksum이 1111 1111 1111 1110인 경우 오류가 발생하지 않은 거임
단편화
- 데이터그램은 여러 다른 네트워크를 통과할 수 있다.
- 라우터가 데이터그램을 수신하면 캡슐을 풀고, 처리하고, 다시 캡슐화하여 프레임을 만들어 보낸다.
- GPT : 라우터에서의 단편화
- 라우터가 데이터그램을 수신하면, 해당 라우터의 아웃바운드 링크 MTU에 맞게 데이터그램을 단편화합니다.
- 각 단편은 원본 데이터그램의 일부를 담고 있으며, 같은 식별자를 가지고 있습니다.
- GPT : 라우터에서의 단편화
- 데이터의 포맷은 물리계층에서 사용되는 프로토콜에 의해 달라진다.
- LAN과 WAN을 연결하는 라우터의 경우, LAN 포맷으로 수신된 데이터를 WAN 포맷으로 구성하여 전송한다.
- Reassembly는 목적지에서만 가능
- GPT : Reassembly(재조립):
- 단편화된 패킷들은 목적지에서만 다시 재조립됩니다.
- 중간 라우터들은 패킷을 재조립하지 않습니다.
- GPT : Reassembly(재조립):
GPT 설명
- 단편화는 데이터그램이 더 작은 패킷으로 나누어져서 각각이 네트워크를 통과할 수 있도록 하는 과정입니다.
- 이 과정은 다양한 네트워크들이 다른 최대 전송 단위(MTU, Maximum Transmission Unit)를 가지고 있기 때문에 필요합니다
- 이더넷(1500바이트)이나 와이파이(2300바이트)의 경우 IP packet의 양이 제한되어 있기 때문에 이를 통해 전송되려면 이를 통해 전송이 가능한 정도의 크기로 fragment를 해야 한다
Figure 19.5
- 데이터그램이 헤더, 페이로드, 그리고 트레일러를 포함한 프레임으로 캡슐화되는 과정을 보여줍니다
- "Header"는 프레임의 시작 부분을 나타내고, "Trailer"는 끝 부분에 위치하는 오류 검사 정보를 포함할 수 있습니다.
- MTU는 "Frame Payload"의 최대 사이즈를 나타내며, 이 크기를 초과하지 않도록 데이터그램을 단편화해야 할 수도 있습니다.
Fragmentation Fields
- Identification(식별자) (16bit)
- 원본 데이터그램을 유일하게 식별하는 16비트 필드임. 1씩 증가
- GPT : 단편화 과정에서 같은 데이터그램에서 파생된 모든 단편들은 같은 식별자 값을 가집니다
- 원본 데이터그램을 유일하게 식별하는 16비트 필드임. 1씩 증가
- Flags (3bit)
- Reserved(not used)
* GPT : 세 개의 비트 중 첫 번째 비트는 예약되어 있으며 사용되지 않습니다
- D : 1이면 단편화 금지
* GPT : D 비트는 "Don't Fragment"를 의미하며, 이 비트가 1로 설정되면 해당 데이터그램은 단편화되지 않습니다.
- M : 1이면 단편화된 패킷. 0이면 끝 혹은 단편화 안된 패킷
* GPT : M 비트는 "More Fragments"를 의미하며, 이 비트가 1로 설정되어 있으면 이후에 더 많은 단편이 올 것임을 의미하고, 0이면 마지막 단편이거나 단편화되지 않은 패킷임을 나타냅니다.
- Reserved(not used)
- Fragmentation offset (13bit)
- 8비트 단위의 오프셋
- GPT : 각 단편이 원본 데이터그램에서 어디에 위치하는지를 나타내는 13비트 필드입니다.
- GPT : 원본 데이터그램에서 해당 단편이 시작하는 부분을 가리킵니다.
- 8비트 단위의 오프셋
Figure 19.6
- 4000바이트 짜리 packet을 1400바이트의 이더넷으로 전송할 때, 원점으로 부터 얼마나 떨어져 있는지 offset으로 표기한다
Figure 19.7
- 1400으로 세 조각을 내서 보내는 경우
- 2번째 packet이 간 path는 MTU가 1400보다 더 작다면 이를 더 잘게 쪼개서 보내야 한다.
- 수신 측에서는 같은 identification을 갖고 있는지, 0으로부터 얼만큼 offset이 되어있는지를 확인하여 이를 수신할 때 assembly 하게 된다.
예제(1)
M 비트가 0인 패킷이 수신됨.
이 패킷이 첫 프래그먼트인가, 마지막 프래그먼트인가, 중간 프래그먼트인가?
프래그먼트로 분할되었는지 알 수 있는가?
- M 비트가 0이면, 더 이상의 후속 프래그먼트가 없다는 의미 => 마지막 프래그먼트임.
- 하지만, 원래의 패킷이 분할되었는지는 알 지 못함.
- 분할되지 않은 프래그먼트는 마지막 프래그먼트로 인식.
예제(2)
M 비트가 1인 패킷 수신. 이 패킷이 첫 프래그먼트인가, 마지막 프래그먼트인가, 중간 프래그먼트인가?
프래그먼트로 분할되었는지 알 수 있는가?
- M 비트가 1이라면, 나중에 마지막 프래그먼트가 올 예정임.
- 이 패킷은 처음, 혹은 중간의 프래그먼트이고, 마지막은 아님.
- 처음인지 중간인지는 다른 정보를 더 살펴보아야 함 (fragmentation offset의 값).
예제(3)
M 비트가 1이고 fragmentation offset 값이 0인 패킷 수신.
이 패킷은 처음, 중간, 혹은 마지막 패킷인가?
- 처음 fragment임
예제(4)
offset 값이 100인 패킷 수신. 이 패킷의 첫번째 데이터는
분할되기 전의 전체에서 몇 번째 데이터인가? 이 패킷의
마지막 데이터는 또 몇 번째인지 알 수 있는가?
- 첫 바이트의 번호를 알기위해서는 offset 값에 8을 곱한다.
- 즉, 첫 번째 바이트 번호는 800이다.
- 마지막 데이터의 번호는 패킷의 길이를 알기 전에는 알 수 없다.
예제(5)
offset 값이 100이고, HLEN 값이 5인 패킷 수신.
total length 필드 값이 100.
이 패킷의 첫번째 바이트와 마지막 바이트의 번호는?
- 첫 바이트 번호는 100 × 8 = 800.
- total length가 100 바이크이고, header length 가 20 바이트이므로 (5 × 4), 이 데이터그램에는 80 바이트의 데이터 있음.
- 첫 바이트 번호가 800이므로, 마지막 바이트 번호는 879
Options
- IPv4 데이터그램의 헤더는 2개의 파트로 구성
- Fixed part
- 20 바이트 고정
- Variable part
- 최대 40 바이트 (4의 배수 값)
- 네트워크 테스팅과 디버깅에 사용
- 2 종류 : single-byte option, multiple-byte option
Single/Multiple-byte option
- Single-byte option
- No operation(NOP) : 옵션사이의 채움으로 사용
- GPT : 옵션 사이의 간격을 채우는 데 사용되며, 헤더의 정렬을 맞추기 위해 필요합니다.
- End of Options(EOOL) : 옵션 끝에서 패딩으로 사용
- GPT : 옵션 리스트의 끝을 나타내고, 이 옵션 다음에는 패딩만이 올 수 있습니다.
- No operation(NOP) : 옵션사이의 채움으로 사용
- Multiple-byte option
- Record route : 최대 9개까지의 경로 기록
- Strict source route : 지정된 경로만 허용
- GPT : 패킷이 특정 경로를 따라갈 것을 요구합니다. 지정된 경로만을 정확히 따라야 합니다.
- Loose source route : 지정된 경로로 가고, 일부 다른경로 허용
- GPT : 패킷이 특정 경로를 포함하여 전송될 수 있지만, 지정된 경로 외에 다른 경로를 이용할 수도 있습니다.
- Timestamp : 라우터의 데이터그램 처리시간 기록
- GPT : 패킷이 경유하는 라우터에서 처리 시간을 기록합니다. 라우터의 타임스탬프와 함께 주소가 기록될 수 있습니다
- Strict source route : 지정된 경로만 허용
GPT : 패킷이 경유하는 라우터의 주소를 기록합니다. 최대 9개의 라우터 주소를 저장할 수 있습니다.
- Record route : 최대 9개까지의 경로 기록
Security of IPv4 Datagram
- 초기 IPv4 프로토콜에서 보안은 없었음
- 세 가지 보안 이슈
- packet sniffing : 내용 보기. 암호화로 방어 가능
- Packet modification : 패킷이 중간에 변조되는 경우. data integrity mechanism으로 검출가능
- IP spoofing : 다른 사람인것처럼 행동하거나, 다른 컴퓨터의 주소를 도용
- Origin authentication mechanism으로 방지가능
- IPSec (IP Secirity) : 종단간 연결형 서비스로 IP 패킷 보호
- 알고리즘과 키 정의
- 패킷 암호화
- Data Integrity
- Origin Authentication(출처 인증)
'Computer Science > 네트워크' 카테고리의 다른 글
[컴퓨터네트워크] 03. Network Layer Protocols(3) - Mobile IP (0) | 2024.04.10 |
---|---|
[컴퓨터네트워크] 03. Network Layer Protocols(2) - ICMPv4 (0) | 2024.04.10 |
[컴퓨터네트워크] 02. (4)Network Layer(네트워크 계층) - IP 패킷의 포워딩 (0) | 2024.04.07 |
[컴퓨터네트워크] 02. (3)Network Layer(네트워크 계층) - DHCP, NAT (0) | 2024.04.07 |
[컴퓨터네트워크] 02. (2)Network Layer(네트워크 계층) - IPv4 주소 (0) | 2024.04.07 |