남이 읽는 CS/네트워크

[네트워크 3편] TCP 와 UDP

배발자 2022. 9. 3.
반응형

 

안녕하세요! 개발자 배씨입니다 :)

오늘 포스팅 할 주제는 면접 단골 질문인 TCPUDP입니다!!

 

저번 포스팅에서는 3계층인 네트워크 계층의 IP 프로토콜에 대해 설명을 했었죠??

오늘은 한 계층 더 올라와서 4계층인 전송계층에서 이루어지는 내용을 포스팅 할거에요 ㅎㅎ 

 

오늘 다룰 주제인 TCP와 UDP는 4계층인 전송 계층에 해당하는 프로토콜이랍니다!

그러니까~ 전송 계층에서 사용하는 프로토콜이 TCP 와 UDP 가 있는데 이 두개의 차이점이라던지 특징 같은 것들은 면접 질문으로 많이 나온다고 하니까 자세히 다룰 예정이에요 ㅎㅎ

 

그렇다면 TCP 와 UDP 는 어떠한 차이점이 있고 어떠한 특징이 있을까요???? 궁금하시죠??

 

 

[네트워크 3편] TCP와 UDP 설명 시작하겠습니다!

.
.
.

 

 

 

먼저, 4계층인 전송계층이 어떤 역할을 담당하는지 아셔야합니다. 

 

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

 

* 패킷 : 인터넷 내에서 데이터를 보내기 위한 경로 배정(라우팅)을 효율적으로 하기 위해서 데이터를 여러 개의 조각들로 나누어 전송하는데 이때, 이 조각을 패킷이라고 부릅니다.

 

그러면 전송 계층에서 사용하는 TCP 와 UDP 는 데이터의 전달을 담당하는 프로토콜이라는 거겠죠 ㅎㅎ

 

TCP 와 UDP 는 공통적으로 포트 번호라는 것을 이용합니다~

이게 뭐냐면, IP 주소를 통해 데이터가 목적지(컴퓨터, 태블릿, 휴대폰) 까지 왔다면 어떤 프로그램(어플리케이션) 한테 가야할 것인지 알려주는 역할을 해요~  

 

포트 번호는 '0~65535' 16비트로 만들 수 있는 숫자로 구성되어 있으며, 범위에 따라 용도가 정해져 있어요! 

 

0번 ~ 1023번: 잘 알려진 포트 (well-known port) 

>> 웹 서버나 메일 서버 등과 같이 일반적인 서버 소프트웨어가 클라이언트의 서비스 요청을 대기할 때 사용하는 포트번호입니다. 즉, 서버 측 애플리케이션에서 사용! 

 

1024번 ~ 49151번: 등록된 포트 (registered port)

>> 기관이나 사업자들을 위해 IANA에서 관리하는 포트!

*IANA(Internet Assigned Numbers Authority)는 인터넷 할당 번호 관리기관의 약자로 ip주소, 최상위 도메인 등을 관리하는 단체

 

49152번 ~ 65535번: 동적 포트 (dynamic port)

>> 일반 사용자들이 자유롭게 사용할 수 있는 포트! 

 

 

잘 알려진 포트 번호는 다음과 같은 것들이 있어요~  SMTP 나 HTTP 는 한번쯤 들어보셨죠? :)

21번 : FTP(File Transfer Protocol) : FTP 연결 시 인증과 컨트롤을 위한 포트
23번 : Telnet(Telecommunication Network) : 인터넷을 통하여 원격지의 호스트 컴퓨터에 접속할 때 사용하는 포트
25번 : SMTP(Simple Mail Transfer Protocol) : 메일을 보낼 때 사용하는 포트
80번 : HTTP(Hyper Text Transfer Protocol): 웹 서비스를 사용하기 위한 포트

 

TCP 

 

TCP는 연결 지향적 프로토콜이에요~ 연결 지향 프로토콜이란 클라이언트와 서버가 연결된 상태에서 데이터를 주고 받는 프로토콜을 의미합니다. 클라이언트가 연결 요청을 하고, 서버가 연결을 수락하면 통신 선로가 고정되고, 모든 데이터는 고정된 선로를 통해서 순차적으로 전달돼요!!  

 

TCP의 특징에 대해서 하나하나 살펴봅시다~

 

출처 : https://mangkyu.tistory.com/15

 

 

TCP 프로토콜은 가상회선 패킷 교환방식을 사용합니다~ 

