HTTP 웹 기본 지식 step-1 HTTP, TCP/IP, UDP, DNS, 포트

배인성·2022년 5월 4일
0

HTTP

목록 보기
1/7

글을 쓰게 된 동기

Spring을 공부하다보면 나도 모르게 Django와 비교하게 된다.

MTV 패턴을 떠올리며 MVC를 학습하려하고, Spring을 통해 구현되는 CRUD를 Django때와 비교하게 되는 등등,,,

그리고 한 가지 또 깨닫게 된게 있다면, Django 조차 겉핥기만 해본 나의 착각이겠지만!

간단한 홈페이지를 제작하는데 있어서는 확실히 Django가 Spring에 비해 HTTP 지식이 덜 요구되었던 것 같다.

Spring을 공부하면서 김영한 강사님을 따라 클라이언트에서 온 요청을 뜯어보았는데,

클라이언트에서 서버에 어떻게, 어떤 데이터를 가지고 도착하는지, 그 방식은 어떠한지에 대해 더욱 관심을 갖게 되었다.

이를 통해, GET과 POST를 제외한 어떤 HTTP 지식도 없었던 내가 Django를 통해 2가지의 웹 프로젝트를 진행했는지가 신기하게 느껴질 정도로 HTTP 지식은 웹 개발자에게 있어서 필수 지식임을 깨달았다.

그리고 HTTP에 대한 지식을 좀 잘 알면, 나중에 백엔드 개발에 임하게 되었을 때 에러를 좀 더 근본적인 관점에서 찾을 수 있을 것 같다.

그래서 이번 기회에 HTTP 지식을 좀 정리하려고 한다!

HTTP란?

HTTP 용어 정의부터 짚고 넘어가자면

HTTP (HyperText Transfer Protocol) : 텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜

프로토콜은 그냥 규칙이라고 보면 되는데, 그냥 인터넷 상으로 데이터를 주고받을 때의 규칙을 이야기 하는 것 같다.

그리고 주로 주고받는 데이터는 HTML 문서인것이다.

컴퓨터 두 대는 어떻게 통신할까

만약 클라이언트와 서버가 정말 가깝다면, 케이블로 연결하면 된다.

그러나 클라이언트와 서버가 멀리있다면, 그때는 인터넷(Internet)을 매개로 통신한다.

인터넷을 매개로 통신하기 위해 IP(Internet Protocol) 주소를 이용한다.

IP (Internet Protocol)

IP는 다음과 같은 역할을 한다.

  • 지정한 IP 주소(IP Address)에 데이터 전달
  • 패킷(Packet)이라는 통신 단위로 데이터 전달

즉, 어떤 컴퓨터의 주소를 가지고 패킷을 통해 데이터를 전달하는 역할을 한다.

출발지에서, 목적지 사이에 수 많은 노드들이 있는데 패킷을 노드끼리 주고 받으면서 목적지까지 배송하는 원리다.

이렇게!

IP 프로토콜의 한계점

  • 비연결성 : 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송한다.
  • 비신뢰성 : 중간에 패킷이 사라지거나 패킷의 순서가 보장되지 않을 수 있다.
  • 프로그램 구분 : 같은 IP에서 사용하는 서버에서 통신하는 애플리케이션이 둘 이상일 수 있다.

이러한 문제를 해결하기위해 TCP가 나왔다.

패킷이란?

데이터를 전달하는 단위가 패킷이라고 하였는데, 패킷은 Package(수화물) + Bucket(바구니)의 합성어라고 한다.

데이터를 담는 바구니라고 생각하면 될 것 같다.

TCP

출발지 정보, 목적지 정보, 데이터만 담긴 IP 만으로 데이터를 주고받기에는 많은 허술한? 한계점들이 있었다.

