의미
- OSI 7계층 모델이란, 네트워크 통신 시스템을 7개의 추상적 계층으로 나누어 설명한 것을 말한다.
- 각 계층은 인접 계층과 데이터를 주고받으며, 자신의 역할만 수행한다.
- 이를 통해 시스템을 더 단순화한다. 기능별로 수행하는 계층이 정해져있다면, "A기능에 문제가 생겼네 -> n계층의 문제겠구나!" 할 수 있을 것이다.
계층 구조, 각 계층 요약

- OSI 7계층 모델과, 실제 인터넷 환경에서 많이 쓰이는 TCP/IP 모델의 계층 구조이다.
- OSI 7계층 모델은 표준화된, 이론적인 모델이다.
- TCP/IP 모델은 더 실용적인 관점의 모델이다. 인터넷 환경에 맞춘 더 실용적인 프로토콜들로 구성되며, 4계층으로 표현된다.
여기서는 OSI 7계층을 기준으로 알아본다.
1계층 - 물리 계층(Physical Layer)
- 통신 케이블 등 물리적인 수단을 통해 데이터를 실제로 전송한다.
- 상위 계층에서 받은 데이터를 전기적 신호로 변환하여 주고받는 역할만 하며, 오류 여부 등은 신경쓰지 않는다.
- 통신 단위는 '비트' 이다.
- 통신 케이블, 리피터, 허브 등이 이 계층에 속한다.
2계층 - 데이터 링크 계층(Data Link Layer)
- 인접(같은 네트워크 상의) 노드 간 신뢰성 있는 정보 전달을 보장한다.
- 물리 계층의 통신 과정에서 발생 가능한 비트 단위의 오류를 검출하고, 재전송 등을 수행한다.
- MAC주소를 기반으로 통신한다.
- 통신 단위는 '프레임' 이다.
- Ethernet 프로토콜, ADCCP, ALOHA 프로토콜 등이 이 계층에 속한다.
3계층 - 네트워크 계층(Network Layer)
- end-to-end 호스트간 정보 전달을 책임진다.
호스트 : 네트워크에 연결되어 있는 컴퓨터
- 데이터가 전달되는 전체 경로를 책임진다.
- 주요 기능 : 주소 부여(IP), 경로 설정(Route)
- 추가로 흐름 제어, 세그멘테이션, 오류 제어, 인터네트워킹(2개 이상 네트워크를 연결) 등을 수행
- 특징
- Connectionless : 비연결성 데이터그램 방식으로 전달
- Unreliable : 패킷의 완전한 전달을 보장하지 않음.(소실, 중복, 지연, 순서 등 보장 X)
- IP 패킷 헤더에 수신/발신 주소를 포함
- IP 단편화 : 경우에 따라 단편화가 필요
- IP 헤더 내 바이트 전달 순서 : Big endian
데이터 저장 방식, Big endian, Little endian

4계층 - 전송 계층(Transport Layer)
- end-to-end 포트 간 신뢰성 있는 통신을 보장한다.
- 네트워크 계층에 비해, 포트번호까지 식별할 수 있다.
- 상위 계층이 통신의 신뢰성을 신경쓰지 않게 해준다.
- Sequence Number를 기반으로 패킷 순서를 유지한다.
- 주요 기능 : 오류검출/복구, 흐름제어, 중복검사
- 특정 연결의 유효성을 제어한다. 특정 프로토콜은 Stateful하다.
- Connection oriented(연결 기반)이다. 패킷 전송이 유효한지 확인하고, 전송 실패한 패킷들을 재전송한다.
- TCP, UDP 등
5계층 - 세션 계층(Session Layer)
- 응용프로그램 관점에서의 논리적인 연결을 담당한다.
- TCP/IP 세션을 생성, 삭제하는 책임을 진다.
- 양 끝단의 응용 프로세스가 통신을 관리하기 위한 방법을 제공한다.
- 동시 송수신(duplex), 반이중(half-duplex), 전이중(full duplex) 방식의 통신, 체크포인팅, 유휴, 종료, 재시작 과정 등을 수행
- 통신하는 사용자들을 동기화, 오류복구 명령 등을 일괄적으로 다룸
- 통신을 위한 세션을 확립/유지/중단 (by OS)
6계층 - 표현 계층(Presentation Layer)
- 상위 계층(프로토콜마다 데이터 형식이 다름)과 하위 계층(공통 형식의 데이터를 사용)간 데이터 변환을 담당
- 인코딩/디코딩, 압축, 암호화/복호화 등을 수행한다.
- 파일 형식(txt, img, gif 등) 구분, 인코딩 타입 변환(ex. Unicode -> ASCII) 등을 수행한다.
7계층 - 응용 계층(Application Layer)
- 응용 프로그램과 통신 프로그램 간 인터페이스 제공
- 사용자 대 사용자, 혹은 응용 프로세스 대 응용 프로세스 간 통신을 담당한다.
- HTTP, FTP, SMTP, DNS, Telnet 프로토콜 등이 이 계층에 속한다.
- 이러한 응용계층 서비스들은 고유 포트번호를 갖고 있다. (고정된 것이 아닌, 일반적으로 통용되는 포트번호)
- ex. HTTP - 80, Telnet - 23 등
계층 상세 설명
2계층 - 데이터링크 계층

