네트워크 엔티티 사이에서 메시지를 교환할 때 형식, 송수신 순서, 메세지 송수신 시 취할 행동을 정의한 규칙
한국인과 프랑스인이 있을 때 서로의 언어를 구사할 줄 모른다고 가정하자. 둘이 대화하기 위해서는 둘 다 알아들을 수 있는 영어로 대화하기로 약속. 이때 둘이 약속한 영어가 프로토콜이다.
대표적 프로토콜 ; TCP/IP, HTTP, FTP ...
프로토콜 주요 특징
Syntax : 형식이 매우 엄격 packet = 하고싶은 말. payload와 Header(address + checksum + ...)를 묶어서 패킷 형태로 보냄
Semantics : 필드가 가지는 값에 따른 의미
Timig : 질문과 답변 사이의 순서관계. 질문하고 날아올 때까지 시간관계
프로토콜 아키텍처 Architecture
문제를 나누어서 해결하자! → vertical stack(수직 계층). 각각의 칸이 Layer. 독립적으로 만들어도 최소한의 Interaction은 필요하다.
스택의 각 계층은 특정 기능의 하위집합을 수행한다.
기본기능은 바로 아래 계층에 의존하고, 각각의 계층은 바로 위 계층에 서비스를 제공한다.
한 계층의 변경 사항이 다른 계층의 변경을 필요로 하지 않아야한다. (독립성)
Physical Layer 인접한 노드끼리 1bit 전달하기. 데이터를 signal(신호)로 바뀌어야 전송 가능. 랜카드/통신모뎀/통신모듈 에서 일어남 ← 이걸 Interface. (컴퓨터와 전송 선을 연결해주는 접점)
Data Link Layer 인접한 노드. 비트의 묶음(frame)을 전달하기
(▲ 목적지를 고민할 필요가 없다) (▼ 갈 수 있는 경로가 너무 많다....)
Network Layer 정보 송신측, 수신측이 멀어져도 ok. 패킷을 전달함. 멀티홉 또는 End to End 전송 (노드에서 노드까지 가면 끝)
Routing(길찾기)와 Forwarding(교차로 통과) → 패킷이 갈 곳을 스스로 정하지 못하는데, 라우팅을 도와주는게 라우터 Router(교차로 노드 역할)는 패킷을 다음 노드로 전달하는 역할이 라우터이다. 운전시 네비가 길을 찾는 것 노드와 노드 사이 연결 구성도를 topology. 길찾기 알고리즘을 통해 routing(forwarding) table을 얻을 수 있음. 이 표를 얻는 것 까지가 라우팅 작업(목적지까지의 최적 경로 결정) → 이 테이블을 포워딩 작업에 이용한다. 포워딩 작업은 라우팅에서 결정된 경로에 따라 패킷을 실제로 전달하는 과정이다. 즉, 라우팅은 전체적인 관점에서 가장 효율적인 경로를 설정하는 것, 설정한 경로를 따라 이동하면서 특정 구간에서 어디로 갈지 정하는 것이 포워딩.
Lookup이라는 연산을 통해 일치하는 Prefix(여러개 나올 수 있음) 탐색. 여러개일 경우 가장 좋은(가장 상세, 긴) 것 선택 → logest prefix matching(더찾아보기)
Transport Layer 물리적인 노드 안에 여러개의 어플리케이션이 있으면 특정 프로세스와 프로세스를 연결 (각각의 노드 안에 있는 세부 프로세스까지 구분) segment라는 단위를 사용. process to process
TCP와 UDP라는 두가지 프로토콜이 존재하는데, TCP는 신뢰가능한 전달 서비스를 제공한다.
신뢰성있는 전달 서비스를 제공하기 위해 TCP는 깨진 패킷을 바로잡는 서비스와 연결설정 서비스를 제공 연결 설정 서비스로 3-Way Handshake가 있음
양방향으로 통신해야 하기 때문에 양측 채널을 뚫어야한다. *TCP 서버-클라이언트에서 accept와 connect 단계에서 3-Way handshaking이 일어난다
Application Layer 어플리케이션마다 목적이 다름. 다양하다
TCP/IP Protocol Architecture
DNS (Domain Name System)
IP주소 32bit 숫자(IPv4). 8bit 단위로 구분해 각각 10진수로 표시 Windows cmd에서 ipconfig로 확인할 수 있다.
도메인 이름 Domain Name 사람이 기억하고 사용하기 쉬운 이름 (접속할 때마다 IP를 기억해서 치기는 좀...) 하지만 라우터는 이 주소를 못알아먹고 IP주소로 변환해야 통신이 가능하다. → 이걸해주는게 DNS
포트 번호 목적지 프로세스를 지정 하나의 서버/노드/호스트 안에서 다양한 프로세스를 구분하는 용도로 사용되는 주소 0~1023 : 시스템 포트 / 1024~49151 : 사용자 포트 / 49152~65535 : 동적·사설 포트
P2P
Peer to Peer : 서버가 항상 켜져있지 않아도 됨
torrent : 한 파일을 공유하는 사람들. tracker : 파일을 공유하는 사람들의 집합을 관리하는 서버
chunk로 쪼개어 분산해서 관리. 자신이 다운한 정보를 다시 다른 사람에게 서비스. 모든 사용자가 client이면서 server이다.
토렌트의 멤버 정보가 계속 바뀜 → 계속해서 바뀌는 peer 정보를 어떻게 실시간으로 업데이트하고 관리할 것인가?