이 포스팅은 김영한 강사님의 '모든 개발잘르 위한 http 웹 기본지식' 을 기반으로 정리한 포스팅입니다.
인터넷은 어떻게 통신할까?
우리가 택배를 보내는 것을 예를 들어 생각해보자
내용물이 있어야하고, 상자가 있어야하고, 가장 중요한 보내는 사람과 주소 그리고 받는사람과 주소가 있어야지만 가능하다.
인터넷은 상당히 복잡하기에 각 컴퓨터 별로 주소가 필요하다.
택배를 보내듯 각 집의 주소를 ip 주소라고 생각하고 그 택배상자를 패킷이라고 생각하면된다.
등등...
패킷을 받을 대상이 없거나 현재 서비스 불능 상태여도 패킷 전송
중간에 패킷이 사라지는 경우도 존재 -> 패킷 손실
패킷이 원래 정해진 순서로 보내지지 않는 경우도 존재 -> 패킷 전달 순서 문제 발생
같은 ip주소를 사용하는 서버에서 통신하는 애플리케이션 및 서비스가 둘 이상이면 구분을 어떻게 하지???
위의 IP의 문제점을 보완하기위해 TCP가 생겨났다.
TCP는 IP의 대체제가 아니다.
대체가아닌 ip패킷위에 보완점을 담은 패킷을 위에 쌓는 느낌이라고 보면 된다.
받을 사람이 현재 전달받을 상태인지 또는 한쪽만 알고 다른쪽은 연락을 받았는지 등 여러문제들을 확실하게 하기위해 고안된 방법이다.
데이터전송 전
1. 연결하도록 싱크요청을 보내고
2. 연락받은 서버는 연락을 받았다는 소식과 클라이언트에 대한 싱크 요청을 보낸다.
3. 클라이언트는 서버의 싱크요청을 잘 받았다는 연락을 다시 서버에 보낸다.
이 세 연락이 완료되면 연결이 완료가된다.
그다음 데이터 전송이 시작된다.
데이터 전송이 되면 데이터가 잘 갔는지를 파악해야한다. (안갔을 수도 있어서...)
마치 택배를 잘 받았다고 카톡으로 연락하는 것처럼 생각하면 된다.
위 사진 처럼 파일의 순서가 정해져있다.(보통 큰파일을 패킷단위로 쪼개서 보내기때문... 인듯?)
그치만 순서가 바뀌면 즉 다른 파일 다른 데이터가 되기 때문에 순서를 맞춰서 보내고 받아야한다.
따라서 서버에서 순서대로 오지않으면 다시보내라고 연락을 준다.
위 세개를 바탕으로 신뢰할 수 있는 프로토콜이 되었고 현재는 대부분 tcp를 사용한다고 한다.
학교에선.. 영상은 tcp안쓴다라고 배웠는데 요즘은 스트리밍도 tcp 쓰나보다...
이름은 비슷한데 얜또 뭘까?
tcp에비해 많은 것이 비어있다.
IP와 거의 비슷하며, ip에 port, checksum(점검용 암호?) 정도만 추가되어있다.
(3way hanshake, 데이터 전달 보증, 순서보장 없음)
데이터 전달 및 순서가 보장되지는 않지만, 단순하고 빠르다.
최근에는 신뢰는 있지만 연결과정이 생각보다 오래걸리는 tcp를 대체해서 애플리케이션 자체에서 최적화 및 안전성을 높이는 추가 작업을 통해서 더빠르고 안전한 통신 체제를 만드는데 사용된다고 한다. 그래서 붐이라고 하는 듯 싶다.
그럼 포트는 무엇인가?
ip주소는 아파트주소라고 하면 port는 동 호수 와같은 세부 주소라고 생각하면 된다.
컴퓨터는 하나인데 동영상도 보고 게임도하려면 연결도 둘을 동시에 진행해야한다.
이를 가능하게 하기위해서는 문 및 방을 여러개 만들어서 하나씩 나누어서 가동하도록 하면된다.
그 방 및 호수 번호를 포트라고 생각하면된다.
따라서 포트가 없으면 필요한 데이터 전달에 있어서 자세한 정보가 없어서 전달이 불가능해진다.
우리는 친구들의 집주소 혹은 모든 사람들의 집주소를 알고있지 못한다. 하물며 전화번호 역시 마찬가지이다.
컴퓨터 역시 마찬가지이다. ip는 기억하기 힘들다
심지어 ip는 변경될 수도 있다.
이를 도와주는 전화번호부와 같은 기능을하는 서버가 'DNS'이다.
도메인 명을 IP주소로 변환 해준다.
이처럼 먼저 도메인명을 dns로 보내 ip를 받아온 후 받은 ip주소에 전송한다.