본문 바로가기
CS공부/네트워크

네트워크(널널한 개발자)-1

by 티코딩 2023. 11. 6.

저번에도 네트워크에 중요한 단어들에대해 알아봤다. 그건 이 강의를 보기 전 공부에 더 도움이 되기 위해서 공부했던것들이고,

이제부터 널널한 개발자님의 네트워크 강의를 보면서 정리하고, 내가 다시 봤을 때 이해하기 쉽게 하기 위해서 포스팅 해보도록 하겠다.

https://www.youtube.com/watch?v=k1gyh9BlOT8&list=PLXvgR_grOs1BFH-TuqFsfHqbh-gpMbFoy&index=1

ㅇ 1강

먼저 네트워크 공부를 하려면 OSI 7계층에 너무 개념적인것이기 때문에 목숨걸지 말라한다.

컴퓨터의 구조는 3개의 layer로 이뤄져있다. user mode 영역, kernal mode 영역, H/w 영역

그림에 있는 OSI 7계층 보단 옆에 4계층으로 나눈게(DOD) 좀 더 맞다고 본다고 한다. 

그 오른쪽 그림을 보자. 윈도우에 어떤 프로세스가 있다고 하자. 그 밑에 운영체제 수준에서 프로토콜이 TCP/IP로 구현되어있다. 

맨아래는 Network Interface Card가 있고, 그 하드웨어를 움직일수있게하는 Device Driver가 존재한다.

커널의 구성 요소들을 유저모드 어플리케이션을 추상화할때 파일의 형태로 추상화한다. 이 때, 이 파일은 소켓(Socket)이라고 부른다.

다시 가운데 DOD의 분류를 보자. 각 계층별 식별자가 존재한다. Access 단의 식별자는 MAC주소, Network단의 식별자는 IP주소, Transport의 식별자는 Port번호가 있다. 이 식별자들은 무엇에대한 식별자일까?

 

MAC 주소 - NIC(LAN카드)에 대한 식별자(변경 가능). 카드가 여러개면 MAC 주소도 여러개.

IP 주소(v4, v6) - Host에 대한 식별자. Host란 인터넷에 연결된 컴퓨터. NIC 하나에 여러개의 IP주소 바인딩 가능.

Port 번호 - 자기의 상황, 업무에 따라 달라지는데, SW개발측면에선 프로세스 식별자, Network 측면에선 서비스 식별자, HW 측면에선 인터페이스 번호다.

 

ㅇ Host - 네트워크에 연결되어있는 컴퓨터.

네트워크 이용주체로서의 Host - End point(peer, server,client) 

네트워크 자체를 이루는 Host - Switch(Router, 방화벽, IPS)

Network = 라우터 와 DNS의 집합체

L2스위치부터 숫자 올라갈수록 복잡해지고 비싸짐. L3 스위치는 IP를가지고 스위칭을한다. 이런식.

스위치는 무엇으로 스위칭하는지가 중요하다.

 

ㅇ IP(Internet Protocol) 주소 : Host에 대한 식별자

Ipv4 : 32bit 주소체계 2^32 약 43억개

Ipv6 : 128bit 주소체계

Ip주소는 8bit씩 끊어서 표시한다.

서브넷 마스크 : Ip주소에서 network Id 길이를 나타내는것

 

ㅇ Port번호 : Process 식별자, Service 식별자, Interface 번호 이렇게 여러가지로 해석이 됨.

개발자 입장에서 보자.

TCP/IP 를 user mode application이 접근할 수 있도록 인터페이스가 제공되는데, 본질적으론 file. 우리는 이걸 Socket이라고 부른다.

이 소켓을 생성할때, TCP 소켓인 경우, 소켓에 어태치되는 정보중 하나가 포트번호.

기본적으로 16bit. 2^16 = 0~65535 첫번째와 맨마지막은 안씀. 

엣지나 크롬으로 실행된다 치면, 소켓을 열게되는데, 소켓에 어태치 되는 포트번호가 만약 30000이면, 크롬에서는 30000이 아닌 다른 번호를 쓰게되어있다(소켓에 바인딩된다 말함). 이렇게 포트번호는 개발자 관점에서 봤을때 명백히 Process 식별자다 라는 것이다.

 

 

인터넷을 통해 유입되어 들어오면 nic을 거쳐 드라이버를 타고 프로세스로 전달이 된다. 그런데 4층에서 포트번호에 따라 엣지로 갈지 크롬으로 갈지가 결정된다.

 

스위치가 하는일은 스위칭(경로 선택 or 인터페이스 선택)

라우터 - L3스위칭을 함. A,B,C... 교차로는 라우터(스위치). 1,2,3중 어디로 갈지 선택하는게 스위칭

라우터끼리 정보를 주고받아서 최적의 경로를 결정함. 

이정표 = 라우팅 테이블 이걸 기준으로 의사결정을 함.

 

ㅇ 데이터 단위 정리

소켓 수준에선 Stream 데이터. 그 끝을 알수없는 일렬로 늘어진 데이터. 그걸 네트워크로 보낼땐 분해가 일어나는데 이걸 세그먼테이션이라고 함. 잘려진 쪼가리 하나를 Segment라고 함. 그걸 인터넷 환경에서 전송가능한 형태로 포장한게 패킷. 패킷의 최대크기는 1500바이트. 1500 보다 MSS는 더 작음. 이 패킷을 실어담을땐 Frame 데이터에 넣음.

 

ㅇ 인터페이스 선택의 핵심 원리

 크롬으로 프로그램이 실행되고있다고 가정하자. 유선으로 붙은 인터넷라인은 KT, 무선으로는 SKT를 쓴다 가정하자. 이 상황에서 크롬을 열면 소켓이열림.  TCP/IP 바인딩 -> NIC 움직이는 드라이버, 무선 움직이는 드라이버 #1 아이피가 1.1.1.1 #2 아이피가 2.2.2.2 라고할때, 네이버에 접속할때, #1로 갈까 아님 #2로 갈까?

인터페이스 선택 - cmd - route PRINT -> 경로 테이블이 나옴. 이 테이블에 근거해서 어디로 갈지 결정하게 되있음.

기준이 많은데, PC에선 메트릭(비용)값에 따라 결정됨.