[Network] 컴퓨터 네트워크 정리 - part2

이상돈·2023년 6월 11일
0

📌 컴퓨터 네트워크 정리 - part2

TCP의 3 way handshake

TCP는 장치들 사이에 논리적인 접속을 성립하기 위하여, 연결을 설정하여 신뢰성을 보장하는 연결형 서비스이다.
TCP 통신을 이용하여 데이터를 전송하기 위해 네트워크 연결을 설정 하는 과정

• A 프로세스(Client)가 B프로세스(Server)에 연결을 요청
a. A -> B : SYN
A가 B에게 연결 요청 메시지(SYN)를 전송
송신자가 최초로 데이터를 전송할 때 Sequence Number를 임의의 랜덤 숫자로 지정하고, SYN 플래그 비트를 1로 설정한 세그먼트를 전송한다.
PORT 상태 = B: LISTEN, A: CLOSED

b. B -> A : SYN + ACK
접속 요청을 받은 프로세스 B가 요청을 수락했으며, 접속 요청 프로세스인 A도 포트를 열어 달라는 메시지 전송(SYN + ACK)
수신자는 Acknowledgement Number 필드를 (Sequence Number + 1)로 지정하고, SYN과 ACK 플래그 비트를 1로 설정한 세그먼트를 전송한다.
PORT 상태 - B: SYN_RCV, A: CLOSED

c. A -> B : ACK
접속 요청 프로세스 A가 수락 확인을 보내 연결을 맺는다.
이떄, 전송할 데이터가 있으면 이 단계에서 데이터를 전송할 수 있다.
PORT 상태 - B: ESTABLISHED, A: ESTABLISHED

TCP의 4 way handshake

TCP의 연결을 해제하는 과정
• A 프로세스(Client)가 B 프로세스(Server)에 연결 해제를 요청

a. A -> B : FIN
• 프로세스 A가 연결을 종료하겠다는 FIN 플래그를 전송
• 프로세스 B가 FIN 플래그로 응답하기 전까지 연결을 계속 유지

b. B -> A : ACK
• 프로세스 B는 일단 확인 메시지를 보내고 자신의 통신이 끝날 때까지 기다린다. (이 상태가 TIME_WAIT 상태)
• 수신자는 Acknowledgement Number 필드를 (Sequence Number + 1)로 지정하고, ACK 플래그 비트를 1로 설정한 세그먼트를 전송한다.
• 그리고 자신이 전송할 데이터가 남아있다면 이어서 계속 전송한다.

c. B -> A : FIN
• 프로세스 B가 통신이 끝났으면 연결 종료 요청에 합의한다는 의미로 프로세스 A에게 FIN 플래그를 전송

d. A -> B : ACK
• 프로세스 A는 확인했다는 메시지를 전송

HTTP와 HTTPS

HTTP 프로토콜

개념
HyperText Transfer Protocol
웹 상에서 클라이언트와 서버 간에 요청/응답으로 정보를 주고 받을 수 있는 프로토콜
특징
주로 HTML 문서를 주고받는 데에 쓰인다.
TCP와 UDP를 사용하여, 80번 포트를 사용한다.
비연결(Connectionless) : 클라이언트가 요청을 서버에 보내고, 서버가 적절한 응답을 보낸뒤 연결이 바로 끊긴다.
무상태(Stateless) : 연결을 끊는 순간 클라이언튿와 서버의 통신은 끝나며 상태 정보를 유지하지 않는다.

HTTPS 프로토콜

개념
HyperText Transfer Protocol over SSL
웹 통신 프로토콜인 HTTP의 보안이 강화된 버전의 프로토콜
특징
HTTPS의 기본 TCP/IP 포트로 443번 포트를 사용한다.
HTTPS는 소켓 통신에서 일반 텍스트를 이용하는 대신에, 웹 상에서 정보를 암호화하는 SSL이나 TLS 프로토콜을 통해 세션 데이터를 암호화한다.
데이터의 적절한 보호를 보장한다.

HTTPS가 필요한 이유?

클라이언트인 웹브라우저가 서버에 HTTP를 통해 웹페이지나 이미지 정보를 요청하면 서버는 이 요청에 응답하여 요구하는 정보를 제공하게 된다.
웹 페이지(HTML)는 텍스트이고, HTTP를 통해 이런 텍스트 정보를 교환하는 것이다.
이때 주고 받는 텍스트 정보에 주민등록번호나 비밀번호와 같이 민감한 정보가 포함된 상태에서 네트워크 상에서 중간에 제3자가 정보를 가로챈다면 보안상 큰 문제가 발생한다.
즉, 중간에서 정보를 볼 수 없도록 주고받는 정보를 암호화하는 방법인 HTTPS를 사용하는 것이다.

대칭키 암호화와 비대칭키 암호화

HTTPS는 대칭키 암호화 방식과 비대칭키 암호화 방식을 모두 사용하고 있다.

대칭키 암호화 방식

암복호화에 사용하는 키가 동일한 암호화 방식을 말한다.대표적인 알고리즘으로는 DES, 3DES, AES, SEED, ARIA 등이 있다.
비대칭키(공개키) 암호화 방식에 비해 연산 속도가 빠르다는 장점이 있지만, 키를 교환하는 중 키가 탈취될 수 있기 때문에 보안에 취약점이 있다.
뿐만 아니라, 추가로 사용자가 증가할수록 각각의 키가 필요하기에 관리해야 할 키가 방대하게 많아진다.

비대칭키(공개키) 암호화 방식

효율은 떨어지지만, 대칭키 암호와 방식의 키를 교환해야하는 문제를 해결하기위해 등장했다.
밥이 엘리스에게 정보를 전달하려고 할때, 밥은 엘리스의 공개키를 가지고 암호화 하여 정보를 보내고, 엘리스는 자신의 개인키로 복호화하여 정보를 읽는다.

HTTPS에서 사용되는 방식

대칭키만을 사용하면 키가 탈취될 수 있다는 위험이 존재한다.
또한 비대칭키(공개키)만을 사용하면 HTTP 메시지의 길이가 큰 경우에 부하에 큰 무리를 줄 수 있다.(공개키 알고리즘은 암호화, 복호화 알고리즘이 매우 복잡하다.)
따라서 HTTPS에서는 공개(비대칭키)키 방식으로 비대칭키를 전달하고, 서로 공유된 대칭키를 가지고 통신한다.
위의 그림을 예시로 들어보면
1. 밥은 엘리스의 공개키로 암호화 통신에 사용할 대칭키를 암호화해서 엘리스에게 보낸다.
2. 엘리스는 암호문을 받고 자신의 개인키로 복호화한다
3. 엘리스는 밥으로부터 얻은 대칭키로 밥에게 보낼 정보를 암호화하여 밥에게 보낸다.
4. 밥은 엘리스에게 받은 암호문을 대칭키로 복호화한다.
5. 이 과정으로 계속 통신한다.

즉, 사용자 측에서는 비대칭키 알고리즘을 통해 안전하게 키 교환 후 해당 키로 대칭키 알고리즘을 통해 통신하게 된다.

profile
사람들의 더 나은 삶을 위한 개발자

0개의 댓글