데이터를 전송하기 전에 논리적 연결이 설정되는데, 이를 가상회선이라고 말을 합니다! 각 패킷에는 가상회선 식별 번호가 포함되고 모든 패킷을 전송하면 가상회선이 해제되고, 패킷들은 전송된 순서대로 도착해요!  여기서 중요한 것은 발신지와 수신지를 연결하여 패킷을 전송하기 위한 논리적 경로를 배정을 한다는 것!! 그래서 같은 경로로 설정이 되어 다량의 데이터를 연속으로 보낼 때 이 방식을 쓰는거죠!

 

흐름 제어& 혼잡 제어3-way handshaking & 4-way handshaking 방식을 사용합니다. 

간단하게 설명드리자면 흐름제어송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위한 기법이고 혼잡제어 송신측의 데이터 전달과 네트워크의 데이터 속도 차이를 해결하기 위한 기법이에요! 

3-way handshaking 은 3번에 걸쳐서 클라이언트와 서버를 연결하는 과정이고 4-way handshaking은 4번에 걸쳐서 클라이언트와 서버를 해제하는 과정이라고 생각하시면 돼요 ㅎㅎ

* 흐름 제어와 혼잡 제어는 다다음주에 A팀이 포스팅 할 예정이며, 3-way handshaking과 4-way handshaking은 이번 주 B팀의 포스팅 내용을 참고해주세요~ 

 

이렇게 TCP는 연결 지향적이고 정확한 데이터를 처리하기 위해 3-way handshaking 이나 흐름제어 및 혼잡 제어와 같은 기능을 하기 때문에 UDP보다 속도가 느립니다! 

 

이러한 특징들 때문에 TCP는 신뢰성있는 전송이 중요할 때에 사용하는 프로토콜입니다! 예를들면, 메일 전송이나 파일 전송 같은 데이터 손실이 있으면 안되는 상황에서 TCP 를 활용하는 거죠!! 

 

[TCP 특징]

- 연결형 서비스로 가상 회선 방식 제공
- UDP보다 속도 느림
- 흐름 제어 & 혼잡 제어 
- 3-way handshaking , 4-way handshaking 
- 높은 신뢰성 

 

 

출처 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=minki0127&logNo=220804490550

 

 

다음으로 TCP 헤더에 대해서 살펴보겠습니다. 위의 그림은 TCP 헤더 정보입니다. 

여러가지 정보들이 표기되어있네요~ 일단 아까 설명한 포트번호 보이시죠? 제가 '0~65535' 16비트로 만들 수 있는 숫자로 구성되어 있다고 했는데 출발지 포트와 목적지 포트번호가 16비트씩 할당되어 있는 것이 보입니다 ㅎㅎ

 

Checksum 이라고 되어있는 필드도 보시면 16비트로 구성되어 있는데 오류를 검출하는 용도라고 생각하시면 됩니다. 

조금있다가 UDP 헤더 정보도 보시게 될텐데 UDP와 공통된 부분이 포트번호와 Checksum 필드입니다! 

 

나머지 필드들은 아래에 표로 정리해둘테니 차근차근 읽어보세요!!

그리고 호~옥시나 여쭤보는거지만 세그먼트라는 말이 무슨말인지 다들 아시죠..? ㅎㅎ 제가 전송 계층에서 부르는 PDU 를 세그먼트라고 부른다고 말씀드렸어요! PDU도 뭔지 모르시면 지금 매우 심각한 상태니까 "[네트워크 1편] OSI 7계층 & TCP/IP 4계층"   보고 오십니다~ 

 

필드 크기 내용
송신자의 포트 번호 16bit 데이터를 보내는 어플리케이션의 포트 번호
수신자의 포트 번호 16bit 데이터를 받을 어플리케이션의 포트 번호
시퀀스 번호
(Sequence Number)
32bit TCP 순서번호를 표시. 통신을 시작하는 양단의 장비들의 별개로 임의의 번호부터 시작. 
응답 번호
(ACK Number)
32bit 상대방이 보낸 세그먼트를 잘 받았다는 것을 알려주기 위한 번호. 
데이터 오프셋
(Data Offset)
4bit TCP 헤더 길이를 4바이트 단위로 표시. TCP 헤더는 최소 20바이트, 최대 60바이트.
예약 필드(Reserved) 4bit 사용하지 않는 필드이며 모두 0으로 표시. 
제어 비트(Flag Bit) 8bit 세그먼트의 종류를 표시하는 필드
윈도우 크기(Window) 16bit 상대방의 확인 없이 전송할 수 있는 최대 바이트 수를 표시. 
체크섬(Checksum) 16bit TCP 세그먼트에 포함되는 프로토콜 헤더와 데이터에 대한 에러 검출 용도
긴급 위치(Urgent Pointer) 16bit 현재의 순서 번호부터 긴급 포인트에 표시된 바이트까지가 긴급한 데이터임을 표시. 
옵션 ( Option)  0~40byte 최대 세그먼트 사이즈 지정 등 추가적인 옵션이 있을 경우 표시. 

 

 


 

