2. 네트워크
TCP, Transmission Control Protocol
전송 계층에 해당하는 네트워크 프로토콜로 연결형 서비스를 지원하고 데이터의 신뢰성을 보장한다.
신뢰성을 보장하기 위해 흐름 제어, 혼합 제어, 오류 제어를 한다.
TCP의 특징
- 송신부와 수신부의 연결을 확인하는 연결형 서비스이다. 연결에는 3-way 핸드 쉐이킹이 사용된다.
- 패킷 교환 방식은 가상의 경로를 설정하는 가상 회선 방식이다. 따라서 패킷의 전송 순서가 보장된다.
- 송신부와 수신부는 1:1 통신을 한다.
- 데이터 손실이 없음을 보장한다.
뒤에 나올 핸드쉐이킹을 이해하기 위해서는 송신부와 수신부가 사전에 연결하면서 보내는 신호에 포함된 flag를 알아야한다.
flag는 6비트로 전송되며 6개의 상태가 존재하고 각 상태에 맞는 비트를 1로 전송한다.
분명히 학교에서 배울 때는 6개의 상태가 존재했던거 같은데, 위키를 참고해보니 1바이트로 표현한다.
위 글에서 확인해야하는 flag는 syn와 fin, ack 이다.
3-way handshaking
통신하기 전에, 송신부와 수신부가 세션을 수립하는 과정이다. 구체적인 과정은 다음과 같다.
송신부는 수신부에 syn 메시지를 임의의 숫자 N과 함께 보낸다. 송신부는 syn_sent 상태가 된다.
수신부는 syn 메시지를 받으면 요청을 수락하는 ack 메시지를 보낸다. 이 때, 동봉된 숫자 N에 1을 더해서 응답한다.
추가로 수신부에서도 송신부와의 연결을 확인하기 위해 syn 메시지를 보낸다. 역시 임의의 숫자 M을 보내고, syn_received가 된다.
송신부는 ack와 syn 메시지를 받으면 established 상태가 되고 수신부의 syn에 대한 ack를 응답한다. 역시 M+1을 포함한다.
4-way handshaking
tcp 연결을 해제하기 위해 이뤄지는 과정이다.
송신부는 수신부와 연결을 종료하기 위해 fin 메세지를 보낸다.
수신부는 fin 메세지에 대한 ack 메세지를 보낸다. 하지만 연결을 종료하기 위한 준비 과정이 필요하기 때문에 fin 응답을 바로 할 수 없다.
준비가 되면 fin 메세지를 보내고 송신부는 이에 대한 ack 응답을 한다.
TCP 제어 방법
흐름 제어
송신부와 수신부의 데이터 처리 속도 차이 때문에 생기는 데이터 손실을 방지한다.
stop-wait
송신부가 데이터를 보낸 후, ack 메세지를 받을 때까지 기다리는 방식. 일정 시간까지 응답받지 못하면 재전송한다.
송신부 메시지가 유실된 경우와 ack 메시지가 유실된 경우가 있는데, ack 메시지가 유실된 경우 재전송 메시지에 대해 응답만 한다.
sliding window
stop-wait와 다른 점은 설정한 윈도우 크기만큼은 ack 메세지로 확인하지 않고 연속적으로 보낸다는 점이다.
윈도우의 크기는 송신부와 수신부가 연결하는 3-way 핸드쉐이킹에서 결정된다.
혼잡 제어
송신부의 데이터 전달 속도와 네트워크 속도 차이로 데이터 손실이 발생하는 것을 방지한다.
네트워크에 과도한 패킷이 쌓이면서 일정 시간 응답을 받지 못하면 송신부는 메세지를 재전송에 상황을 악화시킨다.
tcp는 혼잡 윈도우의 크기를 조절해 이를 방지한다.
AIMD, Addictive Increase Multiplicative Decrease
데이터를 전달하면서 고정된 상수만큼 윈도우의 크기를 증가시킨다.
데이터 손실이 발생하면 윈도우의 크기를 곱 감소를 통해 줄인다. 이름 그대로의 방식을 가지고 있다.
slow start
윈도우 크기를 1로 시작해, 2에서 4, 8 ... 처럼 지수 형태로 증가시킨다.
혼잡이 발생하면 다시 윈도우 크기를 1로 줄인다.
오류 제어
데이터에 오류나 유실이 발생했을 때, 신뢰성을 보장하기 위해 제어하는 방식이다.
오류를 인지하는 경우는 수신부에서 nak 메세지, 3 duplicate ack, ack를 받지 못하고 타임아웃한 경우이다.
3 duplicate ack
duplicate ack는 패킷이 순서대로 도착하지 않아, 받아야 할 패킷의 번호와 함께 전송한 ack 메세지가 누적되는 것을 의미한다.
3번 누적되면 혼잡이 발생했다고 판단한다.
Go-Back-N ARQ
송신부에서 연속적으로 패킷을 전송할 때, 유실된 패킷이 있으면 해당 패킷부터 전송하는 방식이다.
예를 들어, 패킷 0부터 패킷 5까지 전송하고 ack 6 메세지를 받았다면 정상적으로 모든 패킷이 전송되어 6을 받으면 된다는 의미이다.
만약 ack 3 메세지를 받았다면 패킷 4, 5의 전달 유무와는 상관없이 패킷 3부터 다시 전송한다.
UDP, User Datagram Protocol
전송 계층의 프로토콜이다. tcp와의 차이점은 송신부와 수신부의 연결을 지원하지 않고 데이터그램 형식의 해킷 교환 방식을 가진다.
데이터그램 형식은 패킷이 라우터에서 순간의 최적 경로를 따르기 때문에 도착하는 패킷 순서가 다를 수 있다.
따라서 신뢰성이 낮지만 속도가 빠르다.
최소한의 오류 검출을 위해 체크섬 방식을 사용할 수 있다. 데이터를 복구할 수는 없지만 무결성을 검증할 수 있다.
HTTP
데이터를 전송하기 위한 프로토콜로 tcp/ip 4계층에 속한다.
HTTP의 특징
비연결성, connectionless
클라이언트에서 요청을 보낸 후 서버로부터 응답을 받으면 연결을 끊는다.
불특정 다수를 대상으로 하는 서비스에 유리하다.
무상태, stateless
서버에서 클라이언트의 상태를 저장하지 않는 것을 의미한다.
서버는 상태를 저장하지 않아 높은 확장성을 얻을 수 있다.
서버는 요청에 필요한 데이터를 저장하기 위해서 브라우저를 사용하여 쿠키에 저장하거나 서버의 세션으로 정보를 저장한다.
REST, Representational State Transfer
HTTP 통신을 제대로 활용하기 위해 고안된 아키텍쳐이다.
자원을 URI로 표현하고 HTTP 메서드를 사용해 CRUD 연산을 사용한다. (representational)
최종적으로 자원의 상태를 주고 받는 것으로 통신한다. (state transfer)
RESTful
자원에 대한 행위는 HTTP 메서드로 나타내며, URI에 행위가 들어가서는 안된다.
HTTP 메서드는 명시적이어야 한다. post 메서드로 create와 update가 같이 실행되어서는 안된다.
슬래시로 계층 관계를 표현하며, 마지막에 슬래시가 들어가면 안된다.
URI에 언더바를 사용하지 않고 소문자 사용을 지향한다.
출처
기술 면접 대비 cs전공 핵심 요약집 - 길벗
https://commons.wikimedia.org/wiki/File:3-way-handshake.JPG
https://velog.io/@skyepodium/3-way-handshaking-4-way-handshaking
추가로 참고하면 좋은 글
keep alive에 대해 상세한 설명
'컴퓨터과학' 카테고리의 다른 글
[운영체제] 물리 메모리 관리 (0) | 2024.03.16 |
---|---|
[전공 복습] 3. 데이터베이스 (0) | 2024.03.13 |
[전공 복습] 1-2. 운영체제 (1) | 2024.03.13 |
[전공 복습] 1-1. 운영체제 (1) | 2024.03.13 |
[컴퓨터 네트워크] ICMP (0) | 2024.03.12 |