본 게시글은 김영한님의 HTTP 웹 기본 지식 강의를 보고 정리한 글입니다.
생각을 해보면 2가지 경우로 나눠볼 수 있는데
1. 딱 붙어있는경우 (컴퓨터가)
2. 아주 멀리 떨어져있는 경우
선으로 꽂아서 연결해버리자! 가 가능하다.
선을 꽂지는 못하고 어떻게 해야될까?
EX) 해저 광케이블, 인공위성 통신
위 그림과 같이 망이 있는데 각각의 노드를 거쳐 서버로 도달하게 된다. 그치만.. 그림처럼 너무 복잡하게 규칙성이 없게 서버로 전달이 되는것 같은데 "당연히 규칙이 있겠지.. " 그 규칙들에 대해 알아보자.
클라이언트 IP:100.100.100.1 서버 IP: 100.100.100.2
위와 같이 패킷 정보에 출발지 IP, 목적지 IP, 기타 등등을 전송데이터 위에 덮어서 전송을 시킨다.
전송 데이터위에 뚜껑을 덮어서 보내는 것과 같다.
EX) 클라이언트 IP: 100.100.100.1 서버 IP : 100.100.100.2
1. 클라이언트 -> 서버 : 출발 100.100.100.1, 목적지 : 100.100.100.2 전송데이터: Hello World!
2. 서버 -> 클라이언트 : 출발 100.100.100.2, 목적지 : 100.100.100.1 전송데이터: OK
- 복잡한 노드망 속 1번 과정에서 지나가는 경로로만 2번 과정에서 돌아오는 것은 아니다!
비연결성
비신뢰성
프로그램 구분
이런 규칙의 한계를 보게 된다면 지금 우리가 사용하는 여러가지 네트워크로 연결이 되어지는 서비스들은 작동이 원할하게 되기는 그른것 같다. 그런 것들의 대안으로 나온 프로토콜도 한 번 알아보자.
정보처리기능사 자격증으로 휴가를 따내려고 공부하다가 봤던 계층들이었던거 같은데 감회가 새롭다.
- 애플리케이션 계층 - HTTP, FTP
- 전송 계층 - TCP, UDP
- 인터넷 계층 - IP
- 네트워크 인터페이스 계층 - 랜카드 등등
위 그림을 보면 아까 IP 프로토콜에서 전달을 할때 껍데기를 씌우는것과 같다고 하였는데 위 그림에서도 여러가지 종류의 껍데기를 씌우는것을 볼 수 있다.
이번에 씌운 것은 TCP 껍데기인데 패킷이 아닌 세그먼트라고 한다. 추가되어있는 정보에 PORT라는 것과 전송제어, 순서, 검증 정보 등등이 있는데 IP의 한계를 해결하기위하여 여러가지 정보들이 추가된 것을 볼 수 있다.
여기서 SYN, ACK을 접속 요청 요청 수락이라고 하였는데
쉽게 SYN: 가도 되요? ACK: 네 오세요.
옛날 컴퓨터실에서 몰래 UDP라는 말의 의미는 잘 몰랐지만 "야! 빨리 UDP로 들어와!" 라는 식의 말로 같이 게임을 했었던 적이 기억이난다.
참고사항으로는 최근 TCP에서 UDP로 많이 넘어가는 추세라고 한다. 그 이유로는 HTTP3에서 handshake와 같이 계속해서 검증하는 과정을 진행을 하는 과정도 다 없애고 속도를 더 높여보자고 하는 의견들이 많이 나와서 그렇다고 한다.
확실히 UDP로 넘어가면 속도는 완전 빨라질 거 같다. 그니까 TCP는 깐깐한 친구이고 UDP는 융통성이 상당히 많은 친구라는 느낌
앞에서 IP 프로토콜 설명할때 만약 Discord와 LOL을 같이 하게 되는 경우에는 같은 IP에서 어떤 프로그램을 사용을 하고 있는지 구분을 해줘야하는데 아까 TCP 껍데기에서 출발지 PORT, 목적지 PORT라는 것을 본 적이 있다. 어떤 것인지 알아보자.
다음과 같은 그림에서 봤을때 게임, 화상통화, 웹 브라우저 별도로 PORT번호가 다 다르다는 것을 알 수 있다. 클라이언트의 PORT 서버의 PORT도 다르다는것을 알 수 있다. 그래서 이것의 번호가 그렇다고 해서 무지막지하게 막 부여된 것은 아니고
0 ~ 65535 할당 가능
• 0 ~ 1023: 잘 알려진 포트, 사용하지 않는 것이 좋음
• FTP - 20, 21
• TELNET - 23
• HTTP - 80
• HTTPS - 443
이런것처럼 잘 보고 사용을 하는게 좋을 거 같다.
Port는 대표적인 예시로 아파트의 동,호수 예시로 사용을 한다. 게임, 화상통화, 웹 브라우저가 같은 아파트에 산다고 하였을때 각각의 포트는 동, 호수를 나누는 역할을 한다고 보면 된다.
ex) 게임: 103동 201호, 화상통화 103동 204호, 웹 브라우저 103동 205호
서버 게임 : 105동 105호 화상통화 : 105동 503호
DNS는 영어 해석 그대로 도메인을 IP로 변환하는 서비스이다.
ex) www.naver.com -> 100.111.100.1
뭐 예시로 이렇게 변환을 하여준다. 이렇게 한 이유가 무엇일까?
대표적인 2가지 예시를 들어봤는데 여러가지 이유도 더 있을 수 있지만 우선은 이 2가지에 대해서 간략하게 설명을 해보겠다.
위 예시처럼 네이버의 주소가 www.naver.com이 아니라 100.111.100.1이었다고 해보자. 그러면 뭐 개발을 하려는 사람들과 그런 컴퓨터에 관심을 가지는 사람들은 기억을 할(?) 수도 있다. 그러나 일반인들 입장에서는 이걸 언제 계속 기억을 하고 있나. 그리고 네이버만 있는 것도 아니고 다른 사이트들도 얼마나 많은데 언제 이걸 다 기억을 하고 있을것이냐 하는 문제가 있다.
예시를 계속 이용하여서 보면 네이버라는 회사가 계속 100.111.100.1 이라는 IP만 사용을 할까?
당연히 그렇지 않을 거다. 언젠가 서버들도 더 확장시키고 성능을 향상싴티기 위하여서 다른 것으로 바꿀 수도 있기 때문에 당연히 변환이 된다. 그러면 위에서 말했던 것처럼 IP를 기억을 하는 방향으로 계속해서 사용을 하게 되면 진짜 변태같이 외우고 있지 않는 이상 다 외우질 못한다. 그래서 DNS를 사용하게 된다면 IP가 변경이 되더라도 같은 DNS명으로 접속하면 해당 IP로 들어갈 수 있게 해주는 장점이 있다.