네트워크 기본 (B2BR)

nhwang·2022년 4월 12일
0
post-thumbnail

A. 인터넷 환경의 특징

  1. 지연성
  2. 연결의 불안정성
  3. 순서 비보장

위의 그림과 같이 컴퓨터간 데이터를 전송하는 방식이 인터넷환경이고
이 때문에 위의 3가지 특징이 나온다.
(그림과 같이 노드가 많이 펼쳐져있는 형식은 연결이 끊어진 경우를 대비해
군사목적으로 만들어짐 (미육군))

컴퓨터 내부끼리만 통신한다면 데이터들의 묶음을 보낼때는 큐의 형태로서 순서가 보장된다.

반면 인터넷 환경에선 중간노드랑 하나만 끊어져도
정보를 보낼 수 없게 된다.

이를 해결하고자, 보내는 데이터를 분절하여 여러 노드에 흩뿌리는데 이 분절된것을 패킷이라 한다.
(이때 제일 빨리 받는 컴퓨터가 있으면 캐시로 그 경로를 저장)
데이터 전체를 보낸게 아니라 구성요소를 보내기 때문에 도착순서가 임의적이며 이 때문에 원래 보내고자했던 데이터들의 순서를 보장하지 못한다.

물리적 한계(거리, 유선 등)로 인해 인터넷 환경에서는 지연성과 연결의 불안정성이 발생한다.

B. IP - TCP / UDP

IP : 컴퓨터의 주소를 주고 받는 방식. (IP4, IP6 일반적으로 IP4로도 컴퓨터의 숫자가 감당가능해서 많이 쓰인다. - 게이트웨이/홀펀칭 방식)
TCP : 위의 3가지 이슈 중 연결의 불안정성과 순서 비보장의 특징을 해결하는 방식
UDP : 인터넷 환경의 불안정함을 그대로 인정하고 쓰는 대신에 빠른 성능을 지녔다. (네트워크 연결 실패확률이 평균 7%)
ㄴ>UDP는 주로 게임 개발에 많이 쓰이는데, 그대로 쓰기보다 소프트웨어단에서 개발자가 조금 알고리즘을 수정해 쓴다.
(*원래는 TCP/UDP는 하드웨어 단에서 처리하는데 위의 Reliable UDP는 소프트웨어에서 수정하는 셈.)

TCP상세
1. 순서 비보장 때문에 패킷의 끝에 순서의 번호를 정해준다.
2. 연결의 불안정 때문에 3 Hand Shake 방식을 사용한다.

  1. 1~10까지 패킷이 간다 치면 8번 패킷이 안오면 다시 클라이언트 측에서 요청한다.
  2. 몇번의 요청이 있음에도 재송이 없다면 연결이 끊어진 것으로 "간주"한다.

요약
TCP는 안정성이 보장되지만 패킷을 1개만 보낸다 쳐도 최소 3배는 UDP보다 느리다.
UDP는 안정성이나 순서를 보장하지 않지만 빠르다. (소프트웨어 단에서 개조 가능)

C. SSH

*각 프로토콜은 소포 포장에서 국가-지역-지번 처럼 하위 개념으로 묶어서 전송된다.

(SSH는 주로 TCP 환경에서 돌아간다.)
컴퓨터 간의 통신에 쓰인다. HTTP의 경우에는 웹을 매개로 해서 통신하지만 ssh는 직접 통신에 해당.
주로 키를 주고 받고 나서 인증을 하고 TCP와 같은 방식이니 3 Hand Shake를 한다.
Key값과 "Diffie–Hellman key exchange"라는 어려운 알고리즘을 통해 인증.

일단 커맨드 진입하게되면 본인의 컴퓨터처럼 쓸수 있다.(권한이 있는 경우)
ㄴ> 이 때문에 Born2beRoot 과제가 나온게 아닐까 싶다.

D. 방화벽
접속을 요청하는 곳에 대한 스크리닝, 필터닝하는 소프트웨어.
대표적인 방어 방법으로 아래의 패킷필터링이 있다. (b2br과제에서 요구하는 사항)
통신 중 패킷을 볼 때 IP:Port의 형식으로 오게되는데,
포트의 유효성을 검사하게 된다.

*여기서 Port란 요청받은 서버(컴퓨터)의 말그대로 항구다.
보통 서버에 포트는 여러개가 있다.

과제에선 ufw를 써서 사용 ex : ufw allow 42

E. Port Fowarding

보통의 인터넷 환경에서는 공유기와 같이 직접적으로 인터넷환경에 노출되는 IP가 있고
우리가 실제로 사용하는 컴퓨터는 인터넷 환경에서 보이지 않는다.
아래 그림에서, 인터넷 환경은 공유기처럼 빨간 IP만이 노출되는데, 이를 외부 IP라 한다.
즉 인터넷 환경에서는 집주소(내부IP)를 아는게 아니라 소포를 보낼 지역(외부IP) 정도만 노출되도록 되어있다.

a라는 컴퓨터가 b라는 컴퓨터와 통신하려면??

a컴퓨터는 B(b컴퓨터의 host)의 주소밖에 알 수가 없다.
B속에는 다른 컴퓨터들도 있기 때문에 이것만 던져줘서는 어느 컴퓨터와 연결하라고 하는지 알 수가 없기에
a는 접속하고자하는 컴퓨터의 주소 대신 포트라는 것을 줘서 B가 포트를 기준으로 구분할 수 있도록 IP통신에서 던져준다.

요청을 받을 외부IP B를 내세우고, 요청온 port에 대해서 프로세스나 컴퓨터를 연결해주는 방식이 포트포워딩이다.
이 포트포워딩이 없으면 ssh를 하건 뭘 하건 통신되지 않는다. (외부IP가 소유한 내부IP가 하나만 있더라도...)

Debian에서 여러 실험을 해보았으나 되지않았음.
또한 ssh의 디폴트인 22포트를 방화벽열고 ssh설정을 해두어도 막혀있었는데, 이것은 아마 과제를 위한 4242 포트만 포트포워딩이 가능하도록
클러스터 차원에서 막았을 것으로 보고있다.


데비안에서의 설정 방법

외부 IP 만들기

머신의 네트워크 설정 진입 후 포트포워딩 클릭

외부를 HOST로, 내부를 게스트로 한 뒤 연결할 포트포워딩 룰 추가 및 어댑터2에서 아까 만들었던 외부 vboxnet0을 host-only 설정.

profile
42Seoul

0개의 댓글