22sook00 logo
SookDev

네트워크에 대한 이해 기초(2)

tag
network
date
Jan 28, 2023
목차

🧩 개발장 입장에서 Port 번호 이해하기

port 번호는 관점에 따라 프로세스, 서비스, 인터페이스의 식별자로 나눌 수 있다.
S/W 개발자 입장에서는 프로세스 식별
어떠한 프로그램을 실행할 때 프로세스가 존재하기 마련이다.
커널(운영체제) 구성요소 중 TCP/IP 가 실행되기 위해 유저모드에서 접근할 수 있도록 인터페이스가 제공되는데 본질은 파일이지만 그 프로토콜을 추상화한 것이 소켓!
그 소켓을 생성할 때 TCP 소켓인 경우 소켓에 붙는 정보 중 하나가 포트번호이다.
포트는 기본적으로 16비트 정보로 이루어져있으며 2의 16제곱 (0~65535) 의 범위를 가지고 있다.
0과 65535 는 제외한 나머지 값만큼 사용할 수 있으므로 (2의 16제곱-2) 한 값 만큼의 포트개수가 있다. ⇒ 1~65534 까지 사용할 수 있다는 뜻.
ex) 만약 IP주소가 192.168.0.10 인 상황에서
엣지, 크롬 두개의 인터넷을 연다고 할때 접속하기 위해 소켓을 연다.
만약 엣지에서 포트번호가 3만번이라면, 크롬의 포트번호는 3만번이 될 수 없다.
 
notion image
패킷 (Packet-데이터의 단위) 이 네트워크에 유입되어 들어오면 NIC 을 거쳐 커널 운영체제인 Driver타고 TCP/IP 를 거쳐 프로세스에 전달된다.
운영체제단계에서 L4에서 프로세스로 갈건지 엣지, 크롬으로 갈지 포트번호로 결정을 하게 된다.
 

🧩 Switch가 하는일은 Switching 이다.

네트워크자체를 이루는 호스트, 스위치가 하는일이 스위칭이다.
경로선택, 인터페이스 선택
notion image
ex) 고속도로 예시로 보는 스위치와 스위칭
출발지에서 목적지로 향하는 도중 만난 교차로에서 어디로 갈지 경로를 변경하는것
⇒ 여기서 교차로는 스위치. 이동 중 교차로를 만나면 네트워크에서는 네트워크 스위치 가 된다.
선택된 다른 길은 인터페이스 이며 다른길을 선택하는것은 스위칭 으로 볼 수 있다.
결국 목적지에 다다르기 위해 위의 사진처럼 출발지→A→B→E→D→목적지 전체를 말하는것이 경로
A→D→목적지 로 갔다면 가장 효율적인 방법으로 목적지에 다다를 수 있는데
이것이 네트워킹에서 가장 최적화 된 길로 갈 수 있는지 제일 중요하게 볼 수 있는것이다.

인터넷은 거대한 라우터(L3 스위칭) 의 집합체

위의 예시에서 도로 전체를 인터넷이라고 한다면 교차로는 라우터로 볼 수 있다.
연결된 선은 점을 기준으로 총 4개인데 네트워크 인터페이스가 4개씩 있는 라우터로 볼 수 있다.
이 라우터들은 어떠한 길로 가야 가장 효율적인 길인지 서로 정보를 주고받으며 최적화된 경로를 결정 한다.
자동차는 패킷이라고 보면 된다.
패킷단위의 데이터가 라우터, 교차로에 도착하면 경로선택 스위칭을 한다.
그 중 최적화 된 경로를 통해서 목적지에 가는데, 그때 근거가 되는것이 이정표이다.
여기서 이정표는 라우팅 테이블 이라고 할 수 있는데 이것을 토대로 의사결정을 하고 목적지에 도착하게 된다.
🧸
호스트는 크게 네트워크를 이루는 호스트, 네트워크를 사용하는 호스트 두개로 나뉜다. 여기서 네트워크를 이루는 호스트는 스위치라고 하며 라우터라고도 한다. 인터넷은 L3 단위의 거대한 라우터의 집합체! 스위치 →교차로 스위칭 → 교차로에서 경로선택 이정표 → 라우팅 테이블
 

🧩 네트워크 데이터 단위 정리

OSI 7계층에서 커널(운영체제) 윗단계인 유저 어플리케이션 단은 전부 소켓 수준이다.
(커널에서 프로토콜을 유저단이 읽을수 있게 파일을 추상화 (===소켓) 했으므로)
그렇다면 데이터가 생성되고 수정되고 삭제되는지 알기전, 파일 입출력데이터 단위 부터 알아보자.
notion image

데이터 단위 정리

User mode

Stream

어플리케이션 프로세스 수준에서는 (=== 소켓) 스트림 데이터이다. (동영상 스트리밍의 스트림)
프로세스가 프로그래밍 한 만큼의 길이를 가지고 있으며 그 데이터는 1열로 쭉 나열되어 있다.
그 길이는 IP 수준에서 논하는 패킷 단위보다 길어질 수 있다.
스트림데이터를 네트워크에 보내기 위해서는 유저모드에서 커널로 내려가 TCP 를 만나야 한다.
이때 일정 길이로 분해가 일어나는데 이를 Segmentation(세그멘테이션) 이라고 한다.
 
커널(운영체제) 모드

Segment

TCP 수준에서 논하는 단위
User 모드에서 스트림데이터를 세그멘테이션 한 조각의 단위를 세그먼트라고 한다.
이 일정길이에는 최대 크기가 있고 MSS(Maximum Segment Size 1480 bytes) 라고 한다.
MSS 는 패킷의 크기에 따라 정해진다.
세그먼트를 인터넷 환경에서 전송가능한 형태로 포장한것을 패킷이라고 한다.

패킷

IP 수준에서 논하는 단위
패킷의 최대 전송크기는 MTU(Maximum Transport Unit) 라고 하며, 1500 Bytes 로 굉장히 작다.
각 세그먼트를 인터넷 환경에서 전송가능한 형태로 변환 (택배로 따지면 포장) 한것을 패킷 이라고 한다. 그러므로 MSS 사이즈는 더 작을수밖에 없다.
 
종합해보면
어플리케이션 프로세스가 파일에 스트림데이터를 Write 한다.
유저모드에서 커널로 내려가 스트림데이터를 네트워크로 보낼때 TCP 를 만나면 세그멘테이션을 한다.
1.5 메가바이트의 스트림데이터가 있는데 네트워크(인터넷)로 보낼 때 세그멘테이션이 일어나면 적어도 1000개 +@ 의 패킷이 나온다.

Frame

커널모드의 Driver 하드웨어 모드의 NIC
즉, TCP/IP 이하에서 다루는 단위
잘게 분해된 패킷을 실어나를때 프레임데이터에 넣어 보내는데 이를 인캡슐레이션 이라고 한다.
 

📜 참조

유튜브 널널한 개발자 참고