코드 저장소

공부에는 끝이 없다!

HTTP

HTTP - 인터넷 네트워크에 대하여

VarcharC2K 2024. 1. 7. 21:52

IP란?

IP(인터넷 프로토콜)란 지정한 IP 주소로(IP Address) 데이터를 전달할 수 있는 규칙이다.

패킷(Packet)이라는 통신단위로 데이터를 전달한다.

이 IP 패킷에는 규칙이 있는데 일반적으로 출발IP주소와 목적 IP주소를 적게 된다.

이를 통해 복잡한 인터넷 노드 안에서 서로 목적지로 던지게 되면서 최종 주소인 목적 IP 주소로 데이터가 도달 하게 되는 것이다.

이런 IP에는 한계가 있는데

  1. 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송(비연결성)
  2. 중간에 패킷이 사라지거나 패킷이 순서대로 오지않으면 제대로 동작하지 않음(비신뢰성)
  3. 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상일 경우 동작하지 않음(프로그램 구분)

과 같은 문제점이 있다.

따라서 이런 문제점을 해결하기 위하여 TCP라는 기술이 나오게 되었다.


TCP, UDP

인터넷 프로콜 스택에는 4계층이 존재한다.

  • 애플리케이션 계층 - HTTP, FTP
  • 전송 계층 - TCP, UDP
  • 인터넷 계층 - IP
  • 네트워크 인터페이스 계층

TCP, UDP는 전송 계층에서 사용되며 IP 위에 살짝 올려 보완해주는 역할을 한다.

이것을 TCP/IP라고 하는데 이 TCP/IP의 패킷 정보는 기존에 IP에 들어있던 출발지 IP, 목적지 IP 하위에 출발지 Port, 목적지 Port, 전송제어, 순서, 검증정보 등등을 포함시켜 준다.

이를 통해, IP만으로는 해결할 수 없었던 순서 정보등을 해결해 주는 것이다.

TCP란?

TCP에 대해서 조금 더 자세하게 살펴 보면 전송 제어 프로토콜(Transmission Control Protocol)이라고 하며 크게 3가지 특징이 있다.

  • 연결 지향 - TCP 3 way handshake(가상 연결) : 연결이 되었는지 아닌지 확인을 하고 데이터를 보낸다. (비연결성 해결)
  • 데이터 전달을 보증
  • 순서 보장

실제로는 더 많은 기능이 있지만 크게는 이 3가지 특징이 쓰인다.

따라서 TCP는 신뢰할 수 있는 프로토콜이며 현재는 대부분 TCP를 사용하고 있다.

1. 연결 지향 - TCP 3 way handshake(가상 연결) 

3 way handshake는 다음과 같은 과정을 거친다.

  1. 클라이언트에서 서버로 SYN(접속 요청) 메시지를 보낸다.
  2. 서버에서 클라이언트로 SYN과 ACK(요청 수락) 메시지를 보낸다.
  3. 클라이언트에서 서버로 ACK를 보낸다
  4. 데이터를 전송한다.

즉, 서버와 클라이언트가 서로 연결이 되었는지 확인을 한 후 데이터를 전송하며 1~3번의 과정을 3 way handshake라고 부른다.

이를 통해 서버와 클라이언트는 서로 신뢰할 수 있는 관계 (연결이 된 관계)가 되며 IP의 비연결성을 해결할 수 있게 된다.

최근에는 최적화가 되어 3번 ACK를 보낼때 데이터를 같이 보내기도 한다.

단, 이는 가상연결이며 개념적으로 연결이 되었다는 것이지 물리적으로 연결이 되었다는 것은 아니다.

즉, 중간에 존재하는 노드들은 알수 없으며 처음과 제일 마지막이 논리적으로 연결되었다고 생각하는 것이 좋다.

 

2. 데이터 전달 보증

TCP에서는 서버가 데이터를 전송받으면 데이터를 잘 받았다고 클라이언트로 응답을 보내준다.

이를 통하여, 클라이언트는 서버가 데이터를 잘 받았는지 확인이 가능해진다.

 

3. 순서 보장

