text/common

(내가 몰라서 한) TCP와 UDP의 간략한 정리

hoonzii 2022. 12. 5. 21:43
반응형

네트워크를 학교 다닐 때 제대로 안 해서 누가 물어보면 아무 대답도 못하는 사람이 되어버렸다.

그래서 공부하는 겸에 TCP, UDP에 대한 간단한 설명을 적어본다.

TCP, UDP 둘 다 OSI 레이어 중 전송 계층 (transport)의 프로토콜의 한 종류다.

전송 계층의 경우 목적지에 데이터를 정확히 전달하기 위한 계층이다.

(하위 레이어인 물리, 데이터 링크, 네트워크 계층 만으로 목적지에 데이터가 덜렁 도착하기는 한다.(고 한다..!))

전송계층은 역할은

  1. 오류를 점검하는 기능
  2. 전송된 데이터의 목적지가 어딘지(어떤 어플리케이션인지) 식별하는 기능

크게 두가지로 볼 수 있다.

또한 특징으로는 “신뢰성/정확성” 과 “효율성” 두 가지 다른 특성을 가지고 있는데,

  • 신뢰할 수 있고 정확한 데이터 전달하는 통신은 연결형 통신
  • 효율적으로 데이터를 전달하는 통신은 비연결형 통신

으로 나눌 수 있다.

TCP

전송 계층에서 사용하는 “연결형 통신” 프로토콜로, 캡슐화 시 TCP헤더를 데이터 앞에 붙이는데

이를 세그먼트(segment)라고 한다.

TCP 헤더는 아래와 같이 생겼다.

출처 :  https://evan-moon.github.io/2019/11/10/header-of-tcp/

TCP는 연결형 통신이기 때문에 연결(connection)을 우선적으로 확보한 다음 데이터를 교환한다.

연결을 위해서는 위 그림에서 Flags(코드 비트, 6비트)를 이용한다. (현재는 9비트를 이용한다고 한다!)

6비트의 자세한 구조는 아래와 같다.

연결 제어를 위해선 위 6비트 중 SYN, ACK 비트 두 개를 이용해 패킷을 3번 교환하는데

이걸 3-way handShake라고 한다.

출처 :  https://ko.wikipedia.org/wiki/핸드셰이킹

핸드 셰이킹 중 연결 제어의 과정은 아래와 같다.

내 노션에 적은거 표 옮기는 게 귀찮아서 캡쳐해버림ㅋ

데이터를 다 주고 받은 뒤엔 연결을 해제하는데 이땐 FIN, ACK를 이용해 연결 제어를 한다.

내 노션ㅋ

이렇게 연결을 맺은 다음 실제로 데이터를 주고받을 때는

출처 :  https://evan-moon.github.io/2019/11/10/header-of-tcp/

 

위 그림에 Sequence Number (일련번호, 32비트), Acknowledgment Number(확인 응답 번호, 32비트) 를이용한다.

  • 일련번호 : 데이터를 보내는 쪽이 받는 쪽에 지금 보내는 데이터가 몇 번째 데이터인지 알려주는 역할
  • 확인 응답 번호 : 데이터를 받는 쪽이 보내는 쪽에 다음번 데이터는 몇 번째 데이터를 받아야 하는지 알려주는 역할

티스토리에 표 옮겨 올때 왜 ctrl+c,v 가 제대로 안먹는것이냐

이렇게 서로 받은 데이터의 확인 유무와 다음 번째 데이터를 요청하는데 이때 데이터의 유실 혹은 손상 시

재전송을 요청하게 되는데 이걸 “재전송 제어”라고 한다.

 

하지만 아무리 신뢰성과 정확성이 중요하다지만 이렇게 하나씩 주고받으면 굉장히 느리기 때문에

뭉땡이로 받기 위한 장치가 준비되어있다.

조금 더 전문성 있게 말하자면,

수신 측엔 여러 개의 세그먼트를 한시적으로 보관하는 장소가 존재하는데 이를 버퍼(Buffer)라고 한다.

(이 버퍼가 넘치는 현상은 overflow라고 함)

버퍼가 넘치는 걸 막기 위해 TCP 헤더엔 버퍼의 한계 크기를 적는 Window Size(윈도 크기, 16비트)가 존재한다.

출처 :  https://evan-moon.github.io/2019/11/10/header-of-tcp/

3-way handshake 때 이를 확인하는데 교환 시 수신 측 윈도 크기, 송신 측 윈도 크기를 서로 적어 보내고

작은 쪽에 맞춰 세그먼트를 여러 개 보내게 된다.

 

전송계층의 또 하나의 역할은 적절한 애플리케이션에 전달하는 역할이 남았다. 전송계층은 이를 port 번호로 구분하게 된다.

위 그림의 source port(출발 포트 번호, 16비트), destination port(목적지 포트 번호, 16비트)가 그 정보를 담는다.

 

뭔 소리냐?

각 애플리케이션별로 할당된 포트 번호가 있다. 가령 웹서버의 경우 80, 메일의 경우 smtp는 25, pop3는 110 등

그럼 포트가 없거나 잘못될 경우 수신 측 컴퓨터에 도착해도 정확히 어떤 애플리케이션에 전달할지 알지 못한다는 말이다.

(마치 택배가 내가 살고 있는 아파트 동에 도착했지만 우리 집 호수를 몰라 경비실에 맡겨져 있는 것과 같다.)

보통 자주 쓰이는 포트 번호는 아래와 같다.

아니 근데 이건 안외워도 결국엔 자주 보게 되어있다.

UDP

udp는 tcp와 다르게 효율성에 특화된 프로토콜로 3-way handshake 같은 과정 없이 데이터를 전송한다.

보통 동영상 전송 등에 쓰인다고 한다.

UDP 헤더는 아래와 같이 생겼다.

출처 :  https://jennana.tistory.com/265

위 정리는 모두의 네트워크 책을 통해 배운 내용을 정리한 것이다.

아무래도 쉽게 쓰인 책이다 보니 깊은 내용까지는 아니지만 기초 개념을 잡기에 아주 차고 넘쳤고

이번 기회에 확실히 알게 되었다 (기초!!)

모두의 네트워크

 

모두의 네트워크

초보자와 비전공자를 위한 가장 쉬운 네트워크 입문서. 네트워크의 개념, 비트, 바이트부터 OSI 계층, 무선 랜 구조까지 160개의 일러스트와 유쾌한 캐릭터들의 대화로 설명해 그림책을 읽듯 쉽고

www.aladin.co.kr

 

그 외의 이미지 출처는 아래와 같다.

반응형