<동기>
HTTP에 대해 간단한 구조와 개념, 웹사이트에서의 작동원리에 대해서 저번 시간에 갖게 되었는데 이번 시간에는 HTTP와 관계가 깊다고 알려진 IP/TCP/DNS 프로토콜에 대해 조금 더 자세하게 알아보기 위해서 블로그에 업로드하기로 하였습니다. 비록 지금 업로드 하는것은 각자의 전문서적 책을 참고하고 적는것은 아니지만 HTTP를 배우기위해서 필요한 개념과 작동원리이기 때문에 기록할 필요성이 있다고 봅니다. 그리고 이외에 부족한 부분들은 내가 따로 채우거나 전문서적 책을 참고하여 부족한 부분을 없도록하겠습니다. ㅎㅎ
컴퓨터와 네트워크 기기가 상호간에 통신하기 위해서는 서로 같은 방법으로 통신을 하지 않으면 안된다. 예를 들면어떻게 상대를 찾고, 어떻게 상대에게 이야기를 시작하며, 어떻게 이야기를 종료할지 규칙을 결정할 필요가 있다. 이렇게 서로 다른 하드웨어와 운영체제 ,등을 가지고 서로 통신을 하기 위해서는 모든 요소에 규칙이 필요하게 되며 이러한 규칙을 우리는 프로토콜이라고 부른다.
이렇게 인터넷과 관련된 프로토콜들을 모은 것을 TCP/IP라고 부르며 IP 프로토콜을 사용한 통신에서 사용되고 있는 프로토콜을 총칭해서 TCP/IP라는 이름이 사용되고 있다.
TCP/IP에서 중요한 개념 중 하나가 계층(Layer)이다. 이 계층의 장점은 첫번째로 계층화가 되어 있으면 사양이 변경된 해당 계층만 바꾸며 되고, 각 계층은 계층이 연결되어 있는 부분만 결정되어 있어, 각 계층의 내부는 자유롭게 설계할 수 있다. 또한 계충화하면 설계룰 편하게 할 수 있으며,애플리케이션 층에서 애플리케이션은 자기 자신이 담당하는 부분을 고려하면 되고, 상대가 어디에 있는지, 어떠한 루트로 메시지를 전달하는지와 같은 고려를 하지 않아도 된다.
애플리케이션 계층
애플리케이션 계층은 유저에게 제공되는 애플리케이션에서 사용하는 통신의 움직임을 결정하고 있다. TCP/IP에는 여러 가지의 공통 애플리케이션이 준비되어 있다.
트랜스포트 계층
트랜스포트 계층은 애플리케이션 계층이 네트워크로 접속되어 있는 2대의 컴퓨터 사이의 데이터 흐름을 제공하며, 이 계층에는 서로 다른 성질을 가진 TCP(Transmission Control Protocol) 와 UDP(User Data Protocol)두가지 프로토콜이 있다.
네트워크 계층(혹은 인터넷 계층)
네트워크 계층은 네트워크 상에서 패킷의 이동을 다룬다.패킷이란 전송하는 데이터의 최소 단위이며, 이 계층에서는 어떠한 경로(절차)를 거쳐 상대의 컴퓨터까지 패킷을 보낼지를 결정하기도 한다.
링크계층(혹은 데이터 링크 계층, 네트워크 인터페이스 계층)
네트워크에 접속하는 하드웨어적인 면을 다루며 운영체제가 하드웨어를 제어하기 때문에 디바이스 드라이버랑 네트워크 인터페이스 카드(NIC)를 포함한다.그리고 케이블 등과 같이 물리적으로 보이는 부분도 포함하여 하드웨어적 층면은 모두 링크 계층의 역할이다.
<HTTP로 예를 들어보자면...>
1.먼저 송신측 클라이언트의 애플리케이션에서 보고싶은 웹의 HTTP리퀘스트를 지시한다.
2. 트랜스포트 계층(RCP)에서는 애플리케이션 계층에서 받은 데이터를 통신하기 쉽게 조각내어 안내번호와 포트 번호를 붙여 네트워크 계층에 전달한다.
3.네트워크 계층에서는 수신지 MAC주소를 추가해서 링크 계층에 전달한다.
1.링크 계층에서 데이터를 받아들여 순서대로 위의 계층에 전달하여 애플리케이션계층까지 도달한다.
2.애플리케이션 계층에 도달하게 되면 클라이언트가 발신했던 HTTP리퀘스트 내용을 수신할수 있다.
IP주소 : 각 노드에 부여된 주소를 가리킨다.
MAC주소 : 각 네트워크 카드에 할당된 고유의 주소이다.
IP통신은 MAC 주소에 의존해서 통신을 한다. 인터넷에서 통신 사앧가 같은 랜선 내에 있을 경우는 적어서 여러 대의 컴퓨터와 네트워크 기기를 중계해서 상대방에게 도착하며, 그렇게 중계하는 동안에는 다음으로 중계할 곳의 MAC 주소를 사용하여 목적지를 찾아가는것이다, 이때 ARP(Address Resolution Protocol)_이라는 프로토콜이 사용된다.
ARP는 주소를 해결하기 위한 프로토콜중 하나이며 수신지의 IP주소를 바탕으로 MAC 주소를 조사할 수 있다.
패킷을 보내고 나서 바로 끝내는 것이 아니라 보내졌는지 여부를 상대에게 확인하러 가는것이다.이것은 'SYN'와 'ACK플래그를 사용하며 송신측에서는 최초 'SYN'플래그로 사애에게 접속함과 동시에 패킷을 보내고, 수신측에서는 'SYN/ACK'플래그로 송신측에 접속함과 동시에 패킷을 수신한 사실을 전하는 것이다.
HTTP와 같이 응용 계층 시스템에서 도메인 이름과 IP 주소 이름 확인을 제공하는 것이다.
=>DNS에 대한 자세한 내용은 내 velog 카테고리에 있는 DNS 작동원리와 구현에 잘 설명되어 있다.(링크 참조 부탁드립니다.)
링크 : <DNS에 대한 자세한 내용 >
<예시>
<클라이언트 리퀘스트>
1.클라이언트가 hack.ip를 알려달라고 요청한다.
- HTTP 담당 웹 서버에 보낼 HTTP메세지 작성
- TCP 담당: 통신하기 쉽도록 HTTP메세지를 패킷으로 분해
- IP 담당: 상대방으로부터 패킷을 수신하고 도착한 패킷을 조립후 일련번호를 보고 조립한다.
- HTTP 담당: 웹서버에 대한리퀘스트 내용처리
=>위의 담당 순서대로 서버로 내려와 리퀘스트를 요청한다.
<서버 리스폰스>
=>위에 담당하는 순서대로 위로 올라가서 클라이언트에게 리스폰스를 해준다.
<DNS 응답 >
- DNS는 "hack.ip주소는 "20X.189.105.112이라고 응답한다.