네트워크에 연결된 시스템들이 서로 통신을 하려면 정해진 규칙(프로토콜)에 맞춰서 데이터를 주고 받아야한다.
프로토콜의 동작 과정은 전송 오류율, 데이터 전달 경로, 전송 속도등 다양한 외부요인의 영향을 받는다.
따라서 적절한 대응 방안을 마련해 효율적으로 관리하는 것이 중요하다.
이는 프로토콜의 작업을 모듈화함으로써 관리할 수 있다.
컴퓨터로 예를 들면, CPU, 메모리,하드데스크, LAN카드 같은 작은 부품들이 모여 하나의 시스템을 구성한다.
복잡한 시스템을 기능별로 모듈화하여 전체 시스템을 이해하기 쉽다.
하나의 기능이 고장이 났을때, 그 부분만 들어내어 조치가 가능하다.
소프트웨어 측면에서는, 함수의 모듈화를 통해 시스템을 나눌 수 있다.
함수사이의 인터페이스는 함수의 매개변수에 의해서 이루어지므로 전체 시스템을 이해하기가 훨씬 쉽다.
모듈들은 서로 대등한 관계를 유지하면서 동작할수 있지만,
대부분은 서로 다른 모듈에 서비스를 요구하면서 계층구조로 구성된다.
모듈화한 계층 구조 프로토콜엔 다음과 같은 장점들이 있다.
계층구조의 통신 프로토콜을 설계할 때는 다음과 같은 고려사항이 있다.
1. 네트워크 호스트의 주소표현 방법
2. 데이터 전송 과정에서의 오류제어
3. 통신 양단간의 전송 속도를 제어하는 흐름제어
여러 호스트가 연결된 환경에서 특정 호스트끼리 통신하려면, 상대방을 구분할 수 있는 방법이 필요하다. 시스템을 구별하기 위해 이름을 부여하는 것을 주소체계라고 한다.
보통 호스트 하나에 주소 하나를 부여하지만, 다수의 호스트를 묶에 하나의 그룹주소로 표기하기도한다. 1:다 통신환경도 필요하기 때문이다. 간단하게, 네트워크에 연결된 모든 호스트에 데이터를 전송할 수 있는 브로드 캐스팅,
특정 사용자들을 그룹으로 묶는 멀티 캐스팅 이 있다.
데이터를 송수신하는 과정에서 오류가 발생할 수 있다.
오류가 발생하는 일차 원인은 물리계층의 전송 매체에 의한 물리적 오류다.
이를 해결하기 위해 데이터 링크 계층에서 물리적 전송 오류 처리를 전담한다.
그리고 상위 계층의 프로토콜이 수행될때는 논리적 전송 오류가 발생할 수 있으므로 상위계층에서도 전송 오류 문제를 다룬다.
송수신 호스트 사이의 데이터 전송 속도 차이에 의해서도 데이터를 분실할 수 있다.
수신호스트의 내부 버퍼처리 속도보다 송신 호스트의 데이터 송신 속도가 빠르면 데이터 손실이 발생한다.
이를 예방하기 위해 적절한 흐름제어 방법을 고려해야한다.
1:1 통신 환경에서 데이터를 한쪽 방향로만 전송하는 것을 단방향Simplex,
양쪽에서 동시에 데이터를 전송하는 것을 전이중FullDuflex,
전이중에서 특정시점에는 한쪽방향으로만 전송할 수 있는 반이중Half Duflex 방식이 있다.
데이터 전송 우선순위,긴급데이터 처리방식등도 고려해야한다.
프로토콜은 계층구조로 이루어져있고, 하위계층이 상위계층에 서비스를 제공한다.
이 서비스는 프리미티브Primitive 형태로 구현된다.
하위계층이 상위계층에 제공하는 서비스에는 연결형과 비연결형이 있다.
연결형 서비스에서 자주 사용하는 프리미티브의 종류에는 3가지가 있다.
클라이언트가 서버에 Request 요청을 보내면 이 요청은 Indication 형태로 서버에 도착한다. 서버에서는 해당 프리미티브를 올바르게 수신하였음을 클라이언트에 통보하기 위해 Response를 응답으로 보내고 이 응답은 Confirm 형태로 클라이언트에 도착한다.
데이터가 하위계층으로 이동할때, 각 계층의 프로토콜에서 정의한 헤더 정보가 추가된다. 물리계층을 제외한 계층에서 헤더정보를 추가하고, 데이터를 수신하는 호스트에서는 반대로 상위계층으로 이동하며 헤더정보를 제거하고 해석한다.
호스트의 n계층은 상대 호스트의 n계층과 통신하는데 이때 사용하는 규칙이 게층 n 프로토콜이다.
동일 계층을 동료 프로세스라고 부르며, 상하로 이웃하는 모듈은 인터페이스를 통해 하위 계층의 서비스를 이용할 수 있다.
동료 프로세스에 데이터를 직접 전달하는 것이 아니라 하위 계층에게 서비스를 요청해서 전달한다.

