본문 바로가기
네트워크

네트워크 기본 지식

by 상똥 2024. 5. 8.

전산 기본

▶ OSI 7계층에 대해 설명해주세요.

더보기

OSI 7계층이란 네트워크에서 통신이 일어나는 과정을 7단계로 나눈 것을 말합니다. 단계별로 나눔으로써 통신이 일어나는 과정을 단계별로 파악할 수 있고 이상이 생기면 이상이 생긴 특정 단계만 고칠 수 있습니다. 물리 계층, 데이터링크 계층, 네트워크 계층, 전송 계층, 세션 계층, 표현 계층 그리고 응용 계층으로 나뉩니다.

 

1계층은 물리 계층(Phsical Layer)으로 전기적, 기계적, 기능적인 특성을 이용해서 통신 케이블로 데이터를 전송합니다. 통신 단위는 bit이며 1과 0으로 나타납니다. 대표적인 장비로는 통신 케이블, 리피터, 허브 등이 있습니다.

 

2계층은 데이터 링크 계층(DataLink Layer)으로 물리계층을 총해 송수신되는 정보의 오류와 흐름을 관리하여 안전한 정보의 전달을 수행할 수 있도록 돕는 역할을 합니다. 맥 주소를 가지고 통신하게 됩니다. 통신 단위는 프레임이며 대표적인 장비로는 브리지, 스위치 등이 있습니다.

 

3계층은 네트워크 계층(Network Layer)으로, 데이터를 목적지까지 안전하고 빠르게 전달(라우팅)하는 기능을 합니다. 대표적인 제품군으로는 IP, ICMP, IPsec 등이 있습니다.

 

4계층은 전송 계층(Transport Layer)으로 두 기기 간의 종단 간 통신을 담당합니다. 또한 흐름 제어와 오류 제어 기능을 수행합니다. 전송계층의 프로토콜에는 TCP와 UDP가 있습니다.

 

5계층은 세션 계층(Session Layer)으로 두 기기 사이의 통신을 시작하고 종료하는 일을 담당합니다. 데이터 전송을 체크포인트와 동기화합니다.

 

6계층은 표현 계층(Presentation Layer)입니다. 주로 데이터의 변환, 암호화, 단축을 담당합니다. 수신 장치가 이해할 수 있는 구문으로 데이터를 변환하고, 송신자에게 암호화를 추가하거나 수신자에게 암호화를 디코딩하는 역할을 담당합니다. 또한 전송할 데이터의 양을 최소화하여 통신의 속도와 효율을 높입니다.

 

7계층은 응용 계층(Application Layer)으로 사용자의 데이터와 직접 상호작용하는 유일한 계층입니다. 소프트웨어가 사용자에게 의미 있는 데이터를 제공하기 위해 의존하는 프로토콜과 데이터를 조작하는 역할을 합니다. HTTP와 SMTP가 포함됩니다.

 TCP/IP 4계층에 대해 설명해주세요.

더보기

TCP/IP계층은 장치들이 인터넷 상에서 데이터를 주고 받을 때 쓰는 독립적인 프로토콜의 집합을 의미합니다. 링크 계층, 인터넷 계층, 전송 계층 그리고 응용 계층으로 나뉩니다. 

 

링크 계층(Link Layer)은 전선, 광섬유, 무선 등으로 데이터가 네트워크를 통해 물리적으로 전송되는 방식을 정의합니다. 데이터링크 계층과 물리 계층을 합친 계층입니다.

 

인터넷 계층(Network Layer)은 한 노드에서 다른 노드로 전송 계층에서 받은 세그먼트 또는 데이터그램을 패킷화하여 목적지로 전송하는 역할을 합니다.

 

전송 계층(Transport Layer)은 TCP, UDP가 대표적이며 애플리케이션 계층에서 받은 메시지를 기반으로 세그먼트 또는 데이터그램으로 데이터를 쪼개고 데이터가 오류없이 전달되도록 도움을 주는 계층입니다.

 

응용 계층(Application Layer)은 웹 서비스, 이메일 등 서비스를 실질적으로 사람들에게 제공하는 층입니다.

 DNS란 무엇인가요?

더보기

DNS(Domain Name System)란 계층적인 도메인 구조와 분산된 데이터베이스를 이용한 시스템으로 FQDN(Fully Qualified Domain Name, 호스트와 도메인이 합쳐진 완전한 도메인 이름)을 인터넷 프로토콜인 IP로 바꾸는 시스템입니다. 

 도메인 이름으로 실제 IP를 어떻게 찾을 수 있는지 흐름을 설명해주세요.

더보기

로컬 DNS서버에 해당 url이 등록되어 있는지 확인합니다. 루트 DNS서버에 문의 후 최상위 도메인 .com이 등록된 네임 서버의 IP주소를 전달합니다. 로컬 DNS서버는 com DNS서버에 해당 url을 문의합니다. 로컬 DNS서버에 naver.com DNS서버의 IP주소를 알려줍니다. naver.com에 해당 url을 문의합니다. 로컬 DNS는 IP주소를 받을 수 있습니다. 

 유니캐스트, 멀티캐스트, 브로드캐스트에 대해 설명해주세요.

더보기

유니캐스트란 1:1 통신을 말합니다. 가장 일반적인 네트워크 전송 형태로, 대표적으로 HTTP통신이 있습니다.

 

멀티캐스트는 1:N 통신을 말합니다. 연결된 모든 노드들에게 데이터를 전달하지는 않고 특정 그룹에게만 데이터를 전달합니다.

 

브로드캐스트는 1:N통신을 말합니다. 그룹이 아닌 연결되어 있는 모든 노드에게 데이터를 전달합니다. 대표적으로 ARP가 있습니다.

 

TCP/UDP

 TCP와 UDP의 차이에 대해 설명해주세요.

더보기

TCP는 가상회선 패킷 교환방식을 사용하며, 연결시 3-way-handshake, 연결 해제 시 4-way-handshake 과정을 거치는 연결 지향형 프로토콜입니다. 이로 인해 UDP보다 신뢰성은 높지만 속도는 느립니다. 흐름제어, 혼잡제어, 오류제어를 지원합니다. 웬 http통신, 이메일, 파일 전송에 사용됩니다.

 

UDP는 데이터그램 패킷 교환방식을 사용하고 TCP보다 신뢰성은 낮지만 속도는 빠릅니다. RTP, Multicast, DNS에 사용됩니다.

 TCP 헤더에 대해서 설명해주세요.

더보기

TCP 헤더는 데이터 패킷의 전송 및 수신을 제어하는 게 필요한 정보를 포함하고 있습니다. TCP헤더 정보는 데이터 전송 과정에서 송수신자 간의 정확한 커뮤니케이션과 데이터 흐름 제어를 위해 중요한 역할은 합니다. Source Port, Destination Port, Sequence Number, Acknowledement Number, Data Offset, Flags, Window Size, Checksum, Urgent Pointer, Options 등으로 구성되어있습니다.

 

Source Port는 송신자의 포트 번호를 나타냅니다. 이는 송신자의 응용 프로그램을 식별하는데 사용됩니다. 16bits입니다.

 

Destination Port는 수신자의 포트 번호응 나타냅니다. 이는 수신자의 응용 프로그램을 식별한느 데 사용됩니다. 16bits입니다.

 

Sequence Number는 현재 세그먼트가 전송하는 데이터의 첫 번째 바이트의 순서 번호입니다. 연결 시작 시 ISN을 기준으로 설정되며 데이터 전송 과정에서 이 값을 기반으로 각 바이트가 올바르게 전송되고 수신되었는지 확인합니다. 32bits입니다.

 

Acknowledement Number는 수신자가 다음에 받기를 기대하는 데이터의 첫 바이트의 순서 번호입니다. 이는 수신자가 성공적으로 받았다는 것을 확인하는 데 사용됩니다. 32bits입니다.

 

Data Offset은 TCP헤더의 크기를 32bit 워드 단위로 나타냅니다. 이 필드는 TCP헤더가 얼마나 많은 선택적 데이터를 포함하고 있는지응 나타내며 데이터의 시작 지점을 알려줍니다. 4bits입니다.

 

Flags는 여러 제어 플래그를 포함합니다. 9bits입니다.

 

Window Size는 수신 윈도우의 크기를 나타냅니다. 이는 수신자가 한 번에 수신할 수 있는 데이터의 양을 지정합니다. 16bits입니다.

 

Checksum은 오류 검사 및 수정을 위한 체크섬입니다. 헤더와 데이터가 전송 중에 손상되었는지 확인하는 데 사용됩니다. 16bits입니다.

 

Urgent Pointer는 URG 플래그가 설정된 경우 이 포인터는 우선 순위가 높은 긴급 데이터의 끝을 가리킵니다. 16bits입니다.

 

Options는 필요에 따라 추가적인 옵션이 포함될 수 있습니다. 이는 TCP 세그먼트의 기능을 확장하며 대표적인 예로 MSS, Timestamps 등이 있습니다.

 

 MTU가 무엇인가요?

더보기

MTU는 네트워크에서 한 번에 전송할 수 있는 데이터의 최대 크기를 의미합니다. 네트워크 인터페이스 또는 매체에서 지원하는 최대 프레임 크기를 말하며 이 값은 네트워크 경로상의 다양한 하드웨어 및 소프트웨어 요소에 따라 달라질 수 있습니다.

 3-way-handshake, 4-way-handshake에 대해 설명해주세요.

더보기

TCP의 연결과 연결 해제 과정입니다.

 

TCP의 연결은 3-way-handshake를 거쳐 성립됩니다. 3-way-handshake는 SYN단계, SYN+ACK단계, ACK단계를 거칩니다. SYN 단계에서 클라이언트는 서버에 클라이언트의 ISN을 담아 SYN을 보냅니다. SYN+ACK 단계에서 서버는 클라이언트의 SYN을 수신하고 서버의 ISN을 보내며 승인 번호로 클라이언트의 ISN+1을 보냅니다. ACK 단계에서 클라이언트는 서버의 승인번호를 담아 ACK를 서버에 보냅니다. 

 

TCP의 연결 해제는 4-way-handshake를 거쳐 성립됩니다. 클라이언트가 연결을 닫으려 할 때 FIN으로 설정된 세그먼트를 보냅니다. 그리고 클라이언트는 FIN_WAIT_!상태로 들어가 서버의 응답을 기다립니다. 서버는 클라이언트에 ACK라는 승인 세그먼트를 보내고 CLOSE_WAIT 상태에 들어갑니다. 클라이언트가 세그먼트를 받으면 FIN_WAIT_2상태에 들어갑니다. 서버는 LAST_ACK상태가 되며 일정 시간 이후에 클라이언트에 FIN이라는 세그먼트를 보냅니다. 클라이언트는 TIME_WAIT상태가 되고 다시 서버로 ACK를 보내 서버는 CLOSED상채가 되며 이후 클라이언트는 어느 정도의 시간(TIME_WAIT으로 설정된 시간)을 대기한 후 연결이 닫힙니다.

 

HTTP

 HTTP 프로토콜에 대해 아는대로 설명해주세요.

더보기

HTTP는 인터넷에서 데이터를 주고받기 위한 프로토콜로, 주로 웹 브라우저와 웹 서버 간의 통신에 사용됩니다. 이 프로토콜은 웹상의 정보를 주고받는 데 필수적이며 웹 페이지, 이미지, 동영상 등 다양한 리소스의 전송을 가능하게 합니다.

 

