이것저것 CS 개념들
이것저것 CS 개념들

이것저것 CS 개념들

설명
네트워크, OS 등등 기술면접 대비. 쓰고보니 대부분 네트워크 위주….
Last Updated
Last updated July 22, 2023
태그
Linux
OS
Tech interview
기술면접
CS
Computer Science

네트워크

TCP와 UDP란 무엇인가?

TCP (Transmission Control Protocol)와 UDP (User Datagram Protocol)는 모두 인터넷 프로토콜 스위트의 핵심 요소입니다. 이 둘은 데이터를 한 장치에서 다른 장치로 안전하게 전송하는 방법을 제공하는데, 그 방식에는 큰 차이가 있습니다.

TCP (Transmission Control Protocol)

TCP는 '연결 지향형 프로토콜'로, 데이터를 보내기 전에 수신자와 먼저 '핸드셰이크'를 통해 연결을 설정합니다. 이 방식은 데이터가 정확하게, 순서대로 도착하도록 보장하지만, 이런 과정은 상대적으로 시간이 더 걸리는 단점이 있습니다.

TCP의 3-way Handshaking 과정

[STEP 1]
A클라이언트는 B서버에 접속을 요청하는 SYN 패킷을 보낸다. 이때 A클라이언트는 SYN 을 보내고 SYN/ACK 응답을 기다리는SYN_SENT 상태가 되는 것이다.
[STEP 2]
B서버는 SYN요청을 받고 A클라이언트에게 요청을 수락한다는 ACK 와 SYN flag 가 설정된 패킷을 발송하고 A가 다시 ACK으로 응답하기를 기다린다. 이때 B서버는 SYN_RECEIVED 상태가 된다.
[STEP 3]
A클라이언트는 B서버에게 ACK을 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게 되는것이다. 이때의 B서버 상태가 ESTABLISHED 이다.
위와 같은 방식으로 통신하는것이 신뢰성 있는 연결을 맺어 준다는 TCP의 3 Way handshake 방식이다.

UDP (User Datagram Protocol)

반면 UDP는 '비연결형 프로토콜'로, 핸드셰이크 없이 데이터를 보내버립니다. 이는 전송 속도는 빠르지만, 데이터의 도착 순서나 무결성을 보장하지 않는 단점이 있습니다.

어떤 경우에 TCP와 UDP를 사용하나?

TCP의 활용 사례

TCP는 데이터의 정확성과 순서가 중요한 상황에서 사용됩니다. 이메일, 웹 페이지, 파일 전송 등에 적합하며, 가장 많이 사용되는 프로토콜 중 하나입니다.
응답 메시지의 크기가 512바이트를 초과하는 경우 등 큰 데이터를 전송해야 하는 경우 TCP 연결 사용

UDP의 활용 사례

반면에 UDP는 스트리밍 비디오, 인터넷 전화, 온라인 게임 등 실시간 통신이 필요한 상황에서 사용됩니다. 이 경우, 소량의 데이터 패킷 손실이 발생하더라도 전체적인 성능에 큰 영향을 미치지 않기 때문입니다.
UDP는 작은 크기의 패킷을 빠르게 전송하는 데 적합

결론

TCP와 UDP는 각각 다른 방식으로 데이터를 전송하며, 각각의 방식은 특정 상황에서 이점을 제공합니다. 따라서 이 둘은 서로 보완적인 관계에 있으며, 인터넷의 다양한 서비스를 지원하기 위해 사용됩니다.
이번 글을 통해 TCP와 UDP에 대한 기본적인 이해를 얻으셨길 바랍니다. 다음에는 이 둘을 활용한 실제 애플리케이션 사례 등을 더 깊게 다루도록 하겠습니다. 궁금한 점이 있으시다면 언제든지 댓글로 남겨주세요!
 

TLS/SSL 핸드셰이크

SSL Handshake의 과정을 그린 그림을 가져왔습니다. 여기 파란색 칸과 노란색 칸은 네트워크 상에서 전달되는 IP Packet을 표현한 것입니다. 맨 윗줄의 SYN, SYN ACK, ACK는 TCP layer의 3-way handshake로 HTTPS가 TCP 기반의 프로토콜이기 때문에 암호화 협상(SSL Handshake)에 앞서 연결을 생성하기 위해 실시하는 과정이고 아래 노란색 상자의 패킷들이 SSL Handshake입니다.
  1. 클라이언트(사용자의 컴퓨터)와 서버는 handshake 과정을 통해 암호화 통신을 시작합니다.
  1. 클라이언트는 랜덤 데이터(클라이언트가 지원하는 암호화 및 기타 통신 매개변수)를 생성해서 서버에 보내고 (client_hello), 서버는 그에 대한 답변으로 랜덤 데이터와 인증서(서버 인증서와 암호화를 위한 매개변수)를 클라이언트에게 보냅니다.(server_hello)
  1. 클라이언트는 인증서가 진짜인지 확인하기 위해 브라우저에 내장된 CA(Certificate Authority) 인증 정보를 통해 검증합니다.
  1. 이 과정에서 비대칭 키 시스템이 사용되며, CA의 개인 키로 암호화된 인증서는 브라우저에 저장된 공개키를 통해 확인됩니다.
  1. 데이터 통신은 대칭 키 방식과 비대칭 키 방식이 혼합되어 사용됩니다. 비대칭 키 방식은 보안이 강하지만 처리속도가 느리므로, 데이터의 실제 통신은 대칭 키 방식을 사용합니다.
  1. 대칭 키는 통신 과정에서 누출되는 위험이 있으므로, 이를 공유할 때는 비대칭 키 방식이 사용됩니다.
