맨 처음 백엔드 개발자로 진로를 정한 뒤에 가장 첫번째로 HTTP에 대해 공부해야겠다고 다짐했다.
웹 - 서버, 서버 - 서버 모두 http 위에서 통신하기 때문이다.
" 인터넷에서 컴퓨터 둘은 어떻게 통신할까?"
수진이 미국 사는 동열이에게 메세지를 보내고 싶으면,
인터넷 망을 이용해서 보내야 한다. 수많은 중간 노드들이 있는데 이 노드를 거쳐서 안전하게 넘어가야함
수많은 복잡한 상황을 어떤 규칙으로 어떻게 잘 넘어가 목적지까지 안전하게 도착하는지
그걸 이해하려면 먼저 ip 를 이해해야한다.
인터넷 망에서의 규칙은 바로 ip 주소이다.
먼저 클라이언트가 ip 주소를 할당받고, 서버도 ip 주소를 할당받아야 한다.
출발지 ip, 목적지 ip 를 필수로 적어두고, 그리고 전송할 데이터를 함께 담는다.
클라이언트 ip 패킷을 인터넷 망에 전달하면 노드들이 처리할 수 있는지 없는지 확인하고,
처리 가능한 노드에게 넘겨 최종적으로 목적지 서버 ip로 가게된다.
그리고 데이터를 전달받은 서버 또한 잘 받았다는 어떤 메세지 ex)ok 를 같은 방식으로
클라이언트에게 전달한다.
내가 어떤 사람의 주소만 알고 있어서 실제로 거기 사는지는 모르고 그냥 편지를 보내듯이
내가 편지를 여러통 보냈는데, 그 편지가 우체부가 흘려서 중간에 사라지거나,
편지가 내용이 많아서 한 내용을 두개의 봉투로 담아서 보내서 보낸 순서대로
도착하지 않을수도 있다.
한 컴퓨터에서 노래도 듣고, 이메일도 보내는 상황이면 ip 가 같은
서버에서 통신하는 애플리케이션이 둘이라는 건데, 그 때는 프로그램을 어떻게 구분할건데?
이런 문제들이 있는데 이걸 해결해주는게 바로 TCP/UDP 이다.
ip위에 tcp를 올려서 부족한 점을 보완해준다 ~ 로 이해하기
채팅 프로그램으로 미국에 있는 동열이에게 hello 라고 보냄
소켓 라이브러리가 os 계층에 메세지를 넘김
tcp가 패킷에 정보를 생성, 그 이후에 ip가 정보를 추가로 생성
따라서 해결이 안되는 부분을 해결해줌
전송 제어 프로토콜
연결 지향 TCP 3 Way handshake
연결이 되어있나? 안되어 있나 확인 후 메세지를 보냄
데이터 전달 보증
클라이언트가 서버에게 패킷을 전달해서 도착하면, 서버는 나 잘받았어 ~ 하고 메세지를 다시
클라이언트에게 보낸다.
순서를 보장
패킷 123번 순서대로 보냈는데 , 132 로 도착하면 서버가 1번 이후로 받은 것들은 다 버리고
클라이언트에게 2번부터 다시보내라고 요청해서 123 순서대로 오게 한다.
즉 신뢰 가능한 프로토콜이다.
클라이언트에서 서버로 먼저 1번 씬이라는 메세지를 보내면 서버가 받고, 받았다는 메세지로
ack 라고 보낸다. 그러면 그 메세지를 받았다는 의미로 클라이언트도 ack 라는 메세지를
보내면 서로 신뢰할 수 있게 된다. 이 작업이 끝나고 패킷을 전송한다.
그런데 이게 진짜 물리적으로 연결이 된게 아니라, 논리적으로 많은 노드들을 거쳐서
왔다 갔다 해보니지금 소통이 가능한 상태이구나 정도로만 이해하면 좋겠다.
이와 같은 것들을 할 수 있는 이유는 TCP/IP 패킷 정보에 전송 제어, 순서, 검정 정보들이
추가되어 있기 때문이다.
udp 는 tcp 랑 같은 계층에 있는 프로토콜이다.
거의 ip랑 똑같은데, 여기에 port 번호랑 체크섬이 추가되어 있다.
이 프로토콜은 쓰리 핸드 쉐이크를 안해서 훨씬 빠르다.
기능이 거의 없기 때문에 애플리케이션에 추가 작업이 필요하다.
요새 다시 각광받는 중인 프로토콜이다.
웹 브라우저에서 통신을 할 때 쓰리 스펙이 나왔는데, 쓰리 핸드 쉐이킹을 줄여보자 라고 나와서 --
포트의 영어 뜻은 배가 도착하는 항구 정도로 이해한다.
게임과 화상통화 웹 서핑 등등 하나의 컴퓨터로 여러 서버와 통신 할 때
패킷들에게 애플리케이션(프로세스)을 구분할 수 있도록 하는 기능이다.
패킷에는 출발지 port, 목적지 port가 존재하는 이유다.
ip는 대부분 200.200.200.0 등등 길게 표시되어 외우기 어려움, 바뀔 수 있음
따라서 이걸 해결하기 위한게 바로 도메인 네임 시스템(DNS)라고 함.
IP를 외우지 않고 도메인으로 기억하고 있다가, DNS 서버에 이 도메인의 IP가 뭐야? 라고 물어봐서
그걸로 서버에 접근함
다시한번 내용을 정리하면, 복잡한 인터넷 망을 이용하기 위해서는
1. ip가 있어야 함
2. 데이터를 제대로 신뢰할 수 있게 보내려면 TCP 가 필요하다.
3. 포트는 같은 ip 안에서 동작하는 애플리케이션을 구분하기 위해서 사용한다.
4. ip 가 너무 길고 바뀔 우려가 있으니 DNS을 사용해서 도메인으로 ip를 알아낸 후 서버에 접근한다.
위의 내용은 인프런 강사이신 김영한 멘토님의 내용을 바탕으로 정리한 것입니다.:)
지난 학기에 배웠던 데이터 통신의 내용을 정리했습니다.