해당 글은 건국대학교 김기천 교수님의 컴퓨터네트워크1 수업 내용을 정리한 글입니다.
The Need for a Protocol Architecture
데이터 전송의 성공을 위해서는 연결의 활성화(Task 1)이후 추가적인 제어 및 준비 작업(Task 2~4)이 필요합니다:
Tast 2) 수신 준비 확인("the source must make sure that destinatioon is prepared to receive data"): 송신 측은 단순히 목적지를 안는 것을 넘어, 목적지가 실제로 데이터를 수신할 준비가 되었는지 확인해야 합니다.
Task 3) Application layer의 조정("the file transfer application on source must confirm file management program at destination is prepared to accept and store file"): 만약 파일 전송 어플리케이션이라면, 송신 측의 application은 목적지 측의 파일 관리 프로그램이 해당 파일을 수학할 준비가 되었는지 확인해야 합니다. 이는 상위 계층 application 간의 사전 협의에 해당합니다.
Task 4) 포맷 변환("a foramt translation function may need to be performed if the formats on systems are different"): 만약 송신 시스템과 수신 시스템의 데이터 포맷이 서로 다를 경우, 포맷 변환 함수가 수행되어야 할 수도 있습니다.
Functions of Protocol Architecture
위와 같은 복잡한 작업들을 효율적으로 관리하기 위해, 프로토콜 아키텍처는 전체 논리를 subtask modules로 분해하며, 이 모듈들은 개별적으로 구현됩니다. 즉, 임의의 layer에서의 변화는 다른 layer에서도 변경이 필요한 것은 아닙니다. 예를 들어, 기술 진보에 따라 물리 계층(physical layer)에 광섬유가 도입되었다고 해서, 나머지 계층들 모두를 변경할 필요는 없습니다.
이 모듈들은 수직적인 스택(vertical stack)의 형태로 배열됩니다. 이는 통신 과정에서 데이터가 계층을 따라 "순차"적으로 처리됨을 의미합니다. 높은 layer는 낮은 layer의 원시적인(primitive) 함수들에 의존하며, 낮은 layer는 높은 layer에 서비스(service)를 제공합니다.
*낮은 layer에 의존하는 것과, 독립적으로 구현된다는 것이 동시에 있을 수 있음을 기억하자. 예를 들어, C언어에서 임의의 함수와 그 함수를 호출하는 함수 간의 독립성은 보장된다고 할 때, 즉, callee 함수가 변경되었다고(callee가 정상적인 동작을 한다는 가정 하에) 해서 caller 함수를 변경할 필요는 없다. 한편, caller는 callee의 기능에 의존한다고도 볼 수 있다.
Key Features of a Protocol
프로토콜은 "peer"계층 간(adjust한 계층 간의 통신이 아니다. 즉, source의 physical layer와 destinatioon의 physical layer간의 소통을 위해서 만들어진 것이지, physical layer와 network access layer간의 통신을 위해서가 아니다)의 통신을 허용하는 규칙 또는 관례의 집합으로, 다음과 같은 세 가지 특징을 갖습니다:
1) 구문(syntax): 데이터 블록의 format을 규정합니다. 예를 들어, TCP에서 src port(16) / dst port(16) / ... 등과 같은 고정/가변 필드의 배치같은 것들이 있으며, 위반 시 parser가 거부하는 등의 형식으로 오류를 처리합니다.
2) 의미(sementics): 조정(coordination) 및 오류 처리를 위한 제어 정보를 다룹니다. 각 메시지/필드가 무엇을 뜻하고, 받는 쪽이 어떤 동작을 해야 하는지 정의하는 것입니다. TCP에서는 SYN은 연결 개시 의사, ACK는 수신 확인 등등이 있습니다. 위반 시 의미 착오로 인해 오동작을 수행합니다.
3) 타이밍(Timing): 속도 일치(spped matching) 및 순서 지정(sequencing)을 담당합니다.
Communication layers
파일 전송 및 전자 메일과 같은 application은 다수의 동시 application을 지원하는 컴퓨터에서 실행되며, 통신 작업은 세 가지 상대적으로 독립적인 계층으로 나눌 수 있습니다:
1) Network access layer: 컴퓨터와 부착된 네트워크 간의 데이터 교환에 중점을 둡니다. 이 계층은 이더넷(ethernet)이나 WiFi와 같은 네트워크 하드웨어와 논리적인 인터페이스를 담당하며, 데이터 속도와 물리적 커넥터 등 물리 계층(physical layer)의 상세 정보와 연결됩니다.
2) Transport layer: 모든 application이 공유하는 매커니즘을 모아놓은 공통 계층입니다. 이 계층은 종단점(end points) 간의 데이터 전송을 처리하며, 신뢰할 수 있는 전달(TCP), 흐름 제어, 혼잡 제어를 제공할 수 있습니다.
3) Application layer: application을 지원하는 로직을 포함합니다.
다음은 protocol architecture의 그림입니다:

위 그림에서 dotted line은 logical connection을, 일반 line은 physical connection을 의미합니다. application protocol이나 transport protocol을 살펴보면 이는 peer 계층간의 소통을 위한 것이지 아래/위 계층간의 소통을 위한 것이 아님을 알 수 있습니다.
Application layer와 Transport layer간의 연결 부분은 port라고 부릅니다. 이는 컴퓨터 내에서 application 1과 2와 같은 상위 엔티티를 식별하는 데 사용되며, transport layer에서 달아주는 header에는 port address가 붙습니다. 아래의 그림을 보면 더 자세히 설명할 수 있습니다:

application layer에서의 raw data가 port 1을 통해서 transport layer와 연결되어 있다면, raw data를 전송할 때 transport layer는 해당 raw data가 "어느 port에서 왔고, 어느 port로 가야하는지"를 header로 달아줍니다. 그 후 Network access layer에서는 "어는 entity에서 출발하고, 어느 entity로 가야하는지"를 header로 달아줍니다. Network access layer에서 사용하는 주소는 network address라고 부르며 컴퓨터 자체를 네트워크상에서 식별하는데 사용합니다. 이는 나중에 IP 주소로 구체화됩니다.
layer를 내려가면서 raw data를 캡슐화하며, layer를 올라가면서 de-캡슐화해서 raw data만 application layer로 전송합니다.
TCP/IP Protocol Architecture
이는 전 세계 인터넷 통신의 근간이 되는 프로토콜 아키텍처입니다. 이는 5개의 계층으로 나눌 수 있습니다:

Application layer: 이는 사용자에게 TCP/IP 환경에 대한 접근을 제공합니다(예: SMTP, FTP, SSH, HTTP 등).
Transport layer(Host-to-Host layer): 이는 종단점(end point)간의 데이터 전송을 담당합니다. 이는 신뢰성 있는 통신을 위해 오류 제어(error control), 흐름 제어(flow control, 송신자가 너무 빨리 보내서 수신자 버퍼가 넘치지 않게 조절하는 것), 혼잡 제어(congestion control, 네트워크가 과부화 되지 않게 네트워크 전체 혼잡을 완화하는 것) 및 신뢰할 수 있는 전달(reliable delivery)을 제공할 수 있습니다(예: TCP, UDP).
Internet layer: 이는 상위 계층을 물리적 네트워크 구성의 세부 사항으로부터 보호하고 routing기능을 제공합니다. 데이터가 상호 연결된 다수의 네트워크를 가로질러 이동할 수 있도록 절차를 구현합니다. QoS나 congestion control을 제공할 수 있습니다(예: IPv4, IPv6). IP를 사용하여 라우팅 기능을 제공하며, 이 프로토콜은 end system과 router 모두에 구현됩니다.
Network Access layer(Data Link layer): 네트워크 하드웨어에 대한 논리적 인터페이스를 제공하며, stream(예: circuit switching)이나 packet기반입니다. reliable delevery를 제공할 수도 있습니다(만약 Transport layer의 protocol이 UDP이면 불가능합니다). 이는 컴퓨터와 부착된 네트워크 간의 데이터 교환을 담당하며, 동일 네트워크에 연결된 두 엔드 시스템 간의 데이터 접근 및 라우팅을 처리하는 데 관련됩니다(예: WiFi, Ethernet, ATM, Frame relay).
Physical layer: 비트 스트림의 전송을 담당합니다. 즉, 컴퓨터와 네트워크 간의 물리적 인터페이스를 다룹니다.
아래 그림은 TCP/IP protocol suite를 그림으로 나타낸 것입니다:

이때 Router J는 routing기능만 제공하면 되기 때문에, internet layer까지만 존재하며, Router J와 Host B사이에 존재하는 Logical connection은 virtual circuit(예: ATM, Frame Relay 등)으로 QoS를 위해 사용하는 것 입니다.
한편 TCP/IP는 두 가지 수준의 addressing을 필요로 합니다:
1) subnetwork에 있는 각 host들은 반드시 global internet address(예: IP)를 가지고 있어야 합니다.
2) host에 존재하는 각 process들은 port라고 불리는 unique한 address를 가지고 있어야 합니다.
아래의 그림은 각 protocol들의 data 단위를 보여줍니다:

TCP
TCP는 대부분의 application을 위한 transport layer protocol입니다. 이는 application간 데이터 전송을 위해 reliable connection을 제공합니다. TCP segment가 기본 단위이며, TCP는 연결 기간 동안 entity 간에 전송되는 segment들을 추적합니다. 예를 들어, Host-to-Host connection에서 segment의 순서가 꼬이는 경우 이를 추적하고 있기 때문에 다시 reorder할 수 있습니다.
UDP
UDP는 TCP의 대안으로서 사용됩니다. 이는 delivery를 보장하지 않으며, 순서 보존이나 중복 방지도 보장하지 않습니다. 즉, unreliablility를 제공합니다. 하지만 최소한의 프로토콜 메커니즘만으로 메시지를 다른 process로 보낼 수 있다는 장점이 존재합니다.
다음은 TCP와 UDP의 header구조(syntax) 입니다:

header구조:
TCP 헤더(기본 20B, 옵션 포함 시 최대 60B)
- Source Port (16) / Destination Port (16)
송·수신 애플리케이션 식별(소켓의 포트 번호). - Sequence Number (32)
이 세그먼트에 실린 첫 바이트의 번호. 초기 연결 때 ISN을 랜덤 선택하며, SYN은 시퀀스 번호 1개를 소비. - Acknowledgment Number (32)
다음에 기대하는 바이트 번호(= 마지막으로 잘 받은 바이트 + 1). ACK 플래그가 켜져 있을 때만 유효. - Data Offset / Header Length (4)
TCP 헤더 길이를 32비트 워드 개수로 표시. 최소 5(=20B), 최대 15(=60B). - Reserved (3, 과거용/미사용)
항상 0으로 전송(미래 확장용). - Flags (제어 비트, 전통 6개 + ECN 관련 확장)
- URG: Urgent Pointer 유효(거의 사용 안 함)
- ACK: Acknowledgment Number 유효
- PSH: 수신 측이 버퍼링 최소화하고 즉시 상위로 밀어올리라는 힌트
- RST: 연결 비정상 초기화/리셋
- SYN: 연결 생성(핸드셰이크)
- FIN: 정상 종료 의사
- ECE/CWR/NS: ECN 관련(혼잡 알림 수신/정리, Nonce—거의 사용 안 함)
- Window (16)
수신 측이 광고하는 수신 버퍼 여유 크기(rwnd). 실제 송신 윈도우는 min(rwnd, cwnd). - Checksum (16)
TCP 헤더+데이터 그리고 IP 의사(pseudo) 헤더까지 포함한 1의 보수 합. 손상 검출. - Urgent Pointer (16)
URG가 1일 때, 긴급 데이터의 끝 위치를 가리킴(현재는 거의 미사용). - Options + Padding (가변)
- MSS(세그먼트 페이로드 최대 크기, SYN 때 보통 교환)
- Window Scale(고대역·고지연 환경에서 윈도우 확장)
- SACK Permitted / SACK Blocks(선택적 재전송)
- Timestamps(정밀 RTT 측정, PAWS)
- 필요 시 NOP로 4바이트 정렬 패딩.
UDP 헤더(고정 8B)
- Source Port (16) / Destination Port (16)
포트 번호. 송신 포트는 0을 사용할 수도 있음(응답 불필요한 경우 등). - Length (16)
헤더+데이터 전체 길이(최소 8). MTU를 넘으면 IP 단편화 이슈. - Checksum (16)UDP 헤더+데이터 및 IP 의사 헤더에 대한 체크섬.
- IPv6에서는 필수,
- IPv4에서는 선택(0이면 미사용을 의미).
다음은 IP header의 구조입니다:


header 구조:
IPv4 헤더 (최소 20B, 옵션 포함 최대 60B)
- Version (4b): IP 버전(항상 4).
- IHL – Internet Header Length (4b): 헤더 길이(단위: 32-bit word). 최소 5(=20B).
- DS(6b)/ECN(2b):
- DS = DSCP: 우선순위/서비스 클래스(품질관리, QoS).
- ECN: 혼잡을 비손실로 알리는 표시(라우터가 CE로 마킹).
- Total Length (16b): 헤더+데이터 전체 길이(최대 65,535B).
- Identification (16b): 단편화된 조각(fragment)들을 재조립할 때 묶어주는 ID.
- Flags (3b):
- bit0: 예약(0)
- DF(Don’t Fragment): 라우터 단편화 금지. 필요하면 ICMP “Fragmentation Needed” 보냄.
- MF(More Fragments): 뒤에 조각 더 있음(마지막 조각은 0).
- Fragment Offset (13b): 원본 데이터 내 위치(단위 8바이트). 재조립에 사용.
- Time to Live (8b): 홉을 지날 때마다 1씩 감소, 0이면 폐기(루프 방지).
- Protocol (8b): 상위 프로토콜 식별(TCP=6, UDP=17, ICMP=1 등).
- Header Checksum (16b): IPv4 헤더만 대상으로 한 오류 검출(라우터마다 재계산).
- Source Address / Destination Address (각 32b): IPv4 주소.
- Options + Padding (가변): RR/TS/보안 등 옵션, 32-bit 정렬 패딩.
IPv6 헤더 (고정 40B)
- Version (4b): 항상 6.
- DS(6b)/ECN(2b): IPv4의 DSCP/ECN과 동일 개념(IPv6에서는 “Traffic Class”의 구성).
- Flow Label (20b): 동일 흐름(연결) 식별용 힌트(QoS/ECMP에서 동일 경로/처리 보장 시 활용).
- Payload Length (16b): 베이스 헤더(40B) 제외 페이로드 길이(확장헤더 포함).
65,535B 초과는 Hop-by-Hop 옵션의 Jumbo Payload로 처리. - Next Header (8b): 다음에 오는 확장 헤더 또는 상위 프로토콜(TCP=6, UDP=17, ICMPv6=58, Routing=43, Fragment=44, Hop-by-Hop=0, Dest Options=60 …).
- Hop Limit (8b): TTL과 동일 개념(홉마다 1 감소).
- Source / Destination Address (각 128b): IPv6 주소.
- 확장 헤더(Extension Headers): 베이스 헤더 뒤에 사슬처럼 연결(Next Header로 연결).예) Hop-by-Hop → Routing → Fragment → Destination Options → TCP …
다음은 TCP/IP protocol suite의 다른 protocol들 입니다:

Service Primitives and Parameters
인접한 계층(수직적) 간의 상호 작용은 service primitives 및 parameter를 사용하여 표현됩니다. primitives는 수행할 기능을 지정하며, parameter는 데이터 및 제어 정보를 전달하는 데 사용합니다. 예를 들어, 다음과 같은 primitives들이 존재합니다:

Request: 서비스 사용자(upper layer)가 서비스를 요청할 때 사용합니다.
Indication: 서비스 제공자(lower layer)가 이벤트를 통보하거나 요청이 도착했음을 알릴 때 사용합니다.
Response: Indication에 대한 응답으로, 서비스 사용자(upper layer)가 응답을 보낼 때 사용합니다.
Confirm: 요청된 서비스의 완료 또는 결과를 통보할 때 사용합니다(lower -> upper)
다음은 service primitives의 시간 순서 다이어그램입니다:

왼쪽(a) confirmed service(예: TCP)의 경우는 response와 confirm까지 service하는 반면, Nonconfirmed service(예: UDP)의 경우는 Request와 Indication까지만 존재한다는 것을 알 수 있습니다.
다음은 TCP 위에서 동작하도록 표준화 된 application layer protocol들 중 세 가지의 전통적인 프로토콜들 입니다:

Multimedia Terminology
Media: media는 text, images, audio와 video를 포함하는 다양한 형태의 information을 말합니다.
Multimedia: multimedia는 text, graphic, voice나 video를 포함하는 인간-컴퓨터 상호작용을 말합니다. 또한 multimedia content를 저장하는 저장 기기를 말하기도 합니다.
Streaming media: video clips이나 audio같은 multimedia file을 즉각적으로 틀거나 internet을 통해 받을 수 있습니다. 그러므로 multimedia content를 다운로드 받지 않고 바로 소비할 수 있습니다.
다음은 media종류입니다:
1) 오디오: 일반적으로 인간의 음성 매커니즘으로 생성된 소리를 포괄합니다.
2) 이미지: 개별적인 그림, 차트 또는 도면의 통신을 지원합니다.
3) 비디오: 시간 순서대로 일련의 그림을 전달하는 서비스입니다. 비디오 트래픽은 디지털화될 때 엄청난 용량을 차지하기 때문에, 이미지 및 비디오 트래픽이 네트워크에서 극적으로 증가하는 요인이 됩니다.
4) 텍스트: 키보드를 통해 입력되며 직접 읽거나 인쇄할 수 있는 정보입니다.
다음은 multimedia system의 분야와 적용 예시입니다:

다음은 multimedia의 응용 분야입니다:

multimedia를 지원하기 위해서는 다음과 같은 기술들이 필요합니다:
1) 압축: 대용량 미디어를 효율적으로 전송하기 위해서는 필수적입니다(예: JPG(정지 이미지 압축), MPG(비디오 압축)).
2) 통신 네트워킹: 고용량 멀티미디어 트래픽을 지원할 수 있는 전송 및 네트워킹 기술을 의미합니다. 이는 광섬유와 고속 무선의 증가된 용량으로 인해 가능해졌습니다.
3) 프로토콜: 실시간 통신 및 세션 관리를 위한 프로토콜이 중요합니다(예: RTP(Real-time Transport Protocol, 실시간 데이터 전송을 위한 프로토콜), SIP(Session Initiation Protocol, 세션 초기화 및 관리를 위한 프로토콜)).
4) QoS: 멀티미디어는 delay constraints나 delay variability 및 우선순위와 같은 요구사항에 민감할 수 있습니다.
Sockets Programming
socket은 client와 server 프로세스 간의 통신을 가능하게 하며, 사실상의 표준(API)가 되었습니다. 이는 연결 지향(connection oriented) 또는 비연결형(connectionless)일 수 있습니다.
socket은 port value와 IP 주소를 결합함으로써 형성되기 때문에 인터넷 전체에서 unique합니다. 이런 socket은 TCP 또는 UDP를 사용하는 프로그램 작성을 위한 API를 정의하는 데 사용됩니다.
socket은 제공하는 서비스의 신뢰성에 따라 다음과 같이 구분됩니다:
1) Stream socket: 데이터 블록의 전달이 보장되며, 보낸 순서대로 도착합니다. 이는 connection oriented 방식이며, TCP와 연결됩니다.
2) Datagram socekt: 전달이 보장되지 않으며, 순서도 반드시 보존되지 않습니다. 이는 connectionless 방식이며, UDP와 연결됩니다.
3) raw socket: 하위 계층 프로토콜에 직접 접근할 수 있도록 허용합니다.
'[Konkuk Univ. 3rd] > [Computer Network1]' 카테고리의 다른 글
| [Computer Network1] 06- Error Detection (0) | 2025.11.05 |
|---|---|
| [Computer Network1] 05 - Signal Encoding Techniques (1) | 2025.10.11 |
| [Computer Network1] 04 - Transmission Media (0) | 2025.10.09 |
| [Computer Network1] 03 - Data Transmission (1) | 2025.10.04 |
| [Computer Network1] 01 - Overview (3) | 2025.09.16 |