개발자로 후회없는 삶 살기

[네트워크] 용어, 네트워크 분류, TCP/IP 계층 본문

[개발자]/[CS]

[네트워크] 용어, 네트워크 분류, TCP/IP 계층

몽이장쥰 2024. 5. 22. 10:00

서론

※ 아래 내용을 다룹니다.

  • 처리량, 트래픽, 지연시간
  • 토폴로지
  • 네트워크 분석 명령어
  • 네트워크 분류
  • TCP/IP 계층
  • 네트워크 기기

https://github.com/SangBeom-Hahn/boost-interview

 

GitHub - SangBeom-Hahn/boost-interview: AI 엔지니어 기반을 다지는 공간

AI 엔지니어 기반을 다지는 공간. Contribute to SangBeom-Hahn/boost-interview development by creating an account on GitHub.

github.com

 

본론

- 좋은 네트워크란?

많은 처리량, 짧은 지연시간(Latency)를 가지고 적은 오류와 우수한 보안을 갖춘 네트워크이다.

 

✅ 용어 정리

1) 처리량 : 특정 시점에 송수신 성공한 데이터의 양. 트래픽, 대역폭, 하드웨어 스팩에 영향을 받음
2) 트래픽 : 특정 시점에 링크 내에 있는 데이터의 양. 예를들어, 클라이언트가 서버에서 다운로드 하는 파일의 누적 데이터 양.
3) bps(bit per second) : 처리량의 단위로, 초당 송수신되는 비트 수 ex) 100bps = 1초당 송수신 할 수 있는 데이터의 양이 100 bit이다.
4) 지연시간 : 요청이 응답으로 돌아오기까지 걸리는 시간. 패킷 크기와 패킷 처리 성능에 영향을 받음
5) 대역폭 : 특정 시점에 전송할 수 있는 최대 비트 수

 

- 네트워크 토폴로지

 

트리 / 버스
스타 / 링 / 망

노드와 링크를 설계하는 방식으로 버스형, 망형, 트리형, 스타형, 링형이 있다.

 

🚨 병목 현상

병목현상이란, 트래픽이 몰려서 지연 시간이 길게 발생하여 사용자가 서비스를 이용하지 못하는 것을 말하며, 토폴로지를 알아야 회선을 추가하여 병목 현상을 해결할 수 있다.

 

※ 주된 원인

1. 대역폭
2. 토폴로지
3. 서버 CPU, 메모리 사용량 -> 멀티쓰레드 웹 서버 : 요청 수 만큼 CPU 양 증가, 멀티 쓰레드라서 메모리+컨텍스트 스위칭 양 증가

 

- 네트워크 분류

1. LAN(Local Area Network) : 단거리 지역을 연결하는 망으로 속도가 빠르고 혼잡도가 낮음
2. MAN(Metropolitan Area Network) : 도시 크기 ( ex] 서울 ) 정도를 연결하는 망으로 속도가 보통이고 혼잡도가 높음
3. WAN(Wide Area Network) : 국가를 연결하는 망으로 속도가 느리고 혼잡도가 높음

 

- 네트워크 분석 명령어

어플리케이션 코드 상으로는 문제가 없는데도, 사용자가 서비스를 이용하지 못하면 네트워크 관련 테스트와 네트워크 외 테스트를 진행하여, 네트워크 상 문제로 인해 서비스 이용이 불가한 것인지 확인해봐야 한다.

 

1. ping

목적지에 일정 크기의 패킷을 보내서 송수신 상태와 시간을 볼 수 있다. TTL은 Time To Live로 이 패킷이 유효한 시간을 나타내며, 로그인 유효 시간과 같이 볼 수 있다. TCP/IP 프로토콜 중 ICMP 프로토콜에서 동작한다.

 

2. netstat

내 로컬 PC가 연결한 서버들의 네트워크 상태를 볼 수 있다. 주로 포트 번호를 보는 데 사용된다.

 

이때 상태는 TCP 3-WAY 상태이다. CLOSE_WAIT은 서버가 클라의 FIN을 받고 ACK을 보낸 상태이다.

3. nslookup

DNS 정보를 확인할 수 있으며 KNS가 Korea DNS이다.

 

4. tracert

