본문 바로가기
개인적 정리

네트워크 기본 정리

by 설이주인 2023. 10. 19.

네트워크 : 컴퓨터간의 연결

프로토콜 : 전송하는 방식의 약속

허브 : 컴퓨터와 컴퓨터의 연결 한계를 해결해주는 중앙 연결 장치

스위치 : 특정 컴퓨터로 보내줄 전환기, 어떤 데이터를 어디서 어디로 보낼지 전환 해주는 스위치 (2계층 장비)

LAN : Local Area Network

라우터 : 한 개 이상의 근거리 통신망(LAN) 간에 데이터를 전달하는 게이트웨이


운영체제는 네트워크 통신을 원하는 응용 프로그램에게 포트 번호(port num)을 할당한다.

 

응용계층 

데이터를 생성하는 단계

 

전송계층

데이터가 컴퓨터에 전달되면 운영체제가 데이터의 받는 포트를 확인하고 application에 연결한다.

응용프로그램은 데이터를 스스로 가져가지 못하며,

컴퓨터는 운영체제를 통해 주소를 확인해야 한다.

즉, 운영 프로그램은 운영체제를 통해 포트번호를 알게 된다.

 

인터넷 계층

인터넷에서 목적지 주소(IP)를 찾기 위한 단계

 

네트워크 액세스 계층

컴퓨터에도 고유 주소가 존재하며, 이를 위한 장치로 NIC(Network Interface Controller)가 존재한다.

NIC는 컴퓨터가 네트워크에 접속하기 위해 필요한 장치이며 "네트워크와 컴퓨터를 이어주는 장치이다."

우리가 주로 사용하는 것은 이더넷 프로토콜이다.

 

이더넷은 주소 표시를 위해 MAC(Media Access Controller)을 사용하며 Media유/무선을 의미한다.

이는 유선NIC, 무선의 와이파피 모듈과 같은 장치를 구분하는 주소이다.

 

위의 과정은 네트워크로 가는 마지막 단계로, 네트워크에 접속한다는 의미에서 "네트워크 액세스 계층" 으로 정의한다.

TCP/IP : [응용(데이터 생성) > 전송(프로토콜) > 인터넷(IP) > 네트워크 액세스(네트워크 액세스)]

 

데이터 생성은 윈도우즈/리눅스 운영체제에서 생성한다.

응용 > 전송 > 인터넷 계층순으로 캡슐화를 진행하며 이를 NIC가 > 네트워크 액세스 진행시 한번 더 캡슐화를 진행한다. 이를 진행한 데이터를 프레임이라고 부른다. > 프레임을 유/무선 매체를 통해 bit단위로 전송한다.


TCP/IP 주요 프로토콜

데이터 > 응용 계층의 프로토콜을 지칭한다.

 

계층 : 데이터명

응용 : 데이터

전송 : 세그먼트

인터넷 : 패킷

네트워크 액세스 : 프레임

 

네트워크 액세스 계층

네트워크로 나가기 전, 최종 캡슐화가 완료인 상태인 "프레임"을 만드는 계층이다.

프레임으로 캡슐화하는 만큼, 프레임을 역캡슐화를 진행하는 계층이다. 실질적으로 우리가 필요한 데이터인 응용계층 데이터를 제외하면 나머지 계층은 특정한 용도로 사용된다. 그럼 우리가 프레임을 통해 할 수 있는 것은 무엇인가?

"같은 네트워크(LAN)에서 네트워크 장치를 식별하는 역할을 한다."

 

이더넷 프로토콜

서로 다른 장치를 식별할 수 있는 특정한 값을 미디어 액세스 컨트롤(MAC)라고 부른다. 유/무선으로 연결된 장치들에 접속하기 위해 필요한 주소라는 의미다.

1. 목적지 MAC주소 (MAC destination) : 6 bytes

2. 출발지 MAC주소 (Mac source) : 6 bytes

3. 상위 계층 프로토콜 유형 (EtherType) : 2 bytes

4. 페이로드 (Payload) : 46 - 1500 bytes

 

> 목적지, 출발지 MAC 주소 : LAN 환경의 어떤 컴퓨터에서 출발하여 어떤 컴퓨터로 프레임을 전달할지 나타내는 주소

> 상위계층 프로토콜 유헝 : 해당 인터넷 계층의 프로토콜이 무엇인지 알고자 필요한 정보값, 프로토콜마다 진행하는 job이 다르기에

