TCP와 UDP

주윤·2023년 9월 13일

TCP & UDP

목록 보기
1/1

📖 TCP & UDP

📕 TCP vs UDP

📌 TCP

데이터가 의도된 목적지에 닿을 수 있도록 보장해주는 통신 규약

  1. 연결형 서비스
    • 연결 설정 및 연결해제 필요
    • 양단간 어플리케이션/프로세스는 TCP가 제공하는 연결성 회선을 통하여 서로 통신
  1. 비교적 느림. 정확한 데이터 전달
    ⇒ 고정된 통신 선로가 최단선(네트워크 길이)이 아닐경우
  1. 신뢰성 높음
    ⇒ 패킷 손실, 중복, 순서바뀜 등이 없도록 보장
  1. 1 : 1 통신만 가능함
  1. 데이터의 전송 순서를 보장
⇒ 데이터의 순서 유지를 위해 각 바이트마다 번호를 부여
  1. 데이터의 경계를 구분하지 않는다
    바이트 스트림 서비스
	(한 번에 한 바이트씩 연속적으로 전송되는 데이터의 흐름과 같이 끊임없이 연속되는 바이트 열)
  1. 데이터 흐름 제어(수신자 버퍼 오버플로우 방지) 및 혼잡 제어(패킷 수가 과도하게 증가하는 현상 방지)

📌 UDP

  1. 비연결형 서비스
    • 메세지가 제대로 도착했는지 확인하지 않음 (확인응답 없음)
    • 수신된 메세지의 순서를 맞추지 않음 (순서제어 없음)
    • 흐름 제어를 위한 피드백을 제공하지 않음 (흐름제어 없음)
    • 검사합을 제외한 특별한 오류 검출 및 제어 없음 (오류제어 거의 없음)
    • UDP를 사용하는 프로그램 쪽에서 오류제어 기능을 스스로 갖추어야 함
    • 데이터그램 지향의 전송계층용 프로토콜 (논리적인 가상회선 연결이 필요없음)
  1. 빠른 데이터 전달 focusing, 1 대 다 통신 가능
    ⇒ 실시간 응용 및 멀티캐스팅 가능
  1. 신뢰성 보단 연속성
  1. 데이터 경계를 구분
    데이터그램(datagram) 서비스
    (메시지 단위로 전송되며 크기가 초과하면 잘라서 보내짐)
  1. 패킷 오버헤드가 적어 네트워크 부하가 감소 (헤더 비트 수 고정)

📕 TCP 헤더

  • 캡슐화

    응용 계층부터 물리 계층까지 계층별로 데이터를 전달할 때, 헤더를 붙히는 것

  • 역캡슐화

물리 계층부터 응용 계층까지 계층별로 데이터를 전달할 때, 헤더를 제거하는 것

TCP로 전송할 때 붙히는 헤더

세그먼트 : TCP헤더가 붙은 데이터

TCP는 연결형 통신에 사용되는 프로토콜
⇒ 데이터를 전송하려면 먼저 독점 통신로 확보해야함

HOW?

📌 코드비트

연결의 제어 정보가 기록

각 비트 별로 역할이 있다. 모두 초기 값은 0이고, 비트가 활성화되면 1이 된다. 연결을 확립하려면 SYN과 ACK가 있어야 한다.

SYN : 연결 요청
ACK : 확인 응답

📌 일련번호(sequence number), 확인 응답 번호(acknowledgement number)

실제 데이터를 보내거나 받을 때 사용

일련번호:
TCP는 데이터를 분할해서 보내는데 일련번호는 송신 측에서 수신 측에 이 데이터가 몇 번째 데이터인지 알려주는 역할

확인 응답 번호
수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려주는 역할 (예를 들어, 10번 데이터를 받았으면 11번 데이터를 달라고 요청)

📕 UDP 헤더

UDP 데이터그램 : UDP 헤더가 붙은 데이터

📕 3-way Handshaking

📌 연결

  1. 통신을 하려면 B에게 허가를 받아야 하므로, A에서 B로 연결 확립 허가를 받기 위한 요청(SYN)을 보낸다.
  1. B는 A가 보낸 요청을 받은 후에 허가한다는 응답을 회신하기 위해 연결 확립 응답(ACK)을 보낸다. 동시에 B도 컴퓨터 A에게 데이터 전송 허가를 받기 위해 연결 확립 요청(SYN)을 보낸다.
  1. B의 요청을 받은 A는 B로 허가한다는 응답으로 연결 확립 응답(ACK)을 보낸다.

📕 4-way Handshaking

📌 종료

연결을 끊을 때는 FIN, ACK를 사용

  1. A에서 B로 연결 종료 요청(FIN)을 보낸다.
  1. B에서 A로 연결 종료 응답(ACK)을 반환한다.
  1. B에서도 A로 연결 종료 요청(FIN)을 보낸다.
  1. A에서 B로 연결 종료 응답(ACK)을 반환한다.

📌 TCP의 연결 설정 과정(3단계)과 연결 종료 과정(4단계)이 단계가 차이나는 이유?

Client가 전송할 데이터가 없다고해도 Server에서 보내야하는 데이터가 아직 남아있을 수 있기때문에 우선 FIN에 대한 ACK를 먼저 보내고 남은 데이터 전송 후에 FIN을 보낸다.

📌 만약 Server에서 FIN 플래그를 전송하기 전에 전송한 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN 패킷보다 늦게 도착하는 상황이 발생하면 어떻게 될까?

Client에서 세션을 종료시킨 후 늦게 도착하는 패킷은 drop되고 데이터는 유실된다. 이런 상황에 대비하여 Client는 Server로부터 FIN을 수신하고 일정시간(default 240sec)동안 세션을 남겨두고 잉여 패킷을 기다린다. (TIME_WAIT 과정)

📌 초기 Sequence Number인 ISN을 0부터 시작하지 않고 난수를 생성해서 설정하는 이유?

Connection을 맺을 때 사용하는 Port는 유효한 범위 내에서 사용하고 시간이 지남에 따라 재사용
-> 두 통신 호스트가 과거에 사용된 Port 번호 쌍을 사용하는 가능성 존재

Server에서는 SYN을 보고 패킷을 구분, 난수가 아닌 순차적 Number가 전송된다면 이전 Connection으로부터 오는 패킷으로 인식할 수 있다. 이런 문제 가능성을 줄이기 위해 난수로 ISN 설정

0에서 시작하는 ISN은 이어지는 Seq를 쉽게 예측하게 만들어 공격에 취약해진다.

0개의 댓글