목적지까지 가는 경로를 확인할 수 있어서, 중간에 전송 속도가 오래 걸리는 부분을 찾을 때 사용한다.

 

- TCP/IP 4계층 모델 (TCP/IP 모델)

계층 모델이란 네트워크에서 사용되는 프로토콜의 성격에 맞게 그룹을 지은 것이다. TCP/IP 모델은 4개의 그룹을 가지고 있다.

 

=> 계층이란?

데이터 전송 시 필요한 네트워크 처리 범위에 맞게 각 프로토콜을 그룹 지은 것으로 예를들어, 웹 브라우저와 같은 사용자가 직접 데이터 처리를 발생시키는 계층을 어플리케이션 계층이라고 한다. 각 계층은 성격을 가지며, 성격에 부합하는 프로토콜을 요소로 가지고 있다.

 

1. 어플리케이션 계층

FTP : 파일 전송
HTTP : 웹 페이지 관련 데이터 전송
SMTP : 이메일 전송
SSH : 보안되지 않은 네트워크에서 서비스를 안전하게 운영하기 위함
DNS

이메일, 웹 브라우저 등 데이터 전송의 시작은 보통 어플리케이션에서 시작한다. 데이터를 생성하고 보낼 준비를 하는 곳이다.

 

2. 전송 계층

어플과 인터넷 계층 사이에서 데이터를 안전하게 보장하기 위한 다양한 장치가 있는 계층이다. 연결 지향, 신뢰성, 흐름 제어를 제공한다.

 

-> TCP

신뢰성 보장 -> 3WAY로 연결을 유지하여, ↓ 아래 요소를 보장
데이터 전송 확인 -> 데이터가 잘 도착했나
흐름 제어 -> 순서는 맞나
오류 검출
누락 패킷 재전송
가상 회선 패킷 교환 방식

 

-> UDP

데이터 전송 확인 X
속도가 TCP에 비해 빠름
데이터 그램 패킷 교환 방식

UDP는 헤더가 간단하여 오버헤드가 작고 빠르며 실시간 스트리밍, 온라인 게임처럼 빠른 속도가 중요한 곳에서 사용한다. 오류 검출을 아예 안 하는 것은 아니고 약간의 체크섬으로 최소한으로만 검출한다. TCP는 오류 검출과 재전송, 수정을 하지만 UDP는 최소한의 검출만 하고 수정을 하지는 않는다.

 

-> 가상 회선 패킷 교환 방식

하나의 메세지가 여러개의 세그먼트로 분할되어 전송될 때 가상의 회선이 존재하고 가상 회선의 식별자를 통해 세그먼트들이 해당 회선으로 순서대로 이동하는 방식. TCP는 혹시 모를 데이터 순서 오류를 위해 데이터 순서 검사도 진행한다.

 

-> 데이터그램 패킷 교환 방식

하나의 메세지가 여러개의 세그먼트로 분할되어 전송될 때 여러 회선으로 순서 없이 무작위로 전송되는 방식

 

-> TCP 연결 성립 과정

SYN : 클라이언트에서 서버로 ISN을 보내면서 연결을 요청
SYN - ACK : 서버에서 클라의 ISN을 받고 ISN+1로 응답한 후 서버의 ISN을 전송
ACK : 클라에서 서버의 ISN+1을 전송하여 응답

TCP는 이 과정으로 신뢰성을 보장하고 UDP는 이 과정이 없어 신뢰성을 보장하지 않는다.

 

🚨 TCP 연결 시 ISN을 0부터 순차적으로 할까? 난수로 할까?

정답은 난수로 한다. 난수로 하는 것은 여러 보안적인 이유가 있다. TCP 포트는 한정적이고 동일 서비스를 동일한 포트를 재사용하기 때문에 ISN이 예측 가능하면 과거 TCP 연결로부터 오는 패킷이라고 혼동할 수 있다. 또한 ISN이 예측가능하면 Sequence Number Prediction Attack과 TCP Session Hijacking이 공격을 받을 수 있다.

 

-> 공격

1) TCP Session Hijacking : 공격자가 TCP 연결의 시쿼스 번호를 예측하여 사용자로 가장하여 데이터 패킷을 무단으로 주입하거나 수정하는 공격
2) Sequence Number Prediction Attack : 일련 번호를 예측하여 세션을 중간에 가로채는 공격

 

