you miss 100% of the shots you don't take -Wayne Gretzky-
SpringBasicCore 강의를 완강하고 다시 돌아온 웅쓰입니다. 평소 개발을 하면서 HTTP에 대한 이해도가 높지 않다고 느꼈습니다. 그래서 김영한 강사님의 강의를 통해! 개인적으로 공부 내용을 정리해보는 시간을 가져보도록 하겠습니다! 강사님의 강의를 학습중인 분들께도 도움이 될 수 있었으면 좋겠습니다!
목차
IP
TCP, UDP
PORT
DNS
1. IP(Internet Protocol)
IP라는 용어 자체는 많이 들어봤을 것이다. 그런데 풀네임을 보니 인터넷 프로토콜..? 프로토콜이 뭐지..?하는 분들이 계실 것 같다. 사실 필자도 명확하게 이해하고 넘어가진 않았다. 프로토콜의 사전적 의미는 다음과 같다.
프로토콜 컴퓨터 내부에서, 또는 컴퓨터 사이에서 데이터의 교환 방식을 정의하는규칙 체계입니다. 기기 간 통신은 교환되는 데이터의 형식에 대해 상호 합의를 요구합니다. 이런 형식을 정의하는 규칙의 집합을 프로토콜이라고 합니다.
필자는 위 내용을 토대로 IP를 '너랑 내가 다른 하드웨어와 소프트웨어를 사용하더라도 약속(규약)만 지키면 우리는 서로 통신할 수 있어!'라는 의미로 인터넷 상에서의 약속이라고 이해하고 넘어갔다. 그렇다면 이런 약속을 통해서 하는 일이 무엇인가?
IP의 역할
지정한 IP 주소(IP Address)에 데이터 전달
패킷(Packet)이라는 통신 단위로 데이터 전달
패킷(Packet) : 패키지 + 데이터 덩어리. 현실에 빗대어 표현하면 택배 박스이다. 택배 박스처럼 수신측 정보, 송신측 정보, 내용물(데이터)을 다 가지고 있다.
IP는 패킷에 출발지IP, 목적지IP, 기타 등등의 데이터를 담아서 목적지에 데이터를 전달하는 역할을 한다. 이를 이미지로 확인해보면,
IP의 패킷 전달
위와 같이 잘 전달되면 얼마나 좋을까? 하지만 IP를 활용해 패킷을 전달하는 방식으로는 다음과 같은 한계를 마주하게 된다.
IP 프로토콜의 한계
비연결성
패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
비신뢰성
중간에 패킷이 사라질 수 있다.
패킷이 순서대로 오지 않을 수 있다.
프로그램 구분
같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상일 경우 문제가 생길 수 있다.
목적지의 서버에 다운되어 있어도 그것을 모르고 패킷을 전송한다는 점. 노드를 통해 패킷을 전달하다가 잃어버릴 수 있는 점, hello패킷과 world패킷을 순서대로 보내서 hello world라는 텍스트를 받길 원했지만 순서가 지켜지지 않아 world hello라는 텍스트를 받게되는 점 등 인터넷 프로토콜만으로는 다양한 에러사항이 발생할 수 있다. 그래서 우리는 이를 보안하기 위해 TCP, UDP라는 프로토콜을 또한 사용해야 한다.
2-1. TCP(Transmission Control Protocol)
TCP를 직역하면 전송 제어 프로토콜이다. 여기서 전송 제어라는 것이 어떤 역할을 하는지 감이 오지 않을 것이다. 간단하게 표현하자면 IP 프로토콜이 가지는 한계점을 제어함으로써 인터넷 통신간 발생하는 에러사항들을 예방해주는 역할을 한다.데이터 전달을 할 때 어떤 과정속에 TCP, IP가 포함되어있는지 김영한 강사님께서 만들어주신 이미지를 통해 확인해보자.
프로토콜 계층
프로토콜 계층별 데이터 처리 과정
위 이미지에 나온 순서처럼 Hello, world!라는 메시지를 생성하면 TCP에서 필요한 데이터(세그먼트)를 담아 IP에 전달한다. 그리고 IP에서는 택배 박스처럼 단계별 데이터들을 포장해서 네트워크 인터페이스 계층으로 전달한다.
TCP/IP 패킷 정보
패킷에 담긴 데이터 정보
위 단계들을 거쳐서 IP 프로토콜에서는 위와 같은 모습으로 데이터들을 담고 있다. TCP 세그먼트 부분에 담긴 데이터에서 볼 수 있듯이 IP 프로토콜만으로는 할 수 없었던 전송 제어, 순서, 검증 정보에 대한 데이터를 담고 있다.
TCP 특징
연결지향 - TCP 3 way handshake
데이터 전달 보증
순서 보장
연결지향 - TCP 3 way handshake
클라이언트-서버 connect 과정
SYN: 접속 요청
ACK: 요청 수락
참고: 3.ACK와 함께 데이터 전송 가능
위 순서를 통해 논리적으로 클라이언트와 서버가 connect할 준비가 됐는지 확인을 한 후 데이터를 전송한다. 만약 클라이언트가 SYN을 보냈는데 요청 수락(2번 과정)이 오지 않는다면 서버쪽에서 connect할 준비가 되지 않았다고 판단해 데이터 전송을 하지 않는다.
데이터 전달 보증
데이터 전달 보증
위 그림처럼 데이터가 정상적으로 전송이 완료되면 수신측에서 데이터를 받았다는 메시지를 송신측으로 보내준다. 그럼 송신측에서 데이터가 잘 전달된지 확인할 수 있다.
순서 보장
순서 보장
위 그림처럼 만약 패킷이 순서대로 도착하지 않았다면 순서가 잘못된 지점부터 다시 데이터를 보내라고 요청한다.
2-2 UDP(User Datagram Protocol)
UDP는 TCP와 같은 계층에 속한 프로토콜이며 다음과 같은 특징을 가진다.
기능이 거의 없음(하얀 도화지에 비유)
연결지향 X - TCP 3 way handshake X
데이터 전달 보증 X
순서 보장 X
단순하고 빠름
UDP의 특징을 살펴보니 별 다른 내용이 없다. 그래서 바로 하위 계층인 IP 프토로콜과 거의 같은 기능을 한다고 생각하면 된다.(PORT + Checksum 정도만 추가)
UDP는 하얀 도화지와 같이 때문에 사용하려면 애플리케이션에서 추가 작업이 필요하다.
UDP가 별다른 기능이 없다고 하지만 TCP와 같이 PORT라는 것을 가지고 있다. PORT가 어떤 역할을 하길래 TCP와 UDP 모두 가지고 있을까? 다음시간에 이어서 공부해보자!