규칙
으로 넘어갈까? -> 바로 IP를 통해서 가는 것이다.즉, IP의 역할은
1. 지정한 IP 주소에 데이터 전달
2. Packet이라는 통신 단위로 데이터를 전달
이 패킷에는 또 정보를 담고있다.
마치 우리가 소포를 붙일 때 보내는 사람, 받는 사람 주소를 적듯 말이다.
그래서 처음 사진과 같이 각 (IP 규약을 따르는)중간노드들 에게 서버의 IP 주소로 가기위한 길을 물어물어 도착을 하면 서버도 잘 도착했다는 패킷을 똑같이 만들어 "응답"을 해준다.
(이때 req, res의 경로는 다를 수 있다.)
참고로 위 사진처럼 패킷들이 서로 다른 노드를 탈 수 있다.
그래서 위 문제들을 해결해주는 프로토콜이 바로 TCP 이다.
전송 제어 프로토콜(Transmission Control Protocol)
연결지향 - TCP 3 way handshake (가상 연결) -> IP의 비연결성 해결
데이터 전달 보증 -> 데이터가 누락되면 알려줌 -> IP의 비신뢰성 해결
순서 보장 -> IP의 비신뢰성 해결
신뢰할 수 있는 프로토콜이라 현재는 대부분 TCP를 사용한다.
SYN: 접속 요청
ACK: 요청 수락
즉, 클라이언도, 서버도 씐, 씐액, 액 이 3번의 과정을 통해 연결이 되었다를 확정 받는 것이다.
참고로 요즘에는 최적화가 더 잘되어서 3.ACK와 함께 데이터를 전송해버린다.
그런데 여기서 3-way handshake로 "연결되었다." 는 사실 real로 연결된건 아니다.
개념적으로만 연결된 것이다.
즉, 중간노드들은 모른다. -> 나를 위한 전용 랜선이 보장되는 것은 아니다!
위 사진과 같이 한번에 둘 이상의 요청을 한다면 굉장히 많은 패킷들이 날아올텐데 이 패킷들이 게임용 패킷인지 화상통화용 패킷인지 알 수 없다.
이때 앞서 배운 TCP/UDP 프로토콜을 보면 ip는 목적시 서버를 찾는거고 그 서버 안에서 돌아가는 어플리케이선들을 구분하는게 TCP sagment에 명시된 PORT라고 생각하면 된다.
0~65535 할당가능
0~1023 사용하지 않는 것이 좋음 -> 항상 사용중인 포트
FTP-20,21
TELNET-23
HTTP-80
HTTPS-443
실제로 IP는 변경될 수 있으면 생각보다 흔한 일이다. 그럼 xx.xx.xx.xx:80 으로 기억했는데 주소가 변경되면? 이상한 숫자열을 다시 외워야하는 불상사가 생긴다. 이를 방지하기위해 DNS가 존재한다.
Domain Name System: 일명 전화번호부 같은 기능을 한다.
도메인 명을 IP 주소로 변환해준다.