UDP
Connectionless transport
- UDP는 다중화/역다중화 기능과 간단한 오류 검사 기능을 제외하면 IP에 아무것도 추가하지 않음
UDP를 사용하는 이유
- No connection establishment ≈ no delay addition
- UDP 송신자와 수신자 사이의 handshaking이 없기 때문
- Simple : 송수신자의 연결 상태가 없음
- Small header size
- No congestion control ≈ 원하는 만큼 빠를 수 있음
- UDP 헤더는 2바이트씩 구성된 4개의 필드를 가짐
UDP checksum
- 목표 : segment 전송 시 에러 탐지 (e.g. flipped bits)
- 세그먼트가 출발지로부터 목적지로 이동했을 때, UDP 세그먼트 안의 비트에 대한 변경사항이 있는지 검사
- 송신자
- 16bit 정수의 시퀀스로 헤더의 필드를 포함한 세그먼트의 콘텐츠를 다룸
- checksum : 세그먼트 안에 있는 모든 16비트 워드 단위로 더하고 이에 대하여 다시 1의 보수를 수행 (덧셈 과정에서 발생하는 오버플로우는 "윤회식 자리올림(wrap around)") -> 이 결과 값이 체크섬 필드에 삽입됨
- 수신자
- 받은 세그먼트의 체크섬을 계산
- 계산한 체크섬과 체크섬 필드의 값과 같은지 확인
Checksum 구하는 법
- 값들을 다 더함
- overflow 되면 1을 더함
- 1의 보수를 취함 (0<->1 바꾸기)
Principles of reliable data transfer
TCP
tcp는 오로지 end system에서만 동작
- point-to-point
- 한 명의 송신자, 한 명의 수신자
- multicasting 불가
- connection-oriented
- '3 way handshaking'을 통해 데이터 교환 전에 송수신자의 상태를 초기화한다.
- 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 할 때, 사용