TCP, UDP

SEOKJAE·2023년 3월 11일
0

HTTP

목록 보기
1/1
post-thumbnail

우선 TCP와 UDP 를 알아보기전에 알아야 될 인터넷 네트워크에 대한 지식이 있는데,
수많은 인터넷 네트워크에 대한 지식이 있고 알아야할 게 많지만
이 포스팅에서는 간단한 지식만 알아보겠다.

인터넷 네트워크

인터넷 네트워크에는 일단 5가지가 있다.

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

인터넷 통신

일단 인터넷 통신을 하는 컴퓨터와 서버간 어떻게 통신할까?

이런식으로 수많은 인터넷 노드 들을 거쳐서 클라이언트 -> 서버로 이동하는 방식이다.

IP (Internet Protocol)

인터넷 프로토콜 역할

  • 지정한 IP 주소(IP Address)에 데이터 전달한다.
  • 패킷(Packet)이라는 통신 단위로 데이터 전달한다.

예를들어, 아래같은 상황이 있다.

출발 IP패킷: 100.100.100.1 인 곳에서

Hello, world! 라는 정보를 적어서

목적 IP패킷: 200.200.200.2 으로 전달한다.

이렇게 클라이언트와 서버 사이의 인터넷 노드들이 패킷을 전송한다.

하지만 IP프로토콜의 한계가 있는데,

  1. 비연결성
  2. 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송하는것.
  3. 비신뢰성
  4. 중간에 패킷이 사라진다면..??
  5. 패킷이 순서대로 오지않는다면..??

이러한 문제가 있다.

그래서 이러한 문제를 해결하는게

TCP 프로토콜

이다.

이 TCP 프로토콜은 인터넷 프로토콜 스택의 4계층
애플리케이션 계층 - HTTP, FTP
전송 계층 - TCP, UDP
인터넷 계층 - IP
네트워크 인터페이스 계층 중 전송 계층에 들어가있는데,

이 프로토콜의 애플리케이션층에서

  1. Hello, world! 메시지 생성
  2. SOCKET 라이브러리를 통해 전달
  3. TCP 정보 생성, 메시지 데이터 포함
  4. IP 패킷 생성, TCP 데이터 포함

이 과정을 거친다.

네트워크 인터페이스 LAN장비(LAN카드)를 이용해 인터넷으로 서버에 전달한다.

이 그림에 나온것처럼 PORT가 들어가서, IP 프로토콜에서 발생하는 문제들을 해결한다.

TCP의 특징

TCP의 뜻은 전송 제어 프로토콜(Transmission Control Protocol)이란 뜻인데,

  • 연결지향 - TCP3 way handshake (가상 연결)
  • 데이터 전달 보증 (패킷 누락 확인할 수 있음.)
  • 순서 보장
  • 신뢰할 수 있는 프로토콜
  • 현재는 대부분 TCP 사용

이러한 특징을 가진다.

TCP 3 way handshake

TCP 3 way handshake란?

TCP/IP프로토콜 을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에

정확한 전송을 하기위해 상대방 컴퓨터와 전송 전 세션을 수립하는 과정이다.

SYN : 접속을 요청
ACK : 요청 수량

위의 사진은 tcp 3 way handshake 하는 과정을 나타냄.

여기서 주고받는 과정에서 3. ACK 와 함께 데이터 전송이 가능하다.

UDP

UDP의 뜻은 사용자 데이터그램 프로토콜(User Datagram Protocol) 이다.
이 UDP 는 영상재생 또는, DNS 조회와 같은 시간에 민감한 전송을 위해 인터넷을 통해 사용된다. (속도가 매우 빠르기 때문)

이 UDP는 TCP에 비해 매우 속도가 빠르지만, 안정성이 떨어지는 차이가 있다.
프로세스를 거치지 않기때문, 대신 그저 단순히 데이터만 전송 하는것이다.

UDP의 특징

  • 하얀 도화지에 비유(기능이 거의 없음)
  • 연결지향 - TCP 3 way handshake X
  • 데이터 전달 보증 X
  • 순서 보장 X
  • 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름

이 포스팅으로 TCP/UDP에 대한 모든 것을 알순 없지만, 핵심에 대한 내용들을
알아보았다.



















Reference
모든 개발자를 위한 HTTP 웹 기본지식

profile
널널한 개발자

0개의 댓글