클라이언트 -> 서버까지 연결하는데 여러 노드들로 구성된다.
클라이언트 IP -> 서버 IP 로 전송하는 데 여러 노드들을 거치는 방식이다.
패킷(Packet) 이라는 단위로 송,수신 한다.
패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
우펀같은 친구다. 수신자가 있건 말건 우편번호로 그냥 쏜다
중간에 패킷이 사라지면?
패킷이 순서대로 안오면?
그대로 유실된다.
예를 들어 Hello(1) World(2) 순서로 클라이언트가 송신 했는데, 2번 메시지가 더 적은 노드를 타고 전송된다면 서버는 World(2) Hello(1) 순서로 메시지를 전송받는다.
같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면?
게임도 하고 음악도 들으려면 어떻게해? 나는 하나의 IP를 할당받는데?
그래서, TCP/UDP 개념이 등장한다.
신뢰할 수 있는 프로토콜이다!
TCP 패킷에는 위와 같은 정보가 담겨 있다.
SYN / SYN+ACK / ACK 이루어지지 않으면 메시지 자체를 보내지 않는다. (그러나 요즘은 최적화되어서 마지막 ACK 보낼 때 데이터도 같이 전송한다.
Ex) 패킷 1, 2, 3 순서로 전송했는데 1, 3 순서로 수신 시 문제가 된 2부터 다시 보내! 라고 요청
즉, 신뢰성 있는 프로토콜이야!
과거엔 영상 전송 등 깨져도 되는 거 전송하는 용도였고, 실제로 TCP가 90% 이상의 점유율을 가지면서 영상 전송도 TCP로 하는 경우가 많았지만, WEB3.0 이후로 3-Way-Handshake 까지 줄여서 최적화 하려는 시도가 일어나고 있어서 UDP가 각광받고 있다.
같은 IP 내에서 프로세스 구분
TCP/IP 패킷 안에 출발/목적지 IP 와 더불어 출발/목적지 PORT 정보도 담겨있다.
이와 같이 같은 IP여도 포트를 나눔으로써 여러 개의 어플리케이션의 동시 송수신 이 가능하다.
예를 들어, IP가 아파트라면 PORT는 몇동 몇호~?
0 ~ 65535 할당 가능
0 ~ 1023: 잘 알려진 포트, 사용하지 않는 것이 좋음
ex) HTTP - 80 HTTPS - 443
위 한계에 따라서 등장한 것이 DNS이다.