- 신뢰성 보장되지 않는 1계층 상의 물리적인 회선을, 상위 계층이 신뢰하고 사용할 수 있도록 신뢰성 보장되는 통신 채널로 변환시킨다.
- 프레이밍, 흐름 제어, 오류 제어 등
- 프레이밍(Framing) : 데이터를 프레임 단위로 그룹화한다.
- 오류 제어 : 전송 오류 검출, 정정, 재전송 등. (연관 : ARQ(Automatic Repeat reQuest))
- 오류 제어에 Sequence number를 사용한다.
- MAC주소를 활용해, 데이터링크 내 노드 간 식별성 제공
- 인접 노드 사이의 통신을 관리하고, 신뢰성 낮은 전송로를 신뢰성 높은 전송로로 전환하는 데에 주로 사용한다.
- 랜카드라는 장비에 해당 계층의 동작이 구현되어 있다.
ARQ(Automatic Repeat reQuest)
- 오류 검출 후, 해당 패킷을 재전송 요청하는 오류제어 방식
- Stop & Wait, Go Back n ARQ, Selective ARQ 등이 있다.
Stop & Wait

- 한번에 하나씩 데이터를 보내고, ACK 응답을 받고, 다음 데이터를 보낸다.
- NAK(Negative ACK)를 받거나 Timeout되면, 해당 데이터를 재전송
- 가장 단순하지만, 비효율적이다.
Go Back n(Sliding window)

- 여러 개의 데이터를 보내고, 하나의 ACK응답을 받고, 후속 데이터를 보냄
- 에러 발생 시, 해당 프레임 이후 데이터를 모두 재전송
Selective ARQ

- 여러 개의 데이터를 보내고, 수신측은 에러 발생 시 프레임 번호를 특정하여 NAK 응답
- 송신측이 NAK신호를 받으면, 해당 프레임만 재전송
- 수신측은 데이터를 재정렬해야 하므로, 별도의 버퍼를 사용한다.
Ethernet 프레임 구조
이더넷 프레임은 표준인 IEEE 802.3 프레임과 Ethernet II 라고 불리는 DIX 2.0으로 나뉘며, 주로 Ethernet II 프레임을 사용한다.

-
Preamble : 송신자와 수신자의 동기화를 위해 사용. 수신측에서 프레임의 시작을 알 수 있게 하는 비트 패턴. 비트 레벨 동기화를 위해, 10101010.... 을 반복. 802.3 프레임의 경우 7byte, Ethernet 2의 경우 8byte
-
SFD(Start of Frame Delimiter) : 802.3 프레임의 경우에만 존재. Preamble의 끝이자, 이더넷 프레임의 시작을 알리는 10101011의 8비트로 구성(끝부분이 '11')
-
EtherType/패킷길이 : 상위계층의 타입을 알려준다.
- 0x600 이상이면 DIX 2.0인 경우로 Type을, 이하이면 802.3인 경우로 LLC Frame의 길이를 나타낸다.
0800:IPv4
0806:ARP
8035:RARP
814C:SNMP over Ethernet
86DD:IPv6
-
FCS(Frame Check Sequence) : 오류 검출을 위한 CRC
-
프레임 길이는 64 byte ~ 1518 byte이다. 프레임 길이가 최소(64byte)인 경우 data 부분의 길이는 46byte가 되는데, 실제 데이터가 이보다 작은 경우 뒤에 패딩(00000....)을 붙인다.
스위치(L2 스위치 / 스위칭 허브)
- 데이터링크 계층에서 동작한다.
- 스위치를 통해 같은 네트워크(같은 스위치를 통해 연결된 호스트들)상의 호스트에게 데이터를 보낼 수 있다.
MAC 주소 테이블(브릿지 테이블)
- 스위치는 자신의 포트 번호와, 해당 포트에 연결된 컴퓨터의 MAC주소를 저장한다.
- MAC 주소 학습 : 처음 방문하는 순간 MAC주소를 등록한다. 비휘발성처럼 스위치를 켜자마자 등록되어 있는 것이 아니다.
플러딩(Flooding)
- 스위치는 프레임의 Dest Addr가 등록되지 않은 상태에서 데이터를 보낼 때, 연결된 모든 호스트에 데이터를 보낸다. 이후 Dest Addr에 해당하는 호스트에서 Reply가 올 때, 해당 호스트의 MAC주소를 MAC 주소 테이블에 추가한다.(MAC 주소 학습)
랜카드
- 데이터링크 계층의 기술이 구현되어 있는 장치
- 송신할 데이터를 받아서 Ethernet 헤더를 붙이고, FCS를 붙여 전기 신호로 만들어주는 것까지 한다.
3계층 - 네트워크 계층
IPv4 패킷 구조
아래와 같은 헤더가 데이터 앞에 붙는다.