-> TCP 연결 해제 과정

1번 : 클라에서 서버로 FIN을 전송하고 FIN_WAIT_1 상태로 들어감
2번 : 서버에서 클라로 ACK 응답 세그먼트를 전송하고 CLOSE_WAIT 상태로 들어감
3번 : 서버는 ACK를 보낸 뒤 일정 시간 후 클라에게 FIN을 전송하고 LASK_ACK 상태로 들어감
4번 : 클라는 ACK를 보내고 이를 받은 서버는 CLOSED 상태가 됨, 클라는 TIME_WAIT 상태가 되어 일정 시간 뒤 CLOSED 상태가 되고 서버와 클라이언트의 모든 자원이 해제됨

해제는 이미 진행 중이던 데이터 전송이 안전하게 완료되는 것을 보장하기 위해 4-WAY를 사용한다. 클라와 서버 모두 진행 중이던 데이터 전송이 완료되면 FIN을 보내서, 전송이 완료됐으니 연결을 해제해도 됨을 알린다. 클라의 FIN을 받은 서버는 바로 FIN으로 통신을 해제하지 않고 자신이 전송 중이던 데이터가 안전하게 전달될 때까지 CLOSE_WAIT 상태로 대기하고 전송이 완료되면 클라에게 FIN을 날려 해제해도 됨을 알린다.

 

🚨 왜 클라는 ACK를 보낸 뒤 바로 CLOSED 되지 않고 일정 시간 WAIT 상태로 있을까?

1) 클라이언트와 서버가 활발히 통신할 때 서버의 응답 중 일부 패킷이 뒤 늦게 도착할 수도 있다. 이를 받지 못하면 클라이언트의 전송 계층에서 재전송을 요청하게 되는 데 서버는 CLOSED 상태라 오류가 발생할 수 있다. 따라서 뒤늦게 오는 패킷을 받기 위해서 일정 시간 기다리며
2) 클라이언트에서 ACK을 보내고 ACK이 서버에 도달하기 전에, 새로운 연결 시도 시 LAST_ACK 상태로 연결이 시작되면 오류가 발생할 수 있어서, 클라이언트와 서버 모두 LAST_ACK가 아닌 CLOSED 상태로 연결을 해제하기 위해 기다리는 것도 있다.

 

✅ TCP에게 신뢰성이란?

전송 계층은 데이터의 순서 보장, 누락 패킷 검사, 오류 검사와 같은 신뢰성을 보장하는 계층이다. 이를 통해 안전한 통신을 보장한다. 전송 계층에 속하는 TCP에는 다양한 검사 장치가 있어서 신뢰성을 보장하도록 설계되어 있다.

 

✅ 전송계층은 어플과 인터넷 계층 사이의 데이터가 전달될 때 중계 역할을 한다?

-> 데이터 전송 과정 전체

1. 어플리케이션 계층 : 웹 브라우저나 이메일에서 데이터가 발생하게 되고 어플 계층에서 데이터를 네트워크로 보낼 준비를 한다.
2. 전송 계층 : 어플 계층에서 내려 온 메시지가 전송계층으로 이동한다. 메시지를 세그멘트 단위로 분할하고 각 세그먼트에 포트 번호로 목적지를 지정하여 전송 제어를 한다.
3. 인터넷 계층 : 전송 계층에서 내려 온 메시지가 인터넷계층으로 이동한다. 각 메시지에 IP를 지정한다.
4. 링크 계층 : 유-무선으로 데이터가 이동한다.

전송 계층은 송신 시 어플리케이션에서 온 메시지에 포트 번호를 붙여서 목적지로 보낼 준비를 하고 수신 시 인터넷에서 온 데이터를 어플리케이션의 포트 번호에 맞게 전송하는 등 다음 계층으로 이동할 수 있도록 중계하는 역할을 한다.

 

-> 신뢰성을 보장하기 위한 다양한 장치

1) 데이터 순서 보장

