http에 대해 어느정도 알고 있고 정리도 몇 번 했지만 이건 정리를 해도해도 부족한 느낌이다..
그래서 인프런의 김영한님의 http 강의를 토대로 정리를 해보려고 한다!
클라이언트와 서버는 인터넷 세상에서 어떻게 통신할까?
IP는 인터넷에 연결된 장치들을 서로 구분할 수 있는 일련의 고유 주소 이다!
클라이언트 : 100.100.100.1
서버 : 200.200.200.1
지정한 IP주소에 데이터를 전달, 패킷이라는 단위로 전달한다
과연 IP만 있다고해서 완벽하게 원하는데이터를 전달할 수 있을까?
비연결성 - 패킷을 받을 대상이 없어도 일단 전송하고 봄!
비신뢰성 - 중간에 패킷 사라지거나 순서가 잘못되면?
프로그램 구분 - 인터넷에 연결된 장치가 게임도 하고 카카오톡도 하고 있다면 두 프로그램 중 어디 전달?
그래서 이 ip뿐 아니라 TCP/UDP라는 프로토콜도 사용된다!
내가 생각하는 IP의 가장 큰 단점은 하나의 컴퓨터에서 어플리케이션이 수십개가 돌아갔을때
정확하게 원하는 프로그램에 전달할 수 없다를 해결해야한다고 생각한다!
원래는 OSI 7계층으로 세세하게 나누는데 여기서는 간략하게 핵심만 보여준다!
전송제어 프로토콜이라고 생각하고 시작하면 편하다!
연결지향 - TCP 3 way handshake(가상연결)
데이터 전달보증
순서보장, 신뢰할 수 있는 프로토콜 현재는 대부분 TCP를 사용!
일단 클라에서 서버로 SYN이라는 접속 요청 메시지를 보냄
서버가 SYN+ ACK(요청 수락)라는 요청수락을 보냄
클라도 다시 ACK라는 요청을 보냄 -> 요새는 이때 데이터 보내기도 가능!
클라이언트에서 데이터 전송했을때 서버에서 데이터 잘 받았다는 메시지를 보내준다!!
패킷1,2,3 순서가 아닌 패킷 1,3,2순으로 도착했다면
잘못 온 부분부터 뒤에 전부 삭제!
TCP안에 순서와 검증정보가 들어있어서 확인이 가능!
기능이 별게 없고 그냥 데이터 전달해주는 녀석이다
IP와 비슷하지만 port가 추가되어있다!
순서 검증을 안하기 때문에 속도가 확실히 빠르다!
PORT로 앞에 말한 IP의 고질적인 문제를 해결할 수있다!
내 컴퓨터에서 돌아가는 어플리케이션을 각각을 구분해준다!
IP는 아파트 동을 의미하고 PORT는 몇호인지!
0-65535 할당 가능
0-1023: 잘 알려진 포트
FTP - 20,21 HTTP-80
IP를 사용자가 항상 기억해서 검색하기 어렵다! -> IP는 심지어 바뀔수도 있음!!
그래서 DNS서버에서 도메인 명을 사서 도메인을 검색하면 IP를 전달하고 그 IP로 요청을 보낸다!
그냥 urL은 로케이터 즉 리소스의 위치!
URN은 리소스의 이름
urn:example:animal