클라이언트-서버 프로토콜로, 클라이언트가 서버에 요청을 보내고 서버가 이에 응답하는 구조입니다.

 

기본적으로 무상태 프로토콜이어서 서버는 클라이언트의 이전 요청을 기억하지 않습니다. 각 요청은 독립적으로 처리됩니다. 연속된 요청 사이의 정보를 유지하기 위해 쿠키나 세션과 같은 기술이 사용됩니다.

 

HTTP는 확장 가능하며 새로운 메서드, 헤더 등을 추가할 수 있어 다양한 데이터 형식과 통신 요구를 수용할 수 있습니다.

 HTTP와 HTTPS의 차이점은 무엇인가요?

더보기

HTTP는 인터넷 상에서 클라이언트와 서버가 자원을 주고받기 위한 통신 규약인데, 텍스트로 자원을 주고받기 때문에 네트워크를 가로챈다면 내용이 유출되는 보안 이슈가 발생할 수 있습니다. 이를 해결하는 것이 HTTPS입니다. SSL프로토콜을 사용해 정보를 암호화하는데, 메모리나 리소스를 더 많이 쓸 수 있다는 특징이 있습니다. HTTPS는 데이터의 안전성과 무결성을 보장하며 사용자의 개인 정보를 보호합니다.

 HTTPS의 작동 방식에 대해 설명해주세요

더보기

암호화, 인증 그리고 데이터 무결성 검증을 거칩니다.

HTTPS는 SSL 또는 TLS라는 프로토콜을 사용하여 데이터를 암호화합니다. 이를 통해 데이터가 전송 중에 도청되거나 변경되는 것을 방지합니다. 웹 서버는 SSL/TLS 인증서를 사용하여 자신의 정체성을 인증하고, 브라우저는 이 인증서를 확인하여 서버가 신뢰할 수 있는지 판단합니다. 전송 중인 데이터가 변경되지 않았음을 보장하기 위해 메시지 인증 코드(MAC)를 사용합니다. 이는 데이터의 무결성을 확인하여 정보가 전송 중에 조작되지 않았는지 검증합니다.

 HTTP 메서드의 종류와 역할에 대해 설명해주세요

더보기

대표적인 메서드로는 GET, POST, PUT, PATCH, DELETE가 있습니다.

GET은 데이터를 읽는데 사용됩니다. POST는 새로운 데이터를 생성하거나 제출할 때 사용됩니다. PUT과 PATCH는 리소스를 수정하는데에 사용되는데, PUT은 리소스 전체를, PATCH는 리소스의 일부를 수정하는 데 사용됩니다. DELETE는 특정 리소스를 삭제하는 데 사용됩니다.

 HTTP 1.0과 HTTP 1.1의 차이는 무엇인가요?

더보기

크게 세 가지의 차이점이 있습니다. 첫 번째로는 HTTP 1.1에 들어오면서 keep alive옵션을 기본 옵션으로 설정했습니다. 이로 인해 한 번의 TCP연결로 계속해서 데이터를 받을 수 있게 되었습니다. 두 번째 차이는 호스트헤더입니다. 서버는 여러 개의 호스트를 가질 수 있기 때문에 이러한 유연성을 위해 HTTP 1.1은 헤더에 특정 호스트를 포함할 수 있도록 변경되었습니다. 세 번째 차이점은 대역폭 최적화입니다. HTTP 1.1에서는 Range:bytes라는 헤더를 추가하여 다운로드 재개 요청을 할 수 있도록 바뀌었습니다.

 HTTP2와 그 특징에 대해서 설명해주세요

 HTTP 헤더의 구조에 대해서 설명해주세요

 keep-alive 헤더에 대해서 설명해주세요

더보기

TCP연결을 유지하는 것을 알려주는 헤더로, 연결 유지시간인 timeout과 최대 요청 수 max를 정할 수 있습니다. 참고로 node.js에서는 연결 유지 시간인 timeout 시간만을 지정할 수 있습니다.