이러한 핸드셰이크 프로세스를 통해 클라이언트와 서버는 서로의 신원을 확인하고 보안 연결을 설정합니다.
 

상세 내용 참고

HTTPS가 뭐고 왜 쓰나요? (Feat. 대칭키 vs. 비대칭키)
#https #대칭키 #비대칭키 오늘날 운영하는 웹사이트를 HTTPS로 세팅하는 것은 필수가 되었죠. 하지만 이 HTTPS란것이 무엇이며, 이를 사용하는 것이 왜 중요할까요? 🤔 정보를 암호화하고 다시 푸는 두 방식인 대칭키와 비대칭키 시스템을 사용해서 어떻게 HTTPS가 사이트 이용의 🚨보안성을 강화하는지 알아보기로 해요. = = = 🏠 얄코사이트: https://www.yalco.kr 🛒 개발자스티커 구매: https://smartstore.naver.com/honeykers 🎥 가장 쉬운 Git 튜토리얼: https://youtu.be/FXDjmsiv8fI 🎥 포인터 쉽게 알아보기: https://youtu.be/u65F4ECaKaY 🎥 객체지향에 대해 알아보기: https://youtu.be/vrhIxBWSJ04 🎥 객체지향 디자인 패턴: https://youtu.be/lJES5TQTTWE 🎥 함수형 프로그래밍이란?: https://youtu.be/jVG5jvOzu9Y 🎥 쿠키 vs 세션 vs 캐시: https://youtu.be/OpoVuwxGRDI 🎥 프로세스와 스레드: https://youtu.be/iks_Xb9DtTM 🎥 비동기 프로그래밍: https://youtu.be/m0icCqHY39U 🎥 REST API 알아보기: https://youtu.be/iOueE9AXDQQ 🎥 GraphQL 알아보기: https://youtu.be/EkWI6Ru8lFQ 🎵 엔딩송 : 권민호, 김한영 - Let's Dance 🎼 자료출처 : https://gongu.copyright.or.kr 🎼 Music promoted by DayDreamSound : https://youtu.be/L16GOic2UXw 🎬 영상 주요 포인트 🛡 HTTPS를 사용하는 이유 HTTP'S'의 s는 secure에요. 즉 기존의 HTTP 사이트보다 안전하다는 얘기죠. 무엇으로부터 안전할까요? 크게 둘로 나뉘어요. 먼저, 내가 어떤 웹사이트에 보내는 정보를 다른 누군가 훔쳐보지 못하게 합니다. ... 다른 하나는, 여러분이 접속한 사이트가 진품인지, 신뢰할 수 있는 사이트인지를 판별해주는거에요. 🔑 대칭키의 개념 그동안 널리 사용되어 온 건 대칭키 방식이에요. 메시지를 보내는 쪽과 메시지를 받는 쪽이 메시지를 암호화하고, 이를 다시 메시지로 바꾸는 즉 복호화하는 같은 방식을 공유하는거죠. ... 이런 임의의 문자열이 있어요. 이걸 '키'라고 부릅니다. (예시: @#%#%$^#$^#) 4에 3을 곱하면 12가 되죠. 상대방에게 보내고자 하는 메시지를 이 '키'와 함께 어떤 알고리즘에 넣고 돌리면 이처럼 전혀 알 수 없는 암호문이 만들어져요. 12에서 4를 얻어내려면, 3으로 나눠야 하는것처럼 이 암호문을 받은 사람이 이걸 해독하려면 이 키값을 알고, 이 알고리즘을 거꾸로 돌리면 돼요. (딱) 이 과정을 복호화라고 하죠. 이 '키'값을 알지 못하면 절대 이 암호문을 해독할 수 없어요 🗝 비대칭키의 개념 이를 보완한 새 방식이 1970년대에 수학자들에 의해 개발됐어요. 비대칭키, 또는 공개키라 불리는 시스템이죠. 여기에는 두 개의 키가 사용돼요. 각각 A키와 B키라고 부를게요. 이 둘은 한 쌍이에요. 서로 다르기 때문에 '비대칭키'라고 불립니다. 이 암호화 방식을 개발자들은 보통 '공개키'라고 많이 부르는데 이 영상에서는 여러분이 헷갈리지 않도록 '대칭키'와 상반되는 개념으로 '비대칭키' 방식이라 부를게요. 대칭키 시스템에서는 어떤 키로 암호화를 하면 같은 키로 복호화를 할 수 있었지만, 여기서는 A키로 암호화를 하면 B키로만 복호화할 수 있어요. 반대로 B키로 암호화를 하면 A키로만 풀 수가 있죠. 🏢 Certificate Authority 일단 네이버가 우리에게 뿌린 공개키. 이게 정품인지를 확인할 수 있어야죠. 네이버가 아니라 네이놈의 공개키일수도 있으니까요. 이걸 인증해주는 공인된 민간기업들이 있어요. Certificate Authority, 줄여서 CA 라고 부르죠. 이런 회사들이에요. 아무나 차려서 될 수 있는게 아니라 엄격한 인증과정을 거쳐야 CA를 할 수 있는거에요. 여러분의 브라우저, 즉 크롬이나 사파리, 파이어폭스, 엣지, 익스플로러 등의 프로그램에는 이 CA들의 목록이 내장돼있어요. 🌟 위 개념들을 사용해서 구체적으로 어떻게 HTTPS의 보안이 이뤄지는지 영상에서 확인하세요!
HTTPS가 뭐고 왜 쓰나요? (Feat. 대칭키 vs. 비대칭키)

