내가 만약에 어떤 친구에게 'hello world' 라는 메세지를 보내고 싶으면 어떻게 할 수 있을까?
일단 친구의 PC 주소를 알아야 메세지를 전송할 수 있다 🏠
IP는 인터넷상에서 기기의 주소를 나타내며, 데이터를 패킷(Packet) 단위로 쪼개서 전송한다.
나의 IP랑 목적지의 IP를 넣어 인터넷 서버로 던지면 노드 끼리 전달을 하며, 최종적으로 목적지 IP로 가게된다.
여기서의 IP 프로토콜의 한계점이 나타난다.
1. 비연결성
- 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송한다.
2. 비신뢰성
- 중간에 패킷이 사라질 경우패킷이 순서대로 도착하지 않는 경우
3. 프로그램 구분 불가
- 같은 IP를 쓰는 여러 애플리케이션을 구분하지 못한다.
애플리케이션 계층 - HTTP, FTP
전송 계층 - TCP, UDP
인터넷 계층 - IP
네트워크 인터페이스 계층
1. 연결지향 - TCP 3 way handshake (가상 연결)
- 신뢰성이 필요한 상황에서는 대부분 TCP를 사용한다.
2. 데이터 전달 보증
- 반드시 도착한다.
3. 순서 보장
- 보낸 순서대로 도착하게 만든다.
TCP 가 붙게되면 데이터를 전송하면 서버에서 데이터 잘 받았다는 신호를 보내준다.
만약 응답이 없으면 뭔가 문제가 있는거다.
하얀 도화지에 비유(기능이 거의 없음)
1. 연결지향 - TCP 3 way handshake X
2. 데이터 전달 보증 x
3. 순서 보장 x
데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
TCP 는 다 좋지만 3-way handshake 를 할려면 시간이 걸린다. 데이터 양도 크고, 전송 속도도 빠르게 만들기 어렵다 하지만 최적화 하고싶을 경우 UDP를 사용하면 되고 HTTP3에서는 UPD 프로토콜을 사용하기도 한다.
만약 한번에 둘 이상 연결해야 한다면? 아까 IP의 한계점에서도 볼 수 있었다.
같은 IP 내에서 프로세스를 구분하는데 사용한다.
TCP/IP 패킷에는 출발지의 PORT 와 목적지의 PORT 가 있다. 쉽게 말해 IP는 목적지의 서버를 찾는것이고
PORT는 그 서버의 실행중인 어플리케이션을 찾는 용도이다.
IP가 '아파트 단지'라면, PORT는 그 안의 '동호수'다.
하나의 서버(IP 주소)에서 여러 애플리케이션이 동시에 돌아갈 수 있는데, PORT를 통해 각각 구분할 수 있다.
0 ~ 65535 : 할당 가능 0 ~ 1023 : 잘 알려진 포트, 사용하지 않는 것이 좋다
IP는 기억하기가 너무 어렵다 200.200.200.2 ? 너무 길다
IP는 변경될 수 있다. 과거 IP만 기억하다가 신규 IP로 바뀔경우 접근이 힘들다
DNS 서버에 도메인을 등록을 할 수 있다.
1. 도메인으로 google.com 을 찾는다
2. DNS 서버에서 IP 를 보내준다
3. IP 패킷을 보내 목적지 IP로 찾는다.
도메인은 우리가 쉽게 기억할 수 있는 이름이고, 실제로는 이 이름을 DNS 서버가 IP로 바꿔준다.
혹쉬 잘 알려지지 않은 포트번호 0~65535 아니고 1024~부터 아닌가요?