외부활동/CS 면접 끝장내기 - 컴퓨터 네트워크 2기

컴퓨터 네트워크 1주차 스터디 정리

소프 2023. 7. 23.

 

컴퓨터 네트워크와 네트워크 레이어

라우터와 스위치란?

스위치란 같은 네트워크 안에서 통신장비들을 서로 연결해주어 자원을 쉽게 공유할 수 있도록 해주는 장치이다.

L2(데이터 링크 계층)에 속하며, MAC 주소를 기반으로 통신한다.

라우터란 다른 네트워크 사이에서 목적지로 가는 적합한 경로를 찾아주는 라우팅 기능을 제공하는 장치이다.

L3(네트워크 계층)에 속하며, IP 주소를 기반으로 통신한다.

 

네트워크

네트워크(Network)란 Net과 Work의 합성어이다. 의미를 해석하자면 '그물처럼 서로 엮여서 일하는 것'으로 볼 수 있다.

컴퓨터, 휴대폰 등 통신장비를 접목시키면, 각종 통신 장비들이 서로 연결되어 데이터를 교환하거나 리소스를 공유 하는 통신망이다.

 

네트워크 통신 규약이 표준화되지 않았던 시절에는 각 벤더사마다 고유한 방법으로 개발을 하였기 때문에 서로 호환되지 않아 통신이 불가능한 경우가 많았다. 

ISO(국제표준기구)에선 네트워크 통신을 하기 위해서 통신 장비 사이에 정보를 주고 받는 규칙인 프로토콜이란 개념을 계층별로 통합한 모델인 OSI 7계층을 발표하여 네트워크 통신 표준화를 이루어냈다. (OSI 7계층은 표준화된 이론이며, 현재는 TCP / IP 5계층 모델을 주로 사용한다.)

계층을 나눈 이유는 통신이 일어나는 과정을 단계별로 쉽게 파악하여 문제해결을 원활히 하기 위해서이다.

PC방에서 오버워치를 하는데 연결이 끊겼다. 어디에 문제가 있는지 확인해 보자. 모든 PC에 문제가 있다면, 라우터의 문제(3계층 네트워크 계층)이거나 광랜을 제공하는 회사의 회선 문제(1계층 물리 계층)일 가능성이 높다. 한 PC만 문제가 있다면, 오버워치 소프트웨어에 문제(7계층 애플리케이션 계층)일 수 있다. 오버워치 소프트웨어에 문제가 없고, 스위치에 문제(2계층 데이터 링크 계층)일 수 있다. 이렇듯 다른 계층에 있는 장비나 소프트웨어를 건드리지 않고 문제를 해결할 수 있다.

 

그럼 데이터는 어떻게 전달하는 것일까?

현대는 주로 패킷 교환 방식으로 데이터를 송수신 한다.

간략한 순서는 다음과 같다.

 

1. 패킷화

데이터가 네트워크를 통해 전송될 때 패킷이라는 단위로 만들어 진다.

패킷은 실제 데이터와 함께 출발지 IP, 목적지 IP, 포트 등 전송에 필요한 메타데이터를 포함하고 있다.

 

2. 라우팅

각 패킷은 네트워크를 통해 개별적으로 전송된다.

라우터는 패킷의 대상 정보를 검사하고 최상의 경로를 따라 패킷을 전달한다.

패킷이 대상에 도달하지 못한 경우 전체 데이터아 가이날 해당 패킷만 재전송한다.

 

3, 재조립

패킷이 목적지에 도달하면 원래 데이터로 재조립한다.

각 패킷의 메타데이터를 사용하면 패킷이 순서 없이 도착하더라도 수신 시스템에서 원본 데이터를 재구성 할 수 있다.

 

이러한 단계는 아래서 설명할 다양한 프로토콜에 의해 처리된다.

 

프로토콜 스택

네트워크는 다양한 기능들이 있다.

- 목적지로 데이터 전송

- 노드 사이의 데이터 전송

...

 

위와 같은 기능을 하나의 프로토콜로 구현할 수 있을까? 불가능 하다. 만~약에 가능하더라도 유지보수가 힘들도 새로운 기능을 추가하는 것도 힘들다. 그래서 모듈화를 통해 기능별로 분리시켜야 했고 이를 프로토콜 스택이라 부른다.

즉, 다양한 프로토콜이 계층화된 구조로 모여 있는 프로토콜의 질합을 프로토콜 스택이라 한다.

 

💡 프로토콜 TCP / IP 5계층이 곧 프로토콜 스택을 의미하는 것일까?
=> 생각해보니 OSI 7 계층, TCP / IP 5계층을 묶어서 의미하는 것으로 보인다.