IPv6 vs. IPv4: 미래를 향한 네트워크 통신의 변화

소개:

IPv4(인터넷 프로토콜 버전 4)와 IPv6(인터넷 프로토콜 버전 6)은 현재 인터넷에서 사용되는 두 가지 주요 인터넷 프로토콜입니다. IPv4는 인터넷의 기반이 되어 오랫동안 사용되어왔으나, 주소 부족과 보안 취약점 등의 한계로 인해 IPv6가 개발되었습니다. 이 글에서는 IPv4와 IPv6의 개념과 특징, 그리고 두 프로토콜의 차이점과 미래에 대한 전망에 대해 알아보겠습니다.
 

1. IPv4 소개

  • 개념: IPv4는 인터넷에서 가장 오래된 버전의 인터넷 프로토콜로서, 32비트 주소 체계를 사용하여 네트워크 장치들이 서로 통신할 수 있도록 합니다.
  • 특징:
    • 32비트 주소 체계: IPv4 주소는 32비트로 표현되며, 약 43억 개의 고유한 IP 주소를 생성할 수 있습니다.
    • 클래스 기반 주소 할당: IPv4 주소는 A, B, C, D, E 클래스로 구분되어 각 클래스별로 주소가 할당됩니다.
    • 주소 부족: 급격한 인터넷 확장으로 인해 IPv4 주소가 부족해지는 문제가 발생했습니다.
    • 네트워크 주소 변환(NAT): 주소 부족을 해결하기 위해 NAT를 사용하여 사설 IP 주소를 공인 IP 주소로 변환하는 방법이 사용되었습니다.

2. IPv6 소개

  • 개념: IPv6는 IPv4의 한계를 극복하기 위해 개발된 새로운 인터넷 프로토콜로서, 128비트 주소 체계를 사용하여 더 많은 고유한 IP 주소를 제공합니다.
  • 특징:
    • 128비트 주소 체계: IPv6 주소는 128비트로 표현되며, 약 340,282,366,920,938,463,463,374,607,431,768,211,456 개의 고유한 IP 주소를 생성할 수 있습니다.
    • 간단한 헤더 포맷: IPv6 헤더는 간소화되어 처리 속도를 향상시키고, 라우팅 효율성을 높입니다.
    • 자동 구성 및 플러그 앤 플레이: IPv6는 호스트가 자동으로 주소를 구성하고, 새로운 장치를 추가할 때 플러그 앤 플레이가 가능합니다.
    • 보안 강화: 인증 및 데이터 암호화를 지원하여 더욱 안전한 통신이 가능합니다.

3. IPv6와 IPv4의 차이점

  • 주소 크기: IPv4는 32비트 주소를 사용하고, IPv6는 128비트 주소를 사용합니다.
  • 주소 개수: IPv4는 약 43억 개의 주소를 제공하며, IPv6는 약 340,282,366,920,938,463,463,374,607,431,768,211,456 개의 주소를 제공합니다.
  • 헤더 포맷: IPv6 헤더는 간소화되어 처리 속도를 향상시키고, IPv4 헤더보다 더 큰 유연성을 가지고 있습니다.
  • 주소 구성: IPv6는 자동으로 주소를 구성하며, 새로운 장치를 추가할 때 플러그 앤 플레이가 가능합니다. IPv4는 수동으로 주소를 구성해야 합니다.
Anycast address
  • IPv4: IPv4에서는 Anycast 주소를 지원하지 않습니다. Anycast 주소는 한 그룹의 호스트 중에서 가장 가까운 위치에 있는 하나의 호스트에게 패킷을 전달하는 방식으로 사용됩니다.
  • IPv6: IPv6는 Anycast 주소를 지원합니다. Anycast 주소를 사용하면 동일한 IPv6 주소를 여러 대의 호스트가 공유할 수 있으며, 패킷은 가장 가까운 호스트로 전달됩니다. 이를 통해 부하 분산과 네트워크 효율성을 향상시킬 수 있습니다.
Fragmentation
  • IPv4: IPv4에서는 패킷 크기가 MTU(Maximum Transmission Unit)보다 큰 경우 패킷을 작은 조각들로 나누는 프래그먼테이션 기능이 있습니다. 하지만 이는 중간 라우터에서 추가적인 처리를 필요로 하며, 성능 저하를 가져올 수 있습니다.
  • IPv6: IPv6에서는 중간 라우터에서의 프래그먼테이션을 지원하지 않습니다. 대신, 송신자가 최적의 MTU를 찾아 보내는 패킷의 크기를 조절합니다. 이는 라우터에서의 추가적인 처리를 없애고 전송 효율성을 증가시킵니다.
Options
  • IPv4: IPv4에서는 패킷 헤더에 옵션 필드를 포함할 수 있습니다. 하지만 대부분의 IPv4 패킷은 옵션 필드를 포함하지 않으며, 사용 빈도가 낮습니다.
  • IPv6: IPv6에서는 패킷 헤더에 옵션 필드를 더이상 사용하지 않습니다. 옵션 필드가 없어지면서 헤더의 크기가 간소화되고, 네트워크 처리 속도가 향상됩니다.
SNMP
  • IPv4: IPv4는 SNMP(Simple Network Management Protocol)을 지원합니다. SNMP는 네트워크 장치의 모니터링, 설정, 상태 정보 등을 관리하기 위해 사용됩니다.
  • IPv6: IPv6 또한 SNMP를 지원합니다. IPv6 네트워크에서도 SNMP를 통해 장치들의 관리와 모니터링을 수행할 수 있습니다.
Dual Stack IPv6는 기존의 IPv4와 함께 동작하도록 "Dual Stack" 방식을 지원합니다. 이를 통해 IPv6 네트워크를 점진적으로 도입하고 기존 IPv4 네트워크와 호환성을 유지하면서 전환할 수 있습니다.
 

결론:

IPv6는 IPv4와 비교하여 여러 가지 새로운 기능과 개선된 성능을 제공합니다. Header checksum이 없어진 것과 Anycast 주소 지원, 프래그먼테이션 기능 개선, 옵션 필드의 제거 등은 IPv6의 강점 중 하나입니다. IPv4와 IPv6는 각각의 장점과 한계를 가지고 있으며, 기존 IPv4 기반의 시스템과 점진적으로 IPv6로 전환하는 것이 현명한 접근 방법일 수 있습니다.
 

4. 미래에 대한 전망

IPv6는 주소 부족 문제를 해결하고 더 많은 IP 주소를 제공하는 등의 장점으로 인해 미래의 인터넷 통신에 필수적인 기술로 자리잡고 있습니다. IPv4와 IPv6는 "Dual Stack" 방식으로 호환성을 유지하며, 현재 전환 작업이 진행 중입니다. 그러나 미래에는 IPv6를 기반으로 한 네트워크가 보다 널리 사용될 것으로 예측됩니다.
결론: IPv4와 IPv6는 각각의 장점과 한계를 가지고 있으며, 인터넷 통신의 확장성과 보안성을 높이기 위해 두 프로토콜을 적절히 활용하는 것이 중요합니다. IPv6는 주소 부족 문제를 해결하고 미래의 인터넷을 위한 필수적인 프로토콜로 주목받고 있습니다.
참고:
 

Cyclic Redundancy Check (CRC)

Cyclic Redundancy Check (CRC)는 네트워킹에서 매우 중요한 개념으로, 데이터의 정확성을 검증하기 위한 강력한 방법 중 하나입니다. CRC는 데이터 전송 중에 발생할 수 있는 에러를 감지하기 위해 사용되는 오류 검출 코드입니다.

CRC 작동 원리

