클라이언트가 서버와 통신을 하려면 인터넷 즉, IP(인터넷 프로토콜)이 필요하다.
클라이언트 IP: 100.100.100.1 => 서버 IP: 200.200.200.2
클라이언트인 내가 서버로 메시지를 보내보자.
패킷 정보에는 나의 IP, 서버 IP, 메시지 내용 등을 담는다.
인터넷에 있는 노드들이 이 패킷을 주고받으면서 해당 서버를 찾아 전달한다.
서버도 마친가지로 패킷에 서버 IP, 나의 IP, 'OK'라는 메시지 등을 담고
인터넷 노드들이 이 패킷을 주고받으면서 나의 IP를 찾아 전달한다.
인터넷 망이 복잡하니, 나 => 서버
와 서버 => 나
과정이 다를 수 있다.
비연결성
비신뢰성
프로그램 구분
위 문제를 해결한 것이 TCP이다.
내가 서버에 Hello, world!
메시지를 보내보자.
HTTP 패킷에 TCP 패킷을 감싸고 IP 패킷을 감싸고
(Ethernet frame 패킷을 감싸고)
서버에 전달한다.
패킷은 패키지와 버킷의 합성어이다. => 수화물 덩어리(?)
TCP 패킷에는 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등이 들어가서 IP 한계를 해결할 수 있다.
전송 제어 프로토콜
연결지향 - TCP 3 way handshake (가상 연결)
신뢰할 수 있는 프로토콜
대부분 TCP 사용
SYN: 접속 요청
ACK: 요청 수락
이렇게 해서 클라이언트와 서버가 서로 믿을 수 있다.
즉, 서버가 꺼져있는 상태에서 클라이언트가 접속 요청을 보냈고
서버는 수락과 함께 응답을 받을 수 없기 때문에 연결이 안됐고
데이터를 전송하지 않는다.
요즘은 최적화되어서 3과 4을 같이 한다.
이 연결은 진짜 연결이 된 것이 아니다.
물리적으로 연결이 된 것이 아니라 논리적으로(개념적으로)만
연결이 된 것이다.
클라이언트가 데이터를 서버에 보내면 잘 받았다는 응답을 해준다.
클라이언트 - 서버
패킷2 부터 다시 보내
전송 (서버 => 클라이언트)PORT: 게임과 음악을 같이 할 때, 게임용 패킷과 음악용 패킷을 구분할 때 사용하는 것이 포트이다.
체크섬: 메시지가 맞는지 검증해주는 것
최근에는 UDP가 뜨고 있다.
여러 앱들을 구분해주는 것이 포트이다.
이해하기 쉽게 비유하면
IP가 아파트이고
PORT는 0동 000호이다.
References
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard