요즘 '면접을 위한 CS 전공지식 노트'라는 책으로 스터디를 하면서 내용 정리를 하고 있는데
면접 보기 전이나 기본적인 CS 공부의 흐름을 잡을 때 보기 좋은 것 같다!(내돈내산임)
그래서 우선 한번 읽고
-> 이 내용 기반으로 내가 심화 내용을 찾아서 공부하고
-> 언젠가 면접이 있으면 다시 책을 읽어보는 식으로 보려고 한다.(아직 이직 생각은 없어서 면접은 아마 먼 훗날...)
물론 이 책 한권으로 깊이있는 CS 지식까지 완전 정복하기에는 한계가 있다.
예를 들어서 관계형 DB와 NoSQL DB의 차이는 무엇이고 각각 어떤 종류가 있나요? 라고 묻는 질문에는
책에 나온 내용으로 충분히 답변이 가능하지만
Django를 쓸 때 PostreSQL의 장점같은 더 나아간 질문이나 심화된 꼬리질문은 책을 기반으로 더 검색해서 공부해야한다.
하지만 너무 심화된 내용까지 다루면 책이 무제한 두꺼워지고
그렇다면 절대 끝까지 읽지 못할 것이기 때문에(적어도 나는 그래요...)
이 책으로 기본을 잡고 본인이 추가로 구글링해서 공부하면 충분할 것 같다.
나는 비전공자 출신이라서 처음 면접볼 때 CS공부가 너무 방대하게 느껴져서 힘들었는데
책에 네트워크, 운영체제, 데이터베이스, 자료구조의 기본적인 내용들이 포함되어 있어서
이 책에 있는 내용들이 숙지되어 있으면 적어도 간단한 질문들은 답변할 수 있을 것 같다.
다만 전공자라면 이미 아는 내용이 정리되어 있는거라서(아마 요점정리 노트 느낌?) 쉽게 느껴질 수 있을 것 같고
면접 전에 간단하게 리마인드가 필요할 때 유용할 것 같다.
아무튼 읽은 내용이 휘발되기 전에 정리해보았는데
이번에는 네트워크 중에서도 네트워크의 기초와 TCP/IP 4 계층 모델을 다루었다.
2. 네트워크
네트워크는 컴퓨터 등의 장치들이 통신 기술을 이용하여 구축하는 연결망을 지칭하는 용어
2.1 네트워크의 기초
네트워크란 노드(node)와 링크(link)가 서로 연결되어 있거나 연결되어 있지 않은 집합체
노드란 서버, 라우터, 스위치 등 네트워크 장치를 의미하고 링크는 유선 또는 무선을 의미함
2.1.1 처리량과 지연 시간
- 좋은 네트워크는 많은 처리량, 짧은 지연시간, 적은 장애 빈도, 좋은 보안을 갖춘 것
- 처리량(throughput)
- 링크를 통해 전달되는 단위 시간당 데이터양 - 단위는 bps(bits per second) 초당 전송 또는 수신되는 비트 수 - 트래픽, 네트워크 장치 간의 대역폭, 에러, 하드웨어 스펙에 영향을 받음
- 지연시간(latency)
- 요청이 처리되는 시간. 어떤 메시지가 두 장치 사이를 왕복하는 데 걸린 시간
- 매체 타입(무선, 유선) 패킷 크기, 라우터의 패킷 처리 시간에 영향을 받음
2.1.2 네트워크 토폴로지와 병목 현상
- 네트워크 토폴로지는 노드와 링크가 어떻게 배치되어 있는지에 대한 방식이자 연결 형태
- 트리 토폴로지
- 계층형 토폴로지라고 하며 트리 형태로 배치한 네트워크 구성
- 노드의 추가, 삭제가 쉬우며 특정 노드에 트래픽이 집중될 때 하위 노드에 영향을 끼칠 수 있음
- 버스 토폴로지
- 중앙 통신 회산 하나에 여러 개의 노드가 연결되어 공유하는 네트워크 구성. 근거리 통신망(LAN)에서 사용
- 설치비용 적고 신뢰성 우수.
- 중앙 통신 회선에 노드를 추가하거나 삭제하기 쉬움
- 스푸핑이 가능한 문제점
- 스푸핑은 LAN상에서 송신부의 패킷을 송신과 관련 없는 다른 호스트에 가지 않도록 하는 스위칭 기능을 마비시키거나 속여서 특정 노드에 해당 패킷이 오도록 처리하는 것
- 스타 토폴로지
- 중앙에 있는 노드에 모두 연결된 네트워크 구성
- 노드를 추가하거나 에러를 탐지하기 쉬우며 패킷의 충돌 발생 가능성이 적음
- 어떠한 노드에 장애가 발생해도 쉽게 에러를 발생할 수 있음
- 장애 노드가 중앙 노드가 아닐 경우 다른 노드에 영향을 끼치는 것이 적음
- 중앙 노드에 장애가 발생하면 전체 네트워크를 사용할 수 없음
- 설치 비용이 고가
- 링형 토폴로지
- 각각의 노드가 양 옆의 두 노드와 연결하여 전체적으로 고리처럼 하나의 연속된 길을 통해 통신
- 노드의 수가 증가되어도 네트워크상의 손실이 거의 없고 충돌이 발생되는 가능성이 적음. 노드의 고장을 쉽게 발견할 수 있음
- 네트워크 구성 변경이 어렵고 회선에 장애가 발생하면 전체 네트워크에 영향을 크게 끼침
- 메시 토폴로지
- 망형 토폴로지. 그물망처럼 연결되어 있는 구조
- 한 단말 장치에 장애가 발생해도 여러 개의 경로자 존재하므로 네트워크를 계속 사용할 수 있음
- 트래픽 분산 처리 가능
- 노드의 추가가 어렵고 구축 비용과 운용 비용이 고가
- 병목 현상
- 토폴로지가 중요한 이유는 병목 현상을 찾을 때 중요한 기준이 되기 때문
- 병목현상이 일어나서 서비스의 지연 시간이 길게 발생했을 때 관리자가 토폴로지를 확인하여 회선을 추가해서 해결 가능
2.1.3 네트워크 분류
네트워크는 규모를 기반으로 분류
- LAN (Local Area Network)
- 근거리 통신망
- 같은 건물이나 캠퍼스 같은 좁은 공간에서 운영
- 전송 속도가 빠르고 혼잡하지 않음
- MAN (Metropolitan Area Network)
- 대도시 지역 네트워크
- 도시같은 넓은 지역에서 운영
- 전송 속도는 평균이며 LAN보다는 더 많이 혼잡
- WAN (Wide Area Network)
- 광역 네트워크
- 국가 또는 대륙 같은 더 넓은 지역에서 운영
- 전송 속도는 낮으며 MAN보다 혼잡
2.1.4 네트워크 성능 분석 명령어
네트워크 병목 현상의 주된 원인: 대역폭, 토폴로지, 서버 CPU 및 메모리 사용량, 비효율적인 네트워크 구성
네트워크 관련 테스트와 네트워크와 무관한 테스트를 통해 문제점을 파악하고 네트워크 성능을 분석해봐야 함
- ping
- Packet INternet Groper
- 네트워크 상태를 확인하려는 대상 노드를 향해 일정 크기의 패킷을 전송하는 명령어
- 해당 노드의 패킷 수신 상태와 도달하기까지 시간 등을 알 수 있으며 해당 노드까지 네트워크가 잘 연결되어 있는지 확인할 수 있음
- TCP/IP 프로토콜 중에 ICMP 프로토콜을 통해 동작하므로 ICMP를 지원하지 않는 기기를 대상으로는 실행할 수 없음
- Ping [IP 주소 또는 도메인 주소]로 실행
- netstat
- 접속되어 있는 서비스들의 네트워크 상태를 표시하는 데 사용
- 네트워크 접속, 라우팅 테이블, 네트워크 프로토콜 등 리스트를 보여줌
- 서비스의 포트가 열려 있는지 확인할 때 씀
- 내가 접속하고 있는 사이트 등에 관한 네트워크 상태 리스트를 볼 수 있음
- nslookup
- DNS에 관련된 내용을 확인하기 위해 쓰는 명령어. 특정 도메인에 매핑된 IP를 확인하기 위해 사용
- tracert
- 윈도우에서는 tracers, 리눅스에서는 traceroute
- 목적지 노드까지 네트워크 경로를 확인할 때 사용하는 명령어
- 목적지 노드까지 구간들 중 어느 구간에서 응답 시간이 느려지는지 등을 확인할 수 있음
- 기타 ftp, tcpdump, wireshark, netmon
2.1.5 네트워크 프로토콜 표준화
네트워크 프로토콜은 다른 장치들끼리 데이터를 주고받기 위해 설정된 공통된 인터페이스
기업이나 개인이 아닌 IEEE 또는 IETF라는 표준화 단체가 정함
2.2 TCP/IP 4계층 모델
인터넷 프로토콜 스위트는 인터넷에서 컴퓨터들이 서로 정보를 주고받는 데 쓰이는 프로토콜의 집합
TCP/IP 4계층 모델이나 OSI 7계층 모델로 설명하기도 함
TCP/IP 계층은 네트워크에서 사용되는 통신 프로토콜의 집합. 프로토콜의 네트워킹 범위에 따라 네 개의 추상화 계층으로 구성됨
2.2.1 계층 구조
- OSI 계층은 애플리케이션 계층을 세 개로 쪼개고 링크 계층을 데이터 링크 계층, 물리 계층으로 나눠서 표현. 인터넷 계층을 네트워크 계층으로 부름
- 이 계층들은 특정 계층이 변경되었을 때 다른 계층이 영향을 받지 않도록 설계됨
- 애플리케이션 계층
- FTP, HTTP, SSH, SMTP, DNS 등 응용프로그램이 사용되는 프로토콜 계층
- 웹 서비스, 이메일 등 서비스를 실질적으로 사람들에게 제공
- FTP: 장치와 장치 간의 파일을 전송하는 데 사용되는 표준 통신 프로토콜
- SSH: 보안되지 않은 네트워크에서 네트워크 서비스를 안전하게 운영하기 위한 암호화 네트워크 프로토콜
- HTTP: World Wide Web을 위한 데이터 통신의 기초, 웹 사이트를 이용하는 데 쓰는 프로토콜
- SMTP: 전제 메일 전송을 위한 인터넷 표준 통신 프로토콜
- DNS: 도메인 이름과 IP 주소를 매핑해주는 서버
- 전송계층
- 송신자와 수신자를 연결하는 통신 서비스를 제공
- 애플리케이션과 인터넷 계층 사이의 데이터가 전달될 때의 중계 역할
- TCP: 패킷 사이의 순서 보장, 가상회선 패킷 교환 방식
- UDP: 순서를 보장하지 않고 수신 여부를 확인하지 않음. 단순히 데이터만 주는 데이터그램 패킷 교환 방식
- 가상회선 패킷 교환 방ㅇ식: 각 패킷에 가상회선 식별자가 포함. 모든 패킷을 전송하면 가상회선이 해제되고 패킷들은 전송된 순서대로 도착
- 데이터그램 패킷 교환 방식: 패킷이 독립적으로 이동하며 최적의 경로를 선택하여 감. 여러 패킷은 서로 다른 경로로 전송될 수 있으며 도착한 순서가 다를 수 있음
- TCP 연결 성립 과정
- 신뢰성 확보를 위해 3 way handshake 진행
- SYN 단계, SYN + ACK 단계, ACK 단계를 거침
- TCP 연결 해제 과정
- 4 way handshake 과정 발생
- 인터넷 계층
- 장치로부터 받은 네트워크 패킷을 IP 주소로 지정된 목적지로 전송하기 위해 사용
- IP, ARP, ICMP 등이 있음
- 패킷을 수신해야 할 상대의 주소를 지정하여 데이터 전달
- 상대방이 제대로 받았는지 보장하지 않음
- 링크 계층
- 전선, 광섬유, 무선 등으로 실질적으로 데이터를 전달하며 장치간에 신호를 주고받을 규칙을 정함
- 물리 계층, 데이터 링크 계층으로 나누기도 함
- 물리계층: 무선 LAN과 유선 LAN을 통해 0과 1로 이루어진 데이터를 보냄
- 데이터 링크 계층: 이더넷 프레임을 통해 에러 확인, 흐름 제어, 접근 제어 담당
- 유선 LAN
- 전이중화 통신: 양쪽 장치가 동시에 송수신할 수 있는 방식
- CSMA/CD: 이전에는 유선 LAN에 반이중화 통신 중 하나인 CSMA/CD 방식 사용. 데이터를 보낸 이후 충돌이 발생한다면 일정 시간 이후 재전송
- 유선 LAN을 이루는 케이블
- 트위스트 페어 케이블: 하나의 케이블처럼 보이지만 실제로는 여덟개의 구리선을 두개씩 꼬아서 묶은 케이블
- 광섬유 케이블: 광섬유로 만든 케이블. 구리선과는 비교할 수 없을만큼의 장거리 및 고속 통신 가능
- 무선 LAN
- 반이중화 통신; 양쪽 장치는 서로 통신할 수 있지만 동시에는 통신할 수 없으며 한 번에 한 방향만 통신 가능
- CSMA/CA: 반이중화 통신 중 하나. 장치에서 데이터를 보내기 전에 캐리어 감지 등으로 사전에 가능한 충돌 방지
- 무선 LAN을 이루는 주파수
- 2.4G는 장애물에 강하지만 전자레인지, 무선 등 전파 간섭 일어나는 경우 많음
- 5G는 사용할 수 있는 채널 수도 많고 동시에 사용할 수 있어서 상대적으로 깨끗한 전파 환경
- 와이파이: 전자기기들이 무선 LAN 신호에 연결할 수 있게 하는 기술
- BSS: 기본 서비스 집합. 단순 공유기가 아닌 동일 BSS 내에 있는 AP들과 장치들이 서로 통신 가능
- ESS: 하나 이상의 연결된 BSS 그룹
- 이더넷 프레임
- 계층 간 데이터 송수신 과정
- 캡슐화 과정: 상위 계층의 헤더와 데이터를 하위 계층의 데이터 부분에 포함시키고 해당 계층의 해더 삽입
- 비캡슐화 과정: 하위 계층에서 상위 계층으로 가며 각 계층의 헤더 부분을 제거하는 과정
- 네트워크의 어떤 계층에서 계층으로 데이터가 전달될 때 한 덩어리의 단위가 PDU(Protocol Data Unit)
- 제어 관련 정보들이 포함된 헤더, 데이터를 의미하는 페이로드로 구성
- PDU 중 아래 계층인 비트로 송수신 하는 것이 가장 빠르고 효율성이 높음
- 애플리케이션 계층에서는 헤더에 authorization 값 등 다른 값들을 넣는 확장을 위해 문자열 기반으로 송수신
출처: 면접을 위한 CS 전공지식 노트-주홍철
참고하면 좋은 링크: 우아한 테크 히히의 OSI 7 Layer https://youtu.be/1pfTxp25MA8
'TIL' 카테고리의 다른 글
[면접을 위한 CS 전공지식 노트] 2.네트워크/ 3.운영체제 (1) | 2022.10.02 |
---|---|
2022 인프콘 참가 후기 (0) | 2022.09.04 |
[노마드코더 북클럽] 클린코드 9. 단위 테스트 (0) | 2022.03.06 |
[노마드코더 북클럽] 클린코드 6. 객체와 자료 구조 (0) | 2022.03.01 |
[노마드코더 북클럽] 클린코드 5. 형식 맞추기 (0) | 2022.03.01 |