네트워크 구성도 살펴보기
네트워크는 크게 서비스를 받는 입장과 서비스를 제공하는 입장으로 나뉨
서비스를 받는 입장은 집에서 인터넷을 접속 할 때, 회사에서 인터넷에 접속해 업무를 할 때 등
서비스를 제공하는 입장은
클라우드나 데이터 센터, 회사 기계실에 서버를 놓고 고객들이나 회사 내부 직원을 위한 서비스를 제공하는 경우
제공하는 입장에서는 네트워크에 접속한 구성원 수, 필요한 네트워크의 속도에 따라 여러 가지 상황을 고려해야 함
홈 네트워크
홈 네트워크 구성은 어떤 인터넷 회선(FTTH, 케이블 인터넷, VDSL)을 연결하더라도 동일
FTTH(Fiber To The Home) : 광섬유가 집까지 들어온다는 의미
VDSL(Very-high-bit-rate Digital Subscriber Line) : 기존 전화선을 이용해서 빠른 인터넷을 제공하는 DSL 기술
*구리선 기반*
최근 모바일 단말기의 증가와 노트북이 사용이 보편화되면서 대부분의 가정에서 공유기를 사용
공유기에는 인터넷 접속에 필요한 다양한 기술이 사용되지만 일반 사용자도 손쉽게 홈 네트워크를 구성 가능
홈 네트워크를 구성하기 위해선 모뎀, 공유기, 단말 간 물리적 연결이 필요
무선 연결은 무선 랜 카드와 무선 신호를 보낼 수 있는 매체(공기)가 필요하고
유선 연결은 유선 랜 카드 및 랜 케이블이 필요
데이터 센터 네트워크
데이터 센터 네트워크는 안정적이고 빠른 대용량 서비스 제공을 목표로 구성
안정적인 서비스 제공을 위해 다양한 이중화 기술을 사용해야 하고
많은 서버와 서비스가 한 네트워크에 연결 되어 있으므로 높은 통신량을 수용 할 수 있어야 함
일반적인 홈 네트워크 속도의 500Mbps, 1Gbps와 다르게
10G, 25G, 40G, 100G,400G와 같은 고속 이더넷 기술 사용됨
이러한 데이터 센터 구성은 기존에는 3게층 구성이 일반적이었지만 가상화 기술과 높은 대역폭을 요구하는
스케일 아웃 기반의 어플리케이션과 서비스가 등장하며 2계층 구성인 스파인-리프 구조로 변화

스파인-리프 구조는 서버 간 통신이 늘어나는 최근 트래픽 경향을 지원하기 위해 제안
최근에는 일반 서버에도 10G Base-T 이더넷 포트가 기본적을 제공되어
TOP(Top of Rack) 스위치와 연결되고 리프 스위치인 TOR 스위치는 스파인 스위치와 40G, 100G로 연결되는 추세
더 높은 대역폭을 제공하기 위해 400G도 표준화 되어 더 높은 대역폭을 사용하는 데이터 센터에 사용되고 있음

프로토콜
규정이나 규약과 관련된 내용을 언급할 때 프로토콜이라는 용어를 사용
네트워크에서도 통신할 때의 규약을 프로토콜이라는 용어를 사용
프로토콜은 어떤 표준협회나 워킹그룹이 만들었는지 또는 어떤 회사에서 사용하느냐에 따라 특징이 많이 달라지고
다양한 프로토콜 틀이 존재했었음
그래서 다양한 문제가 생겼었고 유지보수에 효율적이지 않았음
그래서 복잡하고 산재되어 있던 여러 가지 프로토콜 기술이 이더넷-TCP/IP 기반 프로토콜들로 표준화
물리적 측면: 데이터 전송 매체, 신호 규약, 회선 규격 등은 이더넷의 물리 계층 규격과 관련됨.
데이터 링크 측면: MAC 주소, 프레임 형식, 오류 검출 등도 이더넷 규격에 포함됨.
네트워크/전송 측면: 장치들이 서로 다른 네트워크까지 통신하기 위한 규격으로 TCP/IP가 널리 쓰임.
쉽게 말해서 이더넷은 같은 LAN 안에서 데이터를 전달하기 위한 아래쪽 통신 규칙이고,
TCP/IP는 IP 주소를 기반으로 목적지까지 데이터를 전달하기 위한 위쪽 통신 규칙임.
프로토콜이 자연어로 불리는 일반 언어와 유사하면 이해하기 매우 쉬울 텐데
한정된 자원으로 통신을 수행해야 하다보니 최대한 적은 데이터를 이용해서
효율적인 프로토콜을 정의하고 사용해야 했음
네트워크 서비스가 처음 개발되던 1900년대의 네트워크와 컴퓨팅 환경은 지금과 다르게 매우 열악했음
위와 같은 이유들로 프로토콜이 문자 기반이 아닌 2진수로 만들어짐
최소한의 비트로 내용을 전송하기 위해서는 매우 치밀하고 요율적으로 서로 간의 약속을 정의해야 했음
예를 들어 몇 번째 전기 신호는 받는 사람 주고, 몇 번째 전기 신호는 상위 프로토콜 지시자 등과 같이
물론 어플리케이션 레벨의 프로토콜은 비트 기반이 아니라 문자 기반 프로토콜들이 많이 사용되고 있음
예시로 HTTP SMTP와 같은 프로토콜이 있음
비트로 메시지를 전달하지 않고 문자 자체를 이용해서 헤더와 헤더 값, 데이터를 표현하고 전송
아래의 그림은 예시

