Transport 계층
- End to End서비스, 커넥션(연결)을 관리
- Connection-oriented, Reliability, Flow control, Multiplexing
- TCP & UDP, 소켓을 통한 프로세스별 통신
- 5 tuple = Source IP< Source Port, Dest IP, Dest Port, Protocol
Port
전송 계층에서 사용되며 특정 프로세스를 구분하는 단위
0 ~ 65535
0 ~ 1023: well-known port (자주 쓰이고, 표준이기에 커스텀하게 쓰지 않도록 한다)
1024 ~ 49151: registed port
49152 ~ 65535: dynamic port
웹 TCP 80
FTP TCP 21
TCP
- Transmission Control Protocol), 전송 제어 프로토콜
- 인터넷을 구성하는 핵심 프로토콜
- 신뢰성을 기반으로 데이터를 에러 없이 전송, 1:1 통신
- 연결 지향, Connection-oriented, 패킷의 상태 정보를 확인하고 유지
- 에러 발생시 재전송을 요청하고 에러를 복구한다
헤더 포맷
- Source & Dest Port: 소스 포트와 목적지 포트
- Sequence Number: 순서 번호, 패킷 순서화와 중복 패킷 방지
- Acknowledgment Number: 승인 번호, 수신측에서 수신 확인하고 다음 송신 데이터 요청
- HLEN: 20 ~ 60 (header length)
- TCP 제어 플래그: TCP 회선 및 제어 관리
- Window Size: TCP 흐름 제어, 수신 버퍼의 여유 용량을 통보
- Checksum: 데이터 무결성 확인
- Urgent Pointer: 긴급 데이터를 알림
- Option & Padding: 옵션, MSS 조절이나 타임스탬프
TCP 제어 플래그
6가지로 구성되며 활성화 되는 값을 비트 "1"로 표현
1. URG: 긴급함을 알림, 긴급 데이터로 우선 순위를 높여 먼저 송신
2. ACK: 확인, 수신측에서 송신된 패킷을 정상적으로 받았음을 알림
3. PSH: 버퍼링 되지 않고 바로 송신
4. RST: 비정상 상황에서 연결을 끊음
5. SYN: 연결을 맺기 위해 보내는 패킷 (첫번쨰로 보내는 예, 000010)
6. FIN: 정상 종료,송신측에서 수신측에 연결 종료 요청
UDP
UDP(User Datagram Protocol)
- 신뢰성은 낮으나 데이터 전송이 빠르다
- 송신측은 일반적으로 데이터를 보내고 확인 안함, 1:n 통신 가능
- Connectionless, 재전송 불가, 실시간 데이터 전송에 적합 (실시간 스트리밍에 좋음)
- 스트리밍 서비스의 경우 전송 문제가 발생해도 재전송 보다는 실시간 데이터 전송이 중요
헤더 포맷
- Source Port: 출발지 포트
- Dest Port: 목적지 포트
- Length: 전체 데이터 길이 (header + data)
- Checksum: 데이터 무결성 확인
PCAP
TCP & UDP 비교
TCP 통신 과정
3way handshake
TCP는 연결 지향 프로토콜로 두 호스트가 통신하기 전에 연결을 위한 관계를 수립
4 way handshake
TCP 상태 전이도 - Client
TCP 상태 전이도 - Server
TCP 타이머 - Retransmission
RTO(Restransmission Timeout)내 ACK 응답이 오지 않으면 재전송
RTO는 RTT(Round Trip Time)에 따라서 가변적으로 변함
SRTT(Smoothed Round-Trip Time), RTTVAR(Roud-Trip Time Variation)
RTTVAR = (1 - beta) RTTVAR + beta |SRTT - R|
SRTT = (1 - alpha) SRTT + alpha R
RTO = SRTT + max (G, 4*RTTVAR)
RTT - PACP
TCP 타이머 - Persistence
TCP 타이머 - Time waited
TCP 연결 종료 후에 특정 시간만 연결을 유지
- MSL(Maximum Segment Lifetime) = 120초, TIME_WAIT = 2MSL
- 다른 연결이 맺어진 상태에서 이전 연결의 지연/중복 패킷 도착으로 인한 문제 발생
TCP 타이머 - Keepalive
TCP 연결 유지 타이머
- TCP 연결을 맺고 수신측에서 2식나 동안 송신하는 패킷이 없으면 수신측은 75초 안뒤로 Probe전송
- Probe 9개를 보내고 응답이 없으면 연결 종료
- Probe 9개 이전에 응답이 있으면 타이머는 재 설정됨
흐름 제어
Flow Control
송신과 수신측의 데이터 처리 속도 차이를 해결
Sliding Window기법
Window = 데이터 전송을 위한 버퍼
- 버퍼 사이즈 중 Window = 4
- TCP Data 중 1을 프로세스에서 Read처리
- Window size = 5, 송신측에서 Size확인 후 데이터 전송
윈도우 사이즈 = 마지막 수신한 데이터 - 프로세슥 ㅏ처리한 데이터
혼잡 제어
Congestion Control
수신측으로 유입되는 트래픽의 양이 정해진 대역폭을 넘어가지 않도록 제어
-
AIMD(Additive Increase/Multiplicative Decrease)
-패킷 전송시 문제 없으면 Windows size 1씩 증가, 타임아웃 또는 loss시 패킷 속도 1/2 감소
-초기에 높은 대역폭 사용 불가, 미리 혼잡 상태 감지 불가
-
Slow Start
-패킷 전송시 문제 없으면 Windows size 2배씩 증가, 혼잡 상태 발생시 1로 변경
-사전 혼잡 상태를 기록하고 Windows size 절반까지 2배씩 증가 후 1씩 증가
-
Fast Retransmit - TCP Tahoe / Fast Recovery - TCP Reno
- 수신측에서 먼저 와야 하는 패킷이 오지 않고 다음 패킷이 오게 되어도 송신측에 ACK을 보냄
- 송신측은 타임아웃 시간을 기다리지 않고 중복된 순번의 패킷을 3개 받으면 재전송
- 개선된 Fast Retransmit / Fast Recovery
- TCP New Reno, SACK(TCP Tahoe + Selective Retransmit)