728x90
응용 프로세스 데이터 전송 과정
- 큰 applitcation 데이터를 자르는 기능 = segmentation, 이는 transport 계층에서 수행된다.
- 데이터의 앞에 자신의 헤드를 붙여 IP 데이터로 만든다.
- IP 데이터그램을 데이터 링크의 프레임으로 캡슐화(Encapsulation)해서 보낸다.
TCP 세그먼트
- 헤더(control information) 필드 + 데이터(payload) 필드
- 헤더: mandatory(필수), 데이터: optional(옵션)
MSS(Maximum Segment Size)
- 데이터 필드에 포함되는 응용 메시지 조각(chunk)의 최대 크기
- 데이터 링크의 MTU(최대 전송 단위, Maximum Transmission Unit)에 의해 결정(ex. 유선 LAN MTU = 1500 바이트)
- TCP 헤더 크기 + IP 헤더 크기 + MSS <= MTU
- 최소 TCP 헤더 = 20, 최소 IP 헤더 = 20, MSS = 1460
TCP 세그먼트 구성
TCP 포트 번호(Port Number)
- 역할: 응용 프로토콜 식별
- 클라이언트 포트 번호: 연결 설정 시에 임의의 포트 번호를 할당한다.(Ephemeral Port)
- 서버 포트 번호: 연결 설정 전에 미리 할당한다.(Well-known Port)
- 출발지 포트 번호: 세그먼트 송신자의 포트 번호, 16비트
- 목적지 포트 번호: 세그먼트 수신자의 포트 번호, 16비트
순서 번호(Sequencec Number)
- 번호 부여 원칙: 시작 순서 번호(ISN)부터 이미 송신된 바이트의 다음 바이트 번호(데이터의 첫 번째 바이트 번호)
- 세그먼트 송신자에 의해 부여된다.
- ISN + 송신된 바이트 수
- ISN: 3000, 송신된 바이트 수: 1000 -> 순서 번호 = 4000
- 즉, 시작 순서 번호는 지금까지 전송된 바이트이다.
- 세그먼트 번호가 아니다.
확인 번호(Acknowledgement Number)
- 번호 부여 원칙: 순서(Byte의 순서)대로 수신된 세그먼트의 마지막 바이트의 다음 바이트 번호(수신을 기대하는 세그먼트의 순서 번호), 세그먼트 수신자에 의해 부여된다. (ACK 세그먼트를 통해 전달)
- 순서대로 수신된 세그먼트 순서 번호 + 수신 세그먼트 데이터 크기
- 세그먼트 순서 번호: 4000, 데이터: 1000바이트 -> 확인 번호 = 5000
- 누적 수신 확인
- 세그먼트의 순서번호 + 크기 = 수신된 전체 바이트 + 1
헤더 길이(Header Length)
- 헤더 필드 전체 길이(20 ~ 60 바이트), 4바이트 워드 단위로 표시(5~15)
수신 윈도우(Receive Window) 크기
- 수신 TCP가 수신 가능한 데이터 크기(버퍼 여유 공간)
- 수신 TCP가 ACK 세그먼트에 표시, 송신 윈도우(send window) 결정
- 최대 65535 바이트(16비트 필드)
제어 플래그(Control Flags)
- URG: Urgent - 긴급 데이터가 있으니 먼저 처리해라 표시
- ACK: Acknowledgement - 수신한 세그먼트에 대한 ACK 세그먼트
- PSH: Push - MSS보다 작지만 바로 TCP한테 목적지로 송신하라 표시
- RST: Reset - 세그먼트 연결을 비정상적으로 해제해야한다 표시
- SYN: Synchronization - 연결 설정할 때 표시
- FIN: Finish - 연결 해제할 때 표시
긴급 데이터 포인터(Urgent Data Pointer)
- 긴급 데이터의 위치
TCP RTT(Round Trip Time)
- 세그먼트 송신 후 ACK 수신까지 걸리는 시간
- 네트워크 상태에 따라 가변적인 시간
- RTT를 기반으로 재전송 타이머가 설정된다.
TCP의 RTT 추정
- 추정 RTT = (1 - α) * 추정 RTT + a * 측정 RTT
- α = 0.125
- 지수이동가중평균 -> 최근 측정한 RTT는 12.5%를 반영하고, 측정한 지 오래된 것일수록 지수대로 반영비율을 낮춘다.
RTT 추정 예시
- 시간에 따라 RTT 측정: S1, S2, S3
- 초기 추정 RTT = RTT0
- 추정 RTT1 = 0.875 * RTT0 + 0.125 * S1
- 추정 RTT2 = 0.875 * (0.875 * RTT0 + 0.125 * S1) + 0.125 * S2 = 0.8752 * RTT0 + 0.875 * 0.125 * S1 + 0.125 * S2
- 추정 RTT3 = 0.875 * (0.8752 * RTT0 + 0.875 * 0.125 * S1 + 0.125 * S2) + 0.125 * S3 = 0.8753 * RTT0 + 0.8752 * 0.125 * S1 + 0.875 * 0.125 * S2 + 0.125 * S3
TCP RTT 분산 추정
- 분산 RTT = ( 1 - β) * 분산 RTT + β * |측정 RTT - 추정 RTT|
- β = 0.25
재전송 타이머 값(Timeout)
- 재전송 타이머 값 = 추정 RTT - 4 * 분산RTT
- 분산 RTT * 4를 해야 적절한 재전송 타이머 값이 나온다.
- 이보다 길면? -> 불필요한 대기시간 증가 -> 효율 떨어짐
- 이보다 짧으면? -> ACK가 오고 있는 중에 종료된다 -> 불필요한 재전송 증가
728x90
'Computer Network' 카테고리의 다른 글
[컴퓨터 네트워크] TCP 혼잡 제어(Congestion Control) (0) | 2022.11.01 |
---|---|
[컴퓨터 네트워크] TCP 신뢰 전송과 흐름 제어 (1) | 2022.10.31 |
[컴퓨터 네트워크] TCP 연결관리(Connection Management) (0) | 2022.10.12 |
[컴퓨터 네트워크] 오류 복구3: Selective_Repeat ARQ (0) | 2022.10.09 |
[컴퓨터 네트워크] 오류 복구2: Go-back-N ARQ (0) | 2022.10.09 |
댓글