송신 호스트에서 수신 호스트로 데이터를 전달하려면, 중개 시스템 역할을 수행하는 중개 노드를 거쳐야한다. 중개 시스템에서는 경로배정기능을 수행하는 네트워크 계층의 프로토콜이 동작하는데 , 이런 경로배정기능을 라우팅이라 한다.
중개 노드인 라우터는 도착한 데이터의 헤더정보를 읽고 적절한 경로로 전달하기 위해 헤더를 수정하여 전송한다.
전송 매체의 물리적 인터페이스에 관한 사항을 다룬다. 하드웨어 시스템으로 구현한다는 말이다.
데이터의 전송속도, 클록 동기화,물리적 연결등을 다룬다.
물리 계층을 통해 전송되는 데이터의 물리적 전송 오류를 해결한다.
상위 네트워크 계층에 신뢰성있는 패킷 전송을 보장해 전송 오류의 부담을 없애준다.
하지만 전송 경로 문제를 해결할 수 없으므로, 1:1연결 환경에서 데이터 전송 기능을 지원한다.
데이터 링크 계층의 데이터를 프레임Frame이라 부른다. 프레임 헤더의 송수신 호스트 정보에는 LAN카드에 내장된 송수신 호스트의 MAC주소가 기록된다.
송수신 호스트의 전송 속도를 제어하는 흐름 제어 기능도 수행한다.
데이터가 어떤 경로로 이동해야할지를 결정하는 라우팅 문제를 처리한다.
전달 경로는 미리 정해지는 정적인 방식과 네트워크의 현재 부하 상태에 따라 결정되는 동적인 방식으로 구분한다.
네트워크 계층의 데이터를 패킷Packet이라 부르며, 경로 선택을 위한 호스트 주소가 필요하다.IP프로토콜이 네트워크 계층의 기능을 수행한다.
전송되는 패킷이 너무 많으면 전송 속도가 떨어지고, 프로토콜 동작에 영향을 미칠 수 잇따. 네트워크 트래픽이 과도하게 많아지는 문제를 조절하는 혼잡 제어 기능도 수행한다.
송신 프로세스와 수신 프로세스를 직접 연결하는 단대단(end-to-end)통신 기능을 제공한다.
컴퓨터 내부에서 논리적으로 구축되는 통신 당사자 사이의 통신 문제를 다룬다. 일반적으로 통신 당사자는 프로그램 실행상태를 의미하는 네트워크 응용 프로세스이다.
전송 오류율, 전송 속도와 같은 일반 사용자의 서비스 요구 유형에 대한 고려와 흐름 제어 기능도 한다.
전송 계층과 유사하지만, 원격 파일 전송이나 원격 로그인 같은 세션 기능을 제공한다. 이를 위해 토큰 제어, 동기(synchronization) 기능을 제공한다.
계층 5까지는 주로 데이터의 전송에 관한 내용을 다룬다.
표현계층은 데이터의 의미와 표현방법을 처리한다.
호스트 간에 데이터 표현 방법이 서로 다르면 상대방의 데이터를 이해할 수 있도록 변환화는 과정이 필요하다. 압축이나 암호화를 수행한다.
다양하게 존재하는 응용 환경에서 공통적으로 필요한 기능을 다룬다.
대표적으로 FTP(File Transfer Protocol)가 있다.
인터넷은 네트워크 계층에서 IP프로토콜을 사용해야하는 네트워크이다.
전송계층은 TCP나 UDP를 사용한다.
전송 계층 까지의 기능은 시스템 공간인 운영체제에 구현한다.
즉 TCP/IP와 하위계층의 기능을 담당하는 LAN카드 드라이버 루틴은 운영체제 영역에 속한다.
TCP/IP를 이용하려면 사용자 공간에서 네트워크 응용 기능을 지원하는 프로그램을 작성해야한다.

