본문 바로가기

서버

TCP / UDP

OSI 7 계층은 네트워크에서 통신이 일어나는 과정을 7단계로 나눈 것을 말한다. 

계층을 나눈 이유는 통신이 일어나는 과정을 단계별로 파악할 수 있기 때문이다.

흐름을 한눈에 알아보기 쉽고, 사람들이 이해하기 쉽게끔 만들어 7단계 중에 이상이 생긴다면 다른단계의 장비 및 소프트웨어를 건드리지 않고도 이상이 생긴단계만 고칠 수 있다.

 

네트워크 계층 중 전송계층에서 사용하는 TCP와 UDP에 대해서 공부해보자.

TCP와  UDP는 OSI7계층에서 전송계층에 해당되는 프로토콜이다.

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

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

 

TCP

연결형 서비스를 지원하는 프로토콜로써, 호스트 간 신뢰성 있는 데이터 전달과 흐름제어를 가능하게한다. 

TCP는 호스트간 신뢰성 있는 데이터 전달과 흐름제어를 한다. TCP 프로토콜은 신뢰성 있는 데이터의 전송을 위해 확인작업을 거치는데 TCP는 패킷을 성공적으로 전송하면(ACK) 라는 신호를 날리고 만약에 ACK 신호가 제 시간에 도착하지 않으면 Timeout이 발생하여 패킷 손실이 발생한 패킷을 다시 전송해준다. 

 

특징

  • 연결의 설정(3-way handshaking)과 해제(4-way handshaking)
  • 데이터의 전송 순서를 보장한다. (데이터의 순서 유지를 위해 각 바이트마다 번호를 부여)
  • 신뢰성있는 데이터를 전송한다. (Sequence Number, Ack Number를 통한 신뢰성 보장)
  • 1:1통신으로 멀티캐스트 불가하다.

단점

  • 데이터보내기 전에 반드시 연결이 형성되어야한다.
  • 1:1통신만 가능하다.
  • 고정된 통신 선로가 최단선이 아니라면 UDP보다 데이터 전송속도가 느리다.


UDP

UDP(User Datagram Protocol)는 연결 과정이 없기 때문에 TCP보다는 빠른 전송을 할 수 있지만 데이터 전달의 신뢰성은 떨어진다. UDP는 발신자가 데이터 패킷을 순차적으로 보내더라도 이 패킷들은 서로 다른 통신 선로를 통해 전달 될 수 있다. 먼저 보낸 패킷이 느린 선로를 통해 전송될 경우 나중에 보낸 패킷보다 늦게 도착할 수 있으며 최악의 경우 잘못된 선로로 전송되어 유실될 수도 있다. 이럴 경우 TCP와는 다르게 UDP는 중간에 패킷이 유실이나 변조가 되어도 재전송을 하지 않는다.

위의 글만 본다면 UDP는 사용되는 부분이 있나싶다....하지만 생각보다 많은 곳에서 사용된다.

신뢰성보다는 연속성이 중요한 서비스 예를 들면 스트리밍서비스, 온라인게임같은 곳에 사용된다.

 

 특징

  • 연결과정이 없기 때문에 정보를 주고 받을때 정보를 보내거나 받는다는 신호절차를 거치지 않는다
  • 데이터 경계를 구분한다.(데이터그램 서비스)
  • 신뢰성 없는 데이터를 전송한다. (데이터 재전송과 데이터 순서 유지를 위한 작업을 하지 않는다.)
  • 패킷관리 필요

 

단점

  • 데이터의 신뢰성이 없다.
  • 의미있는 서버 구축하기 위해서는 일일히 패킷을 관리해야한다.

 

  TCP UDP
연결방식 연결형서비스 비 연결형 서비스
패킷 교환 방식 가상 회선 방식 데이터그램 방식
전송 순서 전송 순서 보장 전송 순서가 바뀔 수 있음
수신 여부 확인 수신 여부를 확인함 수신 여부를 확인하지 않음
통신 방식 1:1 통신만 가능 1:1 / 1:N / N:N 통신 모두 가능
신뢰성 높음 낮음
속도 느림 빠름



 

참고

https://coding-factory.tistory.com/614

https://www.stevenjlee.net/2020/06/29/%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-tcp-%EC%99%80-udp-tcp-vs-udp/

https://mangkyu.tistory.com/15?category=762469

'서버' 카테고리의 다른 글

HTTP 쿠키와 세션  (0) 2021.12.31
HTTP 기본  (0) 2021.12.25
URI와 웹 브라우저 요청 흐름  (0) 2021.12.24
WEB서버 WAS서버  (0) 2021.12.23
서블릿(Servlet)과 JSP  (0) 2021.12.21