1초에 1 Gigabit를 전송할 수 있는 GigE 표준
GigE는 Gigabit Ethernet을 의미하며 초 당 최대 1 Gigabit의 데이터를 전송할 수 있는 인터페이스 표준입니다. GigE 인터페이스는 다른 산업용 카메라 인터페이스와 달리 별도의 Grabber board를 요구하지 않고 허용 케이블 길이도 비교적 길기 때문에 널리 활용되고 있습니다.
앞서 말씀드린 것처럼 GigE는 초 당 최대 1 Gigabit의 데이터를 전송할 수 있다는데, 그렇다면 GigE 환경에서 1 Gigabit(=125MB) 크기의 영상을 1초 만에 전송할 수 있을까요?
안타깝게도 그렇지 않습니다.
초 당 1 Gigabit를 전송할 수 있는 표준이라고 해놓고 왜 1 Gigabit 크기의 영상을 전송할 수 없냐고요?
오버헤드(Overhead)가 발생하는 이유
그 이유는 바로 ‘Header’ 때문인데요, 네트워크 표준에서는 데이터를 전송하기 위해 전송에 필요한 정보인 Header를 데이터와 함께 보내도록 정의하고 있습니다. 따라서 1 Gigabit를 온전히 영상 전송에 사용할 수가 없습니다.
이 부분을 간과하게 되면 ‘초당 1 Gigabit’라는 이유로 이렇게 생각할 수 있습니다.
‘1초에 125MB(=1Gigabit)를 전송할 수 있으니까 25M 크기의 Mono8 영상을 출력하는 카메라는 1초에 5프레임(frame)을 전송 있겠구나!’
하지만 앞서 말씀드린 이유로 1초에 5프레임을 전송할 수가 없습니다.
그렇다면 Gigabit Ethernet에서 Header로 인해 얼마의 손해가 발생하게 되고 실제 1초 동안 전송할 수 있는 실제 영상의 크기는 정확히 얼마일까요?
전송 최소 단위인 ‘Frame’과 크기
먼저 계산에 앞서 네트워크 통신에서는 한 번에 데이터를 전송하는 게 아니라 전송 가능한 크기로 조각을 나누어 전송해야 한다는 점을 알고 있어야 합니다.
그렇다면 한 조각의 크기는 얼마가 되어야 할까요? 이 부분에 대해서는 IEEE 802.3ab 표준 문서에 정의되어 있습니다.

