두 개체가 서로 통신하기 위한 프로토콜에는 다양한 종류가 있으며 역할과 기능도 다양하다. 프로토콜을 구성할 때는 여러 가지 기능을 종합하지만, 구성된 프로토콜마다 모든 기능이 다 들어 있는 것은 아니다. 경우에 따라서는 몇 가지 동일한 기능이 다른 계층의 프로토콜에 나타나기도 한다. 다음은 프로토콜의 대표적인 기능이다.
- 주소 지정(addressing) : 데이터가 목적지까지 정확하게 전송되도록 목적지의 이름, 주소, 경로를 부여하는 기능이다. 수신 주소는 데이터의 경로를 결정하고 데이터를 전달하기 위한 정보를 제공하며, 발신 주소는 수신 측이 데이터 전송의 출발점을 식별할 수 있게 한다.
- 순서 제어(sequence control) : 전송되는 데이터 블록(Protocol Data Unit, PDU)에 전송 순서를 부여하는 기능이다. 순서를 지정하는 이유는 흐름 제어 및 오류 제어를 용이하게 하기 위헤서다. 데이터 블록을 전송하면 수신 측에서는 순서에 맞게 데이터를 재구성하고 오류가 있으면 재전송을 요청한다.
- 데이터의 단편화 및 재조립(fragmentation & reassembly) : 송신 측에서 전송할 데이터를 전송에 적합한 크기의 작은 블록(패킷)으로 자르는 작업을 단편화라고 한다. 그리고 수신 측에서 단편화된 블록을 원래의 데이터로 다시 조립하는 것을 재조립이라고 한다. 단편화된 데이터의 길이가 길어질수록 오류가 발생할 확률이 높아지므로 재전송할 확률도 높아진다. 반면, 단편화된 데이터의 길이가 너무 짧으면 고정된 패킷의 크기와 버퍼 제어 정보로 인해 기억 장치의 효율이 떨어질 수 있다. 따라서 단편화된 패킷의 길이는 자연 현상과 기억 장치 효율 측면에서 적절하게 선정되어야 한다.
- 캡슐화(encaptulation) : 단편화된 데이터에 송수신지의 주소, 오류 검출 부호, 프로토콜 기능을 수행하기 위한 프로토콜 제어 정보 등을 부가하는 기능이다. 보통 데이터 앞에는 헤더(header)를, 뒤에는 트레일러(trailer)를 붙인다.
- 연결 제어(connection control) : 데이터를 교환할 때 연결 설정 유무에 따라 연결 지향형 데이터 전송(connection oriented data transfer)과 비연결 지향형 데이터 전송(connectionless data transfer)으로 나뉜다.
- 흐름 제어(flow control) : 수신 측의 버퍼 메모리에서 데이터가 흘러넘치지 않도록 수신 측의 처리 능력에 따라 송신 측에서 보내는 데이터양을 조절하는 기능이다. 주로 송신 측의 데이터 전송 속도가 수신 측보다 빠를 경우에 사용된다. 대표적으로 정지-대기(stop-and-wait) 방식과 슬라이딩 윈도(sliding window) 방식이 사용된다.
- 오류 제어(error control) : 데이터 전송 도중에 발생하는 오류를 검출하고 정정하는 기능이다. 대표적으로 패리티 비트(parity bit), 순환 중복 검사(CRC, Cyclic Redundancy Check, 검사합(checksum) 기법 등이 사용된다.
- 동기화(synchronization) : 송수신 측이 동일한 상태를 유지하도록 타이밍을 맞추는 기능이다.
- 다중화(multiplexing) : 하나의 통신 회선을 여러 가입자가 동시에 이용할 수 있도록 하는 기능이다.
- 라우팅(routing) : 출발지에서 목적지까지 최적의 경로를 지정하는 기능이다.
- 전송 서비스 : 우선순위 결정 및 서비스 등급과 보안 요구 제어 등의 서비스를 말한다.