> 페이로드 : 상위 계층의 데이터, 응용 계층을 제외하고 각 계층의 캡슐화된 데이터들은 상위 계층의 페이로드를 가지고 있다.

> MAC 주소 : 12개의 16진수 ('0' ~ 'F', 4bit), 즉 48bit = 6 bytea로 이루어져 있다.

> 브로드캐스트 : 모든 주소의 마지막 값은 브로드캐스트를 의미한다. 브로드캐스트 - 모든 컴퓨터에 전달, 유니캐스트 - 특정 컴퓨터에게전달, 멀티캐스트 - 특정 그룹에만 전달

> 스위치 : 스위치는 포트와 MAC주소가 매핑 되어있는 MAC 주소 테이블을 메모리에 가지고 있다. 이 테이블을 검색하여 목적지 MAC를 확인, 프레임을 포트로 전송 할 수 있다. 이는 단순히 프레임 전달에 관여하는 장치이기에 별도릐 MAC주소를 가지는 NIC는 존재하지 않는다.

인터넷 계층

Internet Protocol Version(IPv4)

상위 프로토콜 : 1byte

출발지 IP주소 : 4byte

목적지 IP주소 : 4byte

 

IPv4 & IPv6

한가지 주의할 점은 4와 6은 호환성이 없기에 6에 연결하기 위해서는 6과 호화되는 앱니다 서비스를 사용해야 한다는 점이다.

4는 일반적으로 사용하는데 그럼 6은 뭘까?

길이도 길이지만

1. 프로토콜 수준에서 암호화 통신이 규정 되어있으며

2. MAC 주소를 통해서 IPv6주소를 자동으로 생성할 수 있으며 2계층을 포함한 설정 자동화가 가능하다

3. 헤더가 IPv4보다 단순하여 처리가 용이하다.

4. 계층 구조가 엄격해서 라우팅 효율이 좋다.

 

상위 프로토콜 : 이더넷의 프로토콜 구조의 상위 프로토콜과 동일한 의미를 가지는 값이다. 전송계층의 TCP 값은 0x06이다.

https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers

 

List of IP protocol numbers - Wikipedia

From Wikipedia, the free encyclopedia -->

en.wikipedia.org

> 출발지, 목적지 IP주소 : 모든 네트워크는 인터넷 환경을 식별할 수 있는 이름, IP주소를 가진다.

     > MAC 주소 : NIC라는 하드웨어에 입력 되어있는 주소

     > 물리적인 주소면 운영체제라는 소프트웨어에 의해 관리되는 IP주소를 논리적인 주소라고 한다.

     > IP 주소 : 0-255까지의 숫자를 표현 할 수 있는 8bits( = 1byte)를 온점(.)으로 구분한 4개, 총 4bytes로 구성 되어있다. (주의 : MAC = 같은 네트워크 / IP = 다른 네트워크)

 

 

> 같은 네트워크에서 MAC주소를 통해서 스위치가 맞는 목적지로 전달하는 상황

 

자 그럼 우리는 MAC주소로 다른 네트워크를 어떻게 찾아가는가?

위의 이미지를 통해서 알 수 있듯이 서로 다른 LAN에 위치하는 BBB와 AAA는 CCC에게 도달 할 수 없다.

우리는 이현상을 IP, 라우터를 통해서 해결한다.

 

- 라우터 : 다른 네트워크의 이동을 위해서 사용한다. MAC이 주소 테이블을 갖고 있듯이 라우터는 IP주소 테이블을 가지고 있다.해당 테이블을 사용해서 경로를 찾는 행위를 라우팅 테이블이라고 한다.

모든 네트워크에 연결된 장치는 NIC, 컴퓨터와 네트워크를 연결해주는 인터페이스와 같은 장치가 필요하다. 보통 컴퓨터에는 1개의 NIC가 존재하지만, 라우터는 연결된 네트워크 만큼의 NIC를 가질 수 있다. 라우터는 "네트워크를 구분하는 관문과도 같다."의 의미로 게이트웨이로 부르기도 한다. NIC가 존재한다는 것은 MAC 주소가 존재하며 라우터 또한 같은 네트워크 환경에 속해 있다는 뜻이기도 하다.

 

그럼 스위치, 라우터 둘 다 사용한다면?

최종 목적지 20.0.0.1 현재 IP 10.0.0.1인 상황, 아예 다른 네트워크로 이동하는 부분이기에 라우터로 이동해야 한다.

 

