> For the complete documentation index, see [llms.txt](https://real-dev.gitbook.io/real-library/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://real-dev.gitbook.io/real-library/backend-mastre-courese-udemy/2.-protocol.md).

# 2. Protocol

* 결국 중요한 것은 성능이다.
* 프로토콜은 두 당사자가 서로 소통할 수 있는 규칙의 집합으로 규정할 수 있다.
* TCP, UDP, HTTPm gRPC, FTP 등… 뭐가 되었든 당시에 발생하고 있던 문제를 해결하기 위해 고안되었고 지금도 진화중이다.
  * 예를 들어 TCP는 저 대역을 기준으로 설계되었기 때문에 대규모 데이터 센터나 대용량 트래픽에 적합하게 설계되었고 때문에 지금은 한계에 다다랐고, 다양한 프로토콜이 연구중
* Data format
  * Text - 사람이 눈으로 읽고 이해할 수 있는 종류
  * Binary - 컴퓨터가 효율족으로 이해하기 위한 데이터 포맷. 사람이 읽기는 불가능
* Transfer mode
  * Massage based (UDP, HTTP) - 메시지 기반, 시작과 끝이 명확하다.
  * Steam(TCP, WebRTC) - Byte의 흐름. 끝이나 끊김이 없음
* Addressing system
  * DNA name, IP, MAC
* Direction
  * Bidirectional (TCP) - 양방향 통신
  * Undirectional (HTTP) - 단방향 통신
  * Full/Half duplex - 전이중화, 반이중화(wifi)
* State
  * Stateful
  * Stateless
* Routing
  * Proxies, Gateways
* Flow, Congestion control
  * TCP (Flow, congestion)
  * UPD (Noting)
* Error management
  * HTTP는 특정 에러코드, 메시지가 존재함,
  * 재요청이나 타임아웃 등

<br>
