본문 바로가기

Computer/0x03 네트워크

Ethernet(이더넷) 에 대한 이해

Ethernet(이더넷) 에 대한 이해



번 시간에는 이더넷과 헤더분석을 해보겠습니다. (지난게시물: OSI7 layer 에 대한 공부)


먼저 이더넷(Ethernet) 이란 무엇이며 언제 생겼을까요?

이더넷은 1960년대 하화이 대학교에서 섬간에 통신을 원활하게 하기 위해서 탄생 되었습니다.

글로벌 IT 기업인 제록스에 의해서 1970년대에 더 구체적으로 발달 하였습니다.

또한 IEEE에 의해서 802.3 표준이 제정 되었습니다.


이더넷(Ethrnet)의 역할 을 살펴보면,

NIC가 장착된 시스템에서 다른 단말기에 IP패킷을 수납하여 전달하는 데이터 링크 계층의 기능을

수행 합니다.


- NIC는 IP address를 인식하지 못합니다.

- A 시스템에서 B 시스템으로 IP 패킷을 전달 할 경우에 각 시스템에 장착되어 있는 NIC들이 인식할 

수 있는 데이터 링크 계층의 프레임이 이 IP 패킷을 수납하여 전달 합니다. 이떄 이더넷 주소가

사용됩니다.


이더넷의 장점으로는 네트워크의 신뢰성과 운용과 문제 해결 툴 , 확장성, 낮은비용 등을 꼽을 수 있습니다.



다음으로 CSMA / CD 에 대해서 알아보겠습니다.

Carrier Sense Multiple Access / Collision Detection 의 약자 입니다.

이더넷의 매체 접근 방식


CSMA/ CD의 메커니즘:





- 전송을 원하는 호스트는 네트워크에 캐리어를 감지해서 전송이 가능한지 검사를 합니다.

- 호스트는 전송 이 가능할 경우 전송을 하고, Collision 이 감지될 경우 잼 심호를 브로드 캐스트 합니다.

- 전송을 시작하고 , 목적지 호스트는 데이터의 CRC값을 검사해서 데이터가 이상없이 도달했는지 검사합니다.

- CRC값이 이상이 없을 경우에는 상위 계층으로 데이터를 보내고, 이상이 있을 경우 에는 폐기처분 합니다.

- Collision에 의해서 전송을 못햇을 경우에는 Back-off(백오프) 알고리즘에 따라 랜덤한 시간이 지난후에

다시 전송을 시작 합니다.

여러 대의 호스트가 같은 전송매체(케이블)에서 통신할 수 있도록 규칙을 제공 합니다.


*Back-off(백오프) 알고리즘 이란?

- Collision이 발생 했을 떄 재전송을 위해서 개별 호스트는 랜덤한 시간이 지난 후에 데이터를 재전송 합니다.

시간을 랜덤하게 하는 이유는 같은 시간이 지난 후에 재전송을 하면 또 다시 Collision이 일어나기 떄문 입니다.



[ CSMA / CA ]

: Carrier Sense Multiple Access / Collision Avoidance 

- 802.11 무선랜 (WIFI) 에서 일반적으로 사용 합니다.

- 데이터 흐름을 감지하여 네트워크가 사용중이 아니면 바로 패킷을 보내지 않고 예비 신호를 먼저

보내 데이터 전송중에 패킷충돌을 피하는 방법으로 데이터를 전송하면 충돌하지 않게 하는 방식 입니다.



자, 그러면 지금부터 이더넷의 프레임 구조를 분석 해 보겠습니다.


* Preamble 

- 7Byte 길이를 갖고 있으며 송수신 시스템간의 동기화에 사용 됩니다.

- 프레임의 시작을 나타내는 용도로 사용 합니다.


* SFD ( Start Frame Delimiter )

- 10101011 값을 가지며 바로 뒤에 실제 프레임 필드 값이 위치 합니다.



* Destination Address

- 6 Byte 길이로 목적지 시스템의 하드웨어 주소를 나타 냅니다.

- 앞의 3부분은 며 뒤의 NIC 제조회사를 의미 하며 뒤의 3부분은 NIC 고유 번호를 의미 합니다.


* Source Address

- 송신(보냄) 시스템의 하드웨어 주소를 나타냅니다.


* Length or Type Field

- 길이 , 유형 필드는2가지 의미 중 하나를 의미 합니다.

- 필드 값이 1518보다 작으면 데이터 부분의 길이를 표현 합니다.

- 1536보다 크면 상위 게층의 프로토콜을 의미 합니다.


* Data

- 상위 계층 프로토콜에서 Encapsulation된 데이터 부분 을 의미 합니다.