우선 00:00:00:AA:AA:AA 10.0.0.1에서 MAC주소 테이블을 통해 DD:DD:DD로 이동한다. 프레임을 역캡슐화하여 목적지가 라우터 본인이라는것을 확인한다.

라우터가 패킷을 역캡슐화하여 라우팅 테이블에서 목적지 IP 주소 확인 후 내보낼 NIC를 결정하게 된다. 하지만 라우터는 어떻게 목적지 MAC 주소 00:00:00:CC:CC:CC를 알아낼 수 있을까?

이는 ARP(Address Resolution Protocol) - 주소 결정 프로토콜을 통해서 가능하다.

ARP는 IP를 통해서 MAC 주소를 찾는 프로토콜이다. 즉, 장치의 MAC주소를 조사 할 수 있다.(2.5계층)

Target IP 주소로 Target MAC 주소를 찾기 위해서 비어있는 Target Mac주소를 브로드캐스팅으로 채운다. 이후 스위치에 연결된 모든 컴퓨터로 ARP프레임을 보내고, Target IP주소에 맞는 컴퓨터가 자신의 MAC 주소를 채워서 역으로 다시 보낸다.

이를 통해서 라우터는 같은 네트워크에서 IP주소로 MAC주소를 찾고 최종 목적지에 도달 할 수 있는 것이다.

DHCP : IP주소 자동할당 (설정 또한 가능하다, ipconfig / all을 통해서 설정 정보 확인 가능)

 


전송 계층

목적지에 도착한 프레임은 네트워크 액세스 계층 -> 인터넷 계층, 순서에 따라 역캡슐화가 진행되며 전송 계층에 도착한다.

 

제일 유명한 FTP : 22

제일 유명한 HTTP : 80

https://ko.wikipedia.org/wiki/TCP/UDP%EC%9D%98_%ED%8F%AC%ED%8A%B8_%EB%AA%A9%EB%A1%9D

 

TCP/UDP의 포트 목록 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 잘 알려진 포트(well-known port)는 특정한 쓰임새를 위해서 IANA에서 할당한 TCP 및 UDP 포트 번호의 일부이다. 일반적으로 포트 번호는 다음과 같이 세 가지로 나눌

ko.wikipedia.org


웹 통신

도메인 > 라우터 > DNS 서버

서브넷 마스크 IP주소를 여러개의 네트워크로 구분하여 사용할 수 있도록 해주는 기술

빨간색 박스 : 네트워크 주소

10.0.01(호스트 주소) / 24(bits)

 

위의 이미지를 보며 컴퓨터 어디에도 목표로 하고 있는 13.209.131.189의 IP를 가지고 있지 않기 때문에 목적지 MAC주소 자체를 구할 수 없는 상황을 발생한다.

 

다른 네트워크를 찾기 위해서 라우터를 반드시 거쳐야하기에, 다른 네트워크 주소로 프레임을 전달해야 하는 경우, 기본 게이트웨이로 설정 후 내보낸다.

ARP의 목적지 IP를 같은 네트워크의 기본 게이트웨이로 설정했기에, MAC주소의 DD:....를 알아낼 수 있다.

 

위의 행위로 MAC 주소로 HTTP를 전달하는 것에 사용 할 수 있다.

 


네트워크에서 보는 아이는 세가지 정도이다.

  • Inline : Packet + Drop/ByPass + Filtering
  • Out of Path : Packet + Read Only, Sensor
  • Proxy : Socket Stream + Filtering [ Stream - File ], 대리자로 application 전체를 모니터링 하는 장점이 있다.

proxy는 주로 usermode에서 사용되며 주로 application proxy라고 한다.

OS 5 ~ 7 계층 : usermode > application > proxy > socket > stream

 

Inline : 공유기, 라우터, Firewall IPS

Out of Path : 수집 장치 > L2 : Port Monitoring

 

Proxy (우회) : 프록시 설정 후 요청을 진행하면 proxy가 자체적으로 client socket을 열고 해당 socket으로 접속을 진행한다. Proxy는 보호와 감시를 진행하는데 내부는 주로 보호와 감시용으로 진행하고 외부는 우회로 진행 된다.

 

자세히 볼 곳은 Proxy(Server)이다. Proxy는 Reverse Proxy, socket stream으로 이뤄져있다.

 

client가 www.zxc.com에 접속한다고 생각해보자.

 

client > www.zxc.com > DNS > response를 줄때 > web server의 IP 10.10.10.20이 아닌  SSL의 IP 5.5.5.5를 알려준다.

 

즉 client는 IP 5.5.5.5에 접속을 하게 된다.

