자 기초편은 운영자 혹은 실무자를 위한 게시글이였다면, 여긴 순전히 제 학습을 위한 포스팅이고 기초편보다 더 두서 없을 예정입니다.
그러면 시작하겠습니다.
현재 가장 대중적으로 쓰이는 IEEE 802.3 frame header의 구조는 아래와 같습니다.
Bytes | Name | Description |
7 | Preamble | ‘10101010’ bit열 전달 for 비트 동기화 |
1 | SFD(Start Frame Delimeter) | ‘10101011’ bit열 전달 for 프레임 시작을 알림 |
6 | Destination Address | 48bit, 첫번째 Bit가 1이면 Multicast, 모든 Bit가 1이면 Broadcast |
6 | Source Address | 48bit |
2 | Types | MAC frame의 type을 의미 |
XX | Data | 최소 46 bytes 최대 1500bytes(만약 46bytes가안된다면 0으로 padding해서 송부 ) |
4 | FCS(Frame check Sequence) | Preamble+SFD+FCS부분을 제외하고 유효한MAC frame의 비트열에서 오류 검출을 위한 필드 |
그런데 Wireshark를 통해 frame을 확인해보면 표기된 내용만 보이지, Preamble, SFD 및 FCS 부분이 보이질 않는데,
Preamble + SFD는 frame의 동기화 및 시작을 알리는 부분이라 제외하고, FCS는 이미 오류 판독이 완료된 상태라 안보이는것이 아닐까 생각해본다.
하지만 MTU size나 MSS 를 계산할때는 FCS bit까지 계산하는게 맞아보임 ( 총 18Bytes의 L2 헤더가 존재)
FCS field는 CRC에 사용되는데, 간단하게 CRC 설명을 하자면 아래와 같음
*CRC : Cyclic Redundancy Check
에러 검출 방법중의 하나로, 송신측의 데이터로부터, 다항식에 의해 추출된 결과를 여분의 오류 검사필드 ( FCS : Frame check Sequence)에 덧붙여 보내면, 수신 측에서는 동일한 방법으로 추출한 결과와의 일치성으로 오류를 검사하는 기술
다시말해, 원본의 Hash값과 수신했을때의 Hash값이 일치한지 확인하는 과정이며, 전송과정에서 bit의 무결성을 확인할 수 있음
고속의 Switching을 위해서 Cisco에서는 특수한 Hardware를 쓰는데, 이것을 보고나서, VM형태로 올라간 Network장비들의 performance에 의구심이 들었음
중요한 이야기를 시작하겠습니다.
ASIC ( 주문형 반도체 : Application Specific intefrated Circuit)
Cisco에는 대표적으로 2가지의 ASIC이 있다.
* CAM (Content Addressable Memory )
* TCAM (Tenary Content Addressable Memory )
빠른 Forwarding 의사결정과 제한을 위한 Caching기능이 있는 Hardware를 사용
CAM
통상의 RAM의 경우, IOS는 이 메모리에 저장된 데이터를 얻기 위해 메모리 주소를 사용한다. 반변 CAM을 사용하는 IOS는 반대로 행동
CAM은 Data를 사용하여 데이터가 저장된 주소를 반환한다 ( 통상적인 과정과 반대의 과정)
1번의 수행으로 전체 메모리를 찾기에 RAM보다 빠르다
CAM table은 오직 0과 1의 값만을 반환한다
CAM은 MAC address table과 같은 정확히 일치하는 항목을 검색하는 테이블을 만드는데 유용하다.
따라서 CAM 테이블은 Layer2 Forwarding 결정을 내리는 주요 테이블이다. 왜냐하면 정확히 일치하는지 확인해야하기 때문
이 테이블은 모든 프레임의 Src address와 Inbound port 를 기록하면서 만들어진다.
Frame이 스위치에 도착하면 Source MAC address를 학습하고, CAM table에 기록한다.
도착한 Port와 VLAN 정보 또한 timestamp와 같이 이 Table에 기록한다.
만약 같은 MAC을 다른 Port에서 학습했다면, 최근 도착한 Port와 timestamp를 기록하고 이전 정보는 삭제하고
같은 Port에서 인입되었다면 Timestamp만 업데이트 한다.
D MAC이 CAM table에 있다면 연관된 Port로만 Forwarding됨
스위치가 CAM table에서 조회를 하는데 사용하는 정보를 Key라고 하는데, 이 key는 VLAN과 Destination MAC이 된다.
TCAM
TCAM은 0과 1 이외 any라는 값을 표현할 수 있다.
이로써 TCAM은 Routing table의 기능을 기존의 RAM에 비해 아주 빠르게 수행할 수 있다.
앞서 말했던것과 같이 0,1, 상관없음(Don't care)를 반환하며, Longest matching을 검색하고자 할때 유용하다
이 테이블엔 ACL과 QoS 및 기타 정보를 저장하는데, TCAM 사용이후 ACL을 적용하는것은 스위치의 성능에 영향을 미치지 않는다.
대부분의 스위치에는 TCAM이 여러개있어, ACL 뿐만 아니라 QoS를 L2, L3포워딩 결정과 병렬로 처리할 수 있음.
TCAM 은 VMR(Value, Mask & Result)로 표현할수 있으며, 각각은 아래의 의미를 가진다.
Value : 일치해야할 패턴 ex) IP, Protocol, port DSCP 등
Mask : 패턴과 관련된 Mask bit를 나타내어 접두사를 결정함
Result : 쿼리 시, 패턴과 Mask에 대한 Hit를 반환하는 경우 발생하는 결과 또는 동작을 나타냄
Switching 방식
Cut-through : 오늘날 대부분의 Switching방식으로 D-MAC만 확인하여 전송
Fragment-free : Frame의 64bytes 정보만을 확인하여, Collision 발생여부만 확인하는 방법
Store-and-forward : Switch가 유입된 모든 Frame에 대하여 CRC값을 체크하여 에러여부를 확인하는 방식
Fragment-free 단독으로는 사용되지않다가, Cut-through방식이 나오고 해당 방식을 섞어서 많이 사용중
이유는 Cut-through 방식에 문제가 있기때문,
이는 기본적인 L2 스위치 동작방식과 연관이 있는데, D-MAC만 보고 Forwarding을 하려면 MAC address table이 필요하지만, Cut-through방식으로만 사용하자니, Source MAC을 안보기 때문에, MAC address table이 안만들어지는 현상이 발생
그러면 Switching 방식을 어떻게 섞어서 쓰고있는지 확인해보자
Processs가 CPU와 Memory의 자원을 활용하여 처리하는 영역으로, Layer 2 switch에서는 Memory 영역에 MAC address table이 위치한다. 즉 Frame이 들어오면 어디로 보낼지에 대한 정보를 만들어야 하기 때문에, Frame source MAC address를 활용하여 MAC address table을 만들게 됨
이 일련의 테이블을 만드는 과정을 control plane에서 담당한다.
그렇다면 Data plane에서는 무엇을 할까
control plane에서 만들어진 정보를 기반으로 Hardware 기반으로 데이터를 처리하는 영역으로, Layer 2 switch에서는 CAM table이 위치.
Port에서 처리하는 부분, Ingress/Egress interface영역이라 하며, ASIC card라는 부분에서 처리를 한다.
frame이 들어왔을때, 어떻게 처리를 할지는 Forwarding hardware 즉 CAM table에서 처리한다.
Cut-through의 동작 방식
Port마다 ASIC카드가 존재. 중앙에는 Forwarding hardware인 CAM table이 존재
외부에서 frame이 들어올때, 제일먼저 ASIC이 하는건 D-MAC을 16 or 17bit로 hash한다. 왜냐면 48 bit를 전부 확인하는것보다 빠르다고하지만, 48 bit를 축약시키면 중복되는 값들도 존재할텐데 이부분에 대해서는 어떻게 Cisco에서 handling을 하고 있는지 정확한 확인이 불가했다.
그러는 동시에 ASIC에서는 fragment-free에 해당하는 64bytes를 control frame으로 넘겨준다.
그 이유는 해당 frame이 64bytes보다 작은 frame인지 확인함과 동시에, Collision이 발생했는지 확인하기 위함이다.
또한 64 Bytes안에는 Layer 2,3,4 header가 포함되어 있으므로, Layer 3 header만 보더라도 얼만큼의 data가 있는지 확인이 가능하다.
또한 Layer 2 header에는 Source MAC이 있기때문에, MAC address table을 만들 수 있다.
ASIC은 CAM table에서 16 or 17bit로 해시한 값이 있는지 확인하고, 동일한 값이 잇다면 해당 Port로 forwarding, 없으면 나머지 port로 flooding
CAM table은 process에서 source MAC address 를 가지고 MAC address table을 만들면 그 항목을 16 혹은 17 bit로 해시해서 CAM table에 넣어준다. Process가 MAC address table을 만들기는 하지만 실제로 Forwarding하는 입장에서 보면, Frame이 들어온 후 ASIC card가 Destination MAC address를 hash하고 그 정보를 CAM table과 대조해서 반환된 Port로 전달시킴
마치며,
AWS나 Azure등과 같은 CSP가 제공하는 컴퓨팅 자원으로 라우터나 스위치 등을 구현하고 있으나,
이런 특정용도의 Hardware없이 Software적으로 처리하는 방법의 Throughput이 얼마나 나오는지는 미지수 이다.
물론 CPU, Memory가 늘어날 수록 처리 속도도 빠르겠지만, On-premise대비 비용이 많이나오지 않을까하는 의구심이 있음.
추후에 기회가 된다면, Appliance형태로 제공된 Cisco 제품과 동급의 Cisco 실물장비의 Performance차이를 한번 정리 하도록 하겠습니다.
'Network 모험기' 카테고리의 다른 글
[#3-2]iBGP, EIGRP redistribute에 관한 글 (0) | 2024.03.03 |
---|---|
[#3-1]BGP Path best selection에 대한 간단한 설명 (0) | 2024.03.01 |
[#2]L2는 어떻게 동작할까(기초편) (1) | 2023.12.30 |
[#1]나는 누구,, 여긴 어디,, (DHCP) 2탄 (2) | 2023.12.02 |
[#1]나는 누구,, 여긴 어디,, (DHCP) (0) | 2023.07.01 |