
정보통신공학과를 졸업한지 어언 4년...
네트워크 책을 읽다...
전공자 기준으로 내용은 쉬운 편이다. 입문자가 보기에도 어렵지 않을 것이다.
추억팔이로 복습할 겸 알만한 건 빼고 책에 없는 내용도 좀 부가적으로 정리했다.
1. 네트워크 기본
- LAN(Local Area Network)
- 단거리의 기기들을 연결한 네트워크
- 랜카드, 랜선, 공유기 등의 장비가 있음
- 랜카드는 랜선을 타고 오는 네트워크 신호를 변환시켜주는 장치로 PC 메인보드에 기본적으로 딸려있음
- 공유기: WAN->LAN 라우팅 기능이 있고 스위칭 허브 포트도 몇개 있어서 스위칭도 해줌
- 무선 AP: 공유기 더듬이. 와이파이로 신호 쏴줌
- 스위칭 허브: PC방 같은 곳에서 공유기 포트가 모자랄 때 쓰는 멀티탭 같은거. 공유기가 사설 IP를 몇십 개 만들어내면 허브를 통해 기기들이 그 IP에 연결함
- WAN(Wide Area Network)
- 멀리 떨어진 LAN들을 연결할 수 있는 네트워크
- ISP(Internet Service Provider)라는 인터넷 서비스 업체가 구축하고 관리
- 회선 교환 방식
- 전통적인 전화선 방식
- 메쉬 망처럼 모든 호스트마다 서로를 연결하는 회선이 필요한 건 아니며, 회선 스위치와 연결되어 있으면 됨
- 일대일 통신이라 호스트 A와 B가 통신하고 있으면 C와는 통신 못 함
- 패킷 교환 방식
- 회선 교환 방식의 단점을 해결한 방식
- 메시지를 패킷이라는 단위로 나눠서 보냄, 전용 회선이 있지 않음
- 중간 노드인 패킷 스위치(라우터, 스위치)가 최적의 패킷 경로를 설정함(네트워크 계층)
- 페이로드: 패킷을 통해 전송하고자 하는 데이터
- 헤더 & 트레일러: 부가 정보
- 주소와 송수신지 유형에 따른 전송 방식
- 유니캐스트: 송신자와 수신자가 일대일로 메시지 주고받음
- 브로드캐스트: 자신을 제외한 네트워크상의 모든 호스트에게 메시지 전송
- OSI 7계층으로 보는 각 계층별 문제
- 물리 계층: 랜선 빠지거나 공유기나 스위치의 물리적 고장
- 장비에 불 잘 들어오는지, 선 연결 잘 되어 있는지 확인
- 데이터링크 계층: MAC 주소 충돌, 스위칭 허브의 LAN 중복 연결
- arp -a로 IP와 MAC 주소가 제대로 매핑되어 있는지 ARP 테이블 확인
- 네트워크 카드 드라이버 업데이트 또는 재시작
- 네트워크 계층: IP 설정 잘못됨, 서브넷 마스크 오설정
- ping으로 패킷 잘 도달하는지 확인
- tracert로 패킷이 어디서 유실되는지 확인
- 전송 계층: 포트 차단, TCP 3-way Handshake 실패, 방화벽 차단
- netstat -an으로 내 PC의 포트가 열려있는지 확인
- telnet으로 상대 PC의 포트가 열려있는지 확인
- 세션 계층: 연결 유지 실패 등으로 세션 끊김
- Timeout 설정값 조정
- 지속 연결을 위한 Keep-Alive 패킷 주기 확인
- 프로그램을 재시작해서 세션 재정립 유도
- 표현 계층: 문자열 깨짐, SSL/TLS 암호화 버전 불일치
- 인코딩 설정 통일(UTF-8 등)
- 인증서 만료 여부나 프로토콜 버전 확인
- 파일 압축 포맷 확장자나 파싱 오류 수정
- 응용 계층: HTTP 404/500 에러, DNS 서버 먹통으로 인해 도메인 접속 불가
- nslookup [도메인] 으로 DNS 서버가 IP를 제대로 찾아오는지 확인
- 웹 브라우저의 캐시 및 쿠키 삭제
- 개발자 도구로 헤더나 파라미터가 잘 들어갔는지 확인
- 참고: 응용/표현/세션 계층은 TCP/IP 모델에서는 응용 계층 하나로 뭉뚱그림
- 물리 계층: 랜선 빠지거나 공유기나 스위치의 물리적 고장
- 캡슐화
- 패킷 송신 시 최상위 계층에서 최하위 계층으로 가며 헤더가 붙는 것
- 예를 들어 L7의 HTTP를 쓰면 L4의 TCP로 변환되고 L3의 IP 패킷으로 나눠지는데 이 과정마다 헤더가 붙음
- 수신 시 반대 과정을 거침
- 헤더가 붙으면서 메시지의 단위가 바뀌는데, 이 단위를 PDU(Protocol Data Unit)라고 함
- 응용 계층들: data
- 전송 계층: segment, datagram
- 네트워크 계층: packet
- 데이터 링크 계층: frame
- 물리 계층: bit
- 네트워크 성능 지표
- 트래픽: 네트워크 내의 정보량
- 과부하(overhead): 특정 노드에 처리해야 할 정보가 많아서 트래픽이 몰리면 일어나는 성능 저하
- 처리율(throughput): 단위 시간당 네트워크를 통해 실제 전송되는 정보량. 단위는 bps
- 대역폭(bandwidth): 통신 매체로 송수신 가능한 최대 정보량. 단위는 처리율과 같은 bps
- 패킷 손실: 트래픽이 너무 많아졌을 때 패킷을 처리하지 못하는 현상. ping 명령어로 확인 가능
2. 물리 계층과 데이터링크 계층
- 이더넷: 현대 LAN 환경에서 프레임을 주고받는 방법 등이 정해진 네트워크 기술
- IEEE 802.3이라는 이름으로 표준화됨
- 프리앰블(preamble): 이더넷 프레임의 시작을 알리는 8바이트짜리 정보
- MAC(Media Access Control) 주소: 네트워크 인터페이스마다 각 기기들의 고유한 6바이트짜리 주소
- 기기들의 NIC(Network Interface Controller)라는 장치에 MAC 주소가 박혀 있음
- 유선 NIC는 데탑에서 랜선 꽂는 카드(랜카드), 무선 NIC는 노트북/스마트폰에서 와이파이 잡는 칩셋임
- FCS(Frame Check Sequence): 수신한 프레임에 오류가 있는지 확인하기 위한 필드. CRC 값이 들어감.
- 토큰 링: LAN 기술의 일종. 호스트를 링 형태로 연결해두고, 충돌을 막기 위해 토큰을 가진 호스트만 송신이 가능한 고전 기술. 장비값이 비싸고 대기 시간이 너무 길어 사장되고 현재는 이더넷이 시장을 지배함
- 케이블
- 트위스티드 페어 케이블: 구리 선으로 신호를 주고받는 통신 매체. 가장 일반적인 LAN 케이블.
- 커넥터를 RJ-45라고 함
- 실드 종류에 따라 STP, FTP, UTP로 나뉨
- 광섬유 케이블: 속도가 빠르고 노이즈가 적어 대륙간 연결에 사용.
- 커넥터는 여러 종류가 있음
- 코어의 지름에 따라 싱글/멀티 모드가 나뉨
- 선박을 통해 수천 km에 달하는 해저 케이블을 연결함
- 중간중간에 리피터가 있어서 신호를 증폭시켜줌
- 이게 나오기 전에는 구리 선이나 위성을 썼음
- 트위스티드 페어 케이블: 구리 선으로 신호를 주고받는 통신 매체. 가장 일반적인 LAN 케이블.
- 허브(Hub)
- 물리 계층이라서 주소 개념이 없고 전달받은 모든 신호를 그냥 그대로 쏴줌
- 반이중 모드: 동시에 송수신 불가능한 일차선 도로, 전이중은 가능
- 반이중 모드 때문에 나는 충돌을 방지하기 위해 CSMA/CD라는 프로토콜을 사용함
- CSMA/CD: 기다렸다가 재전송하는 프로토콜
- 신호를 증폭시켜주는 리피터의 기능까지 같이 하기도 함
- 스위치(Switch)
- 데이터 링크 계층의 장비. 특정 포트에 연결된 호스트의 MAC 주소를 테이블로 기억해둠 (ex: 포트1은 MAC 주소가 ab:cd...)
- 플러딩(flooding): 첫 연결이나 테이블이 초기화돼서 프레임을 쏴줄 목적지를 모르겠을 때 스위치는 모든 포트로 전부 프레임을 전송함. MAC 주소가 일치하는 PC가 응답 패킷을 만들어서 주면 스위치는 테이블에 기록.
- VLAN(Virtual LAN): 하나의 물리적 스위치로 여러 개의 가상 LAN 망을 만드는 기술.
- 다른 망과 연결하려면 네트워크 계층 이상의 상위 장비(L3 스위치 등)가 필요함
- 플러딩이 일어나는 기기들을 한정시켜 성능을 향상시키고, 보안 목적으로도 이용.
- 포트 기반으로 나누기도 하고(물리적 위치에 종속), MAC 기반으로 나누기도 함.
3. 네트워크 계층
- IP
- 신뢰할 수 없는 비연결형 프로토콜
- 연결 수립 과정 없이 그냥 패킷을 던짐. 손실이 날 수도 있고, 순서도 보장하지 않음.
- 이러한 특징은 상위 계층의 TCP 등으로 보완 가능
- DHCP: IP 주소를 할당하는 프로토콜. 자동으로 할당받거나 사용자가 직접 할당할 수 있음.
- MTU(Maximum Transmission Unit): 한 번에 전송 가능한 IP 패킷의 최대 크기
- IPv4 패킷의 구조
- 식별자: 패킷은 쪼개져서 전송되므로, 원본 패킷의 번호를 식별자로서 기록함
- TTL: 라우터를 지날 때마다 1씩 감소하고 0이 되면 폐기됨
- 프로토콜: 상위 계층의 프로토콜을 나타냄(TCP vs UDP)
- 기타 잡것들 (플래그/단편화 오프셋)
- ARP: IP 주소를 통해 MAC 주소를 알아내는 프로토콜. 원리는 스위치의 MAC 테이블과 비슷함
- IP 주소의 구조
- 총 32비트로 이루어짐.
- (네트워크 주소) 127.16.12.45 (호스트 주소) -> 이때 네트워크, 호스트는 둘다 16비트.
- 네트워크 주소가 8비트, 호스트 주소가 24비트가 되도록 변경하면 더 많은 호스트에 IP 주소를 할당 가능.
- IP 주소가 낭비되거나, 모자라는 것을 방지하기 위해 클래스풀 주소 체계 도입.
- A클래스: 네트워크 주소가 8비트, B클래스: 둘다 16, C클래스: 호스트 주소가 8비트
- 그래서 A는 호스트 2^24개 가능, B는 2^16개 가능, C는 2^8개 가능.
- 하지만 호스트 주소가 모두 0인 IP는 네트워크 자체를 의미하며, 모두 1이면 브로드캐스트 주소를 의미하기에 호스트 주소로 쓸 수 없음. 즉 위의 가능한 호스트 수에서 2를 빼야 함.
- 가장 처음 옥텟 숫자가 0~127이면 A, 128~191이면 B, 192~223일 경우 C.
- 클래스리스 주소 체계
- 직원 300명에게 IP를 할당해야 하는데 기존 클래스 체계대로라면 8비트 단위로 선택해야 하니, C클래스를 쓰긴 모자라고 B클래스를 쓰기엔 낭비되는 IP 주소가 너무 많음 (죽음의 이지선다 256개 vs 65,536개)
- 이런 문제를 해결하기 위해 나온 서브넷 마스크를 사용하면 2의 제곱수만큼 세밀하게 쪼갤 수 있음
- 기존 C클래스에 대한 서브넷 마스크는 255.255.255.0, 즉 호스트 주소가 8비트지만 호스트 주소를 9비트로 만든다.
- 그럼 서브넷 마스크는 255.255.254.0이며 이때 네트워크 주소는 23비트이므로 서브넷 마스크는 /23으로 표기함.
- 호스트는 512개만 생기므로 낭비가 줄어든다.
- 네트워크 주소를 추출하기 위해서(같은 네트워크인지 알기 위해)는 대상 IP 주소와 서브넷 마스크를 AND 연산하면 된다.
- 보통 중소기업에서는 서브넷 마스크가 /24 이며 이게 보통 공유기들의 기본값이기도 함
- NAT(Network Address Translation)
- 사설 IP 주소를 가진 호스트가 외부 네트워크와 통신할 때 공인 IP 주소로 변환하는 기술
- 대부분의 라우터와 공유기가 내장하고 있음
- whatismyip에서 나오는 IP는 NAT가 공인 IP로 변환시켜 준 주소임
- 공유기를 오랫동안 꺼두면 통신사 DHCP가 공인 IP를 회수할 수 있는데, 그러면 공인 IP가 바뀜. 만약 서버 운영하는 데 이 때문에 애로사항이 생긴다면 돈을 더 주고 고정 IP를 발급하면 됨.
- 특수한 목적을 위해 예약된 IP
- 0.x.x.x: 이 네트워크의 이 호스트(IP를 부여받기 전 자신을 지칭하는 주소)
- 127.x.x.x: 루프백 주소(자기 자신), 보통 127.0.0.1 사용.
- 10.x.x.x, 172.16~32.x.x, 192.168.x.x: 사설 네트워크
- 라우터
- L3 스위치(보통 공유기에 포함됨)와 기능이 매우 비슷하여 잘 구분하지 않음
- 송신지에서 수신지까지 패킷을 보내기 위한 경로를 설정해 주는 장비.
- 라우팅 테이블: 특정 수신지까지 도달하기 위한 정보(경로 등). 수신지는 다음 라우터의 게이트웨이를 입력하면 된다.
- 정적 라우팅: 사용자가 수동으로 직접 채워 넣은 라우팅. 보안이 매우 중요하거나 굳이 동적으로 경로를 계산하는 과정이 필요 없을 때 등 매우 제한적으로 사용
- 동적 라우팅: 기본. 라우터가 지 알아서 라우팅 프로토콜로 경로 설정
- 라우팅 프로토콜
- RIP: 거리 벡터(라우터 홉 수) 기반, 비교적 단순
- OSPF: 링크 간 연결 관계, 연결 비용 등을 데이터로 저장해놓고 최적의 경로 선택
4. 전송 계층
- TCP(Transmission Control Protocol)
- 신뢰성 있는 연결형 통신
- 재전송을 통한 오류 제어, 흐름 제어, 혼잡 제어 등 다양한 기능 제공
- MSS(Maximum Segment Size): TCP로 전송할 수 있는 최대 페이로드(헤더 제외) 크기 (MTU와 구분 필요)
- TCP 세그먼트 헤더 구조
- 송신지/수신지 포트
- 순서 번호: 송수신되는 세그먼트의 올바른 순서 보장
- 확인 응답 번호: 상대 호스트가 보낸 세그먼트에 대한 응답
- 제어 비트: 부가 정보(ACK, SYN, FIN)
- 윈도우: 수신 윈도우(한 번에 수신하고자 하는 데이터 양) 크기 표시. 이걸로 수신측 버퍼가 넘치지 않게 데이터 양 조절(흐름 제어).
- 체크섬: 데이터 변조 여부를 확인하기 위한 필드. 2계층의 CRC와 비슷함
- 연결 수립/종료 방법
- 연결 수립 방법: 3-Way Handshake
- 연결 종료 방법: 4-Way Handshake
- 연결하고자 하는 호스트의 연결 과정을 액티브 오픈이라고 하며 상대의 과정을 패시브 오픈이라고 함.
- ARQ 알고리즘을 통해 패킷을 재전송함(TCP 전용 알고리즘이 아니라서 패킷이라는 용어를 씀)
- Stop-and-Wait: 패킷 1개 보내고 ACK 올 때까지 기다림 (느려서 요새 안씀)
- Go-Back-N: 파이프라이닝(연속으로 메시지 전송)을 이용해 일단 여러개 보내고 중간에 잘못 전송된 패킷이 있으면 해당 패킷부터 다시 전송
- Selective Repeat: 잘못 전송된 패킷들에 대해서만 ACK 세그먼트를 보냄
- (참고) HTTP는 한 번 요청-응답 때마다 저 핸드셰이크 과정을 모두 거칠까?
- HTTP/1.0은 정말 그랬지만 연결 맺고 끊는 비용이 너무 커짐
- 1.1(현재 표준)부터 Keep-Alive 기능이 들어가면서 응답받아도 연결을 바로 안 끊고 일정 시간 살려둠. 그러다가 일정 시간(Timeout) 동안 추가 요청이 없거나 헤더에 Connection: close를 명시하면 끊음.
- 흐름 제어
- 수신 윈도우를 통한 슬라이딩 윈도우 기법 사용
- 윈도우의 크기만큼은 확인 응답을 받지 않고도 한 번에 전송 가능.
- 과정
- 윈도우의 크기가 4라면 맨 처음 1,2,3,4 세그먼트를 한 번에 전송함
- 1에 대한 응답이 오면 윈도우를 밀어서 2,3,4,5 세그먼트를 전송. 반복.
- 2가 먼저 오더라도 1의 응답이 안 오면 윈도우는 안 움직임
- 혼잡 제어
- 흐름 제어를 하는 수신 윈도우가 수신 측 헤더에 있다면 혼잡 윈도우는 송신 측 컴퓨터의 OS 커널/TCP 스택 메모리에 존재.
- AIMD(Addictive Increase/Multiplicative Decrease): 합으로 증가/곱으로 감소 라는 뜻의 혼잡 제어 알고리즘.
- 느린 시작 알고리즘: 혼잡 윈도우 크기를 1부터 지수함수적으로 늘림.(합으로 증가)
- 세그먼트 1개 보내서 ACK 받으면 그 다음부터 2, 4, 8, 16, ... 계속 늘리다가 미리 정해둔 임계값에 도달하면 AIMD 방식으로 전환.
- 빠른 회복 알고리즘: 늘리다가 패킷 유실이 발생하면 네트워크가 마비되는 걸 막기 위해 윈도우 크기를 1/2로 확 줄임
- 느린 시작 알고리즘: 혼잡 윈도우 크기를 1부터 지수함수적으로 늘림.(합으로 증가)
- UDP(User Datagram Protocol)
- IP처럼 신뢰할 수 없는 비연결형 통신
- TCP보다 빠름
- 연결 수립-연결 종료까지 상태를 유지하는 TCP와 달리 stateless함
- UDP 데이터그램 구조
- 송신지/수신지 포트
- 길이
- 체크섬
- 신뢰성보다 속도가 중요한 실시간 스트리밍이나 인터넷 전화 등에 많이 사용됨
- 포트
- 패킷을 목적지까지 전달했다고 해서 끝나는 게 아니라, 어떤 앱 프로세스에 필요한지 알아야 함.
- 이때 포트 번호를 통해 특정 애플리케이션을 식별
- 잘 알려진 포트 번호는 0~1023
- 등록된 포트(특정 앱에서 많이 쓰는 것. 대표적으로 8080)는 ~49151
- 동적 포트(사설, 임시 포트 - 송신지 포트번호에 주로 임시 포트 부여)는 ~65535
- NAPT(Network Address Port Translation)
- 포트 기반의 NAT
- 공인 IP를 사설 IP와 일대일 매핑시키는 것은 현실적으로 어려운데, 이때 하나의 공인 IP를 여러 사설 IP에 매핑시킨 다음 포트로 나눔.
- 즉 NAT 테이블에 1.2.3.4:6200 = 192.168.0.5:1025 / 1.2.3.4:6201 = 192.158.0.5:1026 이렇게 매핑해둔다면 같은 공인 IP지만 외부 네트워크는 어느 사설 기기에서 송신했는지 찾을 수 있을 것이다.
- 포트 포워딩
- 특정 호스트에 IP와 포트 번호를 미리 할당해두고 그 주소에게 패킷을 전달하는 기능
- 네트워크 외부에서 내부로 접속할 수 있도록 접속 정보를 공개할 때 자주 사용함
- 공유기 포트 포워딩 설정으로 192.168.0.5:1025의 포트를 1234로 등록하면, 외부에서 공인 IP:1234로 방금 그 사설 주소:포트에 접속 가능.
- ICMP(Internet Control Message Protocol)
- IP 패킷의 전송 과정에 대한 피드백 메시지를 얻기 위해 사용하는 프로토콜
- ping, tracert가 ICMP를 사용
- 종류
- 전송 과정에서 발생한 문제에 대한 오류 보고
- 네트워크에 대한 진단 정보
5. 응용 계층
- 네임 서버(DNS 서버)
- 도메인:IP주소 매핑 테이블을 가지고 있는 서버
- 종류
- 로컬 네임 서버
- 클라이언트와 맞닿아 있는 네임 서버. 클라이언트가 IP를 찾기 위해 가장 먼저 찾는 서버.
- 보통 ISP에서 관리하지만, 공개 DNS 서버(ex: 8.8.8.8)를 이용하도록 바꿀 수도 있음
- 루트 네임 서버
- 로컬 네임 서버에서 특정 도메인과 대응되는 IP 주소를 찾지 못했을 때
- 도메인이 example.com이라면 최상위 도메인(com)을 관리하는 TLD 네임 서버의 주소를 가르쳐줌
- 책임 네임 서버
- 특정 도메인 영역을 관리하는 네임 서버
- 'com 도메인만을 관리하는 TLD 네임 서버' 가 그 예시.
- 로컬 네임 서버
- DNS 캐시
- 기존에 DNS 서버로부터 응답받은 결과를 임시로 저장했다가 추후 같은 질의에 활용.
- TTL과 함께 저장됨.
- 브라우저에도 저장되고, 브라우저에 캐시가 없으면 OS, 라우터, ISP 단도 조회함.
- URI(Uniform Resource Identifier)
- 자원을 식별할 수 있는 정보.
- URL(... Locator): URI가 위치를 이용해 자원을 식별하는 방법
- foo://www.example.com:8042/over/there?name=ferret#nose
- scheme: foo:// 부분. 자원에 접근하는 방법으로 프로토콜명을 명시함.
- authority: www.example.com:8042 부분. 호스트를 특정할 수 있는 정보. IP나 도메인 네임, 포트.
- path: /over/there 부분. 자원이 위치한 경로.
- query: ?name=ferret 부분. HTTP로 서버와 상호작용할 때 서버에게 주는 정보.
- fragment: #nose 부분. 자원의 특정 한 조각을 가리키기 위한 정보. HTML 파일 안에서 위치를 가리킬 때 자주 씀.
- URN(... Name): URI가 이름을 이용해 자원을 식별하는 방법. 잘 안쓰임.
- 네임 서버의 도메인:IP주소 매핑 테이블 로우(레코드)를 직접 추가하기
- 내가 새로 산 도메인이 있다면, 그걸 네임 서버에 알려주어야 함.
- 네임 서버는 AWS나 가비아, 카페24 같은 호스팅 서비스들이 제공함.
- 그 서비스들의 DNS 관리 콘솔로 가서, 레코드를 추가해야 함.
- 그럼 다른 클라이언트들이 이 네임 서버에 가서 이 도메인의 IP를 물어보고 받을 수 있게 됨.
- 레코드 종류
- A: 특정 호스트에 대한 도메인 네임과 IPv4 주소와의 대응 관계
- AAAA: IPv6 주소와의 대응 관계
- CNAME: 호스트 네임에 대한 별칭
- NS: 특정 호스트의 IP 주소를 찾을 수 있는 네임 서버
- MX: 해당 도메인과 연동되어 있는 메일 서버
- HTTP(Hypertext Transfer Protocol)
- 응용 계층에서 정보를 주고받는 데 사용되는 프로토콜.
- MIME(Multipurpose Internet Mail Extensions) 타입: HTTP 에서 메시지로 주고받는 자원의 종류
- 슬래시를 기준으로 하는 타입/서브타입 형식으로 구성됨. 와일드카드 사용 가능(ex: text/*)
- text: text/plain, text/html, text/css, text/javascript
- image: image/png, image/webp 등
- video: video/mp4 등
- audio
- application: 바이너리 형식의 데이터. application/pdf, xml 등.
- multipart: 각기 다른 미디어 타입을 가질 수 있는 여러 요소. form-data, encrypted 등.
- stateless한 프로토콜임. 클라이언트가 한 서버에 종속되지 않게 하려는 의도.
- 전송 계층에서 설명했듯이, HTTP 1.0은 TCP 연결 수립이 매번 필요했음.
- HTTP 헤더
- 종류가 매우 많음
- 요청 헤더
- Host: 요청을 보낼 호스트를 나타냄. 주로 도메인 네임으로 명시됨.
- User-Agent: HTTP 요청을 시작하는 클라이언트 측의 프로그램. 운영체제나 브라우저 종류/버전 등이 표시됨.
- Referer: 클라이언트가 요청을 보낼 때 머무르고 있던 URL. 유입 경로 파악에 사용됨.
- Authorization: 클라이언트 인증 정보.
- 응답 헤더
- Server: 요청을 처리하는 서버 측 소프트웨어 정보. ex: Apache/2.4.1 (Unix)
- Allow: 클라이언트에게 허용된 HTTP 메서드 목록
- Retry-After: 503에서 자주 쓰이며, 자원을 사용할 수 있는 날짜 혹은 시간 명시.
- 요청 & 응답 헤더
- Connection: 클라이언트의 요청과 응답 간의 연결 방식. keep-alive라고 하면 지속 연결 희망. 그렇지 않으면 close.
- Content-Type: 메시지 본문의 표현 방식 설명.
- 캐시
- HTTP 기반 기술의 일종
- 불필요한 대역폭 낭비와 응답 지연을 방지하기 위해 정보의 사본을 임시로 저장하는 기술
- private cache: 웹 브라우저에 저장되는 캐시
- public cache: 클라이언트와 서버 사이에 위치한 중간 서버에 위치하는 공용 캐시
- 캐시할 데이터에 Expires(날짜)나 Max-Age(초)라는 헤더를 달아서 유효 기간을 부여할 수 있음.
- 엔티티 태그(Entity Tag, Etag)
- 자원의 버전을 식별하기 위한 정보
- 데이터를 캐시해두다가, If-None-Match라는 헤더의 값이 변경되면 새 자원을 요청하는 식.
- 쿠키
- 서버에서 생성되어 클라이언트 측에 저장되는 데이터.
- 상태를 유지하지 않는 HTTP의 특성을 보완하기 위한 수단.
- Set-Cookie 헤더를 통해 전달함.
- 자동 로그인 세션
- 로그인 하면 서버가 세션 id를 발급하고 DB에 저장한 후 클라이언트에 전달.
- 클라이언트는 추후 요청 시 쿠키 내에 세션 id를 포함해 전송함.
- 보안 문제가 한계.
- Secure: HTTPS 프로토콜이 사용되는 경우에만 쿠키를 전송하도록 하는 옵션
- HttpOnly: 자바스크립트에선 접근 못하게 하고 HTTP 송수신을 통해서만 쿠키를 이용하도록 제한하는 옵션. 쿠키의 위변조를 막음.
( + 추후 정리)
로드 밸런싱, 포워드 프록시 / 리버스 프록시, HTTPS, SSL, TLS 핸드셰이크, AP
Bonus. 칼부림 게시글 작성자 추적 과정
- 응용 계층(L7): 수사관이 해당 게시글에 대한 정보를 사이트 운영자한테 요청하고, 운영자는 웹사이트에 남은 접속로그와 로그인 기록을 확인
- 전송 계층(L4): 운영자는 글쓴이의 송신지 포트번호와 공인 IP, 정확한 타임스탬프를 확보해서 수사관한테 전달
- 송신지 포트번호: 통신시 사용자 기기에 부여하는 임시 포트번호(ex: 54321).
- 수신지 포트번호는 보통 HTTPS이므로 443.
- 공유기의 공인 IP는 하나이고, 외부 서비스는 자신에게 요청한 기기가 어느 기기인지 알아야 응답을 줄 수 있으므로 송신지 포트번호가 필요함.
- 네트워크 계층(L3): 수사기관이 통신3사에 영장을 던지고 통신사는 공인 IP를 DHCP 장부와 대조해서 그 가입자의 실제 물리적 회선 위치를 찾아냄. PC방이나 카페에서 글을 썼다면 그 위치가 나옴.
- 이걸 못 알아내게 하기 위해 보통 칼부림 글쓴이들은 해외 VPN을 쓰는데, 이 때문에 경찰이 VPN 제공 업체에 공조 요청을 하기도 함
- 공조를 안 해주는 VPN이나 Tor를 사용해서 공인 IP를 확보하기 힘들게 하면 수사가 어려워짐. 이 경우에는 아이디 패턴, 말투 등으로 용의자를 특정하는
디지털 파묘L7 수사까지 병행.
- 데이터링크 계층(L2): MAC 주소 찾기
- 일반 가정집이나 개인카페
- 공유기 DHCP 테이블로 MAC 주소 확인함
- 그러나 이런 공유기는 로그 휘발이 빠르므로 공유기에서 MAC 주소까지 얻는 것은 힘든 경우가 많음
- PC방이나 대형카페
- 송신지 포트번호, 공인 IP, 타임스탬프 같은 정보를 관리 프로그램(게토 등) 등에 기록되어 있는 로그와 대조해 MAC 주소 확보.
- 일반 가정집이나 개인카페
- 물리 계층(L1): 물리적 기기를 찾기 위한 수사
- MAC 주소를 가지고 용의자들의 기기를 대조
- MAC 주소를 확보하지 못했다면 CCTV나 음료 결제내역 같은 기술 외적인 방법으로 용의자 특정
'IT > 기타' 카테고리의 다른 글
| [IT] 네임서버, A레코드, CNAME에 대해 알아보자 (0) | 2026.04.01 |
|---|---|
| [Claude Code] MCP 연결 및 사용 (feat. VSCode Extension) (0) | 2026.01.10 |
| [IT/Web] 쿠키 저장 정책(Set-Cookie, SameSite) (0) | 2025.12.11 |
| [Expo] RN 웹뷰 프로젝트 환경 세팅 (1) | 2025.08.31 |
| 사이드 프로젝트 개발환경 세팅 계획 (2) | 2025.08.03 |