Search

컴퓨터 네트워크

네트워크를 개념적으로 나눈 OSI 7계층
실제 인터넷 통신에 사용되는 TCP/IP 4계층

2.1 네트워크 계층

2.1.1 OSI 계층

국제 표준화 기구에서 네트워크 통신이 이뤄지는 과정을 7 단계로 나눈 네트워크 표준 모델
데이터를 송신할 때는 높은 계층에서 낮은 계층으로 전달
데이터가 수신부의 가장 낮은 계층에 도달하면 수신부에서는 낮은 계층에서 높은 계층으로 데이터를 전달
각 계층은 독립적이며, 데이터를 송신할 때 각 계층에서 필요한 정보를 추가해 데이터를 가공
제어 정보를 담은 헤더트레일러가 붙음. 이 과정을 데이터 캡술화
데이터 캡슐화 하는 이유는 수신부의 같은 계층에서 데이터 호환성을 높이고 오류의 영향을 최소화
헤더는 데이터 앞에. 트레일러는 데이터 뒤에
송신분에서 데이터 캡슐화 해서 수신부로 전달
수신부는 물리 계층부터 응용 계층까지 거치면 받은 데이터에서 헤더와 트레일러를 분석해 제거하는 역캡슐화 진행
프로토콜 통신 규약, 데이터를 송수신하기 위해 정한 규칙

7계층(응용 계층)

HTTP, FTP 등의 프로토컬을 응용 프로그램의 UI를 제공

6계층(표현 계층)

데이터를 표준화된 형식으로 변경

5계층(세션 계층)

세션의 유지 및 해제 등 응용 프로그램 간 통신 제어와 동기화

4계층(전송 계층)

신뢰성 있는 데이터를 전달하기 위한 계층
TCP, UDP 같은 전송 방식과 포트 번호 등을 결정

3계층(네트워크 계층)

데이터를 송신부에서 수신부까지 보내기 위한 최적 경로를 선택하는 라우팅을 수행
최적 경로를 라우트
네트워크 계층의 장비로는 라우터가 있음

2계층(데이터 링크 계층)

데이터 흐름을 관리하며 데이터의 오류 검출 및 복구 등을 수행
브리지, 스위치, 이더넷이 데이터 링크 계층의 장비에 해당

1계층(물리 계층)

데이터를 비트 단위의 0과 1로 변환한 후 장비를 사용해 전송 하거나 전기 신호를 데이터로 복원
리피터, 허브 등이 물리 계층

2.1.2 TCP/IP 4계층

인터넷에서 데이터를 주고받기 위한 네트워크 프로토콜
TCP
데이터를 나눈 단위인 패킷의 전달 여부와 전송 순서를 보장하는 통신 방식
IP
패킷을 빠르게 보내기 위한 통신 방식
대표적으로 HTTP 가 있다.
OSI 7 계층을 단순화한 것이 TCP/IP 4계층.(TCP/IP에 맞춰서)

4계층(응용 계층)

사용자와 소프트웨어를 연결해 주는 계층
HTTP, HTTPS, DNS 등의 프로토콜이 작동

3계층(전송 계층)

데이터의 신뢰성을 보장
포트 번호로 데이터를 적절한 응용 프로그램에 전달하는 역할
TCP, UDP 등의 프로토콜이 전송 계층
전송 계층의 데이터 단위는 세그먼트

2계층(인터넷 계층)

데이터를 최종 목적지까지 도달할 수 있게 하는 계층
IP가 대표적인 프로토콜
인터넷 계층에서는 전송 계층으로부터 받은 데이터에 헤더를 붙여 캡슐화
패킷 또는 데이터그램

1계층(네트워크 인터페이스 계층)