실제 텍스트 파일과 같은 데이터가 전달되서 효율성은 비트 기반 프로토콜보다 떨어지지만
이해가 쉽고 다양한 확장 가능
일반적으로 TCP/IP는 프로토콜이 아니라 프로토콜 스택이라고 부름
TCP와 IP는 별도 계층에서 동작하는 프로토콜이지만 함께 사용하고 있는데
이런 프로토콜 묶음을 프로토콜 스택이라 함
TCP/IP 프로토콜 스택은 4개 부분으로 나누어짐
이더넷 계층
네트워크 계층
전송 계층
어플리케이션 계층

OSI 7계층과 TCP/IP
네트워크 엔지니어에게 OSI 7계층과 TCP/IP스택을 필수로 잘 알아야 함
OSI 7계층
과거에는 통신용 규약이 표준화되지 않았고 각 벤더에서 별도로 개발해서
호환되지 않는 시스템이 어플리케이션이 많고 통신이 불가능했음
이를 해결하고 통합하기 위한 노력이 OSI 7계층으로 남음
OSI 7 계층이 네트워크 동작을 나누어 이해하고 개발하는데 많은 도움이 되어
네트워크의 주요 레퍼런스 모델로 활용되고 있지만
현재는 대부분의 프로토콜이 TCP/IP 프로토콜 스택 기반으로 되어 있음

OSI 7계층은 다시 두 가지 계층으로 나눌 수 있음

TCP/IP 프로토콜 스택
TCP/IP는 이론보다 실용성에 중점을 둔 프로토콜
OSI 7계층은 네트워크 통신을 이해하고 설명하기 위한 참조 모델이고,
TCP/IP는 인터넷에서 실제로 사용되는 프로토콜 묶음이자 구현 중심의 계층 모델