표준 문서에는 데이터 한 조각을 ‘Frame’이라고 표기하고 있으며 하나의 Frame은 1,538byte(Payload 1,500byte 기준)로 구성된다고 되어 있습니다.
그런데 이 중에 실제 데이터를 담을 수 있는 공간은 그림에서 ‘Payload’라고 표기된 1,500byte입니다. 38byte는 전송을 위해 부가적으로 필요한 정보인 셈이지요.
하지만 GigE Vision 표준에서는 1,500byte마저도 일부를 Header로 사용하고 있습니다.
IP Header에 20byte, UDP Header에 8byte, GVCP Header에 8byte 해서 총 36byte를 추가로 사용합니다.
계산해 보면 남은 공간은 1,500byte에서 다시 36byte를 뺀 1,464byte가 됩니다.
결국 하나의 Frame에서 영상이 차지하는 공간은 1,538byte 중 Header 74 byte를 제외한 1,464byte가 되는 것이지요.
Frame 하나의 크기를 알았으니 Gigabit Ethernet에서 실제 전송 가능한 영상의 크기는 얼마인지 계산이 가능할 것 같습니다.
1초동안 전송할 수 있는 실제 데이터의 크기
1 Gigabit를 Frame의 크기인 1,538 byte로 나누면 몇 번 전송해야 하는지 알 수 있으니까 전송 횟수에 실제 데이터 크기인 1,464byte를 곱하면 되겠죠?
1 Gigabit는 125MB이니까 125,000,000byte를 Frame 하나의 크기인 1,538byte로 나누면 1 Gigabit 전송을 위해 약 81,274.38개의 Frame이 필요하다는 걸 알 수 있습니다.
여기서 실제 데이터 크기는 1,464byte이므로 81,274.38개를 곱하면 1초 당 전송 가능한 실제 데이터의 크기는 약 118,985,695byte가 됩니다.
이를 단위 변환하면 약 118.98MB가 됩니다. 1 Gigabit가 125MB니까 Header의 크기는 약 6MB로 비중이 약 4.8% 정도 되는 것이죠.
전송효율을 높이기 위한 MTU 설정
하지만 보통 반복적인 전송으로 인해 발생하는 오버헤드(Overhead)를 줄이기 위해 MTU(Maximum Transmission Unit)를 최대한으로 늘리는 방법을 주로 사용합니다.
MTU는 네트워크 카드에서 지원해 주는 값만큼 사용할 수 있으므로 네트워크 카드의 종류에 따라 설정할 수 있는 MTU 최댓값도 달라집니다.
앞서 살펴본 한 Frame에서의 실제 데이터 공간이 1,500byte였는데요, MTU가 1500이라는 말입니다. MTU를 9000으로 늘리면 이 데이터 공간이 9,000byte로 늘어나게 됩니다.
데이터 공간이 늘어난다는 말은 이전 대비 더 적은 전송 횟수가 필요하다는 의미이므로 전체로 봤을 때는 Header가 차지하는 공간도 줄어든다는 뜻이 됩니다.
그렇다면 MTU를 9000으로 설정한 후 초 당 전송 가능한 실제 데이터의 크기는 얼마가 되는지 계산해 볼까요?
1 Gigabit인 125,000,000byte를 Frame 하나의 크기인 9,038byte로 나누면 필요한 Frame의 개수는 약 13,830.49개가 됩니다.
이제 여기에 Header를 제외한 실제 데이터 크기인 8,964byte를 곱하면 MTU 9000에서 1초 당 전송 가능한 실제 데이터의 크기는 약 123,976,543.48byte가 됩니다.
이를 단위 변환하면 약 123.97MB가 됩니다. Header의 크기는 약 1MB로 비중이 약 0.8% 정도가 됩니다.
MTU가 1500일 때 Header 비중이 약 4.8% 였으니 효율이 약 6배 좋아졌습니다.
GigE에서 1초동안 전송할 수 있는 최대 데이터 크기
이제 처음 이야기했던 25M 크기의 Mono8 영상을 1초 동안 몇 장 전송할 수 있는지 계산해 보겠습니다.
25M는 25Mbyte를 의미하지만 앞서 저희가 환산한 1,000byte = 1Kbyte가 아닌 1,024byte = 1Kibyte(Kibibyte)를 의미하므로 동일한 단위로 바꾸어 계산해 보겠습니다.
환산하면 25M 영상은 26,214,400byte입니다. MTU 9000에서 1초 당 전송 가능한 실제 데이터 크기는 약 123,976,543.48byte였으니 영상 크기로 나누기만 하면 되겠네요. 결과는 약 4.7입니다.
MTU 9000으로 설정한다면 25M 영상은 1초에 약 4.7장 전송할 수 있으므로 약 4.7fps가 나온다고 볼 수 있겠습니다.
물론 더 정밀하게 계산하자면 GigE Vision에서 정의하는 규칙에 따라 영상 Frame 앞뒤에 위치하는 Leader와 Trailer의 크기도 계산에 반영하여야 하겠지만 앞서 살펴본 Header에 비해 미미한 수준이니 편의를 위해 반영하지 않았습니다.
자, 이제 왜 Gigabit Ethernet을 사용하지만 초당 1 Gigabit 영상을 전송할 수 없는지 완벽히 이해하셨을 거라 생각됩니다.
원리를 아셨으니 GigE 카메라에서 FPS가 생각했던 것만큼 나오지 않는다고 고민하는 독자분은 없으시겠죠?
Comments are closed.