▶ 쿠키와 세션에 대해서 설명해주세요

더보기

쿠키는 브라우저네 저장된 데이터 조각입니다. 클라이언트나 서버에서 먼저 설정할 수 있으나 서버에서 먼저 설정해 쿠키를 만드는 것이 일반적입니다. 보통 로그인, 장바구니, 사용자 커스터마이징, 사용자 행동분석에 사용됩니다.

세션쿠키는 Expires 또는 Max-Age 속성을 지정하지 않은 것을 말합니다. 브라우저가 종료되면 쿠키도 사라집니다.

 

WEB

 www.google.com에 접속했을 때 일어나는 일

더보기

사용자가 검색창에 주소를 입력하면, 웹 브라우저는 캐싱된 DNS기록들을 통해 해당 도메인 주소와 대응하는 IP주소를 확인합니다.

브라우저는 DNS서버로 가서 웹사이트가 있는 서버의 진짜 주소를 찾습니다.

브라우저는 웹사이트의 사본을 클라이언트에게 보내달라는 HTTP요청 메세지를 서버에게 전송합니다.

이 메세지, 그리고 클라이언트와 서버 사이에 전송된 모든 데이터는 TCP/IP 연결을 통해서 전송됩니다.

DNS가 웹브라우저에게 구글 사이트의 IP주소를 응답합니다.

웹 브라우저가 웹 서버에게 IP주소를 이용해 html문서를 요청합니다.

웹 애플리케이션 서버와 데이터베이스에서 우선 웹페이지 작업을 처리합니다.

작업 처리 결과를 웹서버로 전송합니다.

웹 서버는 웹 브라우저에게 html문서 결과를 응답합니다.

웹브라우저에서 내용물을 출력합니다.

 

추가: https://sangddongvoid.tistory.com/162

 CORS란 무엇인가요?

 웹 서버와 웹 애플리케이션 서버의 차이는 무엇인가요?

더보기

웹 서버는 항상 동일한 데이터를 주는 정적 콘텐츠를 제공합니다., 동적 콘텐츠 제공을 위해 웹 애플리케이션 서버에 클라이언트의 요청을 보내고 결과를 전달합니다. 정적콘텐츠만 처리하기 때문에 서버 부담을 줄입니다.

웹 애플리케이션 서버는 동적인 컨텐츠를 제공합니다. DB접속, 트랜잭션 관리, 비즈니스 로직 등을 수행합니다. 요청에 맞는 콘텐츠를 제공하기 위해 필요하며 단순한 정적 콘텐츠는 웹 서버에 맡겨 부하를 줄입니다.

 REST API에 대해서 설명해주세요

더보기

HTTP를 통해 자원을 주고받을 때 HTTP URI를 통해 자원을 명시하고 HTTP Method를 통해 자원의 CRUD를 수행하는 것을 말합니다.

 RESTful에 대해 설명해주세요

더보기

REST 아키텍처 스타일의 제약조건을 준수하고 RESTful웹서비스와 상호작용할 수 있는 애플리케이션 프로그래밍 인터페이스입니다.

 API Gateway란 무엇인가요?

 API Gateway가 다운되면 모든 API를 사용하지 못할 수 있는데, 어떤 방안을 마련해야 할까요?

 

 

참고 : https://github.com/4z7l/tech_interview.zip/blob/main/%EC%A7%81%EB%AC%B4/Network.md

'네트워크' 카테고리의 다른 글

[WEB] HTTP 멱등성  (0) 2024.01.03
web application 이해  (0) 2023.08.01
[네트워크] 4. IP주소  (0) 2023.03.26
[네트워크] 3. 네트워크 기기  (0) 2023.03.07
[네트워크] 2. 네트워크 성능 분석 명령어  (0) 2023.02.28