클라이언트에서 서버까지 어떻게 수많은 복잡한 길을 헤쳐나갈까?
→ IP에 대해 알아보자
어떻게 ‘Hello world’를 주고 받을 수 있을까? → 각각의 IP주소가 있어야 한다.
인터넷 프로토콜 역할
메시지를 그냥 그대로 보내는 것이 아니라 ‘IP 패킷’ 규칙에 의해서 보내진다.
이렇게 IP패킷을 만든 다음에 던지면 목적지(서버) 까지 데이터가 패킷이라는 형태로 전달이 완료된다.
서버가 클라이언트가 보낸 데이터를 받으면 OK라는 표시를통해 적절한 응답을 보낸다.
네트워크 인터페이스 계층 → 랜카드,랜드라이버 등 을 포함한다.
랜카드를 통해 인터넷으로 전달될 때 Ethernet frame 으로 포장되어서 보내진다.
Ethernet frame은 랜카드에 등록된 MAC주소(물리적인 주소) 등을 담고있다.
그래서 패킷이 뭔가? → 패키지 + 버킷
: 데이터 담는 상자
TCP 정보에는 전송 제어, 순서, 검증 정보 등이 포함된다. IP만으로 해결이 안됐던 문제들이 해결이 된다.
전송 제어 프로토콜( Transmission Control Protocol )
서로 총 3번주고 받고 연결이 됐다라는 것을 인식한 후에 데이터를 전송한다.
근데 여기서 연결이 됐다라는 것도 결국 논리적으로 (가상으로) 연결이 됐다라고 개념적으로 생각하는 것이다. 물리적으로 연결이 된 것이 아니다.
만약 클라이언트에서 SYN을 보냄 → 서버에서 응답이 없음 → 클라이언트가 알아차리고 메시지를 보내지 않는다.
요즘은 3번과정인 클라이언트가 ACK를 보낼때 데이터도 함께 보낸다고 한다.
클라이언트에서 데이터 전송을 하고나서 서버가 데이터를 받으면 받았다고 응답을 보내준다. 만약 아무 응답이 없다면 클라이언트 입장에서 어떤 문제가 있다고 인지할 수 있다.
이러한 것들이 어떻게 가능할까? → 위에서 언급한 TCP 데이터안에는 전송 제어, 순서, 검증 정보 들이 추가가 되어 있기 때문에 가능한 것이다. 그래서 TCP를 신뢰할 수 있는 프로토콜이라고 부른다.
사용자 데이터그램 프로토콜(User Datagram Protocol)
→ TCP, UDP 모두 PORT 정보가 포함되어있다. PORT가 무엇일까?
내가 사용하고 있는 PC가 1개라면 IP주소는 하나이다. 그런데 PC에서 게임도 하고, 음악도 듣고 다른 여러 애플리케이션이 동작 중이라고 하면 내 IP로 여러 패킷들이 들어오고 있는 상황이다. 어떻게 들어오는 패킷이 게임패킷인지 음악패킷인 지 구분할 것인가? 라고 할 때 필요한 것이 PORT이다. PORT는 출입문이라고 생각하면 된다. 하나의 건물에 여러 출입문이 있는 것처럼 하나의 PC에 즉 하나의 IP에 여러 PORT가 있는 것이다. 그리고 데이터들은 검증할 때 필요한 것이 체크섬이다.
IP는 외우기 어렵고 변경될 수가 있다. → DNS로 해결 가능
→ 도메인 네임 시스템(Domain Name System) 사용
도메인을 사서 IP주소를 등록해놓는다.
클라이언트가 DNS 서버에다가 원하는 사이트의 주소를 달라고하면 DNS서버가 응답을 하고 원하는 사이트의 IP주소를 준다.
출처 : 모든 개발자를 위한 HTTP 웹 기본 지식 ( 김영한 )