TCP / UDP 프로토콜

TCP/IP 에서의 전송 계층에 해당하는 프로토콜들이며, 전송계층의 프로토콜들은 process-to-process protocol이다.

IP 프로토콜의 경우

host-to-host protocol

UDP (User DataGram Protocol)

  • 비연결성비신뢰성
  • 기본적인 IP 데이터 전달 서비스에 프로세스간 통신이 추가된 형태
  • 연결성 보장과 신뢰적 전송에 소요되는 오버헤드가 없음
  • 응용 계층에서 데이터를 처리해줄때 오버헤드가 발생할 수도 있음
  • 간단한 메시지를 송수신할 때 유리

특징

  • 비연결형 IP 전달 서비스 + 검사합(checksum) 기능
  • 최종 목적지의 데이터 수신 여부를 확인하지 않음 (데이터 손실 가능성 O)
  • 메시지의 도착 순서를 재조정하지 않음 (데이터 순서 틀릴 가능성 O)
  • 호스트 사이에 데이터 흐름 제어 없음 (수신자 처리 용량을 초과하는 데이터 발생 가능)

장단점

  • 장점 : TCP보다 데이터 전송속도가 빠르고 응용 프로그램이 간단해짐
  • 단점 : UDP를 사용하는 응용 프로그램은 메시지 손실, 중복 수신, 수신 지연, 잘못된 순서 등을 처리하기 위한 신뢰성 제어 기능을 제공해야함

UDP 사용자 데이터그램

  • 가짜 헤더 부분 (pseudo header)

    1. 발신지 IP 주소 (32 bit)
    2. 목적지 IP 주소 (32 bit)
    3. 제로바이트 (8 bit)
    4. 프로토콜 타입 (8 bit)
    5. 헤더 길이 (16 bit)
  • UDP 헤더 부분

    1. 발신지 포트(16 bit)
    2. 목적지 포트(16 bit)
    3. 데이터그램 전체 길이(16 bit) (=헤더 길이 + 데이터 길이)
    4. UDP 검사합(16 bit) : 데이터그램 전체의 오류 검사용
  • 데이터 부분

Process-to-process 통신

포트번호를 통해서 Process-to-process를 연결해준다.

  • 포트 번호
    • 서버 프로세스는 잘 알려진 포트 번호 사용
    • 클라이언트 프로세스는 임시 포트 번호 사용

TCP (Transmission Control Protocol)

  • 연결지향(connected-oriented) 전송 서비스 (연결 설정 - 데이터 전송 - 연결 해제)
  • 신뢰성 (흐름제어, 오류제어)
  • 방대한 양의 데이터 전송할때 주로 사용

신뢰성 제공 방법

  • 연결지향 데이터 전송
  • Segment 단위의 전송 (MSS: Maximum Segment Size)
  • 흐름 제어 (flow control: sliding window 사용)

TCP 세그먼트 형식

  1. 발신지 포트 (16 bit)
  2. 목적지 포트 (16 bit)
  3. 순서 번호 (32 bit) : 데이터 필드 첫 번째 데이터 바이트의 순서 번호
  4. 응답 번호 (ACK number) (32 bit)
  • 송신측으로부터 받은 세그먼트에 대한 응답
  • 바로 다음에 받기를 기대하는 순서 번호를 의미함
  1. 헤더 길이 (4 bit) : 5 ~ 15 사이의 값 (20바이트 ~ 60바이트)
  2. 예약 (6 bit)
  3. 제어 (6 bit)
  • URG : 긴급 포인터(urgent pointer) 필드가 유효함을 표시함
  • ACK : 응답번호가 유효함을 표시함
  • PSH : 가능한 빨리 현재 세그먼트를 상위 계층에 전달해야함
  • RST : 연결을 재설정함
  • SYN : 연결을 초기화하기 위해 순서번호를 동기화시킴
  • FIN : 연결을 해제시키기 위해 현재 세그먼트가 마지막 데이터임을 표시함
  1. 윈도우 크기 (16 bit) : 흐름제어를 위한 윈도우의 크기를 명시 (최대 크기 = 2^16 byte)
  2. 검사합 (16 bit) : 오류제어를 위한 검사합 부분
  3. 긴급 포인터 (16 bit) : URG flag = 1일 때, 긴급 데이터의 마지막 바이트의 순서 번호 = 긴급포인터 + 순서 번호
  4. 옵션 (option: 0 ~ 40 byte)
  • Maximum Segment Size (MSS)
  • 윈도우 크기를 증가시키기 위한 값
  • time stamp 등

TCP 연결형 서비스

TCP 종점(endpoint) 식별자 (=socket address)

  • 호스트 IP 주소와 포트 번호로 정의
  • 전이중(full-duplex) 데이터 전송 서비스

TCP 연결 설정

  • 3-way handshaking
  1. 송신측에서 보낸 SYN을 보낸다.
  2. 수신측에서는 받은 SYN에 1을 더하여 ACK 값을 결정하고 수신측만의 SYN을 생성하여 보낸다.
  3. 송신측에서 받은 데이터의 ACK값이 처음에보낸 SYN에 1을 더한 값이면 데이터 전송이 제대로 이루어진거라고 검증이 된 것이다. 수신측에게 데이터를 제대로 받았다고 전달하기 위해서 수신측에서 보낸 SYN 값에 1을 더해서 ACK에 담아 보낸다.

초기 순서번호(ISN: Initial Sequence Number)를 정하는 방법은?

  • 난수 발생기
  • 양 방향이 서로 다른 ISN을 사용함

TCP 연결 종료

  1. 송신측에서 FIN seq = x(random number)를 보냄
  2. 수신측에서 FIN+1한값을 ACK에 담고 수신측만의 FIN 또한 담아서 보냄
  3. 송신측은 ACK를 검증하고 수신측에게 FIN+1의 값을 ACK에 담아서 보냄
  4. 수신측에서 ACK를 검증하고 검증이 성공적으로 됐으면 통신 종료
Last Updated: