프로토콜
컴퓨터간 통신을 하기 위한 규칙
OSI 7 레이어
ISO(국제표준화기구)에서 다양한 컴퓨터간 데이터 전송을 지원할 수 있는 추상 모델을 표준화
- 송신측 : 캡슐화(Encapsulation)
- 수신측 : 역캡슐화(decapsulation)
- 헤더(header) : 데이터 송신시, 필요한 정보를 데이터에 추가
- 바디(body) : 실제 데이터
전송 계층
TCP vs UDP 프로토콜
- TCP : 연결형 프로토콜, 데이터의 전송 순서 보장, 데이터 신뢰성 보장
- UDP : 비연결형 프로토콜, TCP보다 전송속도 빠름, 주로 스트리밍/브로드캐스팅 서비스 (UDP 데이터는 데이터그램)
포트(port) 번호
: 목적지의 어떤 응용 프로그램에 데이터를 전달해야하는지 식별하는 기능 / 포트 번호는 0~65535
(일반적으로 웹서버는 80번, 이메일은 110번, FTP는 21번 포트를 씀)
TCP/IP 모델과 IP 프로토콜
OSI 7 Layer은 표준 모델이고 TCP/IP은 현실에서 인터넷 통신을 위해 사용하는 모델
IP 프로토콜
IPv4 (Internet Protocol version 4)
: 8bit.8bit.8bit.8bit = 32bit로 구성 (2^32개 IP 주소) : 0.0.0.0 ~ 255.255.255.255
IPv6 (Internet Protocol version 6)
: 16bit.16bit.16bit.16bit.16bit.16bit.16bit.16bit = 128bit로 구성(2^128개의 IP 주소)
- 자기 PC의 IP 주소는 127.0.0.1 (DNS로는 localhost)
TCP 프로토콜
- Sequence Number : 일정 단위로 데이터를 분할해서 전송, 송신측에서 수식측 데이터가 몇번째인지 알려준다.
- ACK Number : 다음 번호의 데이터를 알려줌, 어디까지 수신했는지 확인 가능하다.
- 3 way hand shake : TCP 통신을 위한 연결을 설정하는 과정
- 4 way hand shake : TCP 연결을 해제 하는 과정
TCP 제어 : 네트워크 트래픽에 따른 효율적이고 신뢰적 송신을 위한 제어 알고리즘 적용
- 흐름제어(Flow Control) : 슬라이딩 윈도우 (Sliding Window , 매번 ACK를 기다리지 않고 여러 패킷을 연속해서 송신 / 각 컴퓨터의 윈도우 사이즈를 확인하여 윈도우 사이즈 만큼 ACK없이 연속해서 송신한다.)
- 혼잡제어(Congestion Control) : 송신 제어를 위한 2가지 윈도우가 있다. 송신측 최종 윈도우 크기는 min(RWND, CWND)
- RWND(Receiver Window) : 슬라이딩 윈도우에서 활용
- CWND(Congestion Window) : 네트워크 혼잡제어를 위해 활용
AIMD(Additive Increase/Multicative Decrease)
: 처음에는 CWND = 1, ACK가 도착하면(패킷 전송 성공 시) -> CWND = CWND + 1, 패킷 전송 실패 시 -> CWND = CWND / 2
AIMD의 느린 초기 송신을 빠르게 하기 위해 느린시작과 혼잡회피가 있다.
- 느린시작(Slow Start) : 처음에는 CWND = 1, ACK가 도착하면(패킷 전송 성공 시) -> CWND = CWND의 2배, 패킷 전송 실패 시 -> CWND = 1(초기값)
- 혼잡회피(Congestion Avoidance) : 느린시작과 같이 쓰이고 CWND가 일정 크기에 도달할 때, ACK가 도착하면(패킷 전송 성공 시) -> CWND = CWND + 1
UDP 프로토콜
사용자 데이터그램 프로토콜(User Datagram Protocol) : 동영상 스트리밍 등 데이터 유실이 일부 있어도 문제 없고 빠른 전송이 필요한 서비스에 활용된다. TCP와 달리 브로드캐스팅(동일 네트워크에 연결된 모든 컴퓨터에 데이터 송신 가능)을 지원한다.
HTTP 프로토콜
HTTP(HyperText Transfer Protocol)
: 인터넷(WWW, W3, Web) 상에서 서버와 클라이언트 모델로 정보를 주고 받는(request / response) 프로토콜
HTTP method : GET(서버 정보 읽기, 전달이 필요한 파라미터들을 URL을 통해 전달한다), POST(서버 정보 입력하기, 전달이 필요한 파라미터들을 HTTP BODY에 포함되어 잔달 되어 사용자는 직접 확인 불가하다), PUT(서버 정보 수정하기), DELETE(서버 정보 삭제하기)
쿠키와 세션
세션은 쿠키를 기반하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리한다.
URL과 HTTPS
URL(Uniform Resource Locator) : 인터넷 상의 자원 위치 표기를 위한 규약
URI(Uniform Resource Identifier) : 통합 자원 식별자
(eg.
https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=url
https://search.naver.com/은 url 이고, search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=url 라는 식별자가 uri 이다. )
* SSL 암호화 프로토콜은 넷스케이프사에서 개발되었고 국제 표준화 하는 괒어에서 SSL이 상용 제품 이름과 동일하여 TLS로 변경되었다.
REST API와 HTTP 프로토콜
Rest(REpreseontational State Transfer) : HTTP URI를 통해 자원을 명시하고, HTTP 메서드를 통해 자원에 대한 CRUD Operation 적용한다.
- Create :생성(POST)
- Read : 조회(GET)
- Update : 수정(PUT)
- Delete : 삭제(DELETE)
REST API : REST 기반으로 서비스 API 구현했다. 마이크로 서비스, Open API 등에서 많이 사용된다.
Restful : 개발자들 사이에서 비공식적으로 가이드한 REST 구현 가이드
- 기능에 적합한 URL Method 사용
- 정의된 상태 코드에 맞게 상태 전송
- URL Rules(마지막에 / 포함하지 않는다, _대신 -를 사용한다, 소문자를 사용한다, 메서드는 URL에 포함하지 않는다 등)
주요 응용계층 프로토콜
DNS(Domain Name System) : 전세계 흩어진 DNS Server를 통해 도메인 이름:IP 주소 정보를 확인할 수 있다. (UDP 사용)
웹브라우저 동작 과정
- 웹 브라우저에 입력된 URL은 DNS 프로토콜을 사용하여 IP 주소로 변환(반대도 수행)
- HTTP Request -> TCP -> IP -> Ethernet을 전기 신호로 변환 및 전송
메일서버
MIME(Multi-purpose Internet Mail Extensions)
: SMTP 프로토콜은 ASCII 코드만 전송할 수 있다. SMTP 본문 내용에 MIME 헤더와 함께 다양한 포멧의 데이터를 ASCII 코드로 변환해서 전송한다.
FTP(File Transfoer Protocol) : 서버와 클라이언트 사이의 파일 전달을 위한 프로토콜
(21번 : 접속/제어를 위한 포트, 20번 : 전송을 위한 포트)
참조:
https://itragdoll.tistory.com/57
https://sjlim5092.tistory.com/37
https://mangkyu.tistory.com/15
https://pks424.tistory.com/m/entry/Http-%EC%9D%91%EB%8B%B5%EC%83%81%ED%83%9C-%EC%BD%94%EB%93%9C
https://interconnection.tistory.com/74