CRC는 데이터 블록에 적용되는 특수한 함수입니다. 이 함수는 데이터를 특정 수학적 공식에 따라 변환하여 "체크섬" 또는 "CRC" 값을 생성합니다. 이 값은 전송된 데이터 패킷과 함께 전송되며, 수신측에서는 동일한 함수를 사용하여 수신된 데이터의 CRC 값을 계산합니다. 그런 다음 계산된 값과 전송된 CRC 값을 비교하여 데이터에 오류가 있는지 확인합니다. 이 두 값이 일치하지 않으면 데이터에 오류가 있음을 알 수 있습니다.

흐름 제어와 CRC

CRC는 흐름 제어와는 다르게 작동합니다. 흐름 제어는 데이터가 너무 빠르게 전송되어 수신측이 처리할 수 없는 상황을 방지하는 데 사용되는 기술입니다. 이는 데이터 손실을 최소화하기 위한 것이며, 일반적으로 슬라이딩 윈도우 프로토콜 같은 메커니즘을 통해 이루어집니다.
반면에, CRC는 데이터의 정확성을 확인하고 데이터 전송 중에 발생할 수 있는 오류를 감지하는 데 사용됩니다. CRC는 데이터 무결성을 보장하고, 흐름 제어는 데이터의 연속성을 보장합니다.

CRC와 관련된 다른 개념들

  1. 체크섬(Checksum): 이는 데이터의 무결성을 검증하는 또 다른 방법입니다. 체크섬은 간단히 말해 데이터 블록의 모든 바이트를 합한 값입니다. 수신측에서는 동일한 프로세스를 통해 체크섬을 생성하고, 이를 보낸 체크섬과 비교하여 데이터의 무결성을 확인합니다.
  1. 패리티 비트(Parity Bit): 패리티 비트는 간단한 오류 검출 기술로, 데이터 단위에 포함된 1의 개수가 짝수 또는 홀수가 되도록 추가적인 비트를 설정하는 방식입니다.
  1. 포워드 에러 수정(Forward Error Correction, FEC): FEC는 오류 검출 뿐 아니라 오류 수정까지 가능한 기술입니다. 이를 위해 추가적인 정보를 전송하여, 수신측에서 발생한 오류를 검출하고 수정할 수 있도록 합니다. FEC는 특히 높은 비트 오류율을 가진 채널에서 유용합니다.
 

OSI 모델

OSI 모델(Open Systems Interconnection model)은 데이터 통신을 이해하고 설명하는 데 광범위하게 사용되는 표준 모델입니다. 이는 7개의 계층으로 구성되며, 각 계층이 특정한 네트워크 기능을 처리하도록 설계되었습니다. 그럼, 각 계층의 역할에 대해 좀 더 자세히 살펴보겠습니다.
  1. 물리 계층(Physical Layer): 이 계층은 비트 단위의 데이터 전송을 담당하며, 네트워크의 물리적인 세부 사항을 다룹니다. 이에는 케이블 유형, 플러그, 전압, 핀 배치 등이 포함됩니다.
  1. 데이터 링크 계층(Data Link Layer): 이 계층은 물리 계층에서 받은 데이터를 프레임으로 패키징하고, 에러 검출 및 수정, 물리 주소 지정 등을 처리합니다.
  1. 네트워크 계층(Network Layer): 이 계층은 패킷 전달 및 라우팅을 담당합니다. IP 주소 지정, 경로 선택 등을 관리하며, 다른 네트워크와의 연결을 처리합니다.
  1. 전송 계층(Transport Layer): 이 계층은 통신 세션을 관리하고, 데이터 전송의 신뢰성을 보장합니다. 에러 복구 및 흐름 제어, 다중화 등을 담당하며, TCP와 UDP 프로토콜이 이 계층에서 동작합니다.
  1. 세션 계층(Session Layer): 이 계층은 네트워크 세션을 설정, 유지, 종료하는 역할을 담당합니다. 이를 통해 서로 다른 장치들이 데이터를 교환할 수 있게 됩니다.
  1. 표현 계층(Presentation Layer): 여기서 우리가 주로 다루는 계층입니다. 이 계층은 데이터의 형식과 암호화를 담당합니다. 특히, 네트워크로 전송하기 전에 데이터를 적절한 형식으로 변환하고, 필요한 경우 암호화 및 복호화를 수행합니다.
  1. 응용 계층(Application Layer): 이 계층은 최종 사용자에게 가장 가깝습니다. 사용자가 네트워크에 액세스하고 통신을 수행할 수 있도록 하는 응용 프로그램과 서비스를 제공합니다. 이메일, 웹 브라우저, 다른 네트워크 서비스 등이 이 계층에서 동작합니다.
OSI 모델의 각 계층은 네트워킹 프로세스를 분할하여 이해하기 쉽게 만들며, 각 계층이 독립적으로 동작하므로 문제 해결 및 네트워크 설계에 도움이 됩니다.