2023.07.27 22:24분에 방금 안 사실
TCP/IP 5계층은 현대에 와서 Updated된 모델이였다!! Link 계층이 Physical, Data Link 계층으로 세분화 되었다고 한다

 

OSI 7계층

 

프로토콜 스택은 5계층으로 이루어져 있다. 이중 5계층인 Application Layer계층이 3개로 나뉘어진 것이 OSI 7계층이다.

OSI 7계층을 기준으로 설명하면 아래와 같다.

 

특징

- 각 레이어에 맞게 프로토콜이 세분화돼서 구현되었다.

- 각 레이어의 프로토콜은 하위 레이어의 프로토콜이 제공하는 기능을 사용하여 동작한다.

- 데이터를 송수신하는 일련의 모든 과정을 encapsulation & decapsulation 이라고 합니다.

 

응용 계층 (Application Layer)

애플리케이션 목적에 맞는 통신 방법을 제공한다.

사용자가 네트워크 자원에 접근하는 방법을 제공한다.

사용자가 실행하는 응용 프로그램들이 속하는 계층이다.

데이터를 어떻게 보낼것인가 는 하위 레이어에서 구현하는 기능이다.

프로토콜 종류: HTTP, SMTP, FTP, Telnet, DNS

 

표현 계층 (Presentation Layer)

애플리케이션 간의 통신에서 메시지 포맷 관리 역할을 한다.

전달받은 데이터를 읽을 수 있는 형식으로 변환하는 작업을 수행한다.

인코딩 <-> 디코딩

암호화 <->  복호화

압축 <-> 압축 풀기

프로토콜 종류: ASCII, MPEG, JPEG, MIDI, EBCDIC 등이 있고 

 

 

세션 계층 (Session Layer)

애플리케이션 간의 통신에서 세션을 관리한다.

운영체제가 통신을 하기 위한 세션을 확립, 유지, 중단하는 작업을 수행한다.

특정 지점에서 송수신 오류가 발생하면 이전에 동기점으로 설정한 통신이 완벽했던 지점부터 다시 재전송하는 동기화 기능이 있다.

프로토콜 종류: SSH, TLS, RPC 

 

전송 계층(Transport Layer)

애플리케이션 간의 통신을 담당한다.

데이터가 전송과정에서 목적지에 도착할 수 있도록 데이터 전송을 제어하는 역할을 수행한다.

프로토콜 종류: TCP, UDP

 

TCP(Transmission Control Protocol)

신뢰할 수 있고 정확한 데이터를 전달할 때 사용한다.

검증절차가 많기 때문에 속도는 느리다.

출발지 포트번호와 목적지 포트번호가 존재한다.
데이터 단위는 세그먼트이다.

데이터 송수신전 3-way-handshake, 연결을 끊기 전 4-way-handshake를 진행한다.

 

UDP(User Datagram Protocol)

신뢰성 보단 데이터를 효율적으로 빠르게 보내는 것을 중요시 한다.

데이터가 중간에 손실되더라도 다시 보내지 않고 오로지 빠르게 보낸다.

진짜 빠르게 보내서 데이터 유실이 일어나지 않는것처럼 보인다.

유튜브나 넷플릭스 같은 동영상 스트리밍은 TCP를 주로 사용 한다고 한다.

이유는 대역폭을 쉽게 모니터링 하여 비디오 품질을 조정할 수 있다는데.. 사실 잘 와닿지는 않는다. 😵

UDP는 음성 데이터나 화상회의 솔루션에 많이 사용한다. 데이터 전송이 양방향으로 일어나고 시간에 매우 민감하게 반응하기 때문이다.

만약, TCP 환경에서 데이터 유실이 발생해 음성 혹은 화면이 끊긴다면 네트워크 품질이 나쁘다고 생각할 수 있다.

 

💡 TCP로 보낼지 UDP로 보낼지 사용자가 제어할 수 있을까?

 

네트워크 계층(Network Layer)

IP를 기반으로 호스트 간의 통신을 담당한다.

목적지 호스트로 데이터를 전송한다.

IP 헤더안에 출발지 IP 주소와 목적지 IP 주소가 존재한다.

라우팅 테이블을 기반으로 해당 목적지까지 가는 최적의 경로를 안내하여 데이터를 전송하는 역할을 수행한다.

대표적인 장비로 라우터가 있다.

프로토콜 종류: IP

 

데이터 링크 계층(DataLink Layer)

직접 연결된 노드 간의 통신을 담당한다.