1] 송신측 전송 계층에서 데이터를 보낼 때 각 세그먼트마다 일련 번호를 붙인다.
2] 수신측 전송 계층에서 수신측 인터넷 계층을 통해 올라온 데이터를 세그먼트로 만들었을 때 일련 번호를 확인하고 재조합한다.
3] 만약, 재조합이 불가능하도록 누락된 데이터가 있다면 송신측으로 다음으로 요구되어야 할 일련 번호를 ACK 패킷으로 보낸다.
4] 모든 세그먼트를 재조합하고, 문제가 없는 지 확인한 후 송신측에 데이터가 모두 안전하게 도착했다고 ACK 응답 패킷을 보낸다.

 

2) 오류 검사

이 검사는 송신측 어플리케이션에서 내려온 메시지와 수신측 인터넷에서 올라온 메시지 모두에 해당한다. 메시지가 정확하게 전송되도록 보장하기 위해 오류를 검사하며, 오류 검출에는 패리티 비트, CRC, 체크섬 등이 있고 오류 발생 시 송신측에 메시지 재전송을 요청한다.

 

🚨 TCP 포트라는 것이 무엇인가?

거의 모든 프로토콜마다 특정 범위의 포트 번호를 가지고 있다. TCP와 UDP는 0 ~ 65535 같은 범위의 포트 번호를 가지고 있고, 이는 공유되지 않으며, 같은 번호를 사용하더라도 서로 다른 서비스로 사용될 수 있다. 포트 번호는 주로 TCP에서 사용되며, 하나의 서버에서 웹 서버와 이메일 서버가 동시에 실행될 수 있도록 포트번호를 통해 어플리케이션 서비스를 구분하는 데 사용되고 요청 시 src와 dst 포트 번호를 가진다.

 

-> 데이터 전송 과정(포트 번호 포함)

1) 어플 계층

아직 포트 번호가 만들어지지 않았지만, 목적 포트 번호를 명시하는 단계이다. 대신 응용 프로그램은 특정 서비스 (http, smtp)와 통신하기 위해 전송 계층의 포트 번호를 사용한다.

 

2) 전송 계층

어플리케이션에서 내려온 메시지를 세그먼트 단위로 분할하고 각 세그먼트에 가상의 src 포트 번호와 dst 포트 번호를 할당한다. src 포트 번호는 응답을 받기 위해 필요하다. 웹 브라우저는 TCP 80번 포트(http) 또는 443번 포트(https), DNS는 UDP 53번 포트를 가진다.

 

3) 인터넷 계층

전송 계층에서 내려온 세그먼트를 IP 패킷으로 캡슐화하고 네트워크로 전송한다.

 

 

-> DNS 서버에서 포트 번호 53번 사용 예시

1) 어플 계층 : 사용자가 브라우저에서 도메인을 검색하면 어플리케이션 계층에서 DNS 서버로 요청이 시작되고 DNS 서버의 포트번호인 UDP 53번 포트를 명시하여 메시지를 전송 계층으로 전달한다.
2) 전송 계층 : 메시지를 받고 UDP 프로토콜을 사용하여 메시지를 데이터 그램으로 캡슐화하고 데이터 그램에 src와 53번 dst 포트를 포함하여 세그멘트를 생성한다.
3) 인터넷 계층 : 세그먼트를 IP 패킷으로 캡슐화하여 링크 계층으로 전달한다.
4) 링크 계층 : 실제 네트워크로 전송하며, DNS 서버로 전달된다.
5) 수신측 DNS 서버 : 링크 계층으로 전달된 메시지가 인터넷 계층으로 올라오고 전송 계층으로 세그먼트를 전송하면 DNS 서버의 전송 계층에서 세그먼트의 dst 포트 번호 53번을 확인하고 53번 포트로 보낸다. 53번 어플리케이션인 DNS 서비스는 요청을 기다리고 있다가 들어온 요청에 대해 도메인을 IP 주소로 변환하고 src 포트 번호를 53번, dst 포트 번호를 사용자 포트 번호로 하여 다시 전송 계층으로 전송하고 캡슐화하여 사용자에게 응답한다.

 

3. 인터넷 계층

장치로부터 전달된 네트워크 패킷을 목적지 IP에 전송하는 역할을 한다. 데이터 전송 확인을 하지 않는 비연결적인 특징을 가진다. IP, ICMP, ARP 등이 있다.

