[네트워크] 심화
🔆 TCP/IP
네트워크의 시작
네트워크 구축 방식
: 회선교환 방식과 패킷교환 방식
회선교환 방식❓
회선교환 방식이란 발신자와 수신자 사이에 있는 오퍼레이터가 통신 시작 전 미리 전용 회선을 설정해야하는 네트워크 방식을 말한다. 통신 중에서는 발신자와 수신자 외 다른 사람이 개입할 수 없으며 연결이 끊어져야 다른 사람과 연결(통신)이 가능하다.
회선교환 방식
패킷교환 방식❓
패킷교환 방식이란 패킷 단위로 데이터를 잘게 나누어 전송하는 방식을 말한다. 좀 더 구체적으로 설명하면 IP가 출발지와 목적지 정보를 IP주소라는 특정한 숫자값으로 표기하고 패킷 단위로 데이터를 전송하는 방식을 의미한다. 이 방식은 전용 회선을 사용하지 않기 때문에 데이터를 전송하는 동안만 네트워크 자원이 사용된다.
패킷교환 방식
IP/IP Packet
복잡한 네트워크 속에서 클라이언트와 서버가 제대로 통신하기 위해서는 규칙이 필요하며 이를 위해 IP는 컴퓨터에 IP주소를 부여해 패킷 단위로 데이터를 전송하며 통신한다
- IP Packet(pack+bucket)
- 통신을 위한 소포
- 출발지 IP, 목적지 IP 등의 정보 포함
- 클라이언트에서 패킷 단위로 전송 시 노드들이 클라이언트 패킷을 통해 데이터를 전달
- 서버에서는 서버 패킷을 통해 응답 전달
- IP Packet의 한계
- 비연결성
- 패킷을 받을 대상의 부재나 서비스 불능 상태 시에도 패킷 전송
- 비신뢰성
- 패킷 소실 가능성 존재
- 패킷의 도착 순서 불확실
TCP/UDP
메시지 교환 예시로 보는 TCP/IP 패킷 사용🤓
- HTTP 메시지 생성
- Socket을 통해 전달
- Socket: 네트워크 환경에서 연결할 수 있게 만들어진 연결부
- IP 패킷 생성 전, TCP 세그먼트 생성(메시지 데이터 포함)
- IP 패킷 생성(TCP 데이터 포함)
- 생성된 TCP/IP 패킷은 물리적 계층을 지나기 위해 이더넷 프레임워크에 포함되어 서버로 전송
TCP/IP 패킷
-
TCP 세그먼트
- 출발지 PORT, 목적지 PORT, 전송제어, 순서, 검증 정보 등을 포함
- IP 패킷의 출발지 IP와 목적지 IP 정보를 보완
-
TCP 특징
🔆 네트워크 계층 모델
네트워크 계층 모델의 목적🌐
1. 표준화를 통한 포트, 프로토콜의 호환 문제 해결
2. 네트워크 시스템에서 발생하는 일을 계층 모델로 설명 가능
3. 문제 발생시 관리자가 원인의 범위를 확정하는데 도움
OSI 7계층 모델

- OSI 7계층 모델 계층 구분
- 1계층(물리 계층): 시스템 간의 물리적 연결과 전기 신호를 변환 및 제어하는 계층
- 2계층(데이터링크 계층): 네트워크 기기 간 데이터 전송 및 물리주소를 결정하는 계층
- 3계층(네트워크 계층): 실제 네트워크 간 데이터 라우팅을 담당하는 계층
- 4계층(전송 계층): 컴퓨터 간 신뢰성 있는 데이터를 서로 주고받을 수 있도록 하는 서비스를 제공하는 계층
- 5계층(세션 계층): 세션 연결의 설정과 해제, 세션 메시지 전송 등의 기능을 수행하는 계층(컴퓨터 간 통신 방식에 대해 결정하는 계층)
- 6계층(표현 계층): 데이터를 응용 계층으로 전달하거나 전달받은 데이터를 인코딩이나 디코딩하는 계층
- 7계층(응용 계층): 최종적으로 사용자와의 인터페이스를 제공하는 계층
- 데이터 캡슐화
- 캡슐화
: 데이터를 전송하는 쪽에서 상위 계층에서 하위 계층으로 데이터를 전달하며 헤더(각 계층에서 필요한 정보)를 붙여나가는 것
- 역캡슐화
: 데이터를 수신하는 쪽에게 원본 데이터를 전달하기 위해 하위 계층에서 상위 계층으로 전달하며 각 계층의 헤더를 제거해 나가는 것
TCP/IP 4계층 모델

