분류 전체보기

네트워크

HTTP/1, HTTP/2 & HTTP/3

이번 포스팅에선 HTTP가 발전되어온 과정과 그 특징들을 살펴보려고 한다. HTTP/0.9 HTTP/0.9 의 경우 매우 초기 버전의 프로토콜로, 단순히 GET 요청에 응답을 주고받는 기능에 불과하였다. HTTP/1.0 HTTP/1.0 버전에서 헤더가 추가되었고, GET외에도 PUT, POST, DELETE 등의 메소드를 구분하여 요청할 수 있게 되었다. 기본적으로 HTTP는 TCP/IP를 기반으로 동작하는데, HTTP/1.0 버전에선 동일한 서버에 대한 모든 요청에는 별도의 TCP 커넥션이 수립되어야 했다. TCP 커넥션 수립 자체도 3-way handshake 같은 과정이 수행되어 네트워크를 통해 여러번의 요청을 주고받아야 했기 때문에 이는 성능 저하, 서버 부하 비용증가로 이어졌다. HTTP/1.1..

Linux kernel

Dynamic Timer

커널에는 2가지 종류의 타이머가 존재한다. 하드웨어에 의해 일정한 주기마다 인터럽트가 발생되어 작업을 처리하는 system timer 와, 소프트웨어로 구현되어 특정 시간이 경과된 이후 한번 작업을 실행하는 dynamic timer 가 있다. 커널은 dynamic timer 를 동적으로 생성하거나 제거할 수 있고, 등록된 작업은 system timer 의 timer interrupt handler 과정에서 처리 된다. 이 포스팅에선 dynamic timer 에 구조와 구현방법을 위주로 살펴보려고 한다. 시스템 타이머의 인터럽트를 timer interrupt, timer interrupt 간의 주기를 tick 이라고 한다. 커널은 tick rate 를 미리 알고 있으며, 이를 활용하여 wall time (..

네트워크

[OSI 7 Layer] Network Layer

Neywork Layer 다음으로 3계층 네트워크 레이어에 대하여 살펴보겠다. 3계층의 역할은 네트워크를 거쳐 원하는 목적지까지의 연결성을 제공하는 것이다. 중요한 특징은 3계층은 best-effort 방식으로, 최대한의 노력은 하지만 항상 데이터 전송이 성공하는 것을 보장하지 못한다. 이에 따른 신뢰성 보장은 4계층에서 담당한다. 또한, connection less 라는 특성을 가지기 때문에 TCP 커넥션이 맺어져도 경로는 매번 다를 수 있다. 3계층의 주요 프토콜은 IP(Internet Protocol)이다. 3계층의 장비들은 서로를 인식하고 통신하기 위해 IP주소를 활용한다. 이 때 3계층의 주요 장비는 라우터이며, 핵심 기능은 forwarding 과 routing 이 있다. 라우터에선 routin..

네트워크

[OSI 7 Layer] Link Layer

Link Layer 2계층은 인접한 스테이션간의 신뢰성 있는 통신을 보장한다. 여기서 인접한 스테이션이란 직접 연결되어 있는 다른 네트워크 장비라고 생각할 수 있다. 데이터를 전송하면 여러 네트워크 장비를 거치며 최종 목적지까지 도달하게 될텐데, 매 과정마다 자신과 가장 인접한 네트워크 장비에 데이터를 보내는 과정이 포함될 것이다. 2계층은 그러한 인접 스테이션간의 데이터 전송 신뢰성을 보장하는 계층이다. 어떻게 보장한다는 걸까? 먼저 신뢰성을 보장한다는 것을 크게 2가지로 분류하면 다음과 같다. 데이터가 깨지거나 누락되지 않아야 한다. 여러 인접 스테이션이 한 인접 스테이션으로 데이터를 전송할 때 데이터가 겹치지 않고 문제없이 전송되어야 한다. 이 두가지를 보장해주는 것이 사실상 2계층에서 제공하는 핵..

네트워크

[OSI 7 Layer] Overview & Physical Layer

Overview OSI 7 계층은 네트워크의 구조를 7개층으로 계층화 한 모델로, 네트워크의 전반적인 통신 과정을 보다 수월하게 파악할 수 있도록 도와준다. 이와 비슷한 역할의 TCP/IP protocol 모델도 존재하는데, 이 둘의 차이는 TCP/IP 모델에선 OSI 7 Layer 의 5~7 계층을 하나의 Application 계층으로 통일 했다는 점이다. 이번 포스팅에선 OSI 7 Layer 기준에 따라 1~4 계층에 대하여 bottom-up 방식으로 공부하여 정리해보고자 한다. 위와 같이 각 계층 별로 데이터 단위가 존재하며, 1~4계층의 정보단위를 각각 비트, 프레임, 패킷, 세그먼트라고 칭한다. 각각의 계층에 대한 역할 및 기능을 파악해 두는 것이 좋다. 먼저 1계층 Physical Layer ..

Linux kernel

sysfs

sysfs sysfs는 디바이스 모델에 근거한 디바이스 연결관계를 tree 형태로 user space 에서 보여주는 메모리 상에 존재하는 가상 파일 시스템이다. sysfs의 주요 목적은 사용자 프로그램이 커널의 장치 모델과 상호 작용하고, 장치 정보를 쿼리하고, 때때로 장치의 속성을 수정할 수 있도록 해주는 것이다. 보통 sysfs 는 /sys 디렉토리에 마운트 된다. sysfs에 대하여 파악하기 위해선 kobject 를 알아야 한다. kobject 는 객체지향언어에서 사용하는 object calass 와 비슷한 개념의 모델로서 커널 내의 여러 구성 요소 간의 관계를 모델링하는 데 사용되며, 커널의 객체들을 sysfs 가상 파일 시스템을 통해 사용자 공간에 노출하기 위한 메커니즘을 제공한다. 이는 참조횟..

Linux kernel

Device Driver

Device Driver 리눅스 시스템에선 모든 것을 파일로 취급한다고 해도 무방하다. 파일을 크게 정규파일, 장치파일로 나눌 수 있다. (이외에도 디렉토리, Symbolic link, Named Pipes, Socket 등의 파일 종류도 존재한다. 여기선, Devcie Driver 에 집중하기 위해 생략했다) 유저 프로그램 관점에서 정규파일과 장치파일에 접근하는 것은 다음과 같은 차이가 존재한다. 정규 파일 접근: 시스템 콜을 호출하여 파일에 관한 작업을 요청 할 때 이는 VFS 를 통해 파일 시스템 계층으로 전달되어 실질적인 동작은 파일 시스템에서 이뤄지게 된다. 이 경우 유저프로그램과 디바이스 드라이버와의 상호 작용은 간접적으로 발생한다. 장치파일 접근: 마찬가지로 시스템 콜을 호출한다. 요청은 ..

Linux kernel

virtual file system (VFS)

리눅스에서 사용 가능한 파일 시스템은 다양하게 존재한다. 먼저, 왜 다양하게 존재하는 걸까? 그 이유는 계속 발전되어왔기 때문이기도 하며, 각 파일시스템마다 장단점이 다르기 때문이기도 하다. 예를들어, 일반적인 데스크탑에선 다양한 시스템에 적용될 수 있는 범용 목적의 기능들이 포함되며, HDDs SDDs 를 위해 최적화 되어 있다. 더 큰 파일 시스템과, 더 많은 범위에 파일 사이즈를 지원한다. 이에 비해 모바일이나 임베디드 디바이스에선 주로 NAND 플래시 메모리를 사용하기 때문에, 그에 최적화된 다른 파일 시스템을 사용한다. 모바일 또는 임베디드 시스템에서 일반적으로 사용되는 NAND 플래시 메모리의 경우 메모리 셀의 프로그램/지우기(P/E) 주기가 제한되어 있으며, 특정 횟수의 P/E 사이클이 지나..

sjoonb
'분류 전체보기' 카테고리의 글 목록 (5 Page)