CS 기본 지식

4. CS 기본 지식 - 네트워크

Beige00 2024. 4. 8. 20:46

* 웹 동작 방식

1. 사용자가 브라우저에 URL을 입력.

2. 브라우저는 도메인 네임 서버에 접근하여 DNS를 통해 해당 URL에 매핑된 서버의 진짜 ip 주소를 찾는다.

 

(이때 www.google.com 일 시,  자신이 속해있는 도메인 local서버로 접근해 www.google.com을 질의한다.

여기서 local 도메인 서버가 해당 URL에 해당하는 IP 주소가 없을 시, Root DNS 정보를 전달 받는다.

그 뒤 com 도메인을 관리하는 TLD(Top-Level Domain) 서버 정보를 전달 받는다. 

TLD 서버에 www.google.com을  질의하고, TLD는 google.com을 관리하는 DNS 서버에 IP 주소를 질의한다.

그러면 Local DNS는 www.google.com에 대한 IP 주소를 캐싱하고 IP 주소 정보를 전달한다.

간단히 정리하면 Local DNS가 자신이 가고자하는 URL을 모를 시, Root DNS로 가서 해당 정보를 아는 DNS 서버로 옮기고 거기서 정보를 가져오는 구조이다.)

 

3. HTTP 프로토콜을 사용하여 HTTP 요청 메시지를 전달한다.

해당 요청은 TCP/IP 연결을 통해(UDP 일 수도 있긴 하다.) ISP망을 지나 웹서버에 도착하고, 도착한 웹 서버는 HTTP 프로토콜을 활용해 똑같은 방법으로 대답한다.

이 과정에서 연결 설정이 완료되고 통신이 시작된다.

 

4. 해당 링크를 통해 도착한 데이터들은 웹페이지 데이터로 변환되고 웹 브라우저는 이를 사용자에게 노출시킨다.

 

* TCP vs HTTP

- 사실, TCP와 UDP는 햇갈릴 수 있어도 HTTP와 TCP는 햇갈리는 사람이 거의 없다. 아예 계층이 다르기 때문이다.

그래도 위의 웹 연결 과정 글에서 두 개가 동시 등장해서 정리를 좀 해보자면 차이점은 다음과 같다.

1. TCP는 연결형 프로토콜이다. HTTP는 비연결형 프로토콜이다.

2. HTTP는 단방향 통신만 가능하나 TCP는 양방향 통신이 가능하다.

3. TCP는 Transport Layer 프로토콜이나 HTTP는 Application Layer 프로토콜이다.

 

사실 TCP는 HTTP의 하위 Layer에 속하는 프로토콜이기 때문에 HTTP는 TCP를 이용하여 데이터를 송, 수신하는 프로토콜이고 따라서 HTTP까지 연결 지향일 필요가 없다.

그리고 TCP는 Piggybank와 같은 방법으로 양방향 통신을 제공해줘야하는 상황이 존재하나, HTTP는 클라이언트의 요청, 서버의 응답으로 구성되어 동작할 것을 기대하므로 양방향 통신이 필요없다.

(배울 때는 이렇게 배웠는데, 알아보니까 요즘에는 HTTP도 양방향 통신을 지원하게 해줄 수 있다고 한다.)

 

* TCP vs UDP

1. TCP는 연결 지향이다. UDP는 비연결 지향이다.

2. TCP는 전송 순서를 보장한다. UDP는 아니다.

3. TCP는 느리고 UDP는 빠르다.

4. TCP는 혼잡 제어를 하고 수신 확인을 하므로 신뢰성이 높다. UDP는 아니다.

더보기

여기서 연결 지향이란, 통신을 시작하기 전에 미리 Link를 구성하여 서로 패킷을 교환하는 방식이다.

따라서 Data의 순차 도착을 보장한다.(순서 보장) 또한 해당 이유 때문에 TCP는 1대 다 통신이 안된다.

TCP는 애플리케이션마다 Port 번호를 추가로 부여하여 이 고유 회선(Link)를 구별한다.

