출처: 네트워킹 기본 - 09. TCP, IP, Ethernet 프로토콜 그리고 통신 (tistory.com)
2015/10/27 - [01. 기술 - 인프라] - 네트워킹 장비 - 01. 허브, 스위치, 라우터
2015/10/27 - [01. 기술 - 인프라] - 네트워킹 장비 - 02. L2, L3, L4, L7 스위치
2015/10/27 - [01. 기술 - 인프라] - 네트워킹 장비 - 03. 백본 스위치
2015/10/28 - [01. 기술 - 인프라] - 네트워킹 기본 - 04. L4, L7 로드 밸런싱
2015/10/28 - [01. 기술 - 인프라] - 네트워킹 기본 - 05. LAN, WAN, VLAN
2015/11/05 - [01. 기술 - 인프라] - 네트워킹 기본 - 06. 프로토콜 개념
2015/11/08 - [01. 기술 - 인프라] - 네트워킹 기본 - 07. TCP/IP 4 계층 모델
2015/11/08 - [01. 기술 - 인프라] - 네트워킹 기본 - 08. 어플리케이션 계층 프로토콜 HTTP
2015/11/24 - [01. 기술 - 인프라] - 네트워킹 기본 - 09. TCP, IP, Ethernet 프로토콜 그리고 통신
허브, 스위치, 라우터! 이런 장비들을 들으면 뭐가 떠올라야 하나?
■ 허브
§ 패킷을 받으면 자신에게 연결된 모든 디바이스에게 모조건 보낸다. 패킷을 받은 포트를 제외한 디바이스들이 연결된 모든 포트로 패킷을 보내는 것을 플러딩(flooding)이라고 한다.
§ 자신에게 온 패킷인지는 각각의 디바이스들이 판단해야 한다. 받은 패킷을 자신이 연결된 로컬 네트워크로 다시 보내는 기계이므로 트래픽 부담이 크다. 허브는 "브릿지"라고도 한다.
■ 스위치
· 자신과 연결된 모든 디바이스들의 주소(IP, MAC)를 가지고 있다.
· 하나의 디바이스가 패킷을 보내면, 스위치는 목적지를 파악하여 해당 디바이스에게만 패킷을 보낸다.
· 자신의 테이블에 없는 목적지를 가진 패킷이 오면 그것을 무조건 모든 기계에 포워딩한다. 이런 경우는 허브와 똑같이 동작하게 되는 것이다.
■ 라우터
· 스위치처럼 자신에게 연결된 다바이스들의 주소를 가지고 있다.
· 네트워크상에서 자신과 연결된 가장 가까운 라우터의 주소도 가지고 있다( 이것을 "디폴트 게이트웨이"로 프로그램해 둘 수도 있다)
· 자신의 테이블에 없는 목적지를 가진 패킷을 받으면 그것을 디폴트 게이트웨이로 포워딩한다(이것이 인터넷에서 데이터가 움직이는 기본 원리)
· 스위치와 달리 패킷의 소스 주소(source address)를 볼 수 있다.
패킷이 로컬 네트워크 안쪽에서 발생한 것인지 바깥쪽에서 발생한 것인지 구분할 수 있다는 의미이다. 이것은 큰 의미이면서 스위치와의 큰 차이이다. 라우터의 이 능력을 이용하면 바깥쪽의 네트워크와의 연결을 통해서 결국에는 인터넷같은 큰 네트워크를 구성할 수 있다는 의미이다. 안쪽에서 발생한 패킷의 목적지가 자신의 주소 테이블에 없으면 디폴트 게이트웨이로 포워딩하지만, 바깥쪽에서 온 패킷의 목적지가 자신의 주소 테이블에 없으면 그냥 패기(drop)시켜서 로컬 네트워크가 그것을 처리하지 않아도 되도록 한다. 이것은 스위치와 다른 점으로서 로컬 네트워크가 쓸모없는 트래픽이 생기지 않도록 한다(뒤에서 말하는 L3 스위치는 일반 스위치와 달리 라우터와 같은 일을 할 수 있다).
허브,스위치 그리고 라우터간의 기본적인 차이이고, 라우터가 어플리케이션에 왜 더 좋은가를 설명하고 있다. 라우터의 특성은 보안적인 측면에서도 유리하다. 예를 들어 해커가 어떻게 어떤 컴퓨터의 IP를 얻어서 해당 컴퓨터를 데이터를 보냈다고 하자. 스위치는 목적지 주소를 보고서는 바로 해당 컴퓨터를 패킷을 보낼 것이다. 그러나 라우터는 소스 주소를 볼 수 있고 이것을 이용해서 여러가지 룰을 세팅할 수 있다. 예를 들어 외부 네트워크에서 발생한 패킷은 안쪽으로 포워딩하지 않도록 할 수 있다(이 룰 자체는 효과적이지 않을 수 있다). 이처럼 라우터는 외부 공격으로부터 허브나 스위치가 할 수 없는 대응을 할 수 있다.
기억할 것은 이름은 고정되지 않았다는 것이다. 스위치럼은 행동할 수 있는 "지능적인 허브(intelligent hubs)"같은 이름도 있고 "L3 스위치"처럼 라우터처럼 행동할 수 있는 수위치도 있다.
허브, 스위치, 라우터! 이런 장비들을 들으면 뭐가 떠올라야 하나?
허브 - 플러딩
스위치 -스위칭
라우터 - 라우팅 & 포워딩( 이 부분에 대해서는 뒤에서 좀 더 다룬다)
참조 : What is a Hub/Switch/Router?
2015/10/27 - [01. 기술 - 인프라] - 네트워킹 장비 - 01. 허브, 스위치, 라우터
2015/10/27 - [01. 기술 - 인프라] - 네트워킹 장비 - 02. L2, L3, L4, L7 스위치
2015/10/27 - [01. 기술 - 인프라] - 네트워킹 장비 - 03. 백본 스위치
2015/10/28 - [01. 기술 - 인프라] - 네트워킹 기본 - 04. L4, L7 로드 밸런싱
2015/10/28 - [01. 기술 - 인프라] - 네트워킹 기본 - 05. LAN, WAN, VLAN
2015/11/05 - [01. 기술 - 인프라] - 네트워킹 기본 - 06. 프로토콜 개념
2015/11/08 - [01. 기술 - 인프라] - 네트워킹 기본 - 07. TCP/IP 4 계층 모델
2015/11/08 - [01. 기술 - 인프라] - 네트워킹 기본 - 08. 어플리케이션 계층 프로토콜 HTTP
2015/11/24 - [01. 기술 - 인프라] - 네트워킹 기본 - 09. TCP, IP, Ethernet 프로토콜 그리고 통신
스위치란 말을 많이 듣는다. L2, L3, L4, L7 스위치. "L"이 네트워크 OSI 레이어(Layer)를 말하는 것은 알겠는데 레이어와 무슨 관계가 있다는 것일까? 정확히 정리 좀 해 보자.
스위치는 "들어오는 패킷"을 스위칭하는 장비이다. 따라서 OSI 레이어에서 패킷이 "아래에서 위로 올라가는 과정"을 상상하면 편하다. 패킷이 아래에서 위로 올라오는 것을 그려보면, 해당 레이어에서 패킷으로부터 어떤 종류의 정보를 알 수 있는지 알게 된다.
네트워크 카드로 들어오는 패킷의 구조는 다음과 같다( 왼쪽에서 오른쪽으로 이동한다고 상상하자).
구분 | 7계층(Application) | 4계층(전송계층) | 3계층(네트워크) | 2계층(데이터링크) |
프로토콜 | Application Protocol | TCP/UDP | IP | Ethernet |
패킷구조 | 최초 Payload | DST PORT | SRC PORT | DST IP | SRC IP | SRC MAC | DST MAC |
L2, L3 등은 OSI의 7 레이어 중 어떤 레이어에서 수행되는가에 따라 정의된 분류이다.각 레이어별로 얻을 수 있는 정보가 달라지고, 해당 정보를 이용해서 제공할 수 있는 기능 및 서비스도 달라지게 된다.
■ L1 스위치 = 허브
L1 레이어에서 패킷으로부터 받을 수 있는 정보는 없다.
받은 패킷은 연결된 모든 디바이스로 전달
■ L2 스위치 = 허브 + α기능
L2 레이어의 패킷으로부터 얻을 수 있는 정보 : 목적지 MAC 주소(Ethernet 주소) |
α기능
· L2 스위치에는 연결된 디바이스들에 대한 MAC주소 테이블을 가지고 있다.
· 패킷이 들어오면 그것의 목적지가 어디인지를 보고 그 목적지로 보내주는 역할만을 한다. 말 그대로 "스위치"일 뿐이다.
· 즉 L2 스위치는 들어오는 패킷의 MAC 주소와 연결된 디바이스들의 MAC 테이블을 비교해서 패킷을 해당 디바이스가 연결된 포트로 보내줄 뿐이다.
· 기본 스위치. 그냥 스위치라고 하면 L2 스위치를 말한다.
· L2 즉 데이터 링크 레이어에서는 이더넷, 프레임릴레이, ATM같은 프로토콜을 사용하는데 L2 스위치는 이런 프로토콜들을 인식할 수 있다.
■ L3 스위치 = L2 스위치 + α기능
L3 레이어의 패킷으로부터 얻을 수 있는 정보 : 목적지 IP 주소 |
α기능
· 레이어 3( 네트워크 계층)에서 담당하는 프로토콜 IP와 관련된 기능
· L3 레이어에서는 패킷에 포함된 IP를 이용할 수 있는데, 목적지 주소 즉 IP 주소를 참조하여 스위칭하는 장비
· IP를 이용하면 로컬 네트워크와 외부 네트워크를 구분할 수 있다.
· 자신에게 온 패킷의 목적지 주소 IP를 통해서 내부 네트워크의 특정 디바이스로 보낼지 아니면 외부에 연결된 라우터로 보낼지를 인식할 수 있다.
■ L4 스위치
L4 레이어의 패킷에서 얻을 수 있는 정보 : IP정보, 포트 정보 |
L4 레이어는 패킷의 분할(segmentation)하고 받는쪽에서는 재조립(reassembly)를 하게 되는데, L3 네트워크 계층에서는 분할된 "개별적인 패킷"이 종단-대-종단 전달되도록 책임을 갖는 반면, L4 전송 계층은 "전체 메시지"의 종단-대-종단 전달 책임을 갖는다(end-to-end message delivery). L4 스위치에서는 소스의 IP, 목적지의 포트 정보를 이용해서 패킷을 분류하고 원하는 서버나 장비로 전송할 수 있는 능력을 가지고 있다. 이런 능력을 이용하면 소위 "로드 밸런싱" 구조를 만들 수 있다.
상대편 노드가 어떤 상황이 되더라도 심지어는 상대 노드가 다운되더라도 "전체 메시지가 전달되도록 하는 책임"을 구현하려고 한다. 어디서 많이 들어본 시나리오 아닌가? 로드 밸런싱 구조이다. L4 스위치는 소스 IP와 목적지 포트를 이용해서 로드 밸런싱을 구현할 수 있다. 로드 밸런싱 구조는 L7 스위치로도 가능하다.
■ L7 스위치
L7 어플리케이션의 데이터에서 얻을 수 있는 정보 : IP,포트 정보, URL 정보, 쿠키, 페이로드 정보 등. |
L7 스위치는 어플리케이션 레이어에서 얻을 수 있는 모든 정보를 바탕으로 로드 밸런싱을 구현할 수 있다. 예를 들어 HTTP 요청의 URL이 .asp로 끝나면 메인 웹 서버로 보내고, .jpg로 끝나면 이미지 서버로 보낼 수 있다.
로드 밸런싱뿐만 아니라 L7 스위치를 이용하면 패킷의 데이터까지 볼 수 있는 능력을 이용해서 보안을 향상시킬 수 있는 중요한 기능을 구현할 수 있다. 쉽게 말하면(그럴 능력밖에 안된다), 폭탄을 가지고 있는 데이터인지 아닌지까지 확인할 수 있는 능력을 가지고 있다는 것이다.
■ L4와 L7 로드밸런싱 비교
L4, L7 스위치를 비교하면 로드 밸런싱이라는 기능과 역할은 동일하나 패킷을 분석하는 인텔리전스가 다르다. 인텔리전스가 어떻게 다른지 즉 어떻게 로드 밸런싱을 구현하는지에 대한 자세한 내용은 아래 링크를 참조한다.
■ 라우터와 L3스위치 비교
라우팅(Routing)과 포워딩(Forwarding)이라는 개념이 있다. 인터넷같은 네트워크에서는 출발지부터 목적지까지 패킷을 보낼 수 있는 경로는 무수히 많다. 거쳐서 갈 수 있는 라우터의 갯수가 많다는 얘기다. 이렇게 많은 경로중에서 비용이 가장 적게 드는(가장 빨리 전송하 수 있는) 한 경로를 선택하는 것이 라우팅 알고리즘이다. 이렇게 라우팅 알고리즘을 이용해서 라우팅 테이블 및 최선의 경로를 결정하는 것을 라우팅(Routing)이라고 하고, 그 결정된 경로에 대한 정보를 저장해둔 테이블을 포워딩 테이블(Forwarding Table)이다. 라우팅 테이블(Routing table)도 있다. 라우팅 테이블, 포워딩 테이블에는 뭐가 있는지 아래 페이지를 참조한다. Routing Table, Forwarding Table.
전통적으로 스위치는 MAC주소를 이용해서 L2레이어에서 스위칭하고, 라우터는 IP 주소를 이용해서 L3 레이어에서 스위칭하는 것을 말했다.
라우터의 이런 기능은 대부분 소프트웨어적으로 구현되어 있다. MAC의 경우는 보통 단순하지만 IP는 복잡해서 하드웨어로 구현하기가 까다롭기때문이다. 그런데, 하드웨어 기술이 나날이 발전하고 그러다 보니 하드웨어적으로 IP를 분석해서 경로를 결정해서 포워딩할 수 있게 되었다. 즉 하드웨어적으로 라우팅 & 포워딩하는 제품이 L3 스위치이다.
라우터를 통한 라우팅은 소프트웨어를 이용하기 때문에 하드웨어를 통해서 IP헤더를 분석하는 L3 스위치에 비해서 속도가 느리다.
L3 스위치는 포트로 패킷이 들어오면 먼저 IP 헤더를 분석하여 자신이 알고 있는 목적지 주소라면 라우팅을 통하지 않고 직접 전송하고 자신이 알지 못하는 IP 주소이면 라이팅을 통해서 목적지 포트를 알아낸다. 그 후 스위치는 이 정보를 캐시에 기록하여 같은 IP{ 주소를 가진 패킷을 수신하면 자신이 직접 빠른 속도로 전송한다.
결론은 L3 스위치는 하드웨어를 이용해서 고속으로 패킷을 포워딩하는 라우터라고 볼 수 있겠다.
■ 아이콘
ㅍ L2 스위치(워킹그룹스위치) |
L3 스위치 |
라우터 |
로드 밸런서(L4, L7) |
아이콘 모양은 고정되 것은 아니다. 업체에서 제공하는 아이콘, 설계 툴에서 제공하는 아이콘 등이 다를 수 있다. 그러나 최대한 직관성을 갖추려 노력한다. 화살표는 패킷이 들어오고 나가는 것을 나타낸다고 했을때 그림을 보면 각 스위치의 기능과 의미가 아이콘으로 느껴지는 것 같기도 하다.
■ 스위치 정리
L1 스위치 - 허브 - flooding
L2 스위치 - MAC이용한 스위칭
L3 스위치 - IP이용한 스위칭, 라우팅& 포워딩
L4 스위치 - 로드 밸런싱(포트 번호 이용)
L7 스위치 - 로드 밸런싱, 보안 기능( 트래픽 필터,VPN )
상위 레벨에서 동작하는 스위치는 하위 레벨 스위치의 기능을 가지고 있다. 예를 들어 L4 스위치는 L3, L2 스위치의 기능도 수행할 수 있다.
참조 :
2015/10/27 - [01. 기술 - 인프라] - 네트워킹 장비 - 01. 허브, 스위치, 라우터
2015/10/27 - [01. 기술 - 인프라] - 네트워킹 장비 - 02. L2, L3, L4, L7 스위치
2015/10/27 - [01. 기술 - 인프라] - 네트워킹 장비 - 03. 백본 스위치
2015/10/28 - [01. 기술 - 인프라] - 네트워킹 기본 - 04. L4, L7 로드 밸런싱
2015/10/28 - [01. 기술 - 인프라] - 네트워킹 기본 - 05. LAN, WAN, VLAN
2015/11/05 - [01. 기술 - 인프라] - 네트워킹 기본 - 06. 프로토콜 개념
2015/11/08 - [01. 기술 - 인프라] - 네트워킹 기본 - 07. TCP/IP 4 계층 모델
2015/11/08 - [01. 기술 - 인프라] - 네트워킹 기본 - 08. 어플리케이션 계층 프로토콜 HTTP
2015/11/24 - [01. 기술 - 인프라] - 네트워킹 기본 - 09. TCP, IP, Ethernet 프로토콜 그리고 통신
▣ 백본 스위치
이것은 무엇일까?
백본은 장비가 아니다. 백본은 "빠르게 전송할 수 있는 대규모 전송회선"을 말하는데, 그런 백본에서 스위칭 역할을 하는 스위치 장비를 백본 스위치라고한다. 백본 스위치 역할을 하는 장비는 모든 데이터가 거쳐서 지나가는 곳이다 보니 성능이 매우 중요하다고 할 수 있다. 이 장비의 성능이 안 좋으면 이곳에서 병목(bottleneck)이 걸릴 가능성이 많다.
"백본 스위치"로 구글링을 해보면 다음 페이지가 검색된다 : 백본스위치란? 아래 그림은 이 페이지에 있는 그림중의 하나이다.
( 그림 출처 : http://blog.naver.com/nds239/10029215369 )
앞에서 알아봤던 여러 종류의 스위치가 보인다. 라우터, L2스위치, 워킹 그룹 스위치( 이것도 L2 스위치로 구현되어 있다) 그리고 앞에서 보지 못한 L4 스위치 아이콘도 보인다.
위 그림에서 백본 스위치로 표시된 장비들은 주로 Layer 2, 3, 4용 스위칭 기능을 모두 포함하고 있는 수위치들이다. 해서 레이어2,3,4에서 운용되는 모든 프로토콜에 대응해서 스위칭할 수 있는 기능을 가지고 있다( 아니면 말고...-_-;;)
다음은 아래 참조 페이지에 있는 그림이다.
Figures.5 Backbone network design layers. LAN = local area network
LAN에 있는 컴퓨터들을 묶어주는 스위치가 Distribution Layer에 있는 스위치들이고, 이 스위치들은 스위칭 허브 역할을 한다. 그리고 이 Distribution Layer에 있는 스위치들을 묶어 주는 스위치가 Core Layer에 있는 스위치이다. 이 스위치가 백본 스위치로서 우리가 흔히 PC에 설정해주는 게이트웨이의 IP가 이곳에 설정되어 있다.
여튼 스위치의 개념을 알면 네트워크 다이어그램을 보기 쉬워진다. 다음의 기본적인 개념은 기억하자.
라우터 : Routing
L2 스위치(웤 그룹 스위치) : Flooding
L4스위치 : 로드 밸런싱
참조)
Backbone network architectures (Data Communications and Networking) Part 1
Backbone network architectures (Data Communications and Networking) Part 2
2015/10/28 - [01. 기술 - 인프라] - 네트워킹 기본 - 05. LAN, WAN, VLAN
로드 밸런싱을 구현하는데 L4 레이어 스위치와 L7 스위치가 사용될 수 있다. L4와 L7에서 얻을 수 있는 정보가 각각 다르다. 즉 로드 밸런싱에 사용할 수 있는 정보가 다르다는 의미이다. L4, L7 스위치를 이용한 로드 밸런싱이 어떤 차이가 있는지 비교해 볼 수 있다.
좀 더 자세한 내용은 아래 페이지를 참조한다.
LAN, WAN, VLAN. 모두 스위치, 라우터와 연관이 있다.
■ LAN, WAN
스위칭과 라우팅(&포워딩)은 LAN(Local Area Network)과 WAN(Wide Area Network)를 설명할 때 필요한 개념이다. LAN의 경우 스위칭은 발생하지만, 꼭 라우터가 필요한 것은 아니다. LAN에서는 이더넷 주소(MAC)을 통한 스위칭 기능을 하는 "스위칭 허브"같은 장비 정도가 필요하다. LAN의 경우는 IP없이도 네트워킹이 가능하다.
그러나 패킷을 LAN에서 벗어나서 다른 네트워크로 보내려면 IP를 이용해야 한다. 즉 IP를 이용한 네트워크간의 라우팅이 필요하다. 다시 말하면 IP를 인식해서 라우팅을 하려면 레이어 3의 장비 즉 라우터나 L3 스위치가 필요하다.
참고 )
WAN은 물리적으로 넓은 범위를 가지기 때문에 고속 전송이 어려우며(수십 Kbps, 전용선 10~100Mbps), ISP ( Internet Service Provider , KT, SK, LG) 인터넷 제공업체 에서 관리한다. 허가 없이 네트워크를 구축 할수는 없지만 전문 업체가 관리하기 때문에 관리가 용이하다.
■ VLAN(Virtual Local Area Network)
LAN을 두개의 네트워크로 분리할 필요가 있는 상황을 생각해보자. 아래 그림처럼 10개의 케이블 포트가 있는 스위치가 하나 있는데, VLAN 방법을 사용하면 스위치(허브) 장비를 추가로 도입하지 않고 LAN을 분리하는 방법을 제공한다. 즉 케이블 포트별로 네트워크를 구분하도록 스위치에서 세팅을 할 수 있다.
( 출처 : http://onecellboy.tistory.com/278 )
그림의 스위치는 다음처럼 VLAN 구성이 되어 있다.
VLAN10 = 포트 ( 1, 2,3 )
VLAN11 = 포트(4,5,6)
VLAN12 = 포트(7,8,9)
하나의 LAN이 3개의 가상의 즉 논리적인 네트워크로 분리되어 있다. 첫번째 PC가 1번 포트를 통해서 패킷을 날리면 해당 패킷은 포트 2, 3으로만 전달된다. L2 스위치(스위치 허브)이므로 1번 포트를 제외한 모든 포트에 연결된 PC들에 패킷이 플러딩되겠지만, VLAN 설정이 되어 있으므로 스위치는 2,3 번에만 패킷을 전달한다.
2015/11/05 - [01. 기술 - 인프라] - 네트워킹 기본 - 06. 프로토콜 개념
앞에서는 주로 네트워킹을 가능하게 하는 장비 중에서 스위치에 대해서 알아봤다. 스위치를 포함한 모든 네트워킹 장비는 오고 가는 패킷에 포함된 "정보"를 이용해서 자신이 할일을 한다. 즉 어떤 레이어(3레이어)의 장비는 헤더 부분에 포함된 정보 값을 근거로 해서 다른 네트워크 영역으로 전달해야 한다고 생각해서 다른 라우터로 전달하거나 또는 어떤 레이어(2레이어)의 장비에서는 자신이 속한 네트워크 안에서 어떤 MAC 주소를 갖는 머신으로 보내야 할지 판단해서 전송을 하게 된다.
(그림 출처 : http://www.fastweb.it/internet/commutazione-di-pacchetto-cos-e-e-come-funziona/ )
패킷에 포함된 정보란 것은 결국 프로토콜이라는 약속에 의해서 정의된다.
즉 프로토콜은 패킷의 "몇번째부터는 주소이고 몇번째부터는 데이터이고" 등을 정의하고 있다. 패킷을 생성할때는 프로토콜이라는 약속대로 패킷을 구성하고 필요한 정보를 포함시켜야 한다. 그래야 받는 쪽에서도 프로토콜이라는 약속을 기준으로 패킷을 파싱해서 클라이어언트가 보내길 원하는 데이터를 얻게 된다. 그런데 패킷 구조의 정의는 레이어별로 사용되는 프로토콜에 따라서 달라진다.
패킷 구조의 정의( 정보의 구조 정의)는 프로토콜이 사용되는 레이어별로 달라진다. |
전송 레이어에서 사용되는 프로토콜인 TCP가 만들어 내는 패킷(세그먼트라는 용어가 더 정확하지만, 개념에 중점을 두고 있으므로 그냥 패킷으로 통칭한다)의 구조와 네트워크 레이어에서 사용되는 프로토콜 IP가 만들어내는 패킷의 구조가 다르다. 예를 들어 패킷의 헤더 부분의 사이즈와 구성은 레이어별 프로토콜마다 달라지게 된다. 장비가 레이어 3 장비이냐 레이어 4 장비이냐는 이렇게 각 레이어에서 사용되는 프로토콜을 이해할 수 있느냐 즉 패킷을 파싱할 수 있느냐 없느냐의 의미이다.
"몇 레이어의 장비"라는 의미는 그 레이어에서 사용되고 있는 프로토콜의 의미를 알고 있다는 것이다. |
프로토콜은 지금까지 말한 대로 전달되는 데이터 즉 정보의 구조를 정의하는 역할도 하지만 다음과 같은 역할도 한다. 프로토콜은 기능 정의도 하고 있다.
프로토콜은 그것이 사용되는 레이어에서 어떤 기능을 할 수 있는지도 정의하고 있다. |
즉 전송 계층에서 사용되는 프로토콜 TCP에서는 반드시 패킷이 상대방에 전달되었는지를 확인하는 기능이 있다. 이 기능은 네트워크 계층의 IP에는 정의되지 않은 기능이다. 즉 이런 전송 보증 기능은 레이어 프로토콜을 설계할때 전송 계층에 포함시키는 것이 적절하다고 판단했고, 그 설계가 표준으로 잡힌 것이다.
지금까지 내용을 정리해보면 프로토콜 설계와 우리가 흔히 알고 있는 객체의 클래스 설계와 유사하다는 것을 알 수 있다.
객체 : 속성(필드)과 메소드 정의 프로토콜 : 정보(데이터) 구조 정의와 기능 정의 |
다음부터는 프로토콜의 특별한 클래스(타입)인 TCP, IP, Ethernet 등에 대해서 정리하려고 한다.
참고로, 프로토콜이라하면 TCP/IP 프로토콜을 주로 떠올릴텐데, 어떤 장비라도 서로 통신을 하기 위해서는 프로토콜이 필요하다.
업데이트 : 2015.11.08(일)
USB : PC <--> 마우스 같은 주변 장치와의 플러그&플레이를 목적으로 하는 연결 프로토콜
SCSI(스쿠지) : PC <--> 저장 장치 연결 프로토콜( 디스크 드라이브, 테이프 드라이브, 테이프 드라이브, 프린터, 스캐너 등 )
그리고 멀티 코어 CPU가 당연시되고 있는데 이런 환경에서는 CPU안에서도 통신이 필요한데, 이를 위한 프로토콜도 존재한다.
2015/11/08 - [01. 기술 - 인프라] - 네트워킹 기본 - 07. TCP/IP 4 계층 모델
인터넷을 비롯한 현재의 대부분의 네트워킹을 지탱하는 것은 TCP/IP이라는 메인 프로토콜 및 관련 프로토콜이다. 이런 프로토콜 집합을 TCP/IP 프로토콜 슈트(protocol suite)라고 한다. TCP/IP 프로토콜 슈트는 원래의 OSI 7 계층 모델을 실용적으로 단순화시킨 TCP/IP 4계층 모델을 기반으로 하고 있다. 즉 아래처럼 생각하면 되지 않을까 싶다.
TCP/IP 4 계층 모델 : OSI 7 계층 모델의 단순화
TCP/IP 프로토콜 슈트 : TCP/IP 4 계층 모델이라는 설계도의 구현 결과 및 기타 필요한 헬퍼 프로토콜
( 헬퍼 프로토콜 : ping같은 기능을 구현하기 위한 ICMP 및 기타 TCP/IP의 개념을 구현하기 위해서 필요한 보조 프로토콜 )
TCP/IP 계층 모델과 시스템에서의 담당 부분을 그림으로 나타내면 다음과 같다.
그림은 HTTP 프로토콜을 사용할때의 계층 구조를 시스템의 실제 담당 위치와 대비시킨 그림이다. 웹 서버 또는 브라우저같은 어플리케이션은 HTTP 통신을 위해서 데이터를 TCP에 보낸다. TCP 부터 Ethernet 계층까지는 OS의 커널부분이 담당한다( 혹시 TCP, IP, Ethernet을 담당하는 부분이 모두 네트워크 카드(NIC)에 있다고 착각한 사람이 있지 않을까? 커널이라는 것에 익숙하지 않은 비전공자라면 착각할 수 있는 부분일 거라 생각한다).
커널 내에서 어플리케이션이 보낸 데이터에 각 계층에서 제공하는 주소 및 필요한 정보를 붙여서 최종적으로 네트워크 카드에 전달될 이더넷 프레임이 생성된다. 어플리케이션이 보낸 데이터에 TCP에서 제공하는 정보가 붙여진 것을 "TCP 세그먼트"라 한다. 그리고 IP 정보가 붙여진 것을 "IP 패킷", 그리고 이더넷 정보가 붙여진 것을 "이더넷 프레임"이라고 한다.
이더넷이라는 링크 계층 프로토콜은 이른바 OSI 7 계층의 데이터계층, 물리계층과 밀접한 관계가 있다. 커널에서 생성된 이더넷 프레임에 정보를 추가하지만, 최종적으로 NIC에서 전기 신호로 전송되기전까지는 다양한 전기적 제어 기능을 수행할 수 있는 정보도 포함된다.
이제 다음 포스트에서는 어플리케이션 프로토콜 HTTP, TCP, IP, 그리고 이더넷 프로토콜에 대해서 정리해볼까 한다.
2015/11/08 - [01. 기술 - 인프라] - 네트워킹 기본 - 08. 어플리케이션 계층 프로토콜 HTTP
이번 포스트부터는 데이터를 보내는 클라이언트의 어플리케이션 계층에서부터 데이터를 받는 서버의 어플리케이션까지 데이터가 전달되는 과정을 정리해보도록 한다. 먼저 어플리케이션 계층 프로토콜 HTTP부터 알아보자. 브라우저 프로세스에서 URL을 입력하고 엔터를 치면 어떻게 될까.
브라우저 프로세스는 시스템 콜을 통해서 목적지 IP와 TCP에서 사용될 포트를 커널로 전달한다.
■ 소켓(socket )
커널에서는 두 정보를 이용해서 소켓(Socket)을 생성해서 반환되고, 상대방의 소켓과 연결이 만들어진다.
이제 보내는쪽 브라우저 프로세스에서 데이터(HTTP 요청)를 소켓에 부으면 상대방쪽 소켓으로 전달되어 소켓과 연결된 웹 서버의 프로세스로 전달된다.
이제 서버측에서는 전달받은 HTTP 요청을 해석하여 원하는 데이터를 HTTP 응답으로 만들어서 서버의 소켓에 부으면 그 응답은 클라이언측 소켓으로 전달되어 브라우저 프로세스로 전달된다. 이렇게 해서 HTTP 응답/요청이 마무리되고 연결은 종료된다.
참고로, HTML 페이지에 포함된 이미지 하나 하나를 요청할때마나 이렇게 소켓을 만들고 연결을 만드는 작업은 오버헤드가 될 수 있다. 그래서 Keep-Alive 기능을 활성화시키면 어느 정도(?)의 기간동안 연결을 유지할 수 있다. 이 세션 유지 시간은 적당해야 한다.
■ 가상 연결( Virtual Circuit )
앞에서 말한 연결은 "가상" 연결이다. 그림처럼 직접적인 파이프같은 통로가 아니다. 어플리케이션 계층에서 보기에 연결이 생성되는 것처럼 보이지만, 실제로 데이터는 물리적인 통신 케이블을 통해서 중간에 스위치 및 라우터를 거치는 긴 여정을 통해서 상대방에 도착하게 된다. 우리가 "연결을 생성한다"고 하는 것은 소위 3-way handshaking이라는 과정을 거쳐서 클라이언트와 서버간에 소켓을 생성하고 서로간에 패킷을 받아들일 준비를 마치는 것을 말한다. 물론 아무 패킷이나 다 받아들이는 것은 아니다. 3-way handshaking과정에서 주고 받은 정보를 통해서 "악수"를 한 상대방이 보낸 패킷만을 받아들인다.
이제 다음에는 TCP, IP, Ethernet 프로토콜에 대해서 정리해본다.
2015/11/24 - [01. 기술 - 인프라] - 네트워킹 기본 - 09. TCP, IP, Ethernet 프로토콜 그리고 통신
이제 전송 계층, 네트워크 계층, 링크 계층의 프로토콜에 대해서 정리해 본다. 아래 그림에서 IP 패킷이 "서버 A에서 서버 C"로 전달되는 과정은 네트워크 공부를 하면서 한번쯤은 궁금해하는 주제일 것이다. 이번 포스트의 주요 관점은 패킷이 출발지에서 출발해서 목적지에 도착할때까지의 원리이다.
■ 계층별 주소
먼저 "주소"라는 것을 생각해보자. 패킷이 출발지에서 출발해서 목적지까지 도착하려면 목적지를 나타내는 주소가 필요한데 정확한 목적지를 표현하기 위한 주소는 어떻게 구성되어야 할까? 아래 그림을 보자.
[ 데이터 전달]
서버 A에서 최종 목적지 서버 C로 패킷을 전달하기 위해서 필요한 주소는 어떤 것들이 있을까?
먼저 네트워크 A에서 네트워크 C까지 전송하기 위한 주소 즉 네트워크 주소가 필요하다.
그런 다음 네트워크 C에 소속된 서버들중에서 서버 C에 대한 주소 즉 MAC 주소가 필요하다.
마지막으로 서버 C에서 어떤 프로그램으로 전달되어야 하는가를 결정하는 주소, 이것이 포트 주소이다.
※ 포트와 소켓의 차이점
포트는 한 머신에서 어플리케이션을 구분해줄 수 있는 논리적인 번호라면 소켓은 실제 물리적인 존재로서 IP 패킷을 주고 받는 곳이라고 보면 될 것이다. 소켓에도 소켓 번호가 부여되는데 통신이 시작되기 전에 포트 번호와 소켓 번호가 바인딩(bind)되어 있다. 전송계층까지 올라온 패킷은 이 바인딩 정보에 따라서 TCP 주소인 포트 번호에 바인딩된 소켓으로 패킷이 전송된다.
아래 그림에서 포트 번호와 소켓 번호가 위치해있는 곳을 주의해 보자. 포트번호는 네트워크 시스템의 전송 계층에 속한다 즉 논리적인 존재로 볼 수 있다. 그리고 소켓번호는 어플리케이션에 위치해 있는데 실제로 어플리케이션으로 패킷을 받아들이는 물리적인 존재라고 볼 수 있다.
구글링을 해보면 아래 페이지도 검색된다.
What is the difference between a port and a socket?
■ 패킷(이더넷 프레임) 생성
어플리케이션 계층에서 보낸 데이터는 잘게 잘려서 전송계층, 네트워크 계층 그리고 최종적으로 데이터 링크 계층을 거치면서 각 계층별 주소를 헤더에 추가한다. 각 계층에서 주로 사용하는 프로토콜은 TCP, IP, Ethernet인데, 쪼개진 데이터는 각 계층을 거치면서 해당 프로토콜에서 정의하고 있는 주소를 헤더에 추가한다. 최종적으로 네트워크 케이블로 나가기 전의 패킷의 모양은 아래와 같게 된다.
[이더넷프레임, 목적지 주소 구성]
데이터 링크 계층의 Ethernet 프로토콜에 의해서 MAC 주소가 추가된 패킷을 이더넷 프레임이라고 한다. 이더넷 프레임은 전기 신호로 바뀌어서 연결된 케이블로 흘러가서 "상대편 노드"로 전달된다. 케이블에서는 어떤 논리적 경로 결정 로직은 없다. 즉 들어온 프레임에 대한 전기적인 신호가 연결된 상대편 노드로 그냥 전달될 뿐이다.
■ 패킷 전달
이제 서버A에서 서버 C로 패킷이 전달되는 과정을 정리해본다.
[네트워크 구성]
우선 네트워크 구성을 보자. 네트워크 A, 네트워크 C 내부에는 L2 스위치가 각각 한대씩 배치되어 있다. 그리고 네트워크 A와 네트워크 B를 연결하기 위해서 라우터가 있고, 그리고 네트워크 B와 C를 연결하기 위해서 라우터가 있다.
이 그림을 통해서 L2 스위치와 라우터(L3 스위치)의 역할이 무엇인지 정리가 될 수 있을 것 같다. L2 스위치는 동일한 네트워크내의 즉 네트워크 주소가 같은 노드들을 연결하는 데 사용된다. 그리고 L3 스위치는 서로 다른 네트워크를 연결하기 위해서 즉 네트워크 주소가 다른 두 개의 네트워크를 연결하는데 사용된다. 따라서 라우터나 L3 스위치는 두 개의 다른 네트워크에 소속되어 양쪽에서서 접근할 수 있다. 라우터, L3 스위치의 이런 특성은 "네트워크를 연결"하기 위해서 사용되는 것으로 표현될 수도 있지만, "네트워크를 물리적으로 분리"하고자 할때도 사용된다.
이제 패킷이 서버A에서 서버C로 전달되는 과정을 알아 보자.서버A에서 완성된 이더넷 프레임 그림을 보자. 이 프레임의 목적지 MAC 주소는 어디를 가리키고 있을까? L2 스위치 주소일까 L3 스위치 주소일까? 상대방 서버 C의 IP를 통해서 서버 A가 속한 네트워크 밖의 존재라는 것을 알 수 있다. 네트워크의 밖으로 나가기 위해서는 서버 A의 기본 게이트웨이로 설정되어 있는 라우터가 최초 경유할 목적지로 정해진다. 따라서 최초로 서버A에서 만들어진 이더넷 프레임의 구조는 아래와 같이 될 것이다.
[최초 서버A의 이데넷 프레임]
우리가 서버A의 "네트워크 속성" 창에서 입력하는 것은 기본 게이트웨이인 라우터의 "IP 주소"이다. 입력하는 것은 IP 주소인데 어떻게 게이트웨이의 MAC 주소를 알게 될까? "ARP 프로토콜(Address Resolution Protocol)"을 이용한다. 이 프로토콜은 브로드캐스팅을 이용한다. "이 IP가 자신의 IP인 머신은 MAC 주소 알려주세요"라고 브로드캐스팅을 날린다. 브로드캐스팅은 서버A가 속한 동일한 네트워크 내부의 노드들에게만 전달되고, 네트워크 밖으로는 전달되지 않는다. 서버A와 동일한 네트워크에 속한 게이트웨이인 라우터도 해당 브로드캐스트를 받게 되고 IP가 자신을 지칭한다는 것을 인식해서 자신의 MAC주소를 보내준다. 이렇게 모은 네트워크내의 노드들에 대한 MAC 주소는 서버A의 "ARP 테이블"이라는 메모리 캐시에 저장된다. 즉 ARP 테이블은 ( 노드의 IP 주소와 MAC 주소) 매핑 정보를 가지고 있는 테이블이다. ARP 테이블은 L3 장비에도 캐싱된다.
이제 완성된 이더넷 프레임은 케이블을 타고 최초의 네트워크 장비인 L2 스위치로 전송된다. 위 네트워크 구조의 경우 동일한 네트워크내에서 다른 노드와 통신을 위해서는 반드시 L2 스위치를 통하게 된다.
L2 스위치에는 여러 개의 포트(TCP의 포트와는 다르다. 케이블을 연결하는 물리적인 포트를 말한다)가 있어서 많은 케이블이 연결되어 있다. L2 스위치에서는 모든 포트로 패킷을 보내지 않는다. 어떤 포트의 케이블로 패킷을 보낼지가 사전에 결정된다. 이것이 가능한 것은 L2 스위치도 앞에서 말한 L3의 ARP 테이블과 유사하게 목적지 MAC 주소와 스위치 포트 번호와의 매핑 정보 즉 (목적지 MAC, 스위치 포트)정보를 가지고 있는 스위칭 테이블을 참조한다. 해서 받은 패킷(정확히는 이더넷 프레임)의 목적지 MAC 주소를 확인해서 해당 패킷을 적절한 포트에 꽂힌 케이블로 흘려보낸다. 스위칭 테이블을 MAC 주소 테이블이라고도 하는 듯 하다.
※ L2의 스위칭 테이블 정보 즉 ( MAC 주소, 스위치 포트) 정보를 구하는 방법도 L3의 ARP 테이블을 구성하는 방법과 유사하다. 아래 링크를 참조한다. 브리지 테이블, MAC 주소 테이블, MAC 주소 학습, L2 스위치의 기본 동작 원리
이제 서버A가 속한 네트워크의 라우터에 도착했다. 지금까지의 패킷 흐름이 이해된다면 다음의 흐름은 이해가 되지 않을까 싶다. 다음부터는 L3 스위치->L3 스위치(네트워크B와 네트워크C를 연결하는 L3 스위치로 전달, 그리고 그 다음에는 네트워크 C 내부에서의 L2 스위치로의 전달이 있다. 이 패킷 전달 과정이 머릿속에 그려졌으면 좋겠다.
네트워크C의 라우터에서 떠날때의 패킷의 목적지 MAC주소는 서버C의 주소로 채워져있을 것이다. 이때 목적지 IP를 통해서 라우터가 가지고 있는 ARP 테이블을 참조하게 될 것이다. 이 패킷이 네트워크C의 L2 스위치에 도착하면 목적지인 서버C의 MAC주소와 L2 스위치가 가지고 있는 MAC 주소 테이블을 참조해서 서버C의 케이블이 연결되어 있는 포트로 패킷을 흘려보낸다.
이렇게 해서 기나긴 패킷의 여행이 끝난다.
■ 논리적 통신
앞에서는 아래 그림처럼 패킷이 2계층의 장비와 3계층의 장비를 거쳐가는 전달 과정을 살펴봤다. 그러나 많은 경우 간단히 3계층에서 IP 주소를 기반으로 출발지에서 목적지로의 이동을 추상화해서 이야기 할 수 있다.
[계층 관점의 통신]
졸립다. 이 정도면 나중에 업데이트할 기본 자료는 만들어놓은 듯하다.
'하드웨어 > PC 네트워크 서버' 카테고리의 다른 글
[인프라공방] 웹 성능 부하 테스트 (K6, Grafana) (0) | 2023.08.17 |
---|---|
L3 스위치, 라우터의 차이점 (L3 switch, Router 차이점) (0) | 2023.08.10 |
HBA, HCA란 (0) | 2023.08.10 |
L2, L3, L4, L7 스위치란 무엇인가 (0) | 2023.08.10 |
SD카드 읽기 전용, 읽기/쓰기 전용 (0) | 2023.08.09 |