비연결적인 특징이란 IP와 UDP의 특징으로 패킷이 독립적이고 패킷이 분실되거나 순서가 변경될 수 있다.

 

4. 링크 계층

전선, 광섬유 등 데이터를 주고 받는 장치간에 신호를 주고 받는 규칙을 정하는 계층이다. 유-무선으로 0과 1로 구성된 데이터를 전송하는 역할을 하며 물리와 데이터링크 계층으로 구분된다.

 

물리 : 유-무선 LAN을 통해 0과 1 데이터를 전송
데이터링크 : 에러확인, 흐름 제어, 접근 제어

 

1) 유선 LAN(IEEE 802.3)

유선 LAN을 이루는 이더넷은 2대의 통신 당사자가 동시에 송수신하는 전이중화 통신을 지원한다.

 

전이중화통신 : 동시에 메세지를 송수신할 수 있는 통신방식으로 송,수신 경로가 나뉘어 있어 충돌이 일어날 가능성이 없다.
CSMA/CD : 반이중화통신으로 하나의 선으로 송수신을 처리하여 충돌 방지 시스템이 필요하다. 동시 송수신이 아닌, 한 경로 기반 데이터 전송으로 데이터를 보낸 후 충돌이 발생하면 일정 시간 후 재전송한다.

 

2) 무선 LAN

송수신로가 같은 채널을 사용하는 방식으로 데이터를 수신하면 바로 응답하는 것이 아닌 모두 수신될 때까지 기다린 후 전송한다. 동시에 전송하면 충돌이 발생해 데이터가 유실될 수 있기 때문에 충돌 방지 시스템이 필요하다.

 

-> CSMA/CA의 충돌 방지 시스템

1] 프레임 간 공간 시간인 IFS만큼 기다린 뒤 프레임을 보냄
2] 프레임을 모두 수신 완료 했다면 ACK 응답 신호를 보내서, 수신이 완료됐다고 신호를 보냄
3] ACK가 오지 않으면 송신을 반복하고 최대 반복 횟수를 넘어서면 해당 프레임 전송을 취소함

 

3) 무선 LAN을 이루는 주파수

WLAN(Wireless)은 무선 전송 방식으로 공기를 매게로 주파수를 쏘아 데이터를 전송한다.

 

보통 2.4GHz와 5GHz로 구성되며 2.4는 장애물에 강하지만, 전자제품의 전파에 간섭이 있을 수 있다. 5는 채널도 다양하고 간섭도 없어서 보통 5를 사용한다.

 

1] 와이파이 : AP를 사용하여 유선 LAN 데이터를 무선 LAN 데이터로 변환하는 방식
2] BSS : AP를 중심으로 모인 그룹
3] ESS : 여러개의 BSS 그룹

 

🚨 CSMA/CD VS CA

CD(충돌 감지) : 충돌을 인정하고 일어나면 그때 충돌을 피하자라는 매커니즘으로 현재 전이중화 통신을 하는 이더넷의 과거 통신 방식이다. 회선의 유휴여부와 관계 없이 전송 후 충돌이 발생하면 모든 장비에게 충돌을 알리고 각 장비마다 가지고 있는 타이머의 랜덤 대기 시간 이후 충돌을 피할 때까지 반복하여 재전송한다.

CA(충돌 피하기) : 충돌이 발생하지 않게 피하자는 매커니즘으로 무선 랜에서 사용하는 방식이다. 전송하기 전 먼저 유휴 상태를 확인하고 사용 중이면 전송하지 않는다. 따라서 회선이 빌 경우 여러 PC에서 동시 다발로 전송하여 충돌이 어쩔 수 없이 발생할 수 있고 충돌이 발생하면 랜덤 시간만큼 대기 후 재전송한다.

 

4) 이더넷 프레임

링크 계층에서는 이더넷 프레임을 통해 에러를 검출한다.

MAC 주소

 

1] Preamable : 이더넷 프레임의 시작을 알림
2] SFD : 다음 바이트부터 MAC 주소임을 알림
3] SMAC
4] DMAC
5] 페이로드 : 데이터
6] CRC : 오류 검출 비트

 

- 계층간 데이터 송수신 과정