또한 TCP는 traffic 관리, Congestion 관리를 하므로 신뢰도가 높으나, 느리다.

 

UDP는 그냥 부가 기능이 없다. 최소한의 정보만 가지고 있다. (에러체크용 Checksum 비트, 목적지 IP,  송신지 IP, header 길이만 가진다.) 따라서 수신 확인을 하지 않으며, 신뢰성을 보장하지 않는다.

그리고 비 연결형 서비스기 때문에 그냥 막 보낸다. 보낼 때 네트워크의 traffic 상황에 따라 각 fragment 들의 이동 경로가 달라질 수 있으며, 따라서 도착하는 데이터 패킷들의 순서도 보장되지 않는다.

그러나 1대 다 통신이 가능하며 속도가 빠르다.

* GET vs POST

HTTP 프로토콜에서 GET은 데이터를 조회하기 위해 사용되는 방식으로 데이터를 "헤더"에 추가하여 전송하는 방식이다. URL에 데이터가 그대로 노출되므로 보안이 필요할 시 이용하면 안된다. 캐싱이 가능하다.

(ex : http:://localhost:8080/boardList?name=BEIGE&contents=CSknowledge)

 

POST는 데이터를 추가 또는 수정하기 위해 사용되는 방식으로 데이터를 바디에 추가하여 전송하는 방식이다.

URL에 데이터가 노출되지 않아 GET보다는 안전하나 캐싱이 불가능하다.

 

* 공인 IP vs 사설 IP

흔히 우리가 VPN이라고 하면 사설 IP를 통해 IP tunneling 효과를 제공해주는 것이다.

현재 우리가 사용하고 있는 Ipv4는 32비트. 즉 2^32, 약 43억개 정도의 주소를 제공할 수 있다.

그러나 IP 주소는 아직도 고갈되지 않고 있다. 이는 private IP 때문이다.

public IP 하나를 받은 집단이 있다고 하자. 해당 집단이 이용하는 라우터가 있을 것이다.

근데 이 라우터를 거대한 그룹이 이용한다고 치자. 예를 들면 300명이 여러 개의 AP를 두고 한 IP를 사용하는 Wifi network topology를 떠올려보자.

그러면 300명이 마구잡이로 한 IP를 할당받는 것보다, 자기들만의 규칙으로 자기들만의 IP를 만들고 자신들끼리 통신할 때는 해당 규칙으로 내부 망에서 통신할 수 있다.

Backbone network와 외부 통신이 이뤄져야할 때는 public IP를 지닌 Wifi Router에 접근하면 해당 Router가 자신이 받은 데이터의 source IP를 자신의 public IP로 변환시키고, 테이블에 (source private IP, destination IP, port num)을 기록해둔다. (외부에서 자신에게 응답을 하면 해당 private IP를 지닌 노드에게 이를 전달해준다.)

이런 규칙으로 private IP를 만들면, 한 public IP로 무한대에 가까운 내부 네트워크 망을 구성할 수 있는 것이다.

(Network Address Translation)

 

* OSI 7 계층, TCP/IP protocol 계층

1계층(Physical Layer) : 데이터를 전기 신호(0,1)로 바꾸어 전송하는 계층

2계층(DataLink Layer) : 데이터의 물리적인 전송과 에러 검출, 흐름 제어를 담당하는 계층.

3계층(Network Layer) : 수신지에서 목적지까지 데이터를 가는것을 담당하는 계층.

4계층(Transport Layer) : 데이터 전송의 연결을 관리하는 계층.

5계층(Session Layer) : 컴퓨터끼리 통신을 하기 위해 세션을 만드는 계층. 어플리케이션 간의 통신 세션 유지와 관리.

6계층(Presentation Layer) : 데이터의 Format을 정의하는 계층(서로 구조가 다른 어플리케이션이 호환 가능한 형식으로 변환)

7계층(Application Layer) : 사용자가 직접 상호작용하여 입력이 주어지는 계층.

더보기

DataLink Layer Vs Transport Layer

 

DataLink Layer

- 흐름 제어 : 네트워크의 두 인접 노드 사이에서 작동한다. 직접 연결된 장치들 사이에서의 데이터 전송을 조절한다.

(Stop and Wait, Sliding Window)

- 오류 제어 : 주로 물리적 전송 중에 발생 할 수 있는 오류를 감지하는데 초점을 맞춘다.(noise, 신호 감쇠, 충돌 등)

(패리티 비트, 사이클릭 중복 검사)

- 혼잡 제어 : 네트워크 세그먼트나 라우터에서의 로컬 혼잡을 관리함. (프레임 손실률 등으로 판단.)

(CSMA/CD)

 

Transport Layer

- 흐름 제어 : 직접 연결된 두 노드가 아닌 가상의 연결이 구성된 end-to-end 에서 작동하는 흐름 제어이다.

즉, 전송 소스와 최종 목적지 사이의 전체 네트워크 경로를 고려해 데이터 전송을 관리하는 것이다.

(Stop & wait, Sliding window)

- 오류 제어 : 데이터가 네트워크를 통과하는 동안 발생할 수 있는 오류를 감지하는데 목적이 있다.(패킷 누락, 중복 패킷 등)

(Seq num, Go Back N, Selective Repeat)

- 혼잡 제어 : 종단 간의 데이터 전송 과정에서 발생할 수 있는 네트워크 전체의 혼잡 상황을 다룬다. 

(Slow start, AIMD, Fast Retransmit(3 ack dup), Fast Recovery)

 

* HTTP?

서버/클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜이다.

HTTP는 애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동한다. HTTP는 상태를 가지고 있지 않으나, Cookie를 이용하여 임시 상태를 저장할 수 있다.

 

* HTTP vs HTTPS

HTTP는 평문 데이터를 전송하는 프로토콜이다. 따라서 보안성이 확보되지 않는다. 여기서 보안의 개념을 추가한 것이 HTTPS이다. 암호화 방식에는 대칭키, 비대칭키가 사용되며 비대칭키는 비용이 매우 크다.

따라서 연결 초기 서버와 클라이언트가 비대칭키 암호화를 통해 1회 대칭키를 주고 받고, 그 후 대칭키로 통신한다.

 

1. 클라이언트의 HTTP 연결 요청

2. 서버는 public key를 넘겨준다..

3. 클라이언트는 인증서의 유효성을 검사하고 세션키를 발급한다.

4. 클라이언트는 서버의 public key로 세션키를 암호화하여 서버로 전송한다.

5. 서버는 암호화된 세션키를 private key로 복호화하여 세션키를 얻는다.

(A의 public key로 암호화 된 것은 A의 private key로만 풀 수 있다.)

6. 클라이언트와 서버는 동일한 세션키를 공유하므로 세션키로 통신한다.

 

* Segmentation vs Fragmentation

Fragmentation은 network layer에서 전송하고자 하는 네트워크와 MTU가 맞지 않을 때, MTU를 맞추기 위해 분할하는 방식이다.

Segmentation은 transport layer에서 전송하고자 하는 데이터가 너무 클 때 효율적인 전송을 위해 데이터를 나누어 보내는 것이다.

 

* 3 Way-Handshake

3 Way-Handshake란 TCP에서 통신 요청-응답-확인 과정을 거쳐 연결을 구성하는 방법이다.

2 Way로 구성하게 되면 통신 요청 - 응답으로 연결이 구성되는데, 이 때 다음과 같은 문제가 발생한다.

만약 요청을 전송하고 서버의 응답이 느려 연결 요청을 재전송 했을 때, 연결이 2번 구성되어 하나의 연결이 끊기지 않는다.

 

'CS 기본 지식' 카테고리의 다른 글

3. CS 기본 지식 - 알고리즘  (0) 2024.04.04
2. CS 기본 지식 - 프로그래밍  (0) 2024.04.03
1. CS 기본 지식 - 자료구조  (0) 2024.04.02