[포스코x코딩온] 스마트팩토리 입문과정 | 네트워크와 프로토콜 | TCP와 UDP

김영웅·2023년 3월 26일
0
post-thumbnail

이번시간에는 전송 계층에서 사용하는 TCP와 UDP의 특징에 대해 배우고 알아보는 시간을 가졌습니다.


[TCP]

  • 연결 지향 (Connection-oriented(high reliability, low speed))
  • 데이터 전송 보장 (3-way handshaking / 4-way handshakinig)
  • 흐름제어, 혼잡제어
  • 다중화(Multiplexing)

• 연결 지향 (Connection-oriented(high reliability, low speed))

수신 측이 데이터를 승인해야 다음 데이터를 보내는 방식

TCP는 신뢰성이 높은 연결 지향 프로토콜입니다. 이것은 즉, 데이터가 보내지기 전에 연결이 설정되어야 하며, 데이터가 보내지면 수신측에서 확인 응답을 보내는 방식입니다. 데이터가 분실되거나 손실되면 송신자는 다시 보내기 위해 데이터를 재전송합니다.

• 데이터 전송 보장

[3-way handshake]

3-way handshake는 TCP 연결을 설정하기 위한 과정입니다.
이 과정에서 세그먼트(데이터 패킷)를 교환하며, 클라이언트와 서버가 서로를 인식하고 동기화합니다.

  • 클라이언트와 서버 사이에서 이루어짐
  • 연결이 잘 되어있는지 확인하는 과정

< 과정 순서 >
1.클라이언트가 SYN 세그먼트를 서버에게 보낸다.
2.서버는 SYN 세그먼트를 받고, SYN/ACK 세그먼트를 클라이언트에게 보낸다.
3.클라이언트는 ACK 세그먼트를 서버에게 보내서 3-way handshake를 완료한다.
이 과정을 통해 클라이언트와 서버는 상호 인식하고, 데이터 전송을 위한 초기화 작업을 수행한다.

[4-way handshake]

4-way handshake는 TCP 연결을 해제하기 위한 과정입니다.
이 과정에서 클라이언트와 서버는 서로에게 FIN 세그먼트를 보내고, 상대방의 FIN 세그먼트에 대한 ACK 세그먼트를 보내서 연결을 종료합니다.

< 과정 순서 >
1.클라이언트가 FIN 세그먼트를 서버에게 보낸다.
2.서버는 FIN 세그먼트를 받고, ACK 세그먼트를 클라이언트에게 보낸다.
3.서버가 모든 데이터를 전송할 때까지 기다리고, 모든 데이터를 전송한 후 FIN 세그먼트를 클라이언트에게 보낸다.
4.클라이언트는 FIN 세그먼트를 받고, ACK 세그먼트를 서버에게 보내서 4-way handshake를 완료한다.
이 과정을 통해 클라이언트와 서버는 TCP 연결을 안전하게 해제한다.

• 흐름제어, 혼잡제어

  • 두 호스트 간의 패킷 흐름을 제어하기 위한 방법
    (ex. 슬라이딩 윈도우, Stop-and-Wait 방식 : 전송 속도가 너무 느려서 잘 사용되지 않음)
  • 수신측이 송신측보다(받는쪽이) 처리속도가 느리면 문제 발생
  • 수신측에서 제한된 저장 용량을 초과하고 도착하는 데이터는 손실될 수
    있기 때문에 흐름 제어가 필요

• 다중화(Multiplexing)

다중화(Multiplexing)는 하나의 통신 채널을 통해 여러 개의 데이터를 전송하는 기술.

TCP는 다중화를 사용하여 하나의 TCP 연결에서 여러 개의 애플리케이션 데이터를 처리할 수 있습니다. TCP 다중화를 사용하면 여러 개의 애플리케이션 데이터를 동시에 처리할 수 있으며, 각 애플리케이션은 고유한 포트 번호를 사용하여 TCP 연결을 설정할 수 있습니다. 이를 통해 하나의 호스트에서 여러 개의 애플리케이션을 실행하면서도 TCP 연결을 안정적으로 유지할 수 있습니다.

[TCP의 사용성]

