[CS]TCP / UDP

김피자·2023년 2월 9일
0

CS

목록 보기
10/22

OSI 7 계층에 대해 공부하던 중 전송 계층에서 TCP의 3-Way Handshake를 발견! 저게 뭔지 알아보기 전 tcp/udp에 대해 자세히 알아보도록 하겠습니당

들어가기 전, 전송 계층 다시 알아보기

4계층 전송 계층(Transport Layer)

양 끝단의 사용자들이 신뢰성 있는 데이터를 주고 받을 수 있도록 해 상위 계층들이 데이터 전달의 유효성이나 효율성을 생각하지 않도록 해줌

송신자와 수신자를 연결하는 통신 서비스를 제공하고 IP에 의해 전달되는 패킷의 오류를 검사하여 재전송 요구 제어 등을 담당

전송 프로토콜 중 가장 잘 알려진 것이 바로 TCP와 UDP임

전송 계층 vs 네트워크 계층

  • 전송 계층 : Application 프로세스들 간 논리적인 통신을 제공
  • 네트워크 계층 : host 간 논리적인 통신을 제공 (데이터의 전달 경로를 설정하는 역할)

TCP와 UDP

TCP와 UDP는 OSI 표준 모델과 TCP/IP 모델의 전송(Transport)계층에서 사용되는 프로토콜

TCP/IP

  • 데이터가 의도된 목적지에 닿을 수 있도록 보장하는 통신 규약
  • 인터넷으로 디바이스를 연결하는 네트워크 프로토콜의 집합
  • 인터넷의 기본 통신 언어
  • TCP/IP를 사용하면 한 컴퓨터가 데이터 패킷을 컴파일하고 올바른 위치로 전송하여 인터넷을 통해 다른 컴퓨터와 통신할 수 있음

TCP와 UDP는 포트 번호를 이용해 주소를 지정하는 것과 데이터 오류 검사를 위한 체크섬이 존재한다는 두 가지의 공통점을 가지고 있지만,
정확성(TCP)을 추구할지 신속성(UDP)을 추구할지 구분하여 나뉨

데이터를 중요하게 생각 해 확실히 주고받고 싶을 때는 TCP를 사용
TCP는 통신할 컴퓨터끼리 "보냈다" "받았다"라고 서로 확인 메세지를 보내면서 데이터를 주고받아 통신의 신뢰성을 높임

웹이나 메일, 파일 공유처럼 데이터를 누락시키고 싶지 않을 때 TCP사용

반대로 신뢰성보다는 일단 빨리 보내버리고 싶을 때는 UDP를 사용
UDP는 데이터를 보내기만 하면 그걸로 끝이니 신뢰성은 없지만 확인 응답과 같은 절차를 생략할 수 있어 통신의 신속성은 높음

인터넷 전화나 실시간 영화 스트리밍처럼 특히 속도를 필요호하는 서비스들이 UDP사용

TCP와 UDP는 "포트 번호"로 컴퓨터 안의 어떤 서비스(애플리케이션)에게 데이터를 전달하면 좋은지를 식별함
포트 번호는 "0~65536"(16비트)까지의 숫자로 되어 있고, 범위에 따라 용도가 정해져 있음

  • 0 ~ 1023(잘 알려진 포트 : well-known port) 웹 서버나 메일 서버 등과 같은 일반적인 서버 소프트웨어가 클라이언트의 서비스 요청을 대기할 때 사용
  • 1024 ~ 49151(등록된 포트 : registered port) 제조 업체의 독자적인 서버 소프트웨어가 클라이언트의 서비스 요청을 대기할 때 사용
  • 49152 ~ 65535(동적 포트 : dynamic port) 서버가 클라이언트를 식별하기 위해 사용

TCP

  • 인터넷 상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함꼐 사용하는 프로토콜

TCP에서 자꾸 강조되는 내용은 데이터를 정확하고 안정적으로 전달할 수 있다는 것

근데 대체 어떻게 통신하길래 신뢰성이 있다는 거임??

클라이언트가 연결을 요청(SYN 데이터 전송)하고 서버가 연결을 수락하면 통신 선로가 고정되고 모든 데이터는 고정된 통신 선로를 통해서 순차적으로 전달
(데잍터를 정확하고 안정적으로 전달할 수 있음)