네트워크 접근 계층
데이터를 전기 신호로 변환하고 MAC 주소를 사용해 기기에 데이터를 전달
패킷 : 네트워크에서 주고받는 데이터를 작게 분할한 단위 MAC 주소 : 48 비트로 구성된 하드웨어 고유의 주소. 네트워크 인터페이스 계층에서 사용 IP 주소 : IP에서 컴퓨터 또는 네트워크 장치를 식별하기 위한 값 서브넷 마스크 : 네트워크부와 호스트부를 구분하려면 서브넷 마스크 사용

2.2 TCP와 UDP

TCP란

전송 계층에 해당하는 네트워크 프로토콜
연결형 서비스를 지원하고 데이터의 신뢰성을 보장
송신부와 수신부의 연결을 확인하는 연결형 서비스
패킷 교환 방식은 패킷이 전달되는 회선이 정해져 있는 가상 회선 방식
가상 많이 사용하는 데이터 통신 방식
가상 회선 방식 : 주고 받기 전에 패킷을 전송할 경로인 가상 회선을 설정. 모든 패킷을 같은 경로로 전송
데이터그램 방식 : 패킷마다 최적의 경로로 전송되는 방식. 도착하는 패킷의 순서가 다를 수 있음.
패킷의 전송 순서가 보장
패킷의 수신 여부를 확인
송신부와 수신부는 1:1 통신
데이터 손실이 없음을 보장하므로 신뢰성이 높다
송수신 속도가 느리다

TCP 핸드셰이킹

연결형 서비스를 지원하기 위해 송신부와 수신부를 연결하는 과정
연결을 시작할 때는 3-way 핸드셰이킹
연결을 종료할 때는 4-way 핸드셰이킹
과정에서 송신부와 수신부 간 연결을 제어 및 관리하도록 플래그 값을 주고 받음
플래그 값은 SYN, FIN, ACK

3-way 핸드셰이킹

데이터를 주고 받기 전에 상대방 컴퓨터와 세션을 수립하는 과정
이 과정에서 송신자와 수신자 모두 데이터를 주고받을 준비가 되었음을 보장
SYN 메세지를 보냄. 이때 임의의 숫자 N을 같이 보냄
수신부가 송신부로부터 SYN 메세지를 받으면 연결을 수락하는 의미로 ACK 전송. 이때 N+1로 보냄
수신부도 연결을 확인하기 위해 SYN에 M이라는 숫자를 같이 보냄
송신부가 수신부로 부터 ACK+SYN 메시지를 받으면 연결이 성립
ACK 메세지와 수신부로 부터 받은 M+1 값을 보냄. ACK 안에는 전송하려는 데이터가 포함
이렇게 요청과 응답을 3번 주고 받는다 해서 3-way 핸드셰이킹

4-way 핸드셰이킹

TCP 연결을 해제할 때 이뤄지는 과정
연결을 해제할 때는 이름 그대로 요청과 응답을 총 4번
송신부와 수신부와의 연결을 종료하려고 FIN 메세지를 보냄
수신부가 FIN 메세지를 받으면 이에 대한 응답으로 ACK 메시지를 보냄
보낸 후에 앱을 종료하는 등 연결을 종료하기 위한 작업을 함. 송신부에서는 수신부에서 보낸 ACK 메시지를 받고 상태 변경
수신부에서는 연결을 종료할 준비가 끝나면 송신부에서 FIN 메세지를 보내고 상태변경
송신부는 서버로부터 받은 FIN 메세지에 응답하기 위해 ACK 메세지를 보내고 상태 변경
일정 시간이 지나면 CLOSED 상태
일정 시간 동안 대기 상태로 유지하는 이유는 FIN 메세지 전에 보낸 FIN 메세지 수신보다 지연되어 발생하는 패킷 유실에 대비하기 위해서..

TCP 제어 방법

TCP의 데이터 신뢰성을 보장하기 위한 제어 방법
흐름 제어
혼잡 제어
오류 제어

흐름제어