TCP는 대부분의 인터넷 애플리케이션에서 사용됩니다.
예를 들어, 웹 브라우저가 서버에 HTTP 요청을 보낼 때 등의 데이터 무결성이 중요하고, 손실이나 재전송으로 인한 지연이 상관없는 경우에 유용합니다.


[UDP]

  • 비연결지향 (Connectionless(low reliability, high speed))
  • 데이터 그램(Datagram)

• 비연결지향 (Connectionless(low reliability, high speed))

데이터를 전송하기 전에 연결 설정이 없는 독립적인 전송으로 신뢰성 있는 데이터 전송보다는 빠른 전송을 중요시하는 경우에 사용되는 방식

UDP는 데이터를 전송하기 전에 연결을 설정하지 않습니다. 즉, 수신측과 송신측 사이에서 미리 정해진 연결이 없으며, 각각의 데이터 그램은 서로 독립적으로 전송됩니다. 이를 비연결지향적이라고 합니다. 따라서 UDP는 데이터 전송에 대한 확인 응답 메시지를 받지 않으며, 재전송 기능도 제공하지 않습니다.

• 데이터 그램(Datagram)

데이터 그램은 보내는 쪽과 받는 쪽 간의 논리적인 연결이 필요하지 않으며, 각각의 데이터 그램은 서로 독립적으로 전송됩니다. 이러한 특성 때문에, 데이터 그램은 비연결지향적 프로토콜인 UDP와 함께 자주 사용

  • 데이터 전송 보장하지 않음
  • 패킷 손실 가능성이 있음

[UDP의 사용성]

UDP는 대부분의 인터넷 게임, 비디오 채팅, 스트리밍 등에서 사용됩니다. 이러한 애플리케이션은 데이터 전송 속도가 중요하며, 손실이나 지연이 상관없기 때문입니다. UDP는 신뢰성보다는 빠른 전송 속도가 필요한 경우에 적합합니다.


[TCP : 헤더 구조]

[UDP : 헤더 구조]

[포트 번호]

• TCP와 UDP가 상위 계층에 제공하는 주소 표현 방식
• 프로세스가 사용하는 고유 주소는 해당 호스트의 IP주소와 호스트 내부
의 포트 번호가 조합된 형태(ex. 192.~~. . . :80)
• well known port

▼ well known port


[TCP와 UDP 소켓의 구현 간략하게 설명]

[TCP 소켓의 구현]

socket(), bind(), listen, accept(), connect(), send/recv(), close()

socket() 함수로 소켓을 생성하고 bind()함수로 주소와 소켓 묶은뒤 listen()함수로
소켓 활성화를 해준뒤 accept()함수에서 대기하다가 클라이언트 측에서 connect()함수 요청이 들어오면 연결되면 send()/recv()함수로 데이터 송수신을 반복하며 송수신이 끝이나면 close()함수로 종료합니다.

[UDP 소켓의 구현]

socket(), bind(), sendto()/recvfrom(), close()

연결 절차인 listen, accept() 함수들이 사라지고 클라이언트 측에서도 bind()함수가 실행되며 전송마다 수신자의 소켓 주소를 함께 전송해야 합니다.

[소켓 주소 표기와 관련해서 공통의 통합 주소 체계가 필요한 이유]

연관 있는 데이터를 하나로 묶을 수 있는 구조체를 정의할 수 있기에 데이터의 표현 및 관리가 용이해 진다.


이번 시간에 배운 TCP와 UDP는 둘다 전송 계층에서 사용되는 프로토콜이지만, 그 역할과 특징이 서로 다릅니다.
TCP는 연결지향적인 특성을 가지고 있으며, 데이터 전송의 신뢰성과 일관성이 요구되는 애플리케이션에 사용됩니다. 반면에, UDP는 비연결지향적인 특성을 가지고 있으며, 데이터 전송의 빠른 속도와 실시간성이 요구되는 애플리케이션에 사용됩니다.
UDP와 TCP를 공부하며, 각각의 특징과 장단점을 이해하게 되었고, 애플리케이션의 요구사항에 따라 어떤 프로토콜을 선택해야 하는지를 판단할 수 있게 되었습니다. 이러한 지식은 네트워크 관련 직무나 개발 분야에서 매우 유용하게 사용될 수 있다고 생각합니다.

0개의 댓글