IPsec (Internet Protocol Security)

IPsec는 네트워크 프로토콜 스위트의 일부로, 인터넷 프로토콜(IP) 데이터 패킷의 보안을 책임집니다. IPsec는 데이터의 기밀성, 데이터 무결성, 그리고 데이터의 인증을 제공하는 기능을 포함하고 있습니다. 이는 IPsec을 사용하는 두 컴퓨터 사이에 데이터를 안전하게 전송할 수 있도록 해줍니다.

IPsec의 두 가지 주요 모드

  1. Transport 모드: 이 모드에서 IPsec은 IP 페이로드만을 보호하지만 IP 헤더는 보호하지 않습니다. Transport 모드는 호스트-대-호스트 통신에 주로 사용됩니다.
  1. Tunnel 모드: 이 모드에서 IPsec은 전체 IP 패킷을 보호합니다. 즉, IP 페이로드와 IP 헤더 모두를 암호화합니다. 그 후, 새로운 IP 헤더가 패킷에 추가되어, 암호화된 패킷이 목적지로 전송됩니다. Tunnel 모드는 게이트웨이-대-게이트웨이, 게이트웨이-대-호스트, 혹은 호스트-대-호스트 통신에 사용됩니다.

IPsec와 관련된 개념들

  1. 암호화(Encryption): IPsec에서 암호화는 데이터를 읽을 수 없는 형태로 변환하는 과정을 말합니다. 이는 데이터가 중간에 가로채져도, 그 내용을 알아볼 수 없도록 하기 위한 것입니다.
  1. 인증(Authentication): IPsec는 두 가지 인증 메커니즘을 사용합니다. 하나는 AH(Authentication Header)이고, 다른 하나는 ESP(Encapsulating Security Payload)입니다. 이들은 데이터가 변경되지 않았음을 확인하고, 패킷이 정당한 소스에서 왔음을 보증합니다.
  1. 키 교환(Key Exchange): IPsec는 보안된 통신을 위해 사전 공유 키나 RSA와 같은 키 교환 메커니즘을 사용할 수 있습니다. 가장 일반적으로 사용되는 키 교환 프로토콜은 IKE(Internet Key Exchange)입니다.
  1. VPN (Virtual Private Network): VPN은 IPsec 기술을 활용하여 개인 네트워크를 생성하고, 사용자가 인터넷을 통해 안전하게 접속할 수 있게 합니다. 이는 데이터를 암호화하여 공개 네트워크를 통해 전송될 때도 데이터의 안전성을 보장합니다.
IPsec은 원격 액세스 또는 사이트 간 연결을 보안하기 위한 표준적인 솔루션으로 널리 사용되고 있습니다. IPsec의 터널 모드는 VPN을 구현하는 데 특히 유용하며, 이를 통해 원격 사용자가 회사 네트워크에 안전하게 접속할 수 있습니다.
 

기타 용어 정리

ARP (Address Resolution Protocol)

ARP는 네트워크에서 사용되는 프로토콜로, IP 주소를 해당하는 MAC(Media Access Control) 주소로 변환하는 역할을 합니다. 이 프로토콜은 한 장비가 다른 장비에게 정보를 보내기 위해 필요한 물리적인 (즉, MAC) 주소를 찾을 수 있게 해줍니다.
네트워크 상의 장비가 특정 IP 주소에 메시지를 보내려고 할 때, 해당 IP 주소에 연결된 MAC 주소를 알아야 합니다. 만약 해당 MAC 주소를 모르는 경우, ARP 요청을 네트워크에 전송하여 해당 IP 주소에 대한 MAC 주소를 물어봅니다. 이 요청을 받은 장비는 자신의 MAC 주소를 ARP 응답으로 돌려보냅니다.

DHCP (Dynamic Host Configuration Protocol)

DHCP는 네트워크에 연결된 장비에게 자동으로 IP 주소와 기타 네트워크 설정을 배분하는 프로토콜입니다. 이 프로토콜은 장비가 네트워크에 연결될 때마다 새로운 IP 주소를 할당하며, 네트워크 관리자가 각 장비에게 수동으로 IP 주소를 설정할 필요를 없애줍니다.
DHCP 서버는 네트워크 설정 (IP 주소, 서브넷 마스크, 디폴트 게이트웨이, DNS 서버 주소 등)의 풀(pool)을 관리합니다. 장비가 네트워크에 연결되면 DHCP 서버에게 IP 주소를 요청하며, DHCP 서버는 사용 가능한 IP 주소 중 하나와 함께 기타 네트워크 설정을 해당 장비에게 제공합니다.
이 두 프로토콜은 IP 네트워킹에서 필수적이며, 네트워크에서 장비들이 서로 통신하고 정보를 교환하는 데 중요한 역할을 합니다. ARP는 IP 주소를 MAC 주소로 변환하는 데 사용되고, DHCP는 네트워크 설정을 자동으로 관리하고 배분하는 데 사용됩니다.

