4.1 CRC / IP Protocol

1231·2026년 4월 1일

AI네트워킹

목록 보기
4/13

일단 생각해보자. 수많은 redundant bit를 추가하여 error correction 을 하는것이 과연 효율적인가? 데이터가 아주 많을때는 비효율적이다.

64bit 짜리 병렬 연산, 시리얼 통신, PCIe 등과 같이 매우 적은 데이터 송/수신하는 프로토콜에서는 그러한 redundant bit를 추가하는것이 합리적이겠지만, 수많은 데이터를 송/수신하는 네트워크 통신에서는 불가능하다.

따라서, Error Correction은 과하다...Error Detection만 하겠다.

그중 Cylic code를 사용하는 CRC 방법을 사용한다.

CRC

CRC Cyclic Redundant Check

이런식으로 redundant bit가 중복된값이 없다는것을 볼 수 있다.

이는 자기 자신을 제외한 공약수가 없는 "소수" 의 특징을 사용한다.
Divisor를 소수를 쓰게 되면, 처음 중복이 발생할때까지 매우 다양한 수가 발생한다.

그 후, XOR 와 Shift 연산만을 사용함. (기존 나누기 시에는 뺼셈을 수행했지만, 여기서는 XOR 수행)
leftmost가 0이면 0000을 사용, 1이면 1011을 사용하는 식으로.

최종적으로 나온 Remainder를 redundant bit로 사용, Codeword를 완성한다. 이때, N bit를 추가하기 위해서는 N + 1 개의 bit가 필요하다.

그 후, 다음과 같이 codeword에 그대로 CRC 연산을 수행해서, 0000 일시 no error, 그외의 것은 error 발생으로 인지.

이때 XOR와 Shift 연산만을 사용하기 때문에 하드웨어/소프트웨어적으로 구현이 매우 간단하다.

Polynomial 표현?

이때, 소수의 역할을 하는 divisor를 polynomial로 표현했을때를, Prime Polynomial 이라고 한다.

일반적인 LAN에서는 CRC-32를 사용하는데, 일반적으로 다음과 같은 prime polynomial들을 사용한다.

마지막에 +1 인것을 보면 대부분 홀수를 사용한다는것을 알 수 있다.

이러한 CRC는 모든 에러를 detect할 수 있다.

Checksum

나머지 데이터들을 모두 sun, 보수를 취해서 checksum을 구한다.
모두 1111... 이면 no error.

2계층에서 error는 CRC로 체크했는데, 왜 또 윗계층에서 다시 checksum으로 에러를 체크하는가?
-> IP 헤더가 바뀌기 때문임. 네트워크 전체가 이동하는 경우...(source, destination 의 주소 변환), TTL 의 변화 등 IP Header에서의 변화는 계속 발생하기 때문에 2계층에서 수행했다하더라도 IP 단에서도 추가적인 Checksum 확인 과정을 거쳐야한다.

Network Layer

connection에 대한 관리를 하지 않는다.
connection-less하다.
네트워크의 이동성을 지원하는 순간 connection 관리의 의미가 사라진다.

connection-less
1. network의 flexibility 를 보장하기 위함.
2. 다른 방법으로 패킷의 송/수신을 제공하기 위함.

예를 들어서, 자동차같은것, 휴대폰같은 이동 장치들에도 IP 프로토콜이 사용되는데, 이때 connection-oriented 라면 이렇게 자주 발생하는 이동에 대처하지 못한다.

Layer 2에서는 virtual path로 길을 정하면 좋지만, 3계층은 다르다.

Connection-oriented: 연결을 먼저 이루고, 같은 path로 패킷을 전달한다.
Connectio-less: each packet이 독립적으로ㅡ 이전 전송과 크게 상관없이 전달된다.

IPv4

best-effort service. Unreliable하다. 4계층이 reliable channel 서비스를 제공해준다.

70년된 프로토콜이 여전히 사용될 수 있는 이유. connection-less...

또 차등화된 서비스를 제공하는 QoS를 위한 Service header,
...
서브넷, 슈퍼넷 등

0개의 댓글