인프런 김영한님 HTTP 강의 정리 - 네트워크

혜미·2022년 7월 27일
0

TIL

목록 보기
6/29
post-thumbnail

김영한 님의 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 듣고 정리한 내용입니다.


클라이언트와 서버가 통신하려면 컴퓨터 2대가 바로 옆에 케이블로 연결되어 있는 게 아닌 한 인터넷망을 거쳐야 한다. 근데 그 중간에 해저 케이블이 있을지 우주로 보낼지 모른다. 안전하게 보내야 한다. 그래서 필요한 게 인터넷 프로토콜(IP)이다.

IP 프로토콜?

미국 사는 친구에게 소포 보내듯이 패킷이라는 단위에 발송자, 수신자 IP, 메시지('hello world')를 적어서 보내면 인터넷망에 있는 노드가 서로 서로 '200.200.1 IP 주소로 가는 곳 어디야?' 하면서 친구 집으로 보내 준다.

친구가 잘 받았으면 잘 받았다고 또 발송자, 수신자 IP, 메시지('OK')를 패킷에 담아 보낸다.

IP 프로토콜의 단점

  • 비연결성
    받는 사람이 있는지 없는지 모르고 그냥 보낸다.
    친구 컴퓨터 꺼져 있을 수도 있다.
    받는 사람이 아직 거기 사는지 모른 채로 소포 보내는 것과 같다.

  • 비신뢰성
    패킷을 중간에 잃어버리면? (패킷 유실돼도 알 수 없다)
    패킷 여러 개 던졌을 때 순서대로 안 가면?

이 문제를 해결하는 게 바로 TCP/UDP!

TCP

  • 프로그램이 미국에 있는 친구에게 보낼 'Hello world!' 메시지를 생성하고
    SOCKET 라이브러리를 통해 OS 계층에 전달,
  • 그럼 여기서 TCP가 겉에 초록색을 씌워서 TCP 정보를 생성하고,
  • 그다음은 IP가 이 겉에(초록색이 씌워진) 노란색을 씌워서 IP 패킷을 생성한다.

지금 이 안에는 TCP 데이터가 포함되어 있다!(아까 초록색으로 먼저 씌웠으니까)

그리고 이걸 LAN 카드를 거쳐서 서버로 전송한다.

TCP 데이터 안에는 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등이 들어 있다.(초록색 테두리 영역)

TCP 특징

  • 연결 지향(먼저 연결을 한 다음에 메시지를 보낸다 - 3 way handshake(가상 연결) 🖐️🖐️🖐️)
  • 데이터 전달 보증(패킷이 중간에 누락되면 내가 '어? 쟤가 메시지를 못받았네?!'라고 알 수 있다.) - 데이터 보내면 잘 받았으면 응답이 온다. 그러니 응답이 없으면 '어 못받았네?!' 라고 알 수 있다.
  • 순서 보장 - 1-2-3 순서로 가야 되는데 1-3-2 순서로 패킷이 도착하면 서버가 '순서가 틀렸어. 2번부터 다시 보내'라고 한다.

UDP

UDP는 IP랑 거의 똑같은데 PORT가 있다는 차이가 있다.

PORT란? 하나의 IP에서 여러 개의 애플리케이션 실행할 때는 패킷도 여러 개니 패킷 구분하기 위해

PORT

한 컴퓨터로 여러 곳에 요청 보내고 있으면(친구랑 게임이랑 화상통화 동시에 하면서 다른 곳으로 브라우저 요청도 하면) 패킷을 보낼 때도, 받을 때도 어디로 가는 패킷인지, 어디서 온 패킷인지 알 수 없다. 이걸 구분해 주는 게 PORT다.

출발지 / 목적지 IP가 있는 것처럼 출발지 / 목적지 PORT도 있다.

IP는 아파트고 PORT는 동호수다!

브라우저가 요청 응답할 때 내 요청 포트를 어떻게 알지? 내가 패킷 보낼 때 TCP 데이터 안에 출발지 PORT 넣어서 보내니까.
응답할 때도 마찬가지로 출발지 PORT 넣어서 보낸다.(아마?!)

DNS

DNS는 전화번호부와 같다.
IP는 기억하기 어렵고 변경될 수도 있는데 DNS가 이 단점을 보완한다.

DNS 서버에 IP를 등록해 놓으면,
구글 IP 주소에 접근하고 싶을 때 www.google.com만 입력하면 그 도메인 네임에 맞는 IP 주소에 접근할 수 있다.

0개의 댓글