데이터 송신부와 수신부에서 데이터 처리 속도의 차이 때문에 생기는 데이터 손실을 방지하는 방법
1.
정지-대기
a.
데이터 보내고 수신부로부터 ACK 메세지를 받을 때 까지 다음 데이터를 보내지 않고 기다리는 방식
b.
일정 시간 동안 수신부로 부터 ACK 메세지를 받지 못하면 패킷을 재전송
2.
슬라이딩 윈도우
a.
송신부에서 데이터의 수신 여부 ACK를 확인하지 않고, 수신부에서 설정한 윈도우 크기만큼 데이터를 연속적으로 보낼 수 있게 해서 데이터 흐름을 동적으로 제어하는 방식
b.
수신 여부와 상관없이 일정 크기의 데이터를 연속적으로 보내서 ACK 메세지를 받아야만 다음 메세지를 보낼 수 있는 정지-대기 방식의 단점을 보완

혼잡제어

송신부의 데이터 전달 속도와 네트워크 속도 차이로 데이터 손실이 방생하는 것을 방지
혼잡 : 네트워크에 패킷 수가 과도하게 증가하는 증상
혼잡이 발생하면 네트워트에 패킷이 쌓이면서 일정 시간 응답을 받지 못하면, 송신부에서는 메세지 전송에 실패했다고 판단해서 수신부에 패킷을 재전송
TCP는 혼잡 윈도우 크키를 조절해 혼잡을 대응
1.
AIMD
a.
데이터를 전달할 때 합 증가 방식으로 혼잡 윈도우의 크기를 더해가면서 키운다
b.
데이터 손실이 발생하면 혼잡 윈도우의 크기를 곱 감소 방식으로 적용해 1/2배와 같이 배수 단위로 줄인다.
c.
시간이 지나면 여러 송신부 간에 네트워크 대역폭을 공평하게 사용
i.
데이터 유실이 발생하면 윈도우 크기 증가폭 대비 윈도우 크기 감소폭이 크기 때문에 네트워크의 대역폭을 넓게 사용하기까지 시간이 오래 걸리는 단점
2.
느린 시작
a.
1인 상태에서 시작해 ACK 메세지를 수신할 때마다 윈도우 크기를 1씩 늘려간다.
b.
혼잡이 발생하면 윈도우 크기를 1로 확 줄이는 방식
c.
패킷을 처음부터 최대 개수만큼 보내는것이 아니라 1개부터 점차 늘려나가서 느린 시작이라는 이름
d.
AIMD 방식에서 초기에 전송 가능한 패킷 수가 적다는 단점을 보완
3.
혼잡 회피
a.
지수 함수 형태로 증가하다가 혼잡이 발생하는 것을 방지하기 위해 윈도우 크기에 대한 임계점을 정하는 방식
b.
도달하면 윈도우 크기를 선형적으로 증가
4.
빠른 회복
a.
혼잡이 발생하면 혼잡 윈도우 크기를 절반으로 줄인 후 선형적으로 증가
b.
혼잡이 처음 발생하면 AIMD 방식으로 동작
5.
빠른 재전송
a.
Duplicate ACK가 3번 발생하면 해당 시점의 윈도우 크기를 1/2 로 줄인다.
b.
ACL 메세지를 받으면 다시 윈도우 크기를 키우는 방식
c.
즉 Duplicate ACK가 3번 발생하면 혼잡이 발생했다고 판단해 윈도우 크기를 조정

오류제어