client는 web server에 다이렉트로 가는것이 아닌 5.5.5.5에 있지만 그 안에서 다시 IP 10.10.10.20으로 보여주기에 가능하다.

이렇게 벽벽이 있는 구조가 Reverse Proxy의 형식이다.

 

outbound : 나가는 통신

inbound : 들어오는 통신 

 

네트워크에서 중요한게 NAT Table이라는 아이인데 이 아이에 네트워크 정보가 추가되는 트리거는 outbound가 발생하는 순간이다.

outbound로 나갈때 NAT Table에 저장 이후 inbound가 들어올때 NAT 검색해서 찾아간다.

 

Full cone NAT : host IP + Port -> External Port : 즉, port 번호, public ip만 안다면 누구라도 내부 유입이 가능하다 (장점이자 단점)

Restricted Cone NAT : IP Mapping Table에 남아있는 IP만 접근 가능하다.

 

포트 포워딩

NAT Table은 outbound에 의해서 해당 data가 자동으로 추가된다. 이를 직접 수정하는 행위를 포트 포워딩이라고 함

 

Local IP Local Port External Port Remote Port Protocol
192.168.0.12 80 80 ANY TCP

> external이 port : 80 출발이면 정ㅂ가 무엇이든 192.168.0.12로 보내진다. 해당 행위를 해주는 Upnp가 진행해줌

 

 

L4 부하분산 : 로드 밸런싱 (무정지 system)

 WEB server과 WAS사이에 Manager가 존재하는데 이는 was의 상태를 확인하고 L4가 어느 was에게 client를 보낼지의 정보를 제공한다. Manager 또한 무적이 아니기에 web, was와 같이 이중화가 가능하다.

 

VPN (virtual private network) : 물리적 통제가 가능한 network. 보안, 데이터 인증, 암호화 기술, 터널링 기술

 

IPSec (ip security) : IP4, IP6, GtoG (gateway to gateway), GtoE(gateway to endpoint[p.c]), tunneling(암호화)

 

VPN GtoG

위의 행위에서 중요한 부분은

SG에 접근한 request ip header를 암호화 후 앞에 new ip header(outer)을 합치고 암호화 한 아이(inner)와 합쳐서  internet으로 보내고 다음 SG에 도달한다는 부분이다. 최종 SG는 outer을 제거 > inner을 복호화 해서 private ip 안으로 들어간다.

 

GtoE는 재택 근무를 진행하기 위해서 진행하는 부분이다.

 

 


참고 URL : 요즘IT 1-5, 인프런

https://yozm.wishket.com/magazine/detail/1875/

 

주니어 개발자를 위한 엄청 쉬운 네트워크 이야기 | 요즘IT

저는 5년차 개발자입니다. 회사에서 신입 개발자들과 함께 일하다 보면 네트워크에 관해 모르는 분들이 많으시더군요. 저도 사실 처음에는 그랬습니다. 그런데 일을 하다 보니 주니어 개발자

yozm.wishket.com

https://www.inflearn.com/course/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%ED%95%B5%EC%8B%AC%EC%9D%B4%EB%A1%A0-%EA%B8%B0%EC%B4%88/dashboard

 

외워서 끝내는 네트워크 핵심이론 - 기초 - 인프런 | 강의

TCP/IP에서 HTTP까지! 네트워크에 대한 기본 이론이 부족한 분들이 '외워서'라도 전공 이론을 이해하고자 희망하는 분들을 위해 준비한 강의입니다. 할 수 있습니다!, 네트워크, 외워서 쉽고 빠르게

www.inflearn.com

https://www.inflearn.com/course/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%ED%95%B5%EC%8B%AC%EC%9D%B4%EB%A1%A0-%EC%9D%91%EC%9A%A9/dashboard

 

외워서 끝내는 네트워크 핵심이론 - 응용 - 인프런 | 강의

외워서 끝내는 네트워크 핵심이론 기초과정을 학습한 분들이 한 단계 깊은 이론들을 이해할 수 있도록 안내하는 강의입니다. 인터넷 공유기의 작동 원리인 NAT 기술을 비롯해 부하분산 시스템

www.inflearn.com

 

'개인적 정리' 카테고리의 다른 글

CURL & URLConnection  (0) 2024.06.10
개발 추가 일지  (0) 2023.10.22
[Linux] 명령어 정리  (0) 2023.08.08
트랜잭션 Isolation levels  (0) 2022.10.14
MEMO 22.10.10  (0) 2022.10.10