dig (Domain Information Groper)

dig는 네트워크 관리자들에게 매우 유용한 DNS (Domain Name System) 조회 유틸리티입니다. 이 도구는 DNS 네임서버에 질의를 보내서 DNS 정보를 가져오는 데 사용됩니다. 이를 통해 사용자는 주어진 도메인의 A (주소) 레코드, MX (메일 교환) 레코드, NS (네임 서버) 레코드 등과 같은 다양한 유형의 DNS 레코드를 확인할 수 있습니다.
dig는 그 결과를 사람이 읽을 수 있는 형태로 출력하며, DNS 문제를 진단하고 디버깅하는 데 매우 유용합니다. 예를 들어, 웹사이트가 올바르게 작동하지 않는다면, dig를 사용하여 해당 웹사이트의 DNS 설정을 조회하고 문제를 확인할 수 있습니다.
dig 명령은 기본적으로 다음과 같은 형태를 가집니다:
dig @nameserver domain type
여기서 nameserver는 질의를 보낼 DNS 네임서버를, domain은 조회할 도메인 이름을, type은 조회할 레코드 유형을 나타냅니다.
예를 들어, "google.com"의 A 레코드를 확인하려면 다음과 같이 입력할 수 있습니다:
dig @8.8.8.8 google.com A
이 명령은 Google의 공개 DNS 서버 (8.8.8.8)에 "google.com" 도메인의 A 레코드를 요청합니다.
알아두면 좋은 점은, dig 도구는 Linux와 MacOS에서 기본적으로 제공되지만 Windows에서는 기본적으로 제공되지 않는다는 것입니다. Windows에서는 대신 nslookup이라는 비슷한 도구를 사용할 수 있습니다.

OS

리눅스 부팅 프로세스

리눅스 시작 프로세스 (Linux startup process)는 리눅스를 부팅하는 동안 이루어지는 여러 단계로 이루어진 초기화 프로세스입니다.
부팅이란 부트스트랩의 준말로써 컴퓨터를 동작시키는데 필요한 프로그램이나 과정을 의미합니다.
구체적으로 컴퓨터의 전원이 켜진 후 컴퓨터가 자체적으로 하드웨어를 검사하고 컴퓨터가 운영체제를 읽어서 기능을 수행할 수 있게 되기까지의 과정을 말합니다.
리눅스를 부팅하는 과정은 여러 단계와 소프트웨어 구성요소가 더불어서 이루어집니다.
 
리눅스 시작 프로세스의 구성요소는 다음과 같습니다.
  1. BIOS : 기본적인 I/O 시스템으로 MBR을 실행합니다.
  1. MBR : 마스터 부트 레코드로 GRUB을 실행합니다.
  1. GRUB : Grand Unified Bootloader 커널을 실행합니다.
  1. Kernel : /sbin/init을 실행합니다.
  1. Init : runlevel 프로그램을 실행합니다.
  1. runlevel : /etc/rc.d/rc*.c/ 실행합니다.
 

리눅스 부팅 과정

① Power ON & ROM BIOS

  • 전원이 들어오면 CPU가 ROM(Read Only Memory)에 저장된 BIOS (Basic Input Output System) 실행합니다.
  • BIOS는 (POST.Power On Self Test) 자체 진단 기능을 수행하며 하드웨어 장치들을 하나씩 인식하며 이상유무를 확인합니다.
  • 부팅 장치(HDD)를 선택하여 부팅 디스크의 첫 섹터(Sector)에서 MBR (Master Boot Record)을 읽어, 부트로더 (Boot Loarder)가 로딩이 됩니다.
 
BIOS (Basic Input Output System)
BIOS는 시스템의 ①무결성을 검사하고, ②부트로더 프로그램을 검색하여, 적재하고, 실행시킵니다.
BIOS 시작 과정에서 MBR이 저장되어 있는 매체의 우선순위 순서를 변경할 수 있습니다.
부트로더 프로그램을 감지하고 메모리에 적재하면, BIOS는 제어를 적재된 부트로더 프로그램에 넘깁니다.
 
MBR (Master Boot Record)
MBR은 마스터 부트 레코드(Master Boot Record)를 의미합니다.
부팅 가능한 디스크에서 첫 번째 섹터에 위치하며, /dev/hda 혹은 /dev/sda 입니다.
MBR은 GRUB 부트 로더를 실행합니다.
MBR의 사이즈는 512바이트 이하이며, 다음과 같이 3개의 구성요소로 이루어져 있습니다.
1) 부트 로더 정보 (처음 445바이트)
2) 파티션 테이블 정보 (그 다음 64바이트)
3) mbr 적합성 검사 (2바이트)
 