통신 중 데이터에 오류 또는 유실이 발생할 때 데이터의 신뢰성을 보장하기 위해 오류를 제어하는 방식
수신부에서 잘못된 데이터를 받았다는 응답인 NAK 메세지를 보낸 경우
3 Duplication ACK 발생
수신부로부터 ACK 메세지를 받지 못해 타임아웃이 발생
1.
정지-대기
a.
송신한 패킷에 대한 ACK 메세지를 일정 시간 동안 받지 못해 타임아웃이 발생하면 해당 패킷을 다시 보내는 방식
b.
흐름 제어에서 나왔던 방식으로, 데이터 유실을 간단히 처리할 수 있어서 오류 제어에서도 사용
c.
송신부에서 데이터를 1개만 보내고 메세지를 기다려야하기 때문에 ARQ 방식(재전송 요청) 사용
2.
Go-Back-N ARQ
a.
송신부에서 연속적으로 데이터를 보냈을 때 누락된 데이터가 있으면 송신부에서 해당 데이터부터 재전송하는 방식
3.
Selective-Repeat ARQ
a.
송신부에서 연속적으로 데이터를 보냈을 때 누락된 데이터가 있으면 수신부에서 해당 데이터만 재전송을 요청하는 방식

UDP

전송 계층에 해당하는 네트워크 프로토콜
송신부와 수신부 간 연결을 지원하지 않고 데이터그램 형태의 통신을 지원
신뢰성이 낮지만 속도가 빠르다는 장점
송신부와 수신부의 연결이 보장되지 않는 비연결형 서비스
패킷이 서로 다른 회선으로 교환될 수 있는 데이터그램 패킷 교환 방식
받는 패킷 순서가 다를 수 있다.
패킷의 수신 여부를 확인하지 않는다
1:1 통신, 1:N 통신, N:N 통신 모두 가능
데이터 신뢰성이 낮다
데이터 전송 속도가 빠르다

UDP의 오류 검출

최소한 신뢰성을 보장하기 위해 체크섬 방식 사용
데이터의 무결성을 보장하는 간단한 방법
체크섬을 만들기 위한 데이터를 모두 더함
오버플로되는 캐리가 발생하면 해당 캐리를 떼서 데이터에 다시 더한 후 1의 보수를 취해 체크섬을 만든다
UDP 송신부는 UDP의 헤더, IP 헤더의 일부 정보와 데이터로 체크섬 값을 생성
생성한 체크섬 값을 UDP 헤더의 체크섬 영역에 넣어서 수신부로 보냄
수신부는 체크섬을 포함한 모든 값을 더해 비트가 모두 1이 나오는지 확인
비트가 1이라는 뜻은 송신부와 동일한 체크섬 값이 나온다는 것을 의미
체크섬 사용해도 오류를 100% 검출할 수 있는 건 아님.
비교하는게 아니라 값을 더해서 확인하는 방식이라 데이터의 순서가 바뀌거나 오류가 발생해도 체크섬이 같은 경우가 있음

2.3 HTTP

HTTP

인터넷상에서 데이터를 전송하기 위한 프로토콜
TCP/IP 4계층에서 응용 계층에 해당

비연결성

클라이언트에서 요청을 보낸 후 서버로부터 응답을 받으면 연결을 끊는 것
불특정 다수를 대상으로 하는 서비스에 유리
연결을 유지하지 않기 때문에 서버가 클라이언트를 기억할 수 없다는 단점
보완하기 위해 일정 시간 동안 연결을 유지할 수 있도록 HTTP Keep Alive 사용
HTTP 헤더의 일종

무상태

서버에서 클라이언트의 상태를 저장하지 않는 것
클라이언트가 이전에 요청한 사항을 서버에 저장하지 않음.
클라이언트는 요청에 필요한 데이터를 모두 가지고 있어야 한다. 서버가 클라이언트로부터 받은 요청 사항을 모두 저장해야 한다.
쿠키
클라이언트의 로컬 웹 브라우저에 저장하는 데이터 파일
키와 값을 저장
로그인 정보
온라인 쇼핑몰의 장바구니
세션
서버에서 클라이언트와의 연결 정보를 저장 및 관리
무상태의 장점은 서버 확장성이 높다
클라이언트의 요청에 응답하는 서버가 바뀌어도 되기 때문에 서버를 계속 확장
HTTP에서는 클라이언트와 서버가 통신하기 위해 정형화된 데이터인 HTTP 메세지를 주고 받는다.

