이번 포스팅은 근거리 통신망의 이더넷 프레임에 대해서 이야기 해보겠습니다!

앞 포스팅의 기초지식 복습 한문장!

OSI의 각 계층의 봉투는1 2계층 패킷(프레임) 3계층패킷 (데이터그램) 4계층 패킷(세그먼트)를 사용합니다!

이더넷 프레임 시작합니다.


프레임 형식

이더넷 LAN에서 보내지는 패킷을 프레임(Frame)이라 합니다. 이더넷 프레임은 7개로 구성되어 있습니다~!! 구성되어 있는 것들은

서문(preamble) , SFD , DA , SA , 데이터단위의 길이 또는 유형, 상위 게층의 데이터, CRC입니다. 

여기에서의 2계층의 프레임은 DA~CRC까지 입니다.

이더넷은 신뢰할 수 없는 매체에서 사용되는 수신된 프레임의 확인응답 매커니즘은 제공하지 않습니다. 확인 응답은 상위 게층에서 구현되어야 합니다.


이더넷 프레임의 형식을 볼까요!(Mac 프레임의 형식이라고도 하죠!)



* 여기 이후로 나오는 지국 은 목적지/발신지의 컴퓨터라고 생각하시면 됩니다


Preamble(서문) 

0과 1이 반복되는 7바이트(56bit)가 들어있는 802.3 프레임의 첫 번째 필드는 시스템의 들어오는 프레임을 수신하게 하고, 입력 타이밍을 맞추게 합니다. 패턴은 단지 경고와 타이밍 펄스를 제공합니다. 56bit 패턴은 프레임의 시작으로 지국이 일부 비트를 놓치는 것을 허용합니다. 실제로 서문은 물리 계층에서 추가 되므로, 프레임의 일부가 아닙니다.


Start Frame Delimiter(SFD - 시작 프레임 식별자)

두 번째 필드(1Byte-10101011)는 프레임의 시작을 알립니다. SFD는 지국이나 지국자들에게 동기를 맞추는 마지막 기회를 제공합니다. 마지막 두 비트 11은 수신자에게 다음 필드는 목적지 주소임을 알립니다. SFD도 물리 계층에서 더해집니다.

프레임은 Destination address에서부터 시작합니다. ( 대부분의 프로토콜에서는, 제일 앞에 목적지 주소가 오게 됩니다. 왜냐하면, 이 데이터가 원래 저에게 보내려고 했던 데이터 인지 아닌지를 판가름 하기 위해서 입니다.)

통신을 할 때 기계는 이 소리 저소리 어떤 소리든 자연에서 오는 소리인지, 혹은 다른 컴퓨터에서 발송되는 소리인지 구분하기 위하여 패턴을 사용합니다. 

만약 패턴이 있으면, 인공적인 것이고(지능을 갖고 있는 놈이 만드는 것이고) 패턴이 없으면 자연에서 우연히 만들어 진 거라고 생각합니다.

이해를 돕기 위하여~! 저희가 컴퓨터라 생각해 봅시다! 

전선에 신호가 신호가 들어오는지 인식하고 있다고 하면(CS 을 하고 있다고도 하죠!- Carrier Sence), 이 전선에 들어오는 데이터가 계속 들어오지만 데이터인지 잡음인지 인식하기 위해서는 규칙성으로 인식을 해야 합니다.

왜 이렇게 인식을 할까요~? 이건 외국인이 저희에게 말을 걸 때, 처음에 뭐라고 시작 했는지 기억이 안나는 것과 같습니다.

외국인이 What~~~~ Where~~ 이라고 물어보면 멍 때리고 있었던 저희는 그 첫 문장을 못 듣고, 뒷 부분만 듣게 되죠.

신호가 (2계층 프레임이) 들어오기 전에 신호를 계속해서 줍니다(01010101 이런식으로). 그럼 기계는 이 패턴을 초기에 인식을 하든, 몇 bit혹은 몇 byte를 놓히고 나서도 패턴을 인식한 후, 이렇게 생각합니다 "아 누가 나한테 말을 할란갑네~~!!!!??"

여기에서 패턴의 종료를 위에 그림과 같이 10101011 이런식으로 패턴의 종료를 11로 끝내버립니다. ( 1과 0이 연속해서 들어오다가 1이 두번 들어오면 Data의 시작이라는 것을 알 수 있죠.)

그럼 Destination address부터 CRC까지 인식할 수 있습니다.

인간으로 치면 , 누군가가 말을 하기 전에 헛기침을 하면서 시작한다던가, "주목~!!"이라는 말로 시작을 하는 것과 같은거죠.(이런 패턴은 많은 곳에서 활용합니다.)



Destination Address(DA - 목적지 주소)