② 부트로더 실행

  • 부팅 메뉴 실행 ( /boot/grub/grub.conf )합니다.
실행할 운영체제와, 실행 시 사용할 옵션을 선택
  • Kernel 이미지와, initrd (램디스크 초기화) 이미지를 실행합니다.
  • 부트로더 init 프로세스를 실행합니다.
(CentOS에서 부팅 시 카운트가 끝나기 전에 아무 키나 누르면 진입할 수 있고 아무키도 누르지 않으면 기본값인 CentOS 실행한다.)
 
GRUB (Grand Unified Boot loader)
Splash 스크린 표시를 하고, 아무것도 입력하지 않으면 Grub 설정 파일에 지정된 기본 커널 이미지를 로드합니다.
Grub의 설정 파일은 /boot/grub/grub.conf이며, GRUB의 역할은 커널과 initrd 이미지를 실행시키는 것입니다.
 
Kernel
커널은 Grub.conf에서 "root="로 표기된 루트 파일 시스템을 마운트하고, /sbin/init 프로그램을 실행합니다.
/sbin/init 프로그램은 리눅스가 부팅된 후 최초로 실행되는 프로세스로써 PID가 자동으로 1번이 지정됩니다.
리눅스를 시작하고 종료시키는 모든 과정을 통제합니다.
init프로그램은 init script라고 불리는 작업을 진행하게 되는데 그것은 /etc/inittab 파일을 불러들이는 것을 말합니다.
Initrd (initial Ram disk) 커널이 진짜 루트 파일 시스템을 마운트 할 때까지 일시적인 루트 파일 시스템을 사용하는데, 디스크의 파티션에 접근하거나 다른 하드웨어를 접근하는데 필요한 드라이버가 컴파일되어 들어있습니다.
 

③ init 프로세스 실행

  • /etc/inittab 파일을 참조하여 설정된 Runlevel을 확인하여 부팅 레벨(환경) 결정합니다.
  • 시스템 초기화 및 관리 설정 파일을 실행합니다. ★
과거 System V init ( init -> inittab -> rc.sysinit ) 5.X
현재 System V init + Upstart ( init -> inittab -> rcS.conf -> rc.conf -> rc.local ) 6.X
(빨간색 순서 잘 기억하기)
미래 Systemd ( init 프로세스가 사라지고, systemd 프로세스가 모든 프로세스를 관리 ) 7.X
 
※ Init
"init"은 컴퓨터 시스템이 부팅될 때 실행되는 첫 번째 프로세스로, 운영 체제에서 초기화를 담당하고 시스템 서비스를 시작하여 시스템을 작동 상태로 가져옵니다.
/etc/inittab file에서 Linux run level을 결정합니다.
Init은 /etc/inittab에서 디폴트 initlevel을 가리키며, 그것을 이용하여 모든 적합한 프로그램을 메모리에 적재합니다.
 
※ Runlevel
유닉스 기반 운영 체제에서 "init" 프로세스는 시스템의 상태를 나타내는 "runlevel"을 결정하며, 각각의 runlevel은 시스템의 특정 상태와 실행해야 할 서비스들을 정의합니다. 일반적으로 사용되는 runlevel은 다음과 같습니다:
리눅스 시스템이 부팅될 때, 시스템을 어떤 방식으로 부팅할 것인가를 분류해 놓은 것입니다.
이런 프로그램들은 runlevel프로그램이며, run level로 정의된 디렉터리에서 실행이 됩니다.
 
기본 init level 설정에 달려있으며, 시스템은 다음과 같은 디렉터리 중 하나에서 프로그램을 실행합니다.
0 - halt
1 - Single user mode - 최소한의 서비스만 실행되며, 유지 보수 및 문제 해결에 사용됩니다.
2 - 다중 사용자, NFS 제외 - 네트워킹 서비스 없이 시스템이 완전히 작동합니다.
3 - 완전 다중 사용자 모드 - 네트워킹 서비스가 활성화된 상태에서 시스템이 작동합니다.
4 - 사용되지 않음
5 - x11 - 그래픽 사용자 인터페이스(GUI)를 지원하는 다중 사용자 모드 - 시스템이 그래픽 환경에서 시작되며 데스크탑 사용에 적합합니다.
6 - 재부팅
보통 디폴트 run level을 3혹은 5를 설정합니다.
구체적으로 어떤 runlevel들이 어떤 서비스들과 연관되는지는 사용하는 리눅스 배포판이나 유닉스 기반 운영 체제에 따라 다를 수 있습니다. 또한, 일부 최신 시스템은 "init" 대신에 "systemd"와 같은 다른 시스템 초기화 메커니즘을 사용합니다.
 

fence register

pass