이를 해결하기 위해 TCP가 나왔는데, 이런 TCP의 특징을 알아보자.

  • 연결지향 : 메세지를 보내기 전에 서로 연결이 되어있는지부터 확인한다. 그럼 IP의 비연결성을 해결한다. (3-way handshake)
  • 데이터 전달 보증 : 패킷이 누락되었을 때, 보낸 사람은 그걸 알 수 있다.
  • 순서 보증 : 패킷의 순서를 보장해준다.

그렇기에 TCP는 신뢰할 수 있다고 여겨지며 현재는 대부분이 TCP를 사용한다.

TCP 3-way handshake

클라이언트에서 데이터를 보내기 전 서로의 존재를 확인하기 위해 위와 같은 작업이 선행된다.

  1. 서버에 접속을 요청한다.
  2. 서버는 요청을 수락하고 다시 클라이언트에 접속을 요청한다.
  3. 클라이언트는 방금 서버의 SYN을 수락하며 서로의 존재를 확인한다.

TCP 순서보장

단순하게 이런식으로 흘러간다.

학부생 시절에, 네트워크 시간에 들었던 기억이 난다! ㅋㅋㅋ 추억 돋네 갑자기

UDP

UDP는 TCP와 같은 계층에 있는 프로토콜인데, 특징이 TCP와 매우 반대된다.

TCP는 클라이언트와 서버간의 서로 생존신고 후 데이터를 정확하고 신뢰성있게 전달한다.

그러면 UDP는 무엇이냐!

UDP는 3-way handshake도 없고 데이터 전달을 보증해주지 않고, 순서 또한 보증해주지 않는다.

그럼 IP와 거의 유사한데, IP에서 PORT하고 체크섬 정도가 추가된다고 한다.

쉽게 이해하자면, TCP는 연결성, 신뢰성, 순서를 보증해주긴 하지만 그만큼 패킷의 덩치는 커지고 속도는 느려지게 된다.

반면에 UDP는 기능이 거의 없지만 속도가 굉장히 빠르다는 장점이 있다.

최근에 TCP의 단점을 개선하기 위해 UDP가 굉장히 뜨고 있다고 한다!

PORT (포트)

아래의 그림을 보자

IP 주소는 컴퓨터당 한개다.

그러나 컴퓨터 한대당 애플리케이션을 하나만 쓰진 않는다 ㅋㅋㅋ

예시를 보면, 200.200.200.2의 IP 주소를 가진 컴퓨터는 게임을 하면서 친구와 화상통화를 할 수도있다.

그러면 현재 출발지 IP와 목적지 IP를 가지고 200.200.200.2에 도착을 했다고 치자, 그럼 그 요청이 게임을 통해 발생된 요청인지 화상통화를 통해 발생된 요청인지 알 방법이 없다.

이를 구분하기 위한 것이 바로 PORT(포트)다.

김영한 강사님의 좋은 비유가 있는데, IP는 아파트고, PORT는 동 호수라고 생각하면 된다고 하신다.

IP - 서버를 찾는 것!
PORT - 그 서버가 구동하는 애플리케이션을 찾는 것!

그럼 이렇게 될 것이다.

DNS

DNS란, Domain Name System의 앞글자를 딴 것!

숫자.숫자.숫자.숫자 로 이루어진 IP라는 주소는 기억하기가 너어어어어무 어렵다.

심지어 IP 주소는 바뀔 수가 있다. 사람이 이사를 하듯이

이를 해결하기 위해, IP 주소가 적힌 전화번호부 역할을 하는 시스템을 제공해준다.

이것이 바로 DNS!!

어디서 도메인을 사서, 등록을 하면 된다.

이렇게, 뭔가 해시맵(HashMap)이 떠오르게끔 하는 서버가 있는데, 아마 도메인 명을 IP 주소로 변환시켜주는 서버인 듯 한다.

마무리

오늘 이것을 정리하면서 뭔가 학부생 시절에 네트워크 과목이 많이 떠올랐다.

이렇게 재밌는 것을 그땐 왜이렇게 게으름을 피웠는지 모르겠다 ㅋㅋㅋㅋ

profile
부지런히 살자!!

0개의 댓글