HTTP(Hyper Text Transfer Protocol)
HTTP는 애플리케이션 계층의 프로토콜로, 클라이언트와 서버 간의 통신을 위한 통신 규칙 집합입니다. 클라이언트가 서버의 웹 사이트를 방문하고자 한다면, 클라이언트의 브라우저가 웹 서버에 HTTP 요청을 전송하고, 웹 서버는 HTTP 응답으로 응답합니다. 간단히, HTTP 프로토콜은 네트워크 통신을 작동하게 합니다.
HTTPS(Hyper Text Transfer Protocol Secure)
이름에서 쉽게 짐작 가능하듯이, HTTPS는 HTTP 프로토콜에 보안을 적용한 프로토콜입니다. 통신할 때 암호화되지 않는 데이터를 주고받는 HTTP와 달리, HTTPS는 SSL 및 TLS 기술과 결합하여 암호화된 데이터를 주고받습니다. 이는 통신되는 데이터를 제3자가 가로채더라도 읽을 수 없게 하기에 안전합니다. 그럼 그 과정을 살펴보겠습니다.
<HTTPS 과정>
1. 브라우저의 주소 표시줄에 https:// 형식의 url을 입력하여 https 프로토콜을 제공하는 웹 사이트를 방문합니다.
2. 클라이언트는 사이트의 신뢰성을 검증하기 위해 서버에게 SSL 인증서를 요청합니다.
3. 서버는 Public Key가 포함된 SSL 인증서를 응답으로 보냅니다.
4. 브라우저가 받은 Public Key를 사용하여 Secure Session Key가 포함된 메세지를 암호화한 후 전송합니다.
5. 마지막으로 웹 서버가 Private Key를 사용하여 메세지를 해독하고, Session Key를 검색한 후, Session 키를 암호화하고 브라우저에 승인 메세지를 전송합니다.
따라서 이 이후부터는 클라이언트와 웹 서버가 동일한 Session Key를 사용하여 메세지를 안전하게 교환할 수 있게 됩니다.
DNS(Domain Name Service)
DNS는 서버의 IP 주소를 도메인 주소(ex. naver.com)으로 입력하여 참조할 수 있게 해주는 역할을 합니다. 현재는 KT같은 ISP에서 DNS를 제공하고 있습니다. 그럼 그 과정을 살펴보겠습니다.
1. 사용자가 "www.naver.com"을 브라우저에 입력하면 해당 도메인이 PC 내 hosts 파일 안에 있는지 확인하고, 없으면 DNS서버로 요청을 보냅니다.
2. DNS에서 www.naver.com에 대한 정보(IP 주소)를 클라이언트에게 응답합니다.
3. 브라우저는 회신받은 IP주소를 가지고 해당 IP 주소를 가진 서버로 갑니다.
DDNS(Dynamic Domain Name Service)
DDNS는 DNS와 같은 역할을 하지만, 유동적인 IP에 대응할 수 있도록 만들어졌습니다. 기업에서는 보통 전용선을 사용하여 서버에 고정 IP를 할당하기 때문에 DNS로 접근할 수 있지만, 소규모 네트워크 망에서는 비용적인 문제로 서버에 유동 IP를 할당하기 때문에 DNS로 접근하기 어려운 경우가 생깁니다. DDNS는 IP주소를 수시로 갱신하기 때문에 IP가 변경될 때마다 DNS에 변경된 IP 주소 값을 전달해 줌으로써 이러한 문제를 예방시켜 줍니다.
TCP(Transmission Control Protocol)
TCP는 전송 계층에서 동작하는 연결 지향형(connection-oriented)프로토콜로, 데이터의 흐름을 관리하고 데이터가 정확한지 확인합니다.
TCP는 패킷을 주고받기 전에 미리 연결을 맺어 가상 경로를 설정하고, 이 가상 경로를 통해 모든 데이터를 전송합니다. 이를 연결 지향형이라고 부르며, 이 연결을 설정하고, 종료하는 과정에서 HandShaking을 합니다. 그럼 그 과정을 살펴보겠습니다.
<연결 설정 3-way HandShaking 과정>
1. 클라이언트와 서버가 통신을 하기 전, 클라이언트의 포트는 Closed 상태, 서버의 포트는 언제든 요청을 받고서비스를 제공할 수 있도록 Listen 상태입니다.
2. 클라이언트가 서버에 요청을 보내고자 한다면, 임의의 포트 번호가 클라이언트 프로그램(ex. Naver)에 할당되고, SYN Sent 상태가 됩니다. 이는 영어 의미 그대로, 서버에 연결을 하고 싶다는 의사 표시 역할을 하는 SYN 패킷을 보냈다는 뜻입니다.
3. 서버는 클라이언트의 연결 요청, SYN 패킷을 받고, SYN Received 상태가 됩니다. 그리고 클라이언트에게 연결을 허락한다는 의미로 SYN+ACK 패킷을 보냅니다.
4. 마지막으로 클라이언트는 연결 요청에 대한 서버의 응답, SYN+ACK 패킷을 잘 받았다는 표시로 ACK 패킷을 서버에 보냅니다.
따라서 SYN / SYN+ACK / ACK 와 같이 패킷을 총 세 번 보냈기 때문에 3-way HandShaking이라고 합니다.
<연결 종료 4-way HandShaking 과정>
1. 클라이언트와 서버가 통신을 하는 중, 둘의 포트는 모두 Established 상태입니다.
2. 클라이언트가 통신을 끊고자 한다면, 클라이언트는 서버에 FIN 패킷을 보낸 후, 포트를 Close Wait 상태로 바꿉니다.
3. 서버는 클라이언트의 종료 요청, FIN 패킷을 받았다는 의미로 ACK 패킷을 보낸 뒤, 서버도 연결을 종료하겠다는 의미로 FIN 패킷을 보냅니다. 이 때 서버의 포트도 클라이언트의 포트처럼 Close Wait 상태가 됩니다.
4. 마지막으로 클라이언트는 연결 종료 요청의 대한 서버의 응답을 잘 받았다는 표시로 ACK 패킷을 서버에 보냅니다.
따라서 FIN / ACK / FIN / ACK 와 같이 패킷을 총 네 번 보냈기 때문에 4-way HandShaking이라고 합니다.
TCP는 연결이 설정되면, 연결이 해제되기 전까지 계속 대화를 시도합니다. 또한 데이터를 받았다면, 잘 받았다는 뜻으로 응답 패킷을 보내게 되어 있습니다. 따라서 데이터를 보냈을 때, 일정 시간 내에 응답이 오지 않는다면 재전송을 할 수 있기에 신뢰성이 확보됩니다.
UDP(User Datagram Protocol)
UDP는 TCP와 달리 비연결 지향형 프로토콜입니다. 통신을 하기 전에 연결을 맺는 과정이 없으며, 상호통신이 이루지지 않기 때문에 데이터 일부가 손상된 경우에도 재전송을 요구하지 않습니다. 따라서 네트워크에 부하를 주지 않는다는 장점이 있지만, 데이터의 신뢰성을 보장받지 못한다는 단점이 있습니다. 그러나 최근에는 네트워크 신뢰도가 높아져서 UDP를 사용하는 것이 오히려 더 효율성 높은 통신이 되는 경우가 많기 때문에 UDP도 많이 사용되고 있습니다.
'Nefus' 카테고리의 다른 글
STP란? (0) | 2023.09.18 |
---|---|
NEFUS_Network(3)_20230830 (0) | 2023.08.30 |
NEFUS_Network(2)_20230813 (0) | 2023.08.13 |
NEFUS_Network(1)_20230724 (0) | 2023.07.24 |
Nefus_Arduino_MiNiProject (1) | 2023.06.10 |