- Version : IP의 버전. 여기선 4이다.
- Header Length : 헤더의 길이. IPv4에선 헤더 길이가 가변적이므로, 이를 표현하는 부분이 필요하다. 1 = 4byte 이다. 5(기본값) ~ 15 까지의 값을 갖는다.
- TOS : 서비스 간 우선순위(DS, 6bit), 혼잡 상태 알리(ECN, 2bit) 등을 표시
- Identification, IP Flags, Fragment Offset : 분할된 패킷을 재조립할 때 사용된다.
- Protocol : 데이터에 어떤 상위 계층 프로토콜이 포함되는지 표시
- Header Checksum : 패킷 전송 과정에서의 오류 검출에 사용된다. 헤더 영역의 오류만 검출한다.
- 헤더를 2byte씩 잘라서 더하고, 추가된 올림 부분까지 더한 후 1의 보수 연산으로 구한다.
IP Fragment
- 네트워크는 MTU(Maximum Transmission Unit / 최대 전송 단위)를 갖기 때문에, 데이터 크기가 이를 초과하면 패킷을 잘라서 보내야 한다.
- 이 때 분할된 패킷을 재조립할 때, Identification, IP flags, Fragment Offset 값이 사용된다.
포워딩, 라우팅
- 네트워크 계층은 라우팅 외에도 포워딩이라는 기능을 수행한다.
라우팅
- 출발지 호스트부터 목적지 호스트까지 경로를 구축하는 것
- Control plane의 영역
포워딩
- 라우터의 입력 포트부터 출력 포트까지 패킷이 옮겨지는 것
- Data plane의 영역
Data plane, Control plane
- Data plane은 데이터의 실제 전송을 책임진다.
- Control plane은 데이터가 어떻게 관리, 라우팅, 처리될지를 결정한다.
- 라우팅은 SW 영역에서 발생하며, Millisecond 단위가 소요된다.
- 포워딩은 HW 영역에서 발생하며, Nanosecond 단위가 소요된다.
이렇듯 오버헤드가 큰 라우팅을 별도로 분리하여 원격 서버에서 관리하는 방식을 SDN(Software-Defined Network) 이라고 한다.
SDN(Software Defined Network)
- 소프트웨어를 통해 네트워크 리소스를 가상화/추상화하는 것
- SW 응용 프로그램과 API를 이용하여 네트워크를 프로그래밍하고, 중앙에서 네트워크를 제어/관리한다.

라우터 포트의 Queueing
포워딩, Data plane과 관련하여 패킷 스케줄링 이라는 개념이 있다.
라우팅을 한다고 해도, 들어오는 패킷을 그 순서대로 보내는 것만으로는 최적을 보장할 수 없다.
가령, 아래와 같은 경우가 있다.
- Switching fabric(입력 포트 ~ 출력 포트 간 패킷 전달 과정)의 전송 속도가 Input 포트의 속도보다 느리면, 아래와 같은 현상이 발생할 수 있다.

- 위 그림에서, 위쪽의 붉은 패킷이 먼저 이동하게 된다.
- 아래의 붉은 패킷은 위쪽의 붉은 패킷이 이동하고 있는 상태이므로, 기다린다.
- 그 뒤에 있는 녹색 패킷은, 현재 지나갈 수 있는 상황임에도 불구하고 앞의 패킷으로 인해 같이 block된다.
Output 포트의 Queueing
- 반면 Switching fabric의 전송 속도보다 Output 포트의 속도가 느리면, 아래 현상이 발생할 수 있다.