UDP 

 

TCP와 달리 UDP는 비연결형 프로토콜입니다. 즉, 연결을 위해 할당되는 논리적인 경로가 없어서 각각의 패킷은 다른 경로로 전송되고, 각각의 패킷은 독립적인 관계를 지니게 되는데 이렇게 데이터를 서로 다른 경로로 독립적으로 처리하게 돼요!! 

 

UDP 특징에 대해서 하나하나 살펴봅시다!

 

출처 : https://mangkyu.tistory.com/15

 

UDP 프로토콜은 데이터그램 패킷 교환 방식을 사용합니다~ 

데이터그램 패킷 교환 방식은 데이터를 전송하기 전에 논리적 연결이 설정되지 않으며 패킷이 독립적으로 전송돼요! 패킷을 수신한 라우터는 최적의 경로를 선택하여 패킷을 전송하는데 하나의 메시지에서 분할된 여러 패킷은 서로 다른 경로로 전송될 수 있어요ㅎㅎ 따라서 송신 측에서 전송한 순서와 수신 측에 도착한 순서는 다를 수 있는거죠! 그래서 짧은 메시지의 일시적인 전송을 할 때 사용하는 방식이에요

 

UDP는 발신자가 데이터 패킷을 순차적으로 보내더라도 이 패킷들은 서로 다른 통신 선로를 통해 전송될 경우 나중에 보낸 패킷보다 늦게 도착할 수 있고 최악의 경우 잘못된 선로로 전송되어 유실될 수도 있어요. 중간에 패킷이 유실이나 변조가 되어도 재전송을 하지 않아요~ 그래서 데이터의 신뢰성이 낮다고 하는거에요 ㅎㅎ

 

UDP는 비연결형 서비스이기때문에 연결을 설정하고 해제하는 과정이 존재하지 않겠죠??또한 패킷의 순서를 재조립하거나 흐름제어 또는 혼잡제어 같은 기능도 처리하지 않으므로 TCP보다 속도가 빠르다는거에요~

 

짧게 요약하자면! UDP는 신뢰성있는 데이터 전송을 보장하지 않지만 속도가 빠르며 네트워크 부하가 적다는 장점이 있어서 연속성이 중요한 실시간 스트리밍 서비스에 자주 사용됩니다.

 

 

[UDP 특징]

- 비연결형 서비스로 데이터그램 방식을 제공
- 정보를 주고 받을 때 정보를 보내거나 받는다는 신호 절차를 거치지 않음
- UDP 헤더의 CheckSum 필드를 통해 최소한의 오류만 검출
- 신뢰성이 낮음
- TCP 보다 속도가 빠름

 

출처 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=minki0127&logNo=220804490550

 

다음으로 UDP 헤더 정보에 대해서 살펴보겠습니다! 

UDP 헤더도 출발지 포트와 목적지 포트번호와 에러를 확인하기 위한 필드인 Checksum 필드도 보이네요~

UDP 헤더는 에러복구를 위한 필드가 불필요하기 때문에 TCP 헤더에 비해 상당히 간단합니다 ㅎㅎ

 

필드 크기 내용
송신자의 포트 번호 16bit 데이터를 보내는 어플리케이션의 포트 번호
수신자의 포트 번호 16bit 데이터를 받을 어플리케이션의 포트 번호
데이터의 길이(Length) 16bit UDP 헤더와 데이터의 총 길이
체크섬(Checksum) 16bit 데이터 오류 검사에 사용

 


 

 

마지막으로 공통점과 차이점을 정리하고 가겠습니다 ㅎㅎ

 

 

 

TCP / UDP 공통점 

TCP와 UDP의 공통점
포트 번호를 이용하여 주소를 지정
데이터 오류 검사를 위한 체크섬 존재

 

 

TCP / UDP 차이점

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

 

 

요약


 

이번 포스팅에서는 TCP 와 UDP 에 대해서 배워보았습니다. 

다음 주제는 DNS와 로드밸런싱에 대해서 포스팅을 해보려고 합니다!! 

 

감사합니다!! 

 

 

 

 

반응형

 

 

 

 

 

반응형

댓글