TCP에서 만약 패킷의 순서가 바뀐 경우, 서버는 잘못된 데이터를 폐기하고 잘못 도착한 패킷부터 다시 보내라고 클라이언트로 요청한다.

예를 들어, 패킷 1,2,3을 서버로 보냈는데 서버에서 1,3,2로 들어온 경우 2와 3번 패킷을 폐기 후 2번부터 다시 보내라는 요청을 보낸다.

이를 통해 패킷의 순서를 보장 받을 수 있게 된다.

 

이는 TCP에 존재하는 순서정보, 전송제어, 검증정보 등을 통해 이루어지며 이를 통해서 순서 보장과 데이터 전달 보증이 가능해지며 TCP를 신뢰할 수 있는 프로토콜이라고 부르는 것도 이러한 이유이다.

 

UDP란?

사용자 데이터그램 프로토콜(User Datagram Progocol)은 TCP처럼 전송계층에 쓰이지만 사실 TCP와 같은 기능은 거의 없다.

따라서 연결지향, 데이터 전달 보증, 순서 보증등을 하지 않는다.

대신 IP와 거의 비슷하지만 Port, 체크섬(데이터에 대한 간단한 검증) 정도만 추가 되어있다.

그럼 왜 UDP를 사용하는가?

위의 기능은 없지만 단순하고 빠르기 때문이다.

또한, TCP와 달리 UDP는 애플리케이션 레밸에서 추가작업을 통해 최적화가 가능하다.


PORT란?

앞서 TCP를 통해 IP의 비연결성과 비신뢰성은 해결할 수 있었다.

그렇다면 한번에 둘 이상을 연결해야 하는 프로그램 구분은 어떻게 해결해야 할까?

Port는 이런 프로그램 구분을 가능하도록 만들어 준다.

TCP에 출발지 port와 목적지 port를 기입했던 것을 기억할 것이다.

즉, 같은 IP로 패킷이 도착하더라도 추가적인 Port를 통하여 같은 IP 내에서도 프로세스 구분이 가능한 것이다.

 

쉽게 비유하자면 IP가 아파트라면 Port는 동과 호수라고 생각하면 좋다.

Port는 0 ~ 65535까지 할당이 가능하지만 0~ 1023은 잘 알려진 포트로 다른 애플리케이션과 충돌이 발생 할 수 있으므로 사용하지 않는 것이 좋다.

대표적인 Port로

  • FTP - 20,21
  • TELNET - 23
  • HTTP - 80
  • HTTPS - 443

과 Port들이 있다.


DNS(Domain Name System)란?

혹시 본인 컴퓨터의 IP를 기억하는 사람이 있는가?

물론 개발자라면 로컬의 IP정도는 알고 있겠지만 사실 200.122.0.21과 같이 되어있는 IP를 기억하기는 쉽지 않다.

또한, IP는 중간에 변경이 될 수도 있다.

DNS는 이런 문제를 해결하기 위해 나왔다.

일종의 전화번호부와 같은 것으로 도메인 명을 IP 주소로 바꿀수 있다.

예를 들어서 네이버의 IP가 10.10.100.20이라고 가정해보자.

하지만 우리는 네이버로 접속할 때 해당 IP를 입력하는 것이 아니라 naver.com이라는 도메인 명으로 접근한다.

 

Domain을 구매하여 DNS 서버에 등록하게 되면 클라이언트가 DNS 서버에 도메인 명으로 요청을 하는 경우 등록되어있는 IP 주소를 응답을 해준다.

그러면 클라이언트는 응답받은 IP 주소로 서버로 접근하게 되는 것이다.

이렇게 되면 IP가 바뀌더라도 클라이언트는 도메인 명만 알고 있다면 IP 변경에 대해 신경을 쓰지 않아도 된다.

 

'HTTP' 카테고리의 다른 글

HTTP - HTTP 메서드의 속성  (0) 2024.01.11
HTTP - HTTP 메서드 (2)  (0) 2024.01.11
HTTP - HTTP 메서드  (0) 2024.01.10
HTTP - HTTP 기본  (1) 2024.01.09
HTTP - URI와 웹 브라우저 요청 흐름  (2) 2024.01.08