- 앞쪽의 붉은 패킷(위, 아래) 2개가 output 포트로 전달된다.
- 다음 붉은 패킷은 전달될 수 있는 상태임에도 불구하고, output 포트에 공간이 없어 block된다.
전송 계층(OSI 4계층)
- 통신의 신뢰성을 보장
- Network Layer는 목적지까지 패킷을 전송하는 역할을 하며, 신뢰성을 책임지지 않는다.(Unreliable)
- 목적지 호스트가 네트워크 상에 존재하는지, 패킷을 수신할 준비가 되어있는지, 전송 과정에서 패킷이 손상/유실되지는 않았는지, 패킷 순서가 뒤바뀌지는 않았는지 검사하지 않는다.
- 전송 계층은, 네트워크 혼잡 상황을 고려해 패킷 전송량을 조절하고(패킷 흐름제어), 패킷 전송 과정에서의 오류를 검출한다.
- TCP연결의 시작, 종료를 위한 3-way, 4-way handshake를 수행한다.
- 동일 호스트 내에서, 프로그램 단위의 구분과 식별(포트번호)
- 목적지 호스트에 도착한 데이터를, 올바른 목적지 애플리케이션에 분배한다.
- 네트워크 계층까지가 호스트 간의 통신을, 전송 계층은 애플리케이션 간 통신을 구현한다.
- 세그먼트 라는 데이터 단위를 사용한다.
TCP 세그먼트

-
TCP 세그먼트의 헤더는 20byte이다. (옵션 제외)
-
Sequence number : 해당 세그먼트 데이터의 첫 바이트가 응용 계층에서 보내는 전체 데이터 스트림 중 몇번째 바이트인지를 표시한다.
ex) 10000 bytes의 데이터를 전송할 때, MSS(Maximum Segment Size, 헤더 부분 제외)가 1000이라면, 첫번째 세그먼트의 Sequence number은 0, 두번째는 1000....이 된다.
3-way handshake와 Sequence number
TCP 연결을 맺을 때 수행되는 3-way handshake는, 서로의 초기 Sequence number값을 알려주기 위해서도 필요하다.
초기 Sequence number를 알려줘야 하는 이유는, 이 값이 난수이기 때문이다.
난수인 이유는, 포트 번호가 재사용될 가능성이 있는 환경에서, 수신한 패킷이 현재 Connection으로부터 오는 것인지, 이전 Connection으로부터 오는 것인지 구분할 필요가 있기 때문이다.
-
Acknowledgement number : 수신 측이 송신 측에게 다음에 받기 원하는 Sequence number이다.
ex) 위 케이스에서 첫번째 세그먼트의 Ack number는 1000, 두번째는 2000....이 된다.
-
Flags
- URG : 해당 세그먼트의 데이터가 non-urgent인 세그먼트의 데이터보다 (수신자 측에서) 우선순위를 갖고 처리되어야 함을 표시
- ACK : 데이터 수신 측이 보낸 Ack number의 값이 유효함을 나타냄
- SYN : TCP 연결을 시작할 때 사용된다.
- FIN : TCP 연결 종료에 사용된다.
- RST : TCP 연결 재설정이 필요할 때 사용. RST 플래그가 1인 세그먼트를 받으면, connection을 닫고 관련된 데이터를 버린다.
- PSH : 수신 측에서 해당 데이터를 버퍼링하지 않고 바로 보내야 함을 의미
-
Window size : 수신 측 수신 버퍼의 남은 공간을 표시. 수신 측 버퍼 오버플로우를 방지하는 흐름 제어에 사용된다.
-
Checksum : 에러 검출용으로 사용됨. 헤더 ~ 데이터를 16비트씩 모두 더하고, 1의 보수를 취함. 수신 측에서 같은 방식으로 다시 계산하여 세그먼트의 Checksum 값과 비교하여 오류를 검사한다.
-
Urgent pointer : 데이터 스트림에서 urgent data의 마지막 바이트가 몇번째 바이트인지를 표시한다.
세션 계층(OSI 5계층)
- 양단 프로세스 간 논리적 연결을 담당
- 통신 중 연결이 끊어지지 않도록 유지
- 프로토콜 : NetBIOS, SAP, SDP, SSH, TLS, RPC 등
주요 기능
-
세션 관리
- 세션을 설정/해제하고, 통신 간 끊어지지 않도록 유지한다.
-
동기 기능