장치와 장치 사이의 통신에서는 MAC 주소를 기반으로 통신한다.

IP 주소를 MAC 주소로 변환해주는 ARP 프로토콜을 사용한다.

물리 계층에서 발생할 수 있는 오류를 찾고 수정한다.

같은 네트워크 대역대에 있는 여러 대의 통신장비들이 스위치를 통해 데이터를 주고 받는 역할을 수행한다.

 

데이터 단위는 프레임(Frame)이다.

대표적인 장비로 스위치, 이더넷이 존재한다.

프로토콜 종류: Ethernet, ARP

 

물리 계층(Physical Layer)

네트워크 데이터가 전송되는 물리적인 매체이다.

0,1의 디지털 신호를 아날로그 신호로 변환하거나 혹은 그 반대로 변환하는 역할을 수행하며, 단순 데이터만 전달한다.

데이터 단위는 비트(Bit)이다.

대표적인 장비로 통신 케이블, 허브, 랜카드가 존재한다.

프로토콜 종류: 0BASE-T, 100BASE-TX, ISDN, wired, wireless 

 

HTTP 프로토콜

인터넷을 사용하면서 http 라는 단어를 많이 접했을 것이다.

http란 무엇인가?

http(Hypertext Transfer Protocol)는 영단어 그대로 네트워크에서 문서와 같은 리소스를 전송하는 프로토콜입니다.

현재는 이미지, 영상, json 등 모든 형태의 데이터를 주고 받을 수 있습니다.

 

HTTP 의 몇가지 특징은 아래와 같다.

1. 클라이언트 서버 구조

클라이언트 서버 모델이란 웹 브라우저와 같은 클라이언트가 먼저 서버에 요청을 보내고 요청을 받은 서버는 리소스를 응답하는 구조이다. 해당 구조는 http 프로토콜을 기반으로 동작한다.

해당 구조의 장점은 클라이언트와 서버가 각각 독립적으로 진화 가능한 점이다.

 

2. 무상태 프로토콜(Stateless), 비연결성

Stateless란 무상태를 의미하며, 각 요청이 독립적이며 서버는 클라이언트의 상태를 보존하지 않는다.

※ Stateful 하다면 서버 증설 하기가 힘들다.

첫 요청에 응답한 서버하고만 통신을 해야하고, 해당 서버가 죽으면 문제가 발생하기 때문이다.

로그인과 같이 상태 저장이 필요한 경우를 위해 쿠키와 서버 세션등을 사용하여 상태를 유지해야 한다.

 

요청과 응답하는 순간에만 연결을 유지하는 비연결성적인 특징도 있다.

자원을 받을때 마다 연결하고 끊고를 반복하면 비효율적이라 HTTP 1.1 부터 지속연결(Persistent Connections)로 문제를 해결하였다. 클라이언트에서 keep-alive 헤더를 담아 보내야 지속연결이 유지된다.

 

keep-alive란?

Persistent Connections 기능을 지원하기 위한 HTTP 헤더값이다.

지정한 timeout동안 연결을 끊지 않게 지정한다.

HTTP 1.1 부터는 keep-alive가 기본으로 세팅되어 자동으로 Persistent Connections 연결이 된다.

 

https://inpa.tistory.com/entry/WEB-%F0%9F%8C%90-HTTP-09-HTTP-30-%EA%B9%8C%EC%A7%80-%EC%95%8C%EC%95%84%EB%B3%B4%EB%8A%94-%ED%86%B5%EC%8B%A0-%EA%B8%B0%EC%88%A0#persistent_connection_keep-alive

max: keep-alive를 통해서 주고받을 수 있는 request의 최대 갯수, 이 수 보다 더 많은 요청을 주고 받을 경우에는 connection은 close 된다.

timeout: keep-alive가 얼마동안 유지될 것인가를 의미한다. 이 시간이 지날 동안 request가 없을 경우에 connection은 close된다.

 

Pipelining이란?

여러개의 요청을 보낼 때 처음 요청이 응답될 때까지 기다리지 않고 바로 요청을 한꺼번에 보내는 것을 의미한다.

keep-alive를 전제로 하며, 서버간 요청의 응답속도를 개선시키기 위해 적용한다.

서버는 요청이 들어온 순서대로 응답을 반환한다.

하지만 응답 순서를 지키기 위해 응답 처리를 미루기 때문에 Head Of Line Blokcing 문제가 발생하여, 모던 브라우저들은 대부분 파이프라이닝을 사용하지 못하도록 막아 놓았다.

HTTP2 에서는 멀티플렉싱 알고리즘으로 대체되었다.

 

