UDP/TCP, Data Transfer

gmkim·2023년 10월 26일
0

Network

목록 보기
4/9
post-thumbnail

UDP

Connectionless transport

  • UDP는 다중화/역다중화 기능과 간단한 오류 검사 기능을 제외하면 IP에 아무것도 추가하지 않음

UDP를 사용하는 이유

  • No connection establishment ≈ no delay addition
    • UDP 송신자와 수신자 사이의 handshaking이 없기 때문
  • Simple : 송수신자의 연결 상태가 없음
  • Small header size
  • No congestion control ≈ 원하는 만큼 빠를 수 있음

Segment header

  • UDP 헤더는 2바이트씩 구성된 4개의 필드를 가짐

UDP checksum

  • 목표 : segment 전송 시 에러 탐지 (e.g. flipped bits)
    • 세그먼트가 출발지로부터 목적지로 이동했을 때, UDP 세그먼트 안의 비트에 대한 변경사항이 있는지 검사
  • 송신자
    • 16bit 정수의 시퀀스로 헤더의 필드를 포함한 세그먼트의 콘텐츠를 다룸
    • checksum : 세그먼트 안에 있는 모든 16비트 워드 단위로 더하고 이에 대하여 다시 1의 보수를 수행 (덧셈 과정에서 발생하는 오버플로우는 "윤회식 자리올림(wrap around)") -> 이 결과 값이 체크섬 필드에 삽입됨
  • 수신자
    • 받은 세그먼트의 체크섬을 계산
    • 계산한 체크섬과 체크섬 필드의 값과 같은지 확인
      • 다르면 에러 탐지한 것

Checksum 구하는 법

  1. 값들을 다 더함
  2. overflow 되면 1을 더함
  3. 1의 보수를 취함 (0<->1 바꾸기)

Principles of reliable data transfer

TCP

tcp는 오로지 end system에서만 동작

  • 중간에 라우터나 브리지에서 동작하지 않음
  • point-to-point
    • 한 명의 송신자, 한 명의 수신자
    • multicasting 불가
  • connection-oriented
    • '3 way handshaking'을 통해 데이터 교환 전에 송수신자의 상태를 초기화한다.
      • TCP를 연결 지향이라고 부르는 이유
  • pipelining
    • TCP congestion과 flow control에서 window 사이즈를 설정
  • full duplex data
    • 같은 연결에서 bi-directional data flow
      • 보내는 것과 받는 것이 동시에 가능
      • A->B로 보내면 B->A로 보낼 수 있음
    • MSS: 최대 세그먼트 크기
      • 세그먼트의 데이터 필드의 크기 제한
      • 사이즈 큰 파일 전송할 때, MSS 크기로 파일 자름
  • flow controlled
    • 송신자는 수신자가 받을 수 있을 만큼만 보냄
  • reliable, in-order byte stream
    • 메시지 경계가 없다 => 패킷 트레인 이용

TCP segment structure

source, dest port: 다중화/역다중화에 사용
seq num: 순서 번호 필드
acknowledgement num: 확인 응답 번호 필드
receive window: flow control 할 때, 사용

profile
🌊 Flooding loads of work

0개의 댓글