응용 계층의 역할
: 사용자가 사용하는 애플리케이션(응용 프로그램)이 동작하는 곳
클라이언트가 서비스 요청하면 서버가 서비스 제공
=> 데이터 전달을 위해 프로토콜이 사용됨
- ex
프로토콜 | 내용 | 포트 번호 |
HTTP | 웹 사이트 접속 | 80 |
DNS | 이름 해석 | 53 |
FTP | 파일 전송 | 20(데이터 전송) 21(명령, 응답 제어) |
SMTP | 이메일 송신 | 25 |
POP3 | 이메일 수신 | 110 |
HTTP 프로토콜
: 클라이언트, 서버가 어떻게 데이터를 교환할지 정한 규칙 (80번 포트)
문자 형태로 데이터가 전송되어 필요한 부분은 파싱(원하는 데이터를 특정 패턴, 순서로 추출해 가공)되어야 함
시작 라인
헤더
공백 (1줄)
바디 (
<html>
<head>
<title></title>
</head>
<body>
...
</body>
</html>
)
시작 라인
<!-- 요청 -->
HTTP메서드 경로 HTTP버전
ex) GET /index.html HTTP/1.1
<!-- 응답 -->
HTTP메서드 상태코드
ex) HTTP/1.1 200 OK
요청/응답이 어떤 메시지인지 알려줌
- HTTP 메서드 : 데이터를 수신하는 서버에서 어떤 작업을 해야 하는지 알려줌
- GET : 서버로부터 데이터 획득
- POST : 서버에 데이터를 추가, 생성
- PUT : 서버의 데이터를 갱신 (전체)
- PATCH : 서버의 데이터를 갱신 (일부)
- DELETE : 서버의 데이터를 삭제
- HTTP 버전
1.0 → 1.1 → 2.0 순서로 진화함
1.1 버전부터 KeepAlive 기능이 추가되어 한 번 연결이 수립되면 데이터 교환을 마칠 때까지 연결을 유지
2.0 버전부터 응용 계층에 Binary Frame을 추가해 기존 일반 텍스트 데이터를 바이너리(2진수)로 변환한 후, 데이터를 분할해 전송함
=> 빠른 전송 속도, 낮은 오류 발생 가능성
- 응답 메시지의 상태 코드
상태 코드 | 의미 | 설명 |
1xx | 정보 | 요청을 받았으며, 처리가 되고 있음 |
2xx | 성공 | 요청이 성공했음 |
3xx | 리다이렉션 | 클라이언트가 요청한 콘텐츠가 다른 곳에 있음 |
4xx | 클라이언트 오류 | 클라이언트 측의 오류로 요청이 실패함 |
5xx | 서버 오류 | 서버 측의 오류로 요청이 실패함 |
헤더
: 클라이언트와 서버가 통신하기 위한 부가적인 정보들 제공함
- Host : 서버의 도메인 이름, 포트 번호
- Connection : 현재 작업 종료 후에도 네트워크 상태를 연결 상태로 둘지 제어
- Language : 서버가 응답에 사용한 언어
바디
=> 데이터 포함
DNS 서버
네트워크에서는 IP 주소와 MAC 주소로 통신함
하지만 현실에서 수백개의 IP 주소를 입력해 원하는 서버에 접속하기는 어려음
=> 도메인 주소를 통해 IP 주소를 전달받고 서버에 접속함
※ 도메인의 IP 주소를 확인하는 명령어 : tracert www.google.com
- 도메인 동작 과정
1. 사용자가 www.google.com을 웹 브라우저에 검색함
2. 요청이 DNS 서버로 전달되어, DNS 서버는 해당 도메인에 해당하는 IP 주소 (142.250.206.228) 전달함
3. 사용자는 전달받은 IP 주소를 이용해 웹 사이트에 접속함
4. 웹 서버는 사용자가 요청한 페이지를 보여줌
- 순차적 DNS 질의
DNS 서버는 계층적으로 구성됨
1 - 루트 (.)
2 - com edu net
3- www.google.com www.harvard.edu
- 도메인 동작 과정 2 (재귀적 쿼리)
1. 웹 브라우저에 www.google.com 입력하여 PC에 저장된 Local DNS(기지국 DNS 서버)에 IP 주소를 요청함
2. 해당 웹 사이트를 방문한 적이 없어 캐싱되어 있지 않으면, Local DNS는 Root DNS에 IP 주소를 요청함
3. Root DNS에게 IP 주소가 없으면 Local DNS는 TLD DNS 서버(최상위 도메인 서버 / com, net, ..)에 IP 주소를 요청함
4. TLD DNS에도 IP 주소가 없으면 Local DNS는 google.com DNS 서버에 IP 주소를 요청함
5. google.com DNS 서버에서 IP 주소를 전달하면 Local DNS는 수신하고 로컬 PC에 전달해 캐싱할 수 있도록 함
DHCP 서버
: (Dynamic Host Configuration Protocol) 사용자들에게 IP 주소를 자동적으로 할당/회수하는 서버
- IP 할당 방식
1. 사용자 컴퓨터 => DHCP 서버를 찾음
2. DHCP 서버 => 사용자에게 IP 주소 할당 여부 물음
3. 사용자 => IP 주소가 필요하다고 요청함
4. DHCP 서버 => IP 주소를 할당해줌
SMTP, POP3 프로토콜
SMTP : 송신자가 사용하는 프로토콜
POP3 : 수신자가 이메일을 받을 때 사용하는 프로토콜
송신자 - 메일서버
1. 컴퓨터A => 메일서버에 25번 포트(SMTP)로 통신하겠다고 알림 / 메일서버 => OK + 자신의 이름 알려줌
2. 컴퓨터A => 자신의 이름 알려줌 / 메일서버 => OK 응답
3. 컴퓨터A => 자신의 이메일 주소 알려줌 / 메일서버 => OK 응답
4. 컴퓨터A => 상대의 이메일 주소 알려줌 / 메일서버 => OK 응답
5. 컴퓨터A => 본문 알려줌 / 메일서버 => OK 응답
6. 컴퓨터A => 연결 종료하겠다고 전달함 / 메일서버 => 연결 종료
메일서버 간 통신
1. 송신자 메일서버 => 메일을 수신자 메일서버로 전달함 (25번 포트)
2. 수신자 메일서버 => 이메일을 사용자B 편지함에 저장함
메일서버 - 송신자
1. 사용자B => 110번 포트(POP3)로 메일서버에 연결 시도 / 메일서버 => OK 응답
2. 사용자B => 연결 수립 시 사용자가 누구인지 밝힘 / 메일서버 => OK 응답
3. 사용자B => 내 편지함에서 메일 확인하기 위한 패스워드 알려줌 / 메일서버 => OK 응답
4. 사용자B => 메일 서버에서 이메일 목록 확인함 / 메일서버 => OK 응답
5. 사용자B => 해당 이메일을 컴퓨터B로 내려받음 / 메일서버 => OK 응답
6. 사용자B => 메일서버와 연결 종료 / 메일서버 => OK 응답
※ POP3는 편지함에서 메일 가져오면 서버에서 삭제됨 => IMAP(Internet Access Message Protocol) 사용 시 삭제되지 않음
응용 계층에서 사용하는 로드 밸런서
전송 계층 로드밸런서 기능도 포함함
IP 주소, 포트 + URI, HTTP 헤더, 쿠키 등 다양한 조건 기준으로 부하를 분산시켜줌
참고
'Programming > STUDY' 카테고리의 다른 글
[인강/CS 지식의 정석] 1. 개발자 필수 지식 (0) | 2024.11.30 |
---|---|
[모두의 네트워크 기초] 6장 전송 계층 : 오류 없이 데이터를 전달하는 단계 (1) | 2024.07.01 |
[모두의 네트워크 기초] 5장 네트워크 계층 : 목적지를 찾는 단계 (0) | 2024.06.21 |
[모두의 네트워크 기초] 4장 데이터 링크 계층 : MAC 주소로 통신하는 단계 (1) | 2024.06.10 |
[CS] 메모리의 구조 (0) | 2024.06.03 |