TCP와 UDP는 시스템 운영체제인 커널Kernel 내부에 구현되므로 일반 사용자가 이 기능을 직접 이용할 수는 없다. 대신 소켓Socket 인터페이스를 이용해 운영체제가 제공하는 시스템 콜기능을 프로그램에서 호출하는 방식으로 사용한다. TCP는 연결형,UDP는 비연결형 서비스를 제공한다.
네트워크 계층의 구현은 IP, 그 아래의 계층은 LAN카드와 LAN카드를 구동하는 드라이버 루틴에 의해 동작한다.
세션계층 부터 응용 계층 까지의 기능은 사용자 프로그램이 구현한다.
프로그래밍 환경에서 전송계층 프로토콜을 사용할 수 있는 소켓 시스템 콜을 호출해 TCP,UDP기능을 사용할 수 있다.
프로그램에서 소켓을 사용할 때 소켓마다 부여되는 고유 주소인 포트 번호를 관리해야한다. 일반 네트워크 프로그램은 포트 하나를 할당해 사용하므로 포트 번호와 사용자 프로그램이 1:1대응된다. 따라서 인터넷 응용 프로그램의 고유 주소는 IP주소와 포트번호의 조합으로 구성된다.
네트워크 응용 프로그램에는 인터넷에서 많이 사용되는 텔넷(Telnet),FTP,웹 브라우저 등이 있는데 모두 TCP와 UDP를 사용해 네트워크에 연결한다.
인터넷에서의 데이터 전송은 계층 4의 TCP,UDP 와 계층 3의 IP에 의해 이루어진다. TCP/IP 모델에는 더 많은 프로토콜이 추가로 필요한데 특히 주소문제를 해결하는 ARP/RARP 와 오류 문제를 해결하는 ICMP가 있다.
TCP/IP 모델에서 사용하는 주소는 데이터 링크 계층의 MAC주소, 네트워크 계층의 IP주소, 전송 계층의 포트번호이다.
계층 2의 프로토콜을 이용해 데이터를 전송하려면, 목적지 호스트의 MAC주소가 필요하다. 상대방의 IP주소는 응용 프로그램 사용자로부터 입력받지만 상대방의 MAC주소는 어디서도 얻을 수 없다.따라서 입력된 IP주소를 이용해 MAC주소를 구하는 기능이 필요한데 이것을 ARP(Address Resolution Protocol)가 담당한다
일반젃으로 호스트의 IP주소는 하드디스크에 보관한다. 하드디스크가 없느 시스템은 자신의 MAC주소는 LAN카드에서 알 수 있지만, IP주소는 알 수 없다. 그래서 MAC주소를 IP주소로 변환하는 RARP(Reverse Address Resolution Protocol)가 필요하다.
IP가 동작하는 과정에서 전송오류가 발생할 수 있다. 오류발생을 송신자에게 통지하려고 ICMP(Internet Control Messeage Protocol)를 사용한다.