송신측 어플리케이션 계층에서 아래 계층으로 캡슐화되어 링크 계층으로 전달되고 수신측 링크 계층으로 이동한 후 수신측 어플리케이션 계층까지 비캡슐화된다.

 

-> 캡슐화 과정

1) 어플리케이션 계층에서 전송 계층으로 이동 후 TCP 헤더가 붙어 세그먼트 or 데이트 그램화 된다.
2) 인터넷 계층으로 이동하여 IP 헤더가 붙어 패킷화된다.
3) 링크 계층으로 이동하여 프레임헤더와 프레임 트레일러가 붙어 프레임화 된다.

 

-> 비캡슐화 과정

캡슐화 과정을 역으로 하여 어플리 케이션 계층의 PDU인 메세지화 된다. PDU란 각 계층의 데이터 단위로 제어관련 정보인 헤더와 데이터인 페치로드로 구성된다. 가장 아래 계층의 PDU인 비트로 데이터를 전송하는 것이 가장 빠르지만, 어플리케이션 계층에서는 다양한 정보를 편리하게 추가하기 위해 PDU인 메세지를 문자열 기반으로 한다.

 

- 네트워크 기기

각 계층마다 프로토콜의 범위에 맞게 동작하는 기기를 가지고 있다.

 

L7 스위치 -> L4 스위치 기능 처리 가능
링크 계층 기기 -> 링크 계층만 처리 가능

상위 계층의 기기는 하위 계층 프로토콜을 처리할 수 있지만, 반대는 불가능하다.

 

=> 어플리케이션 계층 기기 L7 스위치

로드밸런서라고 불리며 서버의 부하를 분산하여 처리할 수 있는 최대 트래픽을 증가하기 위해 사용한다. 바이러스 필터링 기능과 응용 SW 수준의 트래픽 모니터링을 제공한다.

 

-> 전송 계층 L4 스위치와 차이

L4 : IP와 포트를 기준으로만 로드밸런싱 가능/ 클라우드 서비스에서 Network LB으로 사용 가능
L7 : IP와 포트 외, URL, HTTP 헤더, 쿠키등으로 로드밸런싱 가능 / 클라우드 서비스에서 Application LB으로 사용 가능

 

-> 헬스 체크

여러 서버 중 문제가 발생한 서버는 로드 밸런싱 안되도록 하기 위해 각 서버를 검사한다. 예를들어 TCP 요청을 했는데 3-웨이 핸드쉐이크가 되지 않으면 문제가 있는 것으로 판단한다.

 

-> 서버 이중화

서버를 안정적으로 운영하기 위해서는 2대 이상의 서버를 필수적으로 사용하여 한대가 문제가 발생해도 서비스가 운영되도록 해야한다. 로드밸런서의 주된 목표를 전체 트래픽 증가, 안정적 서버 운용으로 볼 수 있겠다.

 

=> 인터넷 계층 기기

1. 라우터

각각의 다른 네트워크를 연결, 분할, 구분한다. 패킷 손실을 최소화, 이동 경로를 최적화하여 패킷포워딩한다.

 

2. L3 스위치

  L2 스위치 L3 스위치
참조 테이블 MAC 테이블 IP 테이블
참조 PDU 이더넷 프레임 패킷
참조 주소 MAC IP

라우터라고 봐도 무방하다. L2와 비교해보면 L2는 링크 계층에서 이더넷 프레임을 장치에게 전달하는 역할이고 L3는 인터넷 계층에서 라우터끼리 패킷을 주고 받는 것이다.

 

=> 데이터 링크 계층 기기

1. L2 스위치 : 링크 계층에서 장치에 직접적으로 데이터를 흘러넣는 역할을 한다. 라우터로부터 온 패킷에서 목적지 MAC 주소를 확인하고 목적지 장치로 이더넷 프레임을 전달한다.
2. 브리지 : 서로 다른 네트워크를 하나로 구축하는 데 사용된다.

 

=> 물리 계층 기기

1. NIC(Network Interface Card) : LAN 카드라고도 하며, MAC 주소를 식별자로 가지고 네트워크와 통신한다.
2. 리피터 : 약해진 신호를 증폭한다.
3. AP : 프레임을 복사하는 장치로 공유기이다. 유선 LAN 방식으로 온 프레임을 무선 LAN 방식으로 복사한다.

 

Comments