- 최소 36바이트, 최대 1500 바이트 입니다.


* FCS ( Frame Check Sequence )

: Preamble 과 SFD 부분을 제외한 유효한 프레임의 오류 검사를 위해 사용 합니다.




[ Ethernet Fream 구조 ]



여기서 빨간색 테두리 부분이 바로 Header(헤더) 부분 입니다.



[ Ethernet 환경 통신 ] 


* 같은 네트워크 에서의 통신 방법:


(1) Host A 와 Host B 가 같은 네트워크 환경에서의 통신

(2) Host A 에서 Host B 와 통신을 위해서 1.1.1.1 에서 1.1.1.2 라고 통신을 보낼 경우에는

RIT를 참고해서 목적지가 같은 네트워크 인지 다른 네트워크 인지 판단 합니다.




- 목적지의 IP와 라우팅 테이블 맨 아래 목록의 Netmask를 AND 연산 후에 바로 옆의 Network Destination 과

비교를 합니다.

- 비교후에 같지 않으면 바로 위칸으로 올라가서 같은 행동을 합니다.

- 비교한후에 같다면 라우팅 테이블에 정의 되어 있는 게이트웨이로 보냅니다.



- 목적지 MAC주소를 모르기 때문에 Encapsulation을 중지하고 ARP 호출

                   (1) ARP 헤더 부분에 다음과 같은 내용을 기록 합니다.

                        1이라고 적는다 -> ARP request (2는 응답, reply)

                        S.IP : 1.1.1.1 기록 합니다.

                        D.IP : 1.1.1.2 기록 합니다.

                        S.MAC : 출발지 MAC주소 적습니다.

                        D.MAC :0으로 채워 넣습니다(아직 모르기 때문에)


                   (2) 2계층으로 내리고 2계층 헤더부분에 0x0806(ARP에서 내려왔기 때문에), 출발지 MAC 주소, 

FF.... 를 붙이고 보냅니다.


                   (3) 수신측에서는 브로드캐스트(FF....)이기 때문에 CPU의 ARP로 보내게되고 ARP는 자신에게 

요청이 왔다는 것을 확인 합니다

                    2+ S.IP : 1.1.1.2 + D.IP : 1.1.1.1 + 자신의 MAC주소 + 1.1.1.3의 MAC 주소를 붙이고 2계층


                   (4) 2계층에서는 3계층에서 내려받은 데이터에 헤더를 붙인 후 요청한 컴퓨터로 응답을 보냅니다.

                        * ARP request는 브로드캐스트, ARP reply는 유니캐스트.

                   (5) request를 보낸 컴퓨터의 NIC는 응답을 받고 자신에게 왔다는 것을 확인한 후 CPU의 ARP로

 올려줍니다(0806이므로) ARP에서 데이터를 보면 IP와 MAC주소를 확인할 수 있습니다.


          - 중지되어있던 ICMP Process를 작동시켜 공란이었던 목적지 MAC주소를 넣습니다.

         - Preamble과 FCS를 붙인 후 ping을 보내게 됩니다.

         - ping을 받은 1.1.1.2는 ICMP Echo reply를 만들어 1.1.1.1에게 보내게 됩니다.



  - 다른 네트워크에서의 통신방법

        ex)200.200.200.139에서 ping 1.1.1.1 라고 통신을 보낼 경우

            1) RIT를 참고해서 같은 네트워크인지 다른 네트워크인지 판단 합니다.

                1.1.1.1은 다른 네트워크이기 때문에 0.0.0.0으로 인식해서 게이트웨이(200.200.200.254)로 보냅니다.

            2) ICMP process 시작(=>Encapsulaton)

                ICMP -  8, 0 (Ping request)

                IP      - data + S.IP(200.200.200.139) + D.IP(1.1.1.1)

                2계층 - data + 0x0800 + S.MAC + D.MAC(알수없음) => ICMP Process 중지

            3) ARP Request 시작(1.1.1.1의 MAC주소가 아닌 게이트웨이의 MAC주소를 알아와야 합니다)

                ARP - 1 + S.IP(200.200.200.139) + D.IP(200.200.200.254) + S.MAC +D.MAC(0~0)

                2계층 - data + 0x0806 + S.MAC + D.MAC(F~F)

            4) ARP Reply 시작(게이트웨이에서 200.200.200.139으로 응답을 보내 줍니다)

                ARP - 2 + S.IP(200.200.200.254) + D.IP(200.200.200.139) + S.MAC + D.MAC

                2계층 - data + 0x0806 + S.MAC + D.MAC

            5) ICMP Process 항목에 비어있던 D.MAC을 게이트웨이의 MAC주소로 설정해서 ICMP Packet 

전송 합니다.