OSI 7계층과 TCP/IP4계층의 차이
OSI 7계층은 네트워크 통신이 일어나는 과정을 7단계로 정의한 국제 통신 표준 규약이다. 표준화를 함으로써 통신이 일어나는 과정을 단계별로 파악할 수 있다. 이로써 문제가 발생했을 때 그것이 일어난 단계만 수정하여 문제해결을 용이하게 만들 수 있다.
PDNTSPA
- Physical
- Data
- 물리계층에게 송수신되는 정보의 오류를 관리. MAC주소를 이용해 통신
- Network
- 라우터를 통해 이동할 경로를 선택하여 IP주소를 지정하고 해당경로에 따라 패킷을 전달
- Transport
- TCP, UDP 프로토콜을 통해 통신을 활성화
- Session
- API, Socket 등 통신을 관리하기 위한 방법을 제공
- Presentation
- 파일 인코딩, 명령어 압축/포장/암호화를 담당
- Application
- HTTP, FTP, DNS등 응용프로세스와 직접관계하여 서비스를 수행
우리가 실제로 사용하는 네트워크는 TCP/IP계층인데 이는 OSI계층에서 1,2 계층을 통합하고 5,6,7계층을 통합하여 4개의 계층으로 이루어져있다.
- 링크계층 → 네트워크계층 → 전송계층 → 애플리케이션계층
TCP와 UDP의 차이
- 지향점
- TCP는 연결지향
- UDP는 데이터를 데이터그램단위로 전송하는 비연결지향
- 신뢰성
- TCP는 제어기법(흐름제어, 오류제어, 혼잡제어)으로 신뢰성을 보장
- UDP는 자체적으로는 신뢰성을 보장하지않음
- 다만 추가적인 정의를 통해 신뢰성을 보장받을 수 있다.
- 사용처
- TCP는 파일전송, 웹 통신처럼 신뢰성이 중요한 서비스
- UDP는 스트리밍, 음성통신처럼 연속성이 중요한 서비스
- 예를들어 전화를 하는데 음성 한부분이 전달이 안됐다고 다시 요청을 하게되면 문장 순서가 뒤죽박이 되버린다.
TCP의 연결 방법과 해제방법
연결방법은 3 way handshake이며 해제방법은 4 way handshake 이다.
3 way handshake는 연결을 수립하는 단계이다.
n은 임의의 난수, SYN은 연결요청플래그, ACK는 응답일 때,
SYN(n) → ACK(n+1), SYN(m) → ACK(m+1) 순서로 패킷을 주고받아서 3-way가 된다.
4 way handshake는 연결을 해제하는 과정이다.
서버기준에서 설명을 해보겠다.
- 클라이언트가 FIN을 전송
- 서버는 FIN을 받았다는 ACK를 전송
- 서버는 처리해야 할 모든 통신을 마치면 FIN을 전송
- 클라이언트는 FIN을 받았다는 ACK를 전송
HTTP 메서드와 역할
http란 인터넷 통신을 위해 사용되는 프로토콜이다.
TCP/IP를 이용한 응용프로토콜로 비연결성을 지향한다. 따라서 요청과 응답방식으로 동작하며 서버와 클라이언트 양끝단에서 http메시지를 해석한다.
- GET : 서버의 데이터를 요청
- POST : 서버에 데이터를 생성
- PUT : 서버의 데이터를 수정
- DELETE : 서버의 데이터를 삭제
- PATCH : 서버의 데이터를 일부 수정
put과 patch는 수정한다는 점이 비슷하지만 put요청을 데이터가 없으면 새로 생성한다는 점이 차이점이다.
CORS
프론트에서 api서버로 요청을 보낼 때 흔히 발생한다.
브라우저는 서로 다른 도메인간 자원을 공유하는 것을 차단한다. 그래서 서버측에서 헤더를 통해 사용가능한 자원을 알려줘야 한다.
쿠키와 세션
http의 stateless로 발생되는 문제를 해결해주는 도구이다.
- 쿠키
- 웹브라우저가 가진 메모리, 하드디스크에 저장된다.
- 옵션에 expires를 설정해두면 브라우저가 그 기간에 맞춰 자동으로 삭제한다.
- 한 도메인당 20개, 한 쿠키당 4KB로 제한이되어있다.
- 세션
- 서버의 세션저장소에 저장된다.
- 세션저장소에 따라 삭제기한을 두는 방법이나 삭제방법이 다르다.
도메인을 통한 접속과정
도메인은
- 주소 입력
- 주소 중 도메인 네임을 DNS서버에 검색
- DNS서버에서 도메인 네임에 해당하는 IP주소를 획득
- IP주소와 URL정보를 http요청메시지로 생성
- TCP프로토콜을 사용하여 IP주소의 컴퓨터로 요청
- 요청메시지가 해석되어 데어터를 검색
- 검색된 데이터는 http응답메시지로 생성되어 전송
- 응답메시지가 해석되어 브라우저에 출력
URL은 리소스의 장소를 나타내며 URI는 리소스를 식별하기 위한 문자열 전반을 나타낸다.
대칭키와 공개키의 차이
대칭키는 동일한 키를 주고받아 암호화와 복호화에 사용한다. 따라서 동일한 키를 주고받기 때문에 매우 빠르지만 보안이 취약하다.
반면 공개키는 암호키를 분리한 알고리즘으로 암호화에 사용하는 키와 복호화에 사용하는 키를 분리했다. 그래서 비대칭키 암호화라고 부르기도 한다. 암호화키와 복호화키가 비대칭적이기 때문에 암호, 복호 작업이 복잡해진다.
공개키 방식은 다음과 같다.
- 서버는 암호화에 사용되는 공개키를 사용자에게 전달한다.
- 사용자는 공개키를 사용해서 데이터를 암호화한다.
- 암호화된 문서를 서버에게 전달한다.
- 서버는 서버만 가지고 있는 개인키로 문서를 복호화하여 데이터를 열람한다.
HTTPS에 대해 설명해주세요
https는 http에 SSL암호화 통신 기능을 추가한 것이다. 이를 통해 제 3자의 개입이나 위변조를 막을 수 있다.
일반적으로 443 포트를 사용하며 SSL이란 공인된 CA에서 통신을 인증하여 보안을 강화하는 방법이다.
기존의 공개키 방식을 반대로수행한다. 개인키인 비밀키로 암호화한뒤 공개키로 복호화한다는 것이다.
흐름은 다음과 같다.
- 사용자가 ssl페이지를 요청한다.
- 서버는 클라이언트에게 인증서를 전송한다.
- 클라이언트는 인증서를 받고 브라우저에 자장된 CA리스트와 CA공개키를 가지고 있으므로 공개키로 인증서가 복호화가 가능하다면 CA에 의해 검토됨을 확인한다.
- 복호화한 인증서는 서버의 공개키가 되며 이를 이용해 랜덤대칭키를 암호화하여 서버로 전송한다.
- 서버는 자신의 개인키로 문서를 복화해서 랜덤대칭키를 획득한다.
- 드디어 서버와 클라이언트만 가질 수 있게 안전하게 전달된 대칭키로 암호문서를 주고받을 수 있게 된다.