TCP , UDP

조 은길·2022년 3월 4일
0

HTTP 웹 기본 지식

목록 보기
2/32
post-thumbnail

이번 TIL은 인프런의 "모든 개발자를 위한 HTTP 웹 기본 지식"을 학습하고, 정리한 내용입니다.
만약, 제 글의 내용을 퍼갈 시에는 " 모든 개발자를 위한 HTTP 웹 기본 지식 "도 출처에 첨부하시기 바랍니다.


TCP (전송 제어 프로토콜)

TCP 프로토콜는 IP 프로토콜의 문제점인 패킷이 순서대로 안 가거나, 패킷이 가는 도중에 손실되는 문제점을 보완해준다. UDP는 직접적인 해결을 해주지는 않지만, 도움이 되는 부분이 있다.

IP 라는 것 위에 살짝 올려서 TCP가 IP의 문제점을 보완해주는 것이라고 생각하면 이해가 쉽다.

Hello 라는 메세지에 TCP 정보를 싹 씌운다. => 그 외부에 IP와 관련된 데이터를 또 씌운다. => 그리고 맨 마지막에 이더넷 프레임 이라는 게 씌워져서 최종적으로 나간다.

이더넷 프레임은 렌카드에 포함된 Mac 주소 같은 거다.

그러나, 이것까지 설명하, 너무 깊어지기 때문에 웹 개발을 하는데도 IP 프로토콜까지만 이해하면 된다.

이렇게 TCP는 IP 보다 먼저 씌워지며, 전송을 어떻게 할지를 제어한다.

TCP에는 다음과 같은 특징이 있다.

TCP의 특징

  • 연결지향
    • 나와 상대가 연결이 됐는지를 확인하고, 메세지를 보낸다.
    • 흔히, " 3 way handshake "라고 한다.
        1. 클라이언트가 씬 메세지를 보낸다. => 이때, 서버 측에서 응답이 없으면 메세지를 안 보내겠지
        1. 서버 측에서 요청 수락과 함께 다시 서버도 "나도 연결해줘!"하고 씬을 보낸다.
        1. 마지막으로 클라이언트 측도 액크를 보내면 클라이언트와 서버의 연결이 완료된다.
      • 연결이 되고 나면, 그 다음에 데이터를 전송한다.
      • 참고로, 요즘에는 최적화가 되서, 마지막 3번 액을 보낼 때, 메세지도 같이 보낸다.
        그러면, 1단계를 줄일 수 있으니까
  • 데이터 전달 보증
    • 항상 데이터를 전달하면, 거기에 대한 응답을 기대함
    • 만약, 응답이 안 오면, 데이터 전송에 문제가 생긴 것으로 간주함
  • 순서 보장
    • 예를 들어, 큰 메세지가 있어서 1,2,3 으로 잘라서 보냈다고 가정해보자!!
      그런데, 서버에 1 -> 3 -> 2 순서로 도착한다면??
      물론, 내부적으로 최적화하는 로직에 따라 다르겠지만,
      기본적으로는 잘못된 순서의 시작점부터 다 삭제하고 다시 보내라고 요청한다.
      이 예시 같은 경우는 패킷 2번부터 다시 보내라고 한다.
      근데, 서버는 어떻게 순서를 알고 2번부터 보내라고 하는 건가??
      상단에 TCP/IP 패킷 정보 이미지를 확인해보면, TCP 안에 순서 정보가 들어있는 것을 알 수있다. 즉, 서버는 어떤 데이터가 올 지 순서를 알고 검증한다.
    이러한 특징들 때문에 TCP를 신뢰할 수 있는 프로토콜이라고 말한다.

UDP

UDP는 TCP와 같은 계층에 있는 프로토콜이다.


결과적으로, IP와 유사한 특징을 가지지만, UDP에는 PORT가 존재한다.
TCP와 UDP에는 PORT가 존재하는데, PORT는 어떤 역할을 하는 것인가??

예를 들어,

하나의 PC로 음악, 게임, 검색 등을 동시에 한다고 하자!! 이에 관한, 패킷들이 여러 개 들어올텐데, 각각의 패킷들이 어떤 용도로 들어온 건지 어떻게 구분할 건인가?? => 바로 이럴 때, 쓰는 게 PORT 이다.

체크섬은 크게 중요하지는 않다.
PORT 메세지에 대해서 맞는지 검증해주는 데이터이다.

그런데, 이렇게만 보면, UDP를 왜 쓰는지 모르겠다.
IP와 유사하고, TCP 보다는 한참 뒤떨어진 프로토콜을 왜 쓰는 걸까??

  • UDP를 사용하는 이유
    • TCP는 다 좋은데, "3 way handshaking" 하려면, 시간이 걸린다.
      또한, 메세지에 TCP 프로토콜까지 짚어넣으면, 데이터 양도 커진다. 즉, 뭔가 전송 속도도 더 빠르게 만들기 어렵다.
      뭔가를 더 최적화하고 싶은데, 할 수가 없는 상황이다.
      즉, TCP는 이미 손을 못 댄다. 인터넷은 이미 다 TCP 기반이기 때문이다.
    • 여기서, 최적화를 하려면, 백지 상태를 UDP를 이용할 수 있을 것이다.
      현재 UDP 어플리케이션 위에다가 내가 원하는 것을 아무거나 만들면 된다.
      그렇다보니, 지금은 UDP가 꽤 뜨고 있는 추세이다.

다음 시간에는 PORT 에 대해서 알아보자!!

profile
좋은 길로만 가는 "조은길"입니다😁

0개의 댓글