기술 면접 준비 질문리스트 에서 네트워크 질문항목 20개 중에 8개를 다루었다.
공부방법으로는 모두의 네트워크 라는 책과
유튜브 기술노트채널의 네트워크 기초 영상으로 큰 흐름을 파악했고,
여러 블로그와 chatGPT를 통해 정확한 정보가 맞는지 재차 검토해보았다.
모두의 네트워크 책은 대화문으로 쓰여 있어서 금방 읽힌다. 벌써 두 번이나 정독했다.
처음 읽을때는 익숙하지 않은 단어가 많았지만 네트워크 용어 사전으로 정리를 하다보니 점점 쉬워지는 것 같다.
아직 무선랜 구조나 서브넷마스크, 스위치나 라우터의 전달과정 등 이해를 못한 부분이 남아있어서 다음 주와 한달 뒤에 공부한 내용이 잊혀질때쯤 다시 읽으며 내 것으로 만들 생각이다.
전화번호를 모두 외우지 않고 전화번호부에 저장했다가 찾아서 사용하는 것 처럼
125.209.222.142 처럼 숫자로 된 IP를 사람이 외우기 쉽게 www.google.com 와 같은 도메인 네임으로 사용하고 있습니다.
하지만 인터넷은 IP 주소를 사용하여 장치들을 식별하고 통신할 수 있기에 호스트의 도메인 이름을 IP 주소로 변환하거나 반대의 경우를 수행할 수 있도록 개발된 분산 데이터베이스 시스템이 DNS(Domain Name System)입니다.
참고 : https://www.scaler.com/topics/computer-network/domain-name-system/
사용자가 웹 브라우저 등을 통해 도메인 이름을 입력하면,
컴퓨터의 hosts 파일에 google.com 의 ip 주소 정보가 있는지 확인합니다.
hosts 파일에 정보가 없으면, 컴퓨터에 있는 local DNS cache에 ip 주소가 있는지 확인합니다.
로컬 DNS 캐시는 이전에 방문한 도메인 이름에 대한 IP 주소를 임시로 저장하는 곳으로
동일한 도메인 이름에 대한 IP 주소를 다시 찾을 때 조회 시간을 절약합니다.
로컬 DNS 캐시에 해당 도메인 이름과 IP 주소가 없는 경우, 로컬 컴퓨터는 운영체제(OS)의 DNS 캐시를 확인합니다.
운영체제의 DNS 캐시에 해당 도메인 이름과 IP 주소가 없는 경우, 로컬 컴퓨터는 루트 DNS 서버로 DNS 쿼리를 보냅니다.
루트 DNS 서버는 전세계에 13개가 분산되어 있으며, 최상위 레벨 도메인(TLD)에 대한 정보를 가지고 있습니다.
루트 DNS 서버로부터 받은 응답을 이용해서 최상위 레벨 도메인(TLD) 서버에 조회합니다.
최상위 레벨 도메인 서버로부터 받은 응답에는 도메인의 네임서버 정보가 포함되어 있습니다.
네임서버는 해당 도메인에 대한 실제 IP 주소 정보를 가지고 있는 서버를 가리킵니다.
네임서버로 DNS 쿼리를 보내서 해당 도메인의 IP 주소를 찾습니다.
도메인의 네임서버는 해당 도메인에 대한 IP 주소 정보를 반환합니다.
결과를 반환하고 최종적으로 로컬 DNS 캐시나 라우터의 DNS 서버에 해당 도메인 이름과 IP 주소가 저장되며, 이후에 해당 도메인에 대한 IP 주소를 다시 요청할 때는 캐시된 정보를 사용하여 조회 시간을 줄일 수 있습니다.
계층 | 이름 | 역할 |
---|---|---|
7계층 | 응용계층 | 이메일&파일전송, 웹 사이트 조회 등 애플리케이션의 서비스 제공 |
6계층 | 표현계층 | 문자코드, 압축, 암호화 등의 데이터를 변환한다 |
5계층 | 세션계층 | 세션체결, 통신방식을 결정한다 |
4계층 | 전송계층 | 신뢰할 수 있는 통신을 구현한다 |
3계층 | 네트워크계층 | 다른 네트워크와 통신하기 위한 경로 설정 및 논리 주소를 결정한다 |
2계층 | 데이터링크계층 | 네트워크 기기 간의 데이터 전송 및 물리 주소를 결정한다 |
1계층 | 물리계층 | 시스템 간의 물리적인 연결과 전기 신호를 변환 및 제어한다 |
TCP(Transmission Control Protocol)는 데이터 전송에 신뢰성을 제공하는 연결형 프로토콜이고, 데이터를 손실 없이 전송하기 위해 패킷을 세그먼트 크기로 나누고, 번호를 붙인뒤 전송한 뒤 수신 측에서는 순서에 맞게 재조립하는 기능을 수행합니다.
IP(Internet Protocol)는 데이터 패킷을 송수신하는 데 사용되는 프로토콜로 패킷을 송신하고 수신하는데 필요한 주소 지정과 경로 선택을 담당합니다.
두 프로토콜을 합해서 TCP/IP라고 부르고 인터넷 프로토콜 스위트중에서 가장 많이 쓰입니다.
※ 하나의 패킷은 헤더와 페이로드로 구성되어 있고, 헤더에는 어떤 데이터의 몇 번째 데이터인지의 정보와 보내는 곳이나 최종 목적지에 대한 정보 등이 들어있고 페이로드에는 실제 데이터가 들어있습니다.
계층 -- | 이름 | 프로토콜 | 역할 |
---|---|---|---|
4층 | 응용 계층 | DNS, TFTP, TLS/SSL, FTP, HTTP, IMAP, IRC, NNTP, POP3, SIP, SMTP, SNMP, SSH, 텔넷, ECHO, 비트토렌트, RTP, PNRP, rlogin, ENRP … | 어플리케이션에 맞춰서 통신 |
3층 | 전송 계층 | TCP, UDP, DCCP, SCTP, IL, RUDP … | IP와 어플리케이션을 중개해 데이터를 확실하게 전달 |
2층 | 인터넷 계층 | IP (IPv4, IPv6), ARP, RARP, ICMP | 네트워크 주소 기반으로 데이터를 전송 |
1층 | 네트워크 인터페이스 계층 | 이더넷, Wi-Fi, 토큰링, PPP, SLIP, FDDI, ATM, 프레임 릴레이, SMDS… | 컴퓨터를 물리적으로 네트워크에 연결해서 기기 간에 전송이 가능하게 한다 |
무결성 검사 방식은 데이터가 전송되는 동안 손상되거나 왜곡되지 않았음을 확인하기 위한 기술로
TCP는 세그먼트의 번호, 확인 응답(ACK) 번호, 체크섬 등의 정보를 통해 패킷의 정확성을 확인하고, 수신자는 손상된 패킷을 버리거나 재전송을 요청하여 데이터의 무결성을 보장합니다.
TCP는 데이터의 신뢰성과 무결성을 위해 송신자와 수신자 간에 통신을 주고 받기 전에 통신을 주고 받을 수 있는지 의사를 묻고, 한번에 얼마나 받을 수 있는지와 같은 정보를 확인하는데 이를 핸드쉐이크라고 합니다.
3-way handshake는 TCP 프로토콜에서 연결 설정을 위해 사용되는 과정입니다.
클라이언트와 서버 간에 연결을 수립할 때 다음과 같은 세 단계로 이루어집니다
클라이언트 → 서버: SYN (Synchronize)
클라이언트는 서버에게 연결 요청을 보내기 위해 SYN 패킷을 보냅니다.
SYN 패킷에는 클라이언트가 임시로 생성한 초기 순차 번호(Initial Sequence Number, ISN)가 포함되어 있습니다. 이 순차 번호는 클라이언트의 데이터 전송 순서를 나타냅니다.
서버 → 클라이언트: SYN-ACK (Synchronize-Acknowledgment)
서버는 클라이언트의 SYN 패킷을 받으면, 연결 수락을 의미하는 SYN-ACK 패킷을 보냅니다.
SYN-ACK 패킷에는 서버가 임시로 생성한 초기 순차 번호와 클라이언트의 ISN에 1을 더한 값이 포함됩니다. 이렇게 함으로써 서버는 클라이언트의 데이터 전송 순서를 나타내는 순차 번호를 알 수 있습니다.
클라이언트 → 서버: ACK (Acknowledgment)
클라이언트는 서버로부터의 SYN-ACK 패킷을 받으면, 연결 수립에 성공한 것을 의미하는 ACK 패킷을 보냅니다.
이제 클라이언트와 서버는 서로와의 연결이 수립되었고, 데이터 전송이 가능해집니다.
4-way handshake는 TCP 프로토콜에서 연결 종료를 위해 사용되는 과정입니다.
클라이언트와 서버 간에 연결을 종료할 때 다음과 같은 네 단계로 이루어집니다
클라이언트 → 서버: FIN (Finish)
클라이언트는 서버에게 연결 종료를 요청하는 FIN 패킷을 보냅니다.
서버 → 클라이언트: ACK (Acknowledgment)
서버는 클라이언트의 FIN 패킷을 받으면, 해당 패킷에 대한 확인 응답(ACK)을 보냅니다.
서버는 이제 클라이언트로부터 더 이상의 데이터를 받지 않을 것임을 알립니다.
서버 → 클라이언트: FIN (Finish)
서버는 더 이상의 데이터 전송이 없다는 것을 나타내기 위해 자신의 연결 종료 요청인 FIN 패킷을 보냅니다.
클라이언트 → 서버: ACK (Acknowledgment)
클라이언트는 서버의 FIN 패킷에 대해 확인 응답(ACK)을 보냅니다.
이제 클라이언트와 서버의 연결이 완전히 종료됩니다.
TCP가 3-way 핸드쉐이크로 연결을 확립한 후에 서로를 확인하며 통신하는 연결형 통신이였다면
UDP는 상대방을 확인하지 않고 일방적으로 데이터를 전송하는 방식입니다.
확인작업을 일일히 하지않기 때문에 신뢰성과 정확성은 떨어지지만 데이터를 빠르고 효율적으로 보낼 수 있습니다. 주로 스트리밍 방식인 동영상이나 지연시간을 줄여야 하는 보이스톡, 게임 같은 서비스에서 사용합니다.
UDP헤더가 붙은 데이터는 UDP 데이터그램이라고 부릅니다.
헤더에는 출발지 포트번호, 목적지 포트번호, 길이, 체크섬 4개의 정보가 들어있어서 11개나 되는 TCP헤더에 비해 간소합니다.
UDP를 사용하면 랜에 있는 컴퓨터나 네트워크 장비에 데이터를 일괄로 보낼 수 있는데 이를 브로드캐스트(broadcast) 라고 합니다.
SSL과 TLS 모두 어플이케이션과 서버간의 데이터를 암호화하는 통신 프로토콜입니다.
과거에는 SSL을 사용하다가 SSL에 보안성을 더 강화한 후속 버전으로 TLS가 개발되었습니다.
TLS에서 디지털 서명은 데이터 무결성과 인증을 위해 사용됩니다. 통신하는 양쪽은 서로를 인증하기 위해 디지털 인증서를 사용하며, 인증서는 CA인증 기관에 의해 발급됩니다. 디지털 서명은 데이터가 도청 및 조작되지 않았음을 확인하고, 통신 상대가 신뢰할 수 있는지 검증하는 데 사용됩니다.
TLS 통신을 시작하기 위해 클라이언트와 서버 간에 핸드셰이크 프로세스가 이루어집니다. 이 프로세스에서 서로의 암호화 알고리즘과 인증서를 교환하며, 안전한 통신을 설정하는데 필요한 정보들을 협상합니다.
암호란 평문을 비트 변경하여 해독할 수 없는 암호문으로 변환하는 과정이고 복호란 암호문을 원래 데이터로 되돌리는 작업을 말합니다. 암호화를 하지 않으면 인터넷에 떠돌아다니는 패킷을 잡을 시 메세지를 볼 수 있기 때문에 민감한 데이터를 전송할 때는 암호화를 해야 합니다.
암호화 종류에는 단방향 암호화와 양방향 암호화 2가지가 있습니다.
단방향 암호화는 암호화만 가능하고 복호화가 불가능하여 원래 데이터로 돌릴 수 없는 암호화 방법으로 비밀번호처럼 무결성만 확인하는 경우에 쓰입니다. 주로 해시알고리즘이 사용됩니다.
양방향 암호화는 복호화도 가능하며 대칭키나 비대칭키 알고리즘을 사용하는데
대칭키 암호는 암호화키와 복호화키가 동일한 경우로 주로 데이터 통신 암호화에 많이 쓰이고
비대칭키 암호는 암호화키와 복호화키가 다른 경우로 공개키를 사용하는 인증에 많이 쓰입니다.