- TCP/IP 4계층 모델 계층 구분
- 1계층(네트워크 인터페이스 계층): 네트워크의 하드웨어를 제어하는 계층으로 물리적인 주소로 MAC을 사용
- 2계층(인터넷 계층): 통신 노드 간의 IP패킷을 전송하는 기능 및 라우팅을 담당하는 계층
- 3계층(전송 계층): 통신 노드 간의 연결 제어, 신회성 있는 데이터 전송 담당
- 4계층(어플리케이션 계층): TCP/UDP 기반의 응용 프로그램을 구현할 때 사용
🔆 HTTP
HTTP의 특징
HTTP/1.1, HTTP/2는 TCP 기반이며 HTTP/3는 UDP 기반 프로토콜
- HTTP 특징
- 클라이언트/서버 구조: 요청과 응답 형식
- 무상태 프로토콜(Stateless)
: 서버가 클라이언트의 상태를 보존하지 않아 클라이언트 측에서 상태를 기억해야 함
- 이점
스케일 아웃: 응답 서버를 쉽게 바꿀 수 있어 서버 확장성이 높음
- 한계
로그인 상황과 같이 클라이언트의 상태를 유지해야 하는 경우 한계가 있음
- 비연결성(Connectionless)
: TCP/IP는 기본적으로 연결을 유지하지만 비연결성을 가진 HTTP에서 실제 요청을 주고 받을 때만 연결을 유지하며 응답을 주고 난 뒤에는 TCP/IP 연결을 끊음
- 이점
최소한의 자원으로 서버 유지 가능
- 한계와 극복: HTTP 초기 TCP/IP 연결 시 마다 연결 해체와 연결을 반복했지만 지금음 HTTP 지속 연결로 문제 해결
HTTP 메시지
: 헤더와 바디로 구분
- 바디: 메시지 본문(Message body)을 통해 표현(Representation) 데이터 전달하며 메시지 본문을 페이로드(payload)라고도 함
- HTTP 헤더: HTTP 전송에 필요한 부가정보를 담기 위해 사용
- 형식:
<field-name>:<field value>
HTTP Headers의 종류
1. 표현 헤더
: 표현 데이터를 해석할 수 있는 정보를 제공하는 헤더
- 데이터의 형식, 압축 방식, 자연 언어, 길이 등을 설명하는 헤더
- Content-Type, Content-Encoding, Content-Language, Content-Length
- 요청, 응답 둘 다 사용
2. HTTP 요청/응답 주요 헤더
- 요청 시 사용되는 헤더
- From: 유저 에이전트 이메일의 정보
- Referer: 이전 웹 페이지 주소
- User-Agent: 유저 에이전트 애플리케이션 정보
- Host: 요청한 호스트 정보(도메인)
- Origin: 서버로 POST 요청을 전송 시 요청 시작 주소
- Authorization: 인증 토큰을 서버로 보낼 때 사용하는 헤더
- 응답 시 사용되는 헤더
- Server: 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보
- Date: 메시지가 발생한 날짜와 시간
- Location: 페이지 리디렉션
- Allow: 허용 가능한 HTTP 메서드
- Retry-After: 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간
3. 콘텐츠 협상 헤더
: 클라이언트가 선호하는 표현을 요청하는 헤더로 요청 시에만 사용
- 콘텐츠 협상 헤더가 적용되지 않을 경우 서버는 기본 설정으로 응답
- 콘텐츠에 대한 우선순위 지정 가능
- 콘텐츠 협상 헤더 종류
- Accept: 클라이언트가 선호하는 미디어 타입 전달
- Accept-Charset: 클라이언트가 선호하는 문자 인코딩
- Accept-Encoding: 클라이언트가 선호하는 압축 인코딩
- Accept-Language: 클라이언트가 선호하는 자연 언어
🔆 HTTPS
HTTPS🧐
HTTPS란 HTTP Secure의 약자로 HTTP 통신을 하는 Socket 부분에서 SSL/TLS 프로토콜을 사용하여 서버 인증과 요청과 응답으로 오가는 내용을 암호화하여 HTTP 프로토콜을 더 안전하게 사용 가능함을 의미한다.
- 암호화 방식
- 대칭 키 암호화 방식: 암호화와 복호화 시 동일한 키 사용(하나의 키)
- 공개 키 암호화 방식: 암호화와 복호화 시 다른 키를 사용(두 개의 키)
- SSL/TLS 프로토콜
: 서버와 클라이언트 간 CA를 통해 서버를 인증하는 과정과 데이터를 암호화하는 과정을 아우르는 프로토콜
- SSL/TLS 프로토콜의 특징
- CA를 통한 인증서 사용
: CA는 서버에게 인증서를 발급해주는 공인된 기관으로 인증서는 서버의 신원을 보증
- 대칭 키, 공개 키 암호화 방식을 모두 사용
- 공개 키 암호화 방식
: 인증서 발급을 위해 서버는 CA로 서버의 정보와 공개 키 전달
→ CA는 서버의 공개 키와 정보를 CA의 비밀키로 암호화하여 인증서 발급
→ 서버는 CA 공개 키로 인증서를 확인하여 복호화를 시도
→ 복호화가 성공적으로 진행된다며 클라이언트는 서버의 정보와 공개키를 획득
→ 해당 서버가 신뢰할 있는 서버라는 정보 획득 가능
- 대칭 키 암호화 방식
: 공개 키는 클라이언트와 서버가 함께 사용할 대칭 키를 주고 받을 때 사용
→ 클라이언트는 생성한 대칭 키를 서버의 공개 키로 암호화하여 전달
→ 서버는 전달받은 데이터를 비밀 키로 복호화 하여 대칭 키 확보
→ HTTP 요청 주고 받을 때 대칭 키를 사용하여 데이터를 암호화하여 전달
<오늘의 일기>
배우면 배울수록 잘 모르겠다는 생각이 드는 네트워크의 세계이지만(...ㅎ) 좌절하기보다는 아무것도 몰랐던 내가 조금이나마 알게 되었다는 점을 위안 삼으며 열심히 공부해야겠다.
요즘은 공부를 해가면서 당장 모든 것을 이해하겠다는 생각보다는 여러 번 보다보면 언젠가 이해할 것이라는 믿음을 가지고 꾸준하게 노력해야 지치지 않고 오래갈 수 있겠다는 생각을 하게 되는 것 같다. 좋은 변화라고 장담할 수는 없겠지만 좋은 변화라 믿으며 끝까지 완주해야겠다!