인프런 김영한 개발자님의 자바 입문 강의를 인상 깊게 들어 올려주신 강의 중 평소 개념이 별로 없었던 HTTP 웹 기본 지식을 듣기 시작했다.
그 중 첫번째 챕터는 인터넷 네트워크다.
인터넷 망을 통해서 클라이언트와 서버가 통신을 한다.
인터넷 망안에서 원하는 정보를 정확한 순서로 전달하기 위해서는 HTTP를 더 이해할 필요가 있다.
IP는 지정한 IP 주소에 데이터 전달한다.
패킷이라는 통신단위로 전달한다.
IP 패킷은 현재 나의 IP, 목적지 IP, 기타 등등을 넣어서 만든다.
클라이언트에서 IP 패킷을 인터넷 망으로 전달하고(전달되면서 노드들에 의해 체크) 서버로 보내진다.
서버에서 받고 다시 IP 패킷을 만들어서 인터넷 망으로 던지고 클라이언트로 돌아온다.
패킷을 받을 대상이 없거나 서비스가 가능하지 않은 상태여도 패킷이 전송되고 클라이언트는 모른다.
패킷이 중간에 사라지거나, 패킷이 순서대로 안올 수 있다.
같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 여러 개라면 구분할 수 없다.
이러한 한계를 해결해 주는 것이 TCP/UDP다.
TCP/IP 패킷은 IP 패킷보다 많은 정보를 담고 있다.
출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보와 함께 전송 데이터를 담고 있다.
아래의 특징을 가질 수 있는 것은 TCP 패킷이 정보를 담고 있기 때문이다.
클라이언트와 서버는 메세지(syn, ack)를 세번(왔다 갔다) 주고 받은 후 연결이 되고,
그 후 데이터를 전송하는 것을 말한다.
IP와 거의 같고 TCP과 같은 기능이 거의 없다.
http 통신을 할 때 tcp를 이용하면 가상 연결이 필수인데, UDP를 이용하면 이 과정을 최소화 할 수 있어서 최근에 이용을 많이 한다.
데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠르다.
IP 패킷에서 port 체크섬 정도가 추가되있는 패킷 형태이다.
애플리케이션에서 추가 작업 필요하다.
같은 IP 내에서 프로세스 구분할 때 사용한다.
한 아파트 안에서 사람들이 사는 집을 구분하는 것과 비슷하다.
클라이언트에서 여러 포트로 프로세스를 구분해둔 후 서버에게 패킷을 보낸다.
패킷 안에는 PORT 번호가 있어서 내가 어떤 프로세스를 요청했는지 알 수 있다.
그 요청에 맞게 서버에서 클라이언트로 다시 응답해준다.
0~ 65535 할당 가능
0~ 1023 잘 알려진 포트라 사용하지 않는 것이 좋다.
- ftp - 20, 21
- telnet - 23
- http - 80
- https - 443
IP는 기억하기 어렵고, 변경될 수 있다.
그래서 DNS 서버에 도메인 명을 등록하고 사용한다.
클라이언트가 도메인 명으로 요청을 하면 dns 서버가 도메인 명을 가지고 IP를 검색하여 클라이언트에게 응답을 주고 이후 클라이언트가 서버에게 응답해준다.