요청 라인

요청 URI, 요청 방법, HTTP 버전

상태 라인

요청에 대한 HTTP 상태 코드와 HTTP 버전

헤더

키-값으로 구성된 다수의 헤더 항목

빈 줄

헤더의 끝을 나타내는 빈 줄
헤더와 바디를 구분

바디

요청할 때 요청 방법 메서드가 POST인 경우에만 바디가 있고, 그 외는 메서드 일 때는 비어 있는 상태로 전달

HTTPS

보안 계층인 SSL/TLS를 이용해 HTTP의 보안을 강화한 웹 통신 프로토콜

SSL

넷스케이프에서 개발한 암호화 프로토콜
문제가 좀 있어서 새로운 암호화 프로토콜인 TLS 개발
데이터를 송싱할 때 응용 계층에서 보안 계층의 SSL/TLS로 데이터를 보내면 데이터를 암호화해 전송 계층으로 전달
데이터를 수신할 때 전송 계층에 보낸 데이터를 보안 계층의 SSL/TLS에서 받아 복호화한 후 응용 계층을 보냄
대칭 키 암호화 방식 : 데이터의 암호화와 복호화에 모두 같은 키인 대칭키 공개 키 암호화 방식 : 데이터의 암호화와 복호화를 다른 키로 하는 방식 데이터를 암호화할 때는 공개 키를, 데이터를 복화하할때는 비밀 키

웹 페이지 접속 과정

1) 사용자가 URL을 웹 브라우저에 입력
2) 입력한 URL을 바탕으로 DNS 서버에 연결할 IP를 요청
3) DNS 서버는 IP 주소를 웹 브라우저에게 응답을 제공
4) DNS 서버에서 받은 IP를 통해 웹 서버와 TCP/IP 연결을 하고 HTTP 요청을 보냄
5) 웹 서버는 받은 HTTP 요청에 응답 6) 웹 브라우저는 받은 응답을 바탕으로 사용자에게 웹 페이지를 보여 준다

2.4 REST

HTTP 통신을 쉽게 활용할 수 있는 대표적인 방법으로 REST.
REST는 HTTP를 기반으로 한 플랫폼에서 범용으로 사용

REST

HTTP 통신을 활용하기 위해 고안된 아키텍처
클라이언트는 URI로 표현된 자원을 HTTP 메서드를 이용해 CRUD 연산
REST는 자원을 명시해 연산을 수행하고 상태를 주고 받는 것

특징

일관된 인터페이스
클라이언트-서버 구조
무상태성
캐싱 가능
자체 표현 구조
계층형 구조
URI : 인터넷에 있는 자원을 나타내는 주소 URL : 인터넷에서 자원의 위치를 알 수 있는 규약 URN : 자원의 위치 정보가 아닌 실제 자원을 특정

REST API

REST API는 REST를 기반으로 한 API
API는 다른 소프트웨에 서비스를 제공하기 위한 소프트웨어 인터페이스
REST API는 REST를 기반으로 한 인터페이스
자원의 식별은 URI
자원에 대한 행위는 HTTP 메서드
전달되는 데이터는 JSON 또는 XML

HTTP 메서드

POST
데이터를 생성할 때
GET
데이터를 조회할 때
PUT
데이터를 갱신할 때
DELETE
데이터를 제거할 때
PATCH
데이터를 일부 갱신
HEAD
GET과 동일하게 데이터를 조회할 때. HTTP 메세지에 바디를 포함하지 않고 헤더로만 응답
TRACE
클라이언트의 요청 메세지를 그대로 반환해서 쿠키 및 세션 값을 포함해 응답
CONNECT
요청한 자원을 양방향으로 연결하는데 사용, SSL을 사용하는 웹 사이트에 접속할 수 있음
OPTION
서버가 지원하는 HTTP 메서드를 메세지 헤더에 포함해 응답

참고