인터넷 네트워크

수달·2021년 2월 18일
0

HTTP

목록 보기
1/14
post-thumbnail

인터넷 네트워크

맨 처음 백엔드 개발자로 진로를 정한 뒤에 가장 첫번째로 HTTP에 대해 공부해야겠다고 다짐했다.
웹 - 서버, 서버 - 서버 모두 http 위에서 통신하기 때문이다.

목차

  • 인터넷 통신
  • IP (Internet Protocol)
  • TCP, UDP
  • DNS

인터넷 통신

" 인터넷에서 컴퓨터 둘은 어떻게 통신할까?"

수진이 미국 사는 동열이에게 메세지를 보내고 싶으면, 
인터넷 망을 이용해서 보내야 한다. 수많은 중간 노드들이 있는데 이 노드를 거쳐서 안전하게 넘어가야함
수많은 복잡한 상황을 어떤 규칙으로 어떻게 잘 넘어가 목적지까지 안전하게 도착하는지
그걸 이해하려면 먼저  ip 를 이해해야한다. 

ip(인터넷 프로토콜의 역할)

  • 지정한 ip 주소에 데이터를 전달한다.
  • 패킷이라는 통신 단위로 데이터를 전달한다.
인터넷 망에서의 규칙은 바로  ip 주소이다.
먼저 클라이언트가 ip 주소를 할당받고, 서버도 ip 주소를 할당받아야 한다.

ip 패킷정보

출발지 ip, 목적지 ip 를 필수로 적어두고, 그리고 전송할 데이터를 함께 담는다. 

클라이언트/서버 패킷 전달

클라이언트 ip 패킷을 인터넷 망에 전달하면 노드들이  처리할 수 있는지 없는지 확인하고,
처리 가능한 노드에게 넘겨 최종적으로 목적지 서버 ip로 가게된다.

그리고 데이터를 전달받은 서버 또한 잘 받았다는 어떤 메세지 ex)ok 를 같은 방식으로 
클라이언트에게 전달한다.

ip프로토콜의 한계

  • 비연결성
    대상 서버가 패킷을 받을 수 있는 상태인지 아닌지 모르기 때문에
    패킷을 받을 대상이 없거나 서비스가 불능 상태여도 패킷을 전송한다.
내가 어떤 사람의 주소만 알고 있어서 실제로 거기 사는지는 모르고 그냥 편지를 보내듯이
  • 비신뢰성
    중간에 서버에 문제가 생기면 패킷이 사라질 수 있다.(패킷 소실)
    데이터가 1500byte 이상이면 데이터 용량 때문에 패킷을 끊어서 보내는데,
    그렇기 때문에 패킷이 순서대로 안올 수 있다.
내가 편지를 여러통 보냈는데, 그 편지가 우체부가 흘려서 중간에 사라지거나, 
편지가 내용이 많아서 한 내용을 두개의 봉투로 담아서 보내서 보낸 순서대로 
도착하지 않을수도 있다. 
  • 프로그램 구분
    ip 가 같은 서버에서 통신하는 애플리케이션이 둘일 때 구분 불가능
한 컴퓨터에서 노래도 듣고, 이메일도 보내는 상황이면 ip 가 같은 
서버에서 통신하는 애플리케이션이 둘이라는 건데, 그 때는 프로그램을 어떻게 구분할건데? 

이런 문제들이 있는데 이걸 해결해주는게 바로  TCP/UDP 이다.

TCP

인터넷 프로토콜 계층

ip위에 tcp를 올려서 부족한 점을 보완해준다 ~ 로 이해하기

조금더 자세한 프로토콜 계층

채팅 프로그램으로 미국에 있는 동열이에게 hello 라고 보냄
소켓 라이브러리가 os 계층에 메세지를 넘김
tcp가 패킷에 정보를 생성, 그 이후에 ip가 정보를 추가로 생성 
따라서 해결이 안되는 부분을 해결해줌

TCP 특징

