여름의 서재
[네트워크] HTTP & HTTPS / GET & POST / TCP & UDP 본문
💡 HTTP
: 웹상에서 클라이언트와 서버 간에 요청/응답으로 데이터를 주고 받을 수 있는 프로토콜. 클라이언트가 HTTP 프로토콜을 통해 서버에게 요청을 보내면 서버는 요청에 맞는 응답을 클라이언트에게 전송한다. 이 때, HTTP 메소드는 서버가 요청을 수행하기 위해 해야할 행동을 표시하는 용도로 사용한다.
HTTP는 암호화가 되지 않은 평문 데이터를 전송하는 프로토콜이였기 때문에 도청이 가능하고, 통신 상태를 확인하지 않기 때문에 위장이 가능하다.
💡 HTTPS
: HTTP 에 암호화와 인증, 그리고 완전성 보호를 더한 프로토콜. HTTP 하부에 SSL과 같은 보안계층을 제공. HTTPS 의 SSL 에서는 대칭키 암호화 방식과 공개키 암호화 방식을 혼합한 하이브리드 암호 시스템을 사용한다. 클라이언트와 서버가 주고 받는 실제 정보는 대칭키 방식으로 암호화하고, 대칭키 방식으로 암호화된 실제 정보를 복호화할 때 사용할 대칭키는 공개키 방식으로 암호화해서 클라이언트와 서버가 주고 받는다.
- 실제 데이터 : 대칭키
- 대칭키의 키 : 공개키
-> 이렇게 두 가지 방식을 혼합하는 이유: 그것은 공개키 방식이 많은 컴퓨터 파워를 사용하기 때문이다. 만약 공개키를 그대로 사용하면 많은 접속이 몰리는 서버는 매우 큰 비용을 지불해야 할 것이다.
반대로 대칭키는 암호를 푸는 열쇠인 대칭키를 상대에게 전송해야 하는데, 암호화가 되지 않은 인터넷을 통해서 키를 전송하는 것은 위험하다. 그래서 속도는 느리지만 데이터를 안전하게 주고 받을 수 있는 공개키 방식으로 대칭키를 암호화하고, 실제 데이터를 주고 받을 때는 대칭키를 이용해서 데이터를 주고 받는 것이다.
💡 GET
: 서버로부터 정보를 조회하기 위해 설계된 메서드. GET은 요청을 전송할 때 필요한 데이터를 body에 담지 않고, 쿼리 스트링을 통해 전송한다. (전송할 수 있는 데이터의 크기가 제한적) 그래서 보안이 필요한 데이터에 대해서는 데이터가 그대로 url에 노출되므로 GET방식은 적절하지 않다.
💡 POST
: 리소스를 생성/변경하기 위해 설계되었기 때문에 GET과 달리 전송해야될 데이터를 HTTP메세지의 body에 담아서 전송. 그래서 POST요청은 GET과 달리 대용량 데이터를 전송할 수 있다. POST는 데이터가 Body로 전송되고 눈에 보이지 않아 GET보다 보안적인 면에서 안전하다. 하지만 민감한 데이터의 경우 반드시 암호화해서 전송해야한다.
💡 TCP 3-way Handshake
: TCP에서 통신을 하는 장치간 서로 연결이 잘 되어있는지 확인하는 과정/방식.
- 연결 성립
1) 클라이언트는 서버에 접속을 요청하는 SYN 패킷을 보낸다.
2) 서버는 클라이언트의 요청인 SYN 를 받고 클라이언트에게 요청을 수락한다는 ACK 와 SYN이 설정된 패킷을 발송한다.
3) 클라이언트는 서버의 수락 응답인 ACK 와 SYN 패킷을 받고 ACK 를 서버로 보내면 연결이 성립된다.
- 연결 해제
1) 클라이언트가 서버에 연결을 종료하겠다는 FIN 플래그를 전송한다.
2) 서버는 클라이언트의 요청을 받고 알겠다는 확인 메세지로 ACK를 보낸다. 그리고나서 데이터를 모두 보낼 때까지 잠깐 TIME_OUT이 된다.
3) 데이터를 모두 보내고 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN 플래그를 전송한다.
4) 클라이언트는 FIN메세지를 확인했다는 ACK를 보낸다.
5) 클라이언트의 ACK 메세지를 받은 서버는 소켓 연결을 close한다.
6) 클라이언트는 아직 서버로부터 받지 못한 데이터가 있을 것을 대비해 일정 시간 동안 세션을 남겨놓고 잉여 패킷을 기다리는 과정을 거친다.
💡 TCP & UDP
- UDP
: 비연결형 프로토콜. IP 데이터그램을 캡슐화하여 보내는 방법과 연결 설정을 하지 않고 보내는 방법을 제공한다. UDP는 흐름제어, 오류제어 또는 손상된 세그먼트의 수신에 대한 재전송을 하지 않는다. 속도가 빠르며 네트워크 부하가 적다는 장점이 있지만 신뢰성있는 데이터의 전송을 보장하지는 못한다. 그렇기 때문에 신뢰성보다는 연속성이 중요한 서비스 예를 들면 실시간 서비스(streaming)에 자주 사용된다.
- TCP
: 대부분의 인터넷 응용 분야들은 신뢰성 과 순차적인 전달 을 필요로 한다. UDP 로는 이를 만족시킬 수 없으므로 다른 프로토콜이 필요하여 탄생한 것이 TCP이다. TCP는 장치들 사이에 논리적인 접속을 성립하기 위하여 연결을 설정하여 신뢰성을 보장하는 연결형 서비스 이다. TCP 서비스는 송신자와 수신자 모두가 소켓이라고 부르는 종단점을 생성함으로써 이루어진다. TCP 에서 연결 설정는 3-way handshake를 통해 행해진다.
# 주소창에 www.naver.com을 입력하면 일어나는 일
1. (www.naver.com)는 도메인 네임으로 되어있기 때문에 DNS에 도메인을 검색하기 위한 요청을 보낸다.
2. DNS는 일련의 과정을 거친 후 (www.naver.com)에 대응하는 ip주소를 응답으로 돌려준다.
3. 받은 ip주소를 사용하여 TCP통신을 통해 해당 ip서버에 요청을 보낸다.
4. 요청을 받은 서버(www.naver.com)는 요청 내용에 대한 일련에 처리 과정을 거처 응답 메시지를 만든다.
5. 응답메시지를 TCP통신을 통해 다시 클라이언트에게 전송한다.
6. 브라우저는 받은 응답메시지를 HTTP 프로토콜을 사용하여 웹페이지를 구성하며 사용자에게 Naver 화면을 보여준다.
'CS > 네트워크' 카테고리의 다른 글
[네트워크] HTTP & HTTPS (0) | 2022.02.08 |
---|---|
[네트워크] TCP & UDP (0) | 2022.02.05 |
[네트워크] RESTful API (0) | 2022.01.12 |
[네트워크] OSI 7계층 & TCP/IP (0) | 2021.12.22 |