OSI는 7계층 TCP/IP는 4계층
OSI7도 데이터를 만드는 어플리케이션 부분과
만든 데이터를 잘 전달하는 데 집중하는 하부 계층으로 구분하는 것이 목적인 플로 계층과 어플리케이션 계층으로
나눌 수 있었는데
TCP/IP 모델은 그 구분이 더 확실 히 드러남
상위 3개 계층을 하나의 어플리 케이션 계층으로 묶고 1 2 계층을 하나로 묶음
현실에 쉽게 반영하도록 간단히 구분하는 TCP/IP 프로토콜 스택의 성향을 볼 수 있음
OSI 7 계층별 이해하기
1계층 (피지컬 계층)
1계층은 물리적 연결과 관련된 정보를 정의
주로 전기 신호를 전달하는데 초점
주요 장비로는 허브, 리피터, 케이블, 커넥터, 트랜시버, 탭 드잉 있음.
허브, 리피터는 네트워크 통신을 중재하는 네트워크 장비
케이블과 커넥터는 케이블
트랜시버는 컴퓨터의 랜 카드와 케이블을 연결하는 장치
탭은 네트워크 모니터링과 패킷 분석을 위해 전기 신호를 다른 장비로 복제해 줌
1계층에서는 들어온 전기 신호를 그대로 잘 전달하는 것이 목적이라 전기 신호가 1계층 장비에 들어오면
이 전기 신호를 재생성하여 다시 내보냄
1계층 장비는 주소의 개념이 없어 전기 신호가 들어온 포트를 제외하고 모든 포트에 같은 전기 신호 전송
2계층(데이터 링크 계층)
2계층은 데이터 링크 계층으로 전기 신호를 모아 우리가 알아볼 수 있는 데이터 형태로 처리
1계층과는 다르게 전기 신호를 정확히 전달하기보다는 주소 정보를 정의하고 정확한 주소로 통신이 되도록 하는데 초점
1계층에서는 전기 신호를 잘 보내는 것이 목적이고 출발지와 목적지를 구분할 수 없지만
2계층에서는 출발지와 도착지 주소를 확인하고 내게 맞는지 내가 처리해야 하는지 검사 후 데이터 처리 수행
2계층에서는 주소 체계가 생기면서 여러 통신이 한꺼번에 이루어지는 것을 구분하기 위한 기능이 주로 정의
전기 신호를 모아 데이터 형태로 처리해서 데이터에 대한 에러를 탐지하거나 고치는 역할을 수행 가능
신뢰할 수 있는 현대의 물리 계층과 달리 과거에는 신뢰할 수 없는 미디어를 이용해 통신하는 경우도 많아
2계층에서 에러를 탐지하고 고치거나 재전송했지만
이더넷 기반 네트워크의 2계층에서는 에러를 탐지하는 역할만 수행
주소 체계가 생긴다는 것은 한 명과 통신하는 것이 아닌 동시에 여러 명과 통신할 수 있다는 것이므로
그냥 데이터를 던지는게 아닌 받는 사람이 현재 데이터를 받을 수 있는지 확인하는 작업부터 해야 함
이 역할을 플로 컨트롤이라 함

2계층에서 동작하는 네트워크 구성 요소는 NIC와 SWITCH가 있음
2계층은 MAC이라는 주소 체계가 있고 위의 구성 요소들은 그 주소를 이해할 수 있고
스위치는 MAC 주소를 보고 통신해야 할 포트를 지정해 내보낼 수 있음
3계층(네트워크 계층)
3계층에서는 IP 주소와 같은 논리적인 주소가 정의
데이터 통신을 할 때는 두 가지 주소가 사용되는데
2계층의 물리적인 MAC 주소와 3계층의 논리적인 IP 주소
MAC주소와 달리 IP 주소는 쉽게 변경해 사용 가능하며
네트워크 주소 부분과 호스트 주소 부분으로 나뉨

3계층에서 동작하는 장비는 라우터
라우터는 IP주소를 이해 할 수 있고 IP주소를 사용해 최적의 경로를 찾아주고 해당 결로로 패킷을 전송

4계층(트랜스포트 계층)
4계층은 실제로 데이터들이 정상적으로 잘 보내지도록 확인하는 역할을 함
패킷 네트워크는 데이터를 분할해 패킷에 실어보내다 보니 중간에 패킷이 유실되거나 순서가 바뀌는 경우가 존재
이를 바로 잡아 주는 역할을 4계층에서 담당
4계층에서 패킷을 분할할 때 패킷 헤더에 보내는 순서와 받는 순서를 기입해 통신해서 바로 잡기 가능
패킷에 보내는 순서를 명시한 것이 시퀸스 번호 (SEQ) 받는 순서를 나타낸 것이 ACK번호
5계층(세션 계층)
5계층인 세션 계층은 양 끝단의 응용 프로세스가 연결을 성립하도록 도와주고 연결이 안정적으로 유지되도록 관리하고
작업 완료 후에는 이 연결을 끊는 역할을 함
TCP/IP 세션을 만들고 없애는 책임을 지며 에러로 중단된 통신에 대한 에러 복구와 재전송도 수행
6계층(프레젠테이션 계층)
6계층인 프레젠테이션 계층은 표현 방식이 다른 어플리케이션이나 시스템 간의 통신을 돕기 위해
하나의 통일된 구문 형식으로 변환시키는 기능을 수행
일종의 번역기나 변환기 역할
이런 기능은 응용 계층에서 데이터의 형식상의 차이를 다루는 부담을 덜어줌.
MIME 인코딩이나 암호화, 암축, 코드 변환과 같은 동작이 이 계층에서 수행됨
7계층(어플리케이션 계층)
어플리케이션 계층은 어플리케이션 프로세스를 정의하고 어플리케이션 서비스를 수행
네트워크 소프트웨어의 UI 부분이나 사용자 입 출력 부분을 정의하는 역할
대표적인 프로토콜로는 FTP SMTP HTTP TELNET 등이 존재
인캔슙레이션과 디캡슐레이션
상위 계층에서 하위 계층으로 데이터를 보내면 물리 계층에서 전기 신호 형태로 네트워크를 통해 신호를 보냄
받는 쪽에서는 다시 하위 계층에서 상위 계층으로 데이터를 보냄
이렇게 데이터를 보내는 과정을 인캡슐레이션 디캡슐레이션이라고 함