전송 제어 프로토콜

  • 연결 지향 TCP 3 Way handshake
    연결이 되어있나? 안되어 있나 확인 후 메세지를 보냄

  • 데이터 전달 보증
    클라이언트가 서버에게 패킷을 전달해서 도착하면, 서버는 나 잘받았어 ~ 하고 메세지를 다시
    클라이언트에게 보낸다.

  • 순서를 보장
    패킷 123번 순서대로 보냈는데 , 132 로 도착하면 서버가 1번 이후로 받은 것들은 다 버리고
    클라이언트에게 2번부터 다시보내라고 요청해서 123 순서대로 오게 한다.

즉 신뢰 가능한 프로토콜이다.

TCP 3 Way handshake

클라이언트에서 서버로 먼저 1번 씬이라는 메세지를 보내면 서버가 받고, 받았다는 메세지로
ack 라고 보낸다. 그러면 그 메세지를 받았다는 의미로 클라이언트도 ack 라는 메세지를 
보내면 서로 신뢰할 수 있게 된다. 이 작업이 끝나고 패킷을 전송한다. 

그런데 이게 진짜 물리적으로 연결이 된게 아니라, 논리적으로 많은 노드들을 거쳐서 
왔다 갔다 해보니지금 소통이 가능한 상태이구나 정도로만 이해하면 좋겠다. 
이와 같은 것들을 할 수 있는 이유는 TCP/IP 패킷 정보에 전송 제어, 순서, 검정 정보들이
추가되어 있기 때문이다. 

UDP

udp 는 tcp 랑 같은 계층에 있는 프로토콜이다. 
거의 ip랑 똑같은데, 여기에 port 번호랑 체크섬이 추가되어 있다. 

이 프로토콜은 쓰리 핸드 쉐이크를 안해서 훨씬 빠르다. 
기능이 거의 없기 때문에 애플리케이션에 추가 작업이 필요하다. 

요새 다시 각광받는 중인 프로토콜이다. 
웹 브라우저에서 통신을 할 때 쓰리 스펙이 나왔는데, 쓰리 핸드 쉐이킹을 줄여보자 라고 나와서 -- 

PORT

포트의 영어 뜻은 배가 도착하는 항구 정도로 이해한다.


게임과 화상통화 웹 서핑 등등 하나의 컴퓨터로 여러 서버와 통신 할 때 
패킷들에게 애플리케이션(프로세스)을 구분할 수 있도록 하는 기능이다. 
패킷에는 출발지 port, 목적지 port가 존재하는 이유다. 

"IP가 아파트 이름이면, PORT 번호는 몇동 몇 호인지!"

PORT 특징

  • 0 ~ 65535 할당 가능
  • 0 ~ 1023 잘 알려진 포트라서 사용하지 않는게 좋음
  • TELNET -23
  • HTTP -80
  • HTTPS -443 (HTTP에보안이 추가 된 것)

DNS란

ip는 대부분 200.200.200.0 등등 길게 표시되어 외우기 어려움, 바뀔 수 있음
따라서 이걸 해결하기 위한게 바로 도메인 네임 시스템(DNS)라고 함.

IP를 외우지 않고 도메인으로 기억하고 있다가, DNS 서버에 이 도메인의 IP가 뭐야? 라고 물어봐서 
그걸로 서버에 접근함

다시한번 내용을 정리하면, 복잡한 인터넷 망을 이용하기 위해서는

1. ip가 있어야 함
2. 데이터를 제대로 신뢰할 수 있게 보내려면 TCP 가 필요하다.
3. 포트는 같은 ip 안에서 동작하는 애플리케이션을 구분하기 위해서 사용한다.
4. ip 가 너무 길고 바뀔 우려가 있으니 DNS을 사용해서 도메인으로 ip를 알아낸 후 서버에 접근한다.

위의 내용은 인프런 강사이신 김영한 멘토님의 내용을 바탕으로 정리한 것입니다.:)

지난 학기에 배웠던 데이터 통신의 내용을 정리했습니다.

profile
짜장면 쟁이

0개의 댓글