https://inpa.tistory.com/entry/WEB-%F0%9F%8C%90-HTTP-09-HTTP-30-%EA%B9%8C%EC%A7%80-%EC%95%8C%EC%95%84%EB%B3%B4%EB%8A%94-%ED%86%B5%EC%8B%A0-%EA%B8%B0%EC%88%A0#persistent_connection_keep-alive

 

 

 

3. HTTP 메시지

 

4. 단순함, 확장 가능

 

HTTP 헤더란

클라이언트와 서버가 요청 또는 응답으로 부가적인 정보를 전송할 때 사용한다.

Content-Type: 수신자에게 전송되는 본문의 미디어 유형이다.

Accept: 클라이언트가 선호하는 미디어 타입을 전달한다.

Authorization: 요청에 대한 클라이언트의 인증 정보가 포함된 자격 증명을 전달한다.

Location: 페이지를 리다이렉션할 URL이다.

set-Cookie: 서버에서 클라이언트로 쿠키를 전달한다.

Cookie: 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청시 서버로 전달한다.

Cache-Control: 옵션 값을 통해 캐시를 제어할 수 있다.

Expires: 캐시 유효기간을 날짜의 절대값으로 설정할 수 있다.

 

 

HTTP 상태 코드는 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능이다.

클라이언트가 인식할 수 없는 상태코드를 반환하면 클라이언트는 상위 상태코드로 해석해서 처리한다.

만약 상태코드 299가 온다 해도 2xx이기 때문에 Successful 이라고 보면 된다.

 

1xx (Informational) 

요청이 수신되어 처리중

거의 사용하지 않는다.

 

2xx (Successful)

클라이언트의 요청을 성공적으로 처리

 

200 OK 

요청 성공

 

201 Created

요청 성공해서 새로운 리소스가 생성됨

 

202 Accepted

요청이 접수되었으나 처리가 완료되지 않음

 

204 No Content

서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없음

 

3xx - (Redirection)

요청을 완료하기 위해 유저 에이전트(웹 브라우저)의 추가 조치 필요

 

※ 리다이렉션이란 웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동(리다이렉트) 한다.

 

301, 308 리소스의 URI가 영구적으로 이동

원래의 URI를 사용하지 않는다.

301 Moved Permanently

리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음(MAY)

 

308 Permanent Redirect

리다이렉트시 요청 메서드와 본문 유지(처음 POST를 보내면 리다이렉트도 POST 유지)

 

302, 307, 303 리소스의 URI가 일시적으로 변경

 

302 Found

리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음(MAY)

 

303 See Other

리아디렉트시 요청 메서드가 GET으로 변경

 

307 Temporary Redirect

리다이렉트시 요청 메서드와 본문 유지(요청 메서드를 변경하면 안된다. MUST NOT)

 

304 Not Modified

클라이언트에게 리소스가 수정되지 않았음을 알려준다.

캐시를 목적으로 사용한다.

 

4xx(Client Error):

클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행할 수 없음.

 

400 Bad Request

클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없음

 

401 Unauthorized

클라이언트가 해당 리소스에 대한 인증이 필요함

 

403 Forbidden

서버가 요청을 이해했지만 승인을 거부함

 

404 Not Found

요청 리소스를 찾을 수 없음

 

5xx(Server Error)

서버 오류, 서버가 정상 요청을 처리하지 못함

 

500  Internal Server Error

서버 내부 문제로 오류 발생

 

503 Service Unavailable

서비스 이용 불가

 

GET POST

GET 리소스 조회

POST 요청 데이터 처리

 

GET

리소스를 조회

데이터는 쿼리 파라미터를 통해서 전달

 

POST 

요청 보내는 데이터를 처리

데이터는 메시지 바디를 통해서 전달

주로 신규 데이터 등록 혹은 프로세스 처리(배달 완료)

 

 

PUT PATCH

PUT 리소스를 대체, 해당 리소스가 없으면 생성

PATCH 리소스 부분 변경

 

 

 

 

참고

 

https://dleunji.tistory.com/category/TIL%F0%9F%92%A1/Network

https://sean.tistory.com/22

https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC

https://www.youtube.com/watch?v=6l7xP7AnB64 

https://aws-hyoh.tistory.com/entry/TCPIP-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

https://inpa.tistory.com/entry/WEB-%F0%9F%8C%90-HTTP-09-HTTP-30-%EA%B9%8C%EC%A7%80-%EC%95%8C%EC%95%84%EB%B3%B4%EB%8A%94-%ED%86%B5%EC%8B%A0-%EA%B8%B0%EC%88%A0#persistent_connection_keep-alive

 

댓글