현대 네트워크는 대부분 패킷 기반 네트워크
패킷 네트워크는 데이터를 패킷이라는 작은 단위로 쪼개 보내는데 이런 기법으로
하나의 통신이 회선 전체를 점유하지 않고 동시에 여러 단말이 통신하도록 해줌
데이터를 패킷으로 쪼개고 네트워크를 이용해 목적지로 보내고 받는 쪽에서는 패킷을 다시 큰 데이터 형태로 결합해 사용
어플리케이션에서 데이터를 데이터 플로 게층(1-4계층)으로 내려보내면서 패킷에 데이터를 넣을 수 있도록 분할 하는데
이 과정을 인캡슐레이션이라 함
네트워크 상황을 고려해 적절한 크기로 데이터를 쪼개고 그림과 같이 4계층부터 네트워크 전송을 위한 정보를
헤더에 붙여 넣음
이 정보들은 2진수로 쓰여짐
반대로 받는 쪽에서는 디캡슐레이션 과정을 수행
받은 전기 신호를 데이터 형태로 만들어 2계층으로 올려 보내고
송신자가 작성한 2게층 헤더의 정보를 확인하고 맞다면 올려보냄
올라가면서 2계층의 헤더는 벗겨내고 이와 같은 형식으로 3계층 4계층으로 올라감

데이터를 인캡슐레이션하는 과정에서 헤더에 넣는 정보들이 꽤 많아 모두 이해하기는 힘듬
프로토콜마다 특성이 달라 적어 넣는 정보가 다르므로 이 정보를 모두 이해하려면
많은 공부가 필요
하지만 이런 복잡한 정보들에도 규칙이 있으며 헤더에 두 가지 정보는 반드시 포함되어야 함
1. 현재 게층에서 정의하는 정보
2. 상위 프로토콜 지시자
예를 들어 4계층은 SEQ ACK 3계층은 IP 2계층은 MAC주소 정보를 꼭 넣어야 함
또한 상위 프로토콜 지시자가 필요한 이유는 프로토콜 스택은 상위 계층으로 올라갈수록 종류가 많아짐

인캡슐레이션 과정에서는 상위 프로토콜이 많아도 문제가 없지만 디캡슐레이션하는 목적지 쪽에서는
헤더에 아무 정보가 없으면 어떤 상위 프로토콜로 올려보내 주어야 할지 결정할 수 없음



각 계층마다 상위 프로토콜 지시자를 가지고 있지만 이름이 달라
4계층은 포트 번호
3계층은 프로토콜 번호
2계층은 이더 타입이라고 부름
쉽게 말해서 각 계층의 한 층위의 정보를 넣는다고 이해하면 쉬움
MSS&MTU
네트워크에서 수용할 수 있는 크기를 역산정해
데이터가 4계층으로 내려올 때 적절한 크기로 쪼개질 수 있도록 유도하는데
이 값을 MSS(Maximum Segment Size) 라고 함
네트워크에서 한 번에 보낼 수 있는 데이터 크기를 MTU(Maximum Transmission Unit) 이라 함
일반적으로 이더넷에서 수용할 수 있는 크기는 1500바이트(Jumbo Frame 제외)
MTU와 MSS는 모두 데이터 크기를 지칭하는 것이므로 MTU 값은 2계층의 데이터 값,
MSS는 4계층에서 가질 수 있는 최대 데이터 값임
2계층에서는 2계층 헤더들의 크기를 제외한 데이터 크기를 MTU 크기라고 부름
IP헤더와 TCP 헤더의 표준 헤더 크기는 일반적으로 각각 20바이트이므로 일반 이너넷인 경우 MSS값은 1460바이트