- 데이터의 일정 지점마다 동기점을 부여하고, 오류 발생 시 더 효율적으로 복구한다.
- 오류 발생 시 전체 복구가 아닌, 특정 지점 이후로의 복구를 가능하게 한다.
-
다중화
- 여러 세션들이 효율성을 위해 1개의 전송계층 연결(포트 번호까지 특정된 1개의 연결)을 같이 사용하거나,
- 1개의 세션이 속도 등을 위해 여러 연결을 사용할 수 있음
-
대화 관리
대화 관리
토큰을 사용하여 대화를 관리한다.
토큰
대화를 관리하기 위한 특수한 메시지. 토큰을 갖고 있다는 건, 해당 토큰에 부여된 권리를 배타적으로 소유한다는 것을 의미한다.
데이터 토큰
데이터를 전송할 권리
해제 토큰
통신 양단간 연결 해제 과정을 제어
동기 토큰
동기 처리가 필요한 시점에 사용한다.
동기화

- 양단 프로세스가 모두 동의하는 논리적 동기점을 생성
- 동기점은 효율적인 (통신 간)오류 복구를 위해 필요하다.
- 동기점을 활용한 오류 복구를 재동기 라고 한다.
- 세션 계층의 상위 계층에서는, 적절한 구간마다 동기점을 부여하고, 오류 발생 시 해당 지점으로 돌아가 복구하는 기능이 구현되어야 한다.
- 주동기점과 부동기점이 있다.
- 주동기점 : 그 지점까지는 완벽히 처리가 끝났고, 복구가 필요 없음을 의미
- 부동기점 : 담고 있는 백업 정보가 더 적어서, 오류 복구가 완벽하지 않을 수 있다. 특정 부동기점에서 복구가 불가능하면, 그 직전 부동기점으로 이동하는 과정을 반복한다.
질의응답
Q) Transport Layer와 Network Layer의 차이에 대해 설명해 주세요.
최소 구분(식별) 단위
- 네트워크 계층은 서로 다른 호스트 사이의 통신을 관리한다.
- 전송 계층은 서로 다른 프로세스 사이의 통신을 관리한다.
신뢰성 제공 여부
- 네트워크 계층은 Unreliable하다. 패킷 소실, 중복, 순서 바뀜 등이 없음을 보장하지 않는다.
- 전송 계층의 경우, 신뢰성을 제공하기도 한다.
- TCP 프로토콜의 경우 신뢰성을 보장한다. 위에 언급한 소실, 중복, 순서 바뀜 등에 대한 처리를 해준다.
- UDP 프로토콜의 경우, 효율성을 위해 신뢰성을 보장하지 않는다.
목적
- 네트워크 계층은, 출발지~목적지 간 최적 경로를 설정한다(라우팅)
- 전송 계층은, 양 끝단 간 통신의 신뢰성을 보장한다.
Q) L3 Switch와 Router의 차이에 대해 설명해 주세요.
-
L2 헤더를 참고해서 스위칭하는 장비를 스위치(L2 스위치) 라고 한다.
-
L3 헤더를 참고해서 스위칭하는 장비를 라우터 라고 한다.
-
스위치의 성능이 좋아지면서, IP Packet을 스위칭하는 장치들이 생겨났다. 이를 L3 스위치라고 한다.
-
라우팅 과정을 비교할 때, 라우터가 더 많은 요소(경로의 대역폭, 비용, 지연시간 등..)를 고려한다. 속도 자체는 L3 스위치가 더 빠르다.
Q) 각 Layer는 패킷을 어떻게 명칭하나요? 예를 들어, Transport Layer의 경우 Segment라 부릅니다.
- 각 계층에서 처리하는 데이터 단위를 PDU(Protocol Data Unit)라고 한다.
- 각 계층별 PDU는 아래와 같다.
- 물리 계층 : bit
- 데이터링크 계층 : Frame
- 네트워크 계층 : Packet
- 전송 계층 : Segment (TCP), Datagram (UDP)
- 세션 계층~응용 계층 : Message
다만, Packet은 네트워크 계층 뿐 아니라 다른 계층의 PDU를 지칭하기도 한다.
질문의 의도를 명확히 이해하지 못했다.
데이터가 각 계층을 거치며 packing되는 과정을 살펴보면,

위 그림처럼, 상위 계층에서 받은 데이터에 각 계층의 정보를 추가하는 식이다. 각 계층을 거칠 때마다 캡슐화된다.
가령, 네트워크 계층에서의 헤더 + 데이터는, 데이터링크 계층 입장에서 데이터이다.
목적지 호스트에서 unpacking되는 과정에서는 반대로, 하위 계층에서 받은 데이터에서 자기 계층의 헤더(+트레일러)를 보고 동작을 수행한 뒤, 데이터 부분만 상위 계층으로 올린다.
Q) ARP에 대해 설명해 주세요.
분량 상, ARP란?이라는 글에 별도로 정리했다.
참고 링크