웹 개발자는 평생 HTTP 기반 위에서 개발한다. 언젠가 한 번은 HTTP를 정리해봐야 할 시기가 올 것이다. 라고 김영한 님이 말씀하셨다.
기본적인 개념부터 차곡차곡 정리해보자.
인터넷 네트워크(Internet Network)
네트워크
컴퓨터들은 어떻게 서로 통신을 하는가? 상식적으로 서로 다른 매체간 통신을 하기 위해서는 연결되어 있어야 한다. 유선, 무선 등 방식과 무관하게 매개체를 통해 이어져 있어야 정보 전달이 가능하다. 이렇게 컴퓨터간 이어져 있는 매개체와 그 관계를 포괄적으로 네트워크라 한다.
IP(Internet Procotol)
네트워크를 통해 통신을 할 때 수 많은 컴퓨터가 연결될텐데 통신 규칙이 정해져 있지 않으면 엉망진창이 될 것이다.
이를 방지하기 위해 IP가 등장했다. IP는 인터넷과 같은 네트워크에서 데이터를 주고 받을 때 지키자고 약속한 통신규약이다.
흔히들 말하는 26.48.1.1 과 같은 IP주소는 IP통신에 필요한 고유 주소이다.
IP는 패킷(Packet)이란는 통신 단위로 데이터를 전달한다. 패킷에는 전달하고자 하는 데이터와 출발지 IP, 목적지 IP가 담겨있다.
출발지에서 패킷이 인터넷 네트워크에 던져지면 여러 노드들을 건너건너 목적지 IP로 데이터를 전달하게 된다. 이것이 IP 통신의 기본적 원리이다.
IP 프로토콜의 한계
IP 프로토콜만으로는 해결할 수 없는 문제들이 존재한다.
1. 비연결성 - 패킷 전송 시 아무런 검증이 없기 때문에 패킷을 받을 대상이 없거나 서비스 불능 상태여도 무조건 전송한다.
2. 비신뢰성 - 중간에 패킷이 사라질 수도 있고 패킷이 보낸 순서대로 도착하지 않을 수도 있다.
3. 프로그램 구분 불가 - 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면 서버에서 보낸 여러 데이터를 어떤 애플리케이션에 각각 전달해야 할지 구분이 불가능하다.
이러한 문제들을 IP보다 상위 프로토콜인 TCP나 UDP를 사용하여 해결할 수 있다.
TCP와 UDP
IP(인터넷 프로토콜)은 4개의 계층으로 나눌 수 있다. 각 계층에서 하는 일은 아래에서 데이터 송수신 과정을 통해 설명하겠다.
데이터를 송수신하는 과정을 위의 4계층으로 설명하면,
1. 애플리케이션 계층에서 응용프로그램을 통해 데이터를 만든다. ex) 채팅 프로그램을 통해 메시지 작성
2. 전송 계층에서 TCP 정보를 생성하고 1번에서 만든 데이터에 붙인다.
TCP 정보 : TCP 세그먼트라 하며, 출발지/목적지 Port, 전송 제어, 검증 정보, 순서 등이 저장됨.
3. 인터넷 계층에서 IP 패킷을 생성하고 2번에서 만든 데이터에 붙인다.
IP 패킷 : 출발지/목적지 IP 등이 저장됨.
4. 네트워크 인터페이스 계층에서 Ethernet frame을 붙여 LAN카드 등을 통해 인터넷으로 전달한다.
Ethernet frame : MAC 주소와 같은 물리적 정보가 저장됨.
TCP
: 전송 제어 프로토콜(Transmission Control Protocol)
- 연결지향적이다. 즉, 상대방과의 연결 여부를 먼저 확인한 후 연결한다. - TCP three-way handshake(가상 연결)
- 데이터 전달 여부 보증 : 자신이 전송한 패킷이 상대방에 도착했는지 또는 누락되었는지 알 수 있음.
- 순서 보장 : 패킷이 순서대로 전달되는 것을 보장한다.
- 위와 같은 특징을 바탕으로 신뢰할 수 있는 프로토콜이라 표현하며 현재는 대부분 TCP를 사용한다.
TCP three-way handshake
: TCP에서는 이를 통해 연결 여부를 확인한다. TCP가 연결지향적이라 하는 이유이다.
클라이언트-서버 간 통신을 예로 들면,
SYN : Synchronization, 접속 요청 패킷
ACK : Acknowledgement, 요청 수락 패킷
1. 클라이언트가 서버에게 SYN을 전송
2. 서버가 클라이언트의 SYN에 대한 ACK와 클라이언트에게 요청하는 SYN을 전송
3. 클라이언트가 서버에게 서버의 SYN에 대한 ACK을 전송
4. 상호 간 데이터 전송 (3번 과정에서 ACK와 동시에 데이터 전송 가능)
즉, three-way handshake는 서버와 클라이언트가 서로 각각 접속을 요청하고 상대의 요청을 수락하는 과정이다.
Three-way handshake 과정은 물리적으로 연결된 것이 아닌 논리적으로 연결된 것이고 가상 연결이라 표현한다.
왜 가상 연결인가? 클라이언트와 서버간 통신할 때는 둘 사이에 있는 수많은 노드를 거치게 되는데 이러한 노드의 결함 등으로 인해 연결이 끊길 수 있다. 즉, 서로간의 존재는 확인했지만 중간 과정에 의해 연결이 끊어질 수도 있기 때문에 가상 연결이라 표현한다.
UDP
: 사용자 데이터그램 프로토콜(User Datagram Procotol)
- 기능이 거의 없어 IP와 다른 점이 거의 없다.(TCP에 비하면) TCP의 three-way handshake, 전달 보증, 순서 보장 등을 전혀 하지 않는다.
- IP와의 차이점은 Port, 체크섬 정도가 추가되었다는 것이다. (체크섬 : 전송된 데이터의 값이 변경되었는지(무결성) 검사하는 값)
- 데이터 전달 및 순서가 보장되지 않지만 그만큼 단순하고 빠르다.
이젠 오히려 UDP?
UDP가 기능이 거의 없다는 것은 하얀 도화지와 같다는 말로 원하느대로 커스터마이징할 수 있다고 해석할 수 있다.
HTTP/2가 배포된지 4년만에 나온 HTTP/3는 이례적으로 TCP가 아닌 UDP를 기반으로 설계되었다. HTTP 프토토콜은 모든 웹 통신의 근간이며 당시 TCP를 사용하는 것이 당연하다고 여겨지던 시대였기에 UDP 도입은 사람들에게 충격을 주었다.
왜 멀쩡하고 상용화된 TCP를 놔두고 UDP를 선택한 것인가?
이유는 UDP의 속도가 TCP에 비해 빠르다는 점과 위에서 말했듯이 UDP가 하얀 도화지와 같기 때문이다.
TCP는 느리고 오래되기도 했으며 TCP의 기능들이 프로토콜 자체에 정의되어 있기 때문에 이를 건드리고 보완하기엔 기술적 난이도가 높다. 따라서 차라리 UDP를 사용하며 개발자가 애플리케이션에서 TCP의 장점인 전달 보증, 순서 보장 등의 신뢰성을 구현하자는 것이다. TCP의 three-way handshake 또한 UDP에 구현하면 그만이다. 물론 기존의 문제점을 보완하여 기존의 TCP보다 더욱 최적화된 형태로 말이다.
PORT와 DNS
PORT : 같은 IP 내에서 프로세스를 구분할 수 있는 단자, 인터넷 통신의 종단점.
ex) ip를 아파트로 비유하면 port는 아파트의 호수라고 할 수 있다.
DNS(Domain Name System)
- DNS 서버에 Domain Name을 등록하고 이를 IP와 연결시킬 수 있다.
- > 사이트의 IP가 바뀌어도 DNS 서버에서 연결 IP만 바꾸어 주면 클라이언트들은 아무런 조치 없이 사이트에 접근이 가능하다.
'Knowledge' 카테고리의 다른 글
[VNC] 내 컴퓨터에서 원격 컴퓨터로 파일 옮기기 (0) | 2022.11.30 |
---|---|
[VNC] 라즈베리파이 화면 해상도 설정 (0) | 2022.11.30 |
[파이썬] 소켓 통신 과정 (0) | 2022.04.27 |
URI와 웹 브라우저 요청 흐름 (0) | 2022.01.09 |
네트워크와 소켓 (0) | 2021.08.22 |