목적지 주소 필드는 6Byte이고, 패킷을 수신하는 목적지 지국(컴퓨터) 또는 지국(컴퓨터)들의 물리 주소가 들어가 있습니다.


Source Address ( SA - 발신지 주소)

SA필드도 6바이트이고, 패킷 송신자의 물리주소가 들어가 있습니다.

여기에서 목적지 주소와 발신지 주소는 똑같이 6byte입니다. 하지만 모든 프로토콜이 6byte는 아닙니다. 이더넷과 무선랜이 6byte입니다.(다른것도 6byte일 수 있고, 혹은 길거나 짧을 수 있다는 소리죠.)


LengthPDU( or length or type , 발신지 주소)

이 필드는 길이 또는 유형 필드를 나타냅니다. 원래의 이더넷은 이 필드를 MAC 프레임을 이용한 상위 계층 프로토콜을 나타내는 유형 필드로 사용합니다. IEEE 표준에서는 데이터 필드에 있는 바이트의 수를 나타내는 유형 필드로 사용합니다. 이 두가지 이용은 오늘날 공통으로 사용합니다. 목적지 주소와 발신지 주소 이후에 데이터의 길이가 오는 이유를 알아야 합니다. 길이는 저희가 코딩하면서도 넣을 수 있습니다.  코딩을 하면서 넣어야 할 때는, 정보의 길이가 가변적일때 필요합니다. (길이의 정보가 고정적이면 길이가 필요 없죠!)

C언어로 예를 들면, 메모리에 어디부터 어디까지 데이터를 가져갈 것 인가에 사용하죠. 그 가져갈 만큼의 길이 정보를 LengthPDU에 넣어둡니다. 그리고 데이터를 읽어들일 때 LengthPDU 를 읽은 후, 그 만큼의 데이터를 읽어오죠. LengthPDU가 Destination address와 Source address 뒤에 나오는 이유는, 이더넷 프레임은 Destination과 Source address가 고정적으로 각 각 6byte이기 때문입니다. 이해됬쥬?


Data and padding ( data - 데이터)

데이터 필드는 상위 계층 프로토콜로부터 캡슐화된 데이터를 전달합니다. 최소 길이의 제한은 간단하게 이야기 해줄테지만, 정확한 CSMA/CD동작에 필요한 것입니다. 이더넷 프레임은 최소 512Bit 혹은 64Byte길이를 요구합니다 이 길이의 일부는 헤더와 트레일러 부분입니다. 만약에 헤더와 트레일러의 초소 길이(발신자 주소 6바이트,목적지 주소 6바이트, 길이 또는 유형 2바이트 CRC 4바이트)를 생각해 본다면 18바이트가 되는데 그러면 상위계층으로부터 온 데이터의 최소 길이는 46바이트 입니다. 만약 상위 계층 패킷이 46바이트보다 적다면 이를 만들기 위해 패딩이 이루어 집니다.

Data and padding의 길이는 최소 46byte 최대 1500byte입니다. 여기에서 최소 46byte라는건 무슨 뜻일까요? 많이 익숙하지 않죠? ( 보통 컴퓨터에서는 2진수로 표기되어 2의 배수에 익숙하죠.. 저도 여기에서 뭐지??라는 생각을 많이 했습니다ㅎㅎ)

Destination address(6Byte 이하 B) + Source address(6B) + LengthPDU(2B) + ~(데이터의 길이) + CRC(4B) 에서 가변적인 데이터의 길이를 제외하면, 18Byte입니다.


그럼 18Byte+46Byte=64Byte가 되는거죠.( 헐..넘나 쉬운것.. - 쉽죠?ㅎㅎㅎ)

프레임의 전체 크기를 봤을 때 64Byte부터 시작합니다. 그러기 떄문에 데이터의 최소 길이는 46Byte가 될 수 있는거죠!



그럼 여기에서 최소 데이터길이가 46Byte가 되어야 한다고 나와있습니다. 그럼 이런 생각도 갖을 수 있죠! " 그럼 만약 데이터의 길이가46Byte가 안된다면?? "

그래서 padding이라는 개념을 사용합니다. 데이터 뒤에 붙은 bit를 0으로 채워주는 거죠.


(뒤에서 다시 포스팅 하겠지만, LengthPDU는 여러종류가 있습니다. 정확한 Frame의 길이를 나타내 주기도 하고, Data and padding의 길이만 나타내 주기도 하며, 모



마지막으로 CRC가 뭔지 알아보겠습니다!

CRC는 지금 학습하시는 분들에게는 많이 중요하지 않습니다. CRC는 프레임의 오류 검출 필드라 부르는데, 2계층의 트레일러와 같습니다. (앞 포스팅에서 말 했다 싶이, 트레일러는 오류검출을 하기 위해서 Bit를 짝수로 맞춰주는 역활을 합니다.)


마지막 수정 2016-04-20

+ Recent posts