위 그림처럼 TCP프로토콜은 신뢰성 있는 데이터 전송을 위해 확인 작업을 하는데 패킷을 성공적으로 전송하면 ACK라는 신호를 날리고 만약 ACK신호가 제 시간에 도착하지 않으면 TimeOut을 발생시켜 손실이 발생한 패킷을 다시 전송함

이렇게 TCP는 데이터를 송신할때마다 확인 응답을 주고받는 절차가 있어서 통신의 신뢰성이 올라감

TCP의 단점

  • 데이터를 보내기 전 반드시 연결이 형성되어야함
  • 1:1 통신만 가능
  • 고정된 통신 선로가 최단선(네트워크 길이)이 아닐 경우 상대적으로 UDP보다 데이터 전송 속도가 느림

저는 TCP를 정확한데 유도리 없는 타입이라 정의하겠습니다.

TCP의 특징

  • 데이터 전송 순서를 보장함(데이터 순서 유지를 위해 각 바이트마다 번호 부여)
  • 데이터 흐름 제어(수신자 버퍼 오버플로우 방지) 및 혼잡 제어(패킷 수가 과도하게 증가하는 현상 방지)
  • 3-way handshaking과정을 통해 연결을 설정하고 4-way handshaking을 통해 연결을 해제
3-way handshake는 다음 글에서 자세하게 정리할 예정임

UDP

  • 전송 계층의 "비연결 지향적" 프로토콜

비연결 지향적 : 데이터를 주고받을 때 연결 절차를 거치지 않고 발신(송신)자가 일방적으로 데이터를 보내는 방식

연결 과정이 없어 TCP보다는 전송이 빠르지만 데이터 전달의 신뢰성은 떨어짐

UDP는 전송에 할당되는 논리적인 경로가 없음
각각 패킷은 다른 경로로 전송되고 각각 독립적인 관계를 지님
이렇게 데이터를 서로 다른 경로로 독립적으로 처리하는 프로토콜을 UDP라고함

  • UDP는 발신자가 데이터 패킷을 순차적으로 보내도 이 패킷들이 서로 다른 통신 선로를 통해 전달 될 수 있음

그래서 먼저 보낸 패킷이 느린 선로를 통해 전송되면 나중에 보낸 패킷보다 늦게 도착할 수 있고 최악의 경우 잘못된 선로로 전송되어 유실될 수도 있음

TCP와는 다르게 중간에 패킷이 유실되거나 변조가 되어도 재전송 X

UDP는 좀 무책임한 친구라고 정의하겠습니다^__^

좀 더 설명하면, UDP는 연결을 설정하고 해제하는 과정이 없음
서로 다른 경로로 독립적으로 처리함에도 패킷에 순서를 부여하여 재조립하거나 흐름 제어, 혼잡 제어를 하지않아 속도가 빠르고 네트워크 부하가 적다는 장점이 있지만 데이터 전송의 신뢰성이 낮음 (연속성이 중요한 실시간 스트리밍에 좋다)

UDP의 단점

  • 데이터의 신뢰성이 없음
  • 의미있는 서버를 구축하려면 일일이

UDP의 특징

  • 패킷 관리가 필요함
  • 데이터 재전송과 데이터 순서 유지를 위한 작업이 없음(신뢰성 X)
  • 비연결형 서비스로 연결 없이 통신이 가능

TCP와 UDP의 비교

  1. 공통점

    포트 번호를 이용하여 주소를 지정
    데이터 오류 검사를 위한 체크섬 존재

  2. 차이점

TCPUDP
연결방식연결형비연결형
패킷 교환 방식가상 회선 방식데이터그램 방식
전송 순서보장보장 X
수신 여부 확인확인확인 X
통신 방식1:11:1/1:N/N:N 모두 가능
신뢰성높음낮음
속도느림빠름

결론

이론 공부할 때 TCP/UDP는 항상 같이 붙어있어서 그냥 한 묶음 세트인 줄 알았는데 공부하다 보니 굉장히 성격이 다른 애들이라는 것을 알게되었ㄷㅏ

3-way handshake에 대해 알아보기 전 가볍게 이론 정리식으로 작성한 글이 이렇게 길어지다니ㅠ_ㅠㅠ 흐극ㄱㅈㄷ화이팅


참고
https://coding-factory.tistory.com/614#google_vignette
https://velog.io/@averycode/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-TCPUDP%EC%99%80-3-Way-Handshake4-Way-Handshake

profile
제로부터시작하는코딩생활

0개의 댓글