[Network] TCP, 3WHS, TCP 데이터 전송, 4WHS, UDP

공부한 내용 정리하는 공간입니다.

틀린 내용이 있을 수 있습니다.

모든 지적, 첨언 환영합니다.

TCP

Stream-Oriented Transport Protocol (스트림 기반 전송 프로토콜)

    >Streatm : MSS 기준 단편화로 분할된 데이터

헤더의 길이 : 기본 20byte + 옵션 0~40byte = 최대 60 byte (가변길이 헤더)

    >가변길이 헤더는 헤더 길이 필수로 명시

    >payload의 길이는 알 수 없음

 

기본 헤더
20 Bytes
Source port address 송신지 포트 번호
Destination port address 수신지 포트 번호
Sequence number 전송하는 데이터에 붙이는 번호 (순차번호)
Acknowledgment Sequence number + Data length
Header length 헤더의 길이
Reserved 미래 사용을 위한 예약 공간 (현재는 사용 안함, 항상 0)
Flags SYN, ACK, FIN 등
Window size 받을 수 있는 데이터 크기
Checksum 오류점검코드
Urgent pointer 긴급 데이터 처리 시 사용
옵션
0~40 Bytes
Options & padding 선택사항

 

데이터 전송 전/후 과정 (3WHS/4WHS) 에서는 payload (Data) 가 없고 헤더만 전송

Flags를 보고 전송 전(SYN), 후(FIN)를 판단

 

SYN (Synchronize) 연결 시작 요청
ACK (Acknowledgment) 데이터 수신 확인
FIN (Finish) 연결 종료
RST (Reset) 연결 강제 종료
PSH (Push) 데이터 즉시 전송
PSH=1이면 단편화 없이 바로 전송 (단편화 여부 확인 가능)
URG (Urgent) 데이터 우선 처리
URG=1이면 Urgent pointer 작은 순서가 우선 전송됨

 


3 Way Handshaking

TCP 데이터 전송 전에 연결하는 과정

데이터(payload)가 없음

window size (+window scale), SACK permitted (누락 처리 방법), MSS 포함 전송

1. 클라이언트 → (SYN) → 서버 : 연결 요청

    >SYN = 1, Sequence number = 설정값(A), ACK = 0,  Acknowledgment = 0

2. 클라이언트 ← (SYN, ACK) ← 서버 : 요청 승인 (Established : 가상 회선 수립, 채널 설정)

    >ACK = 1, Acknowledgment = A+1, SYN = 1, Sequence number = 설정값(B)

    >서버에 요청한 포트가 준비되지 않았을 때 (포트가 열려있지 않을 때) RST = 1 을 포함해서 ACK를 보냄, ACK를 안보내진 않음

3. 클라이언트 → (ACK) → 서버 : 연결 확정 (Established : 가상 회선 수립, 채널 설정)

    >ACK = 1, Acknowledgment = B+1, SYN = 0, Sequence number = A+1

 


요청 데이터 전송

신뢰성 점검 (오류 점검) : Acknowledgment 활용

ex1) 데이터 송신자 → 데이터 수신자 : Sequence number = 5000, Data size = 500

데이터 신자 ← 데이터 수신자 : Acknowledgment = 5500

    >전송 성공

올바른 Acknowledgment가 아니면 데이터 재전송

ex2) 데이터 송신자 → 데이터 수신자 : Sequence number = 5000, Data size = 500

데이터 신자 ← 데이터 수신자 : Acknowledgment = 5200 (300 loss)

데이터 송신자 → 데이터 수신자 : Sequence number = 5000, Data size = 500

    >재전송

Acknowledgment 가 없으면 RTT x 2 만큼 기다렸다가 재전송

    >데이터 송신자가 보낸 데이터를 받지 못했을 경우

    >데이터 송신자가 응답을 보냈으나 손실된 경우

ex3) 데이터 송신자 → 데이터 수신자 : Sequence number = 5000, Data size = 500

데이터 신자 ← 데이터 수신자 : 응답X

데이터 송신자 → 데이터 수신자 : Sequence number = 5000, Data size = 500

    >재전송

흐름 제어 (전송량 조절) : Window size 활용

3WHS 과정에서 Window size 전송

데이터 전송 중에도 변경 가능

Acknowledgment 는 연속 전송이 끝난 뒤 마지막 트래픽 정보로 응답

ex1) 데이터 신자 ← 데이터 수신자 : Window size = 3000

데이터 송신자 → 데이터 수신자 : Sequence number = 5000, Data size = 1400

데이터 송신자 → 데이터 수신자 : Sequence number = 6400, Data size = 1400

데이터 신자 ← 데이터 수신자 : Acknowledgment = 7800

데이터 수신자는 Acknowledgment 로 연속 전송된 데이터 내 누락이 있음을 인지

    >Sequence number 는 이전 트래픽의 Acknowledgment

    >누락된 데이터를 확인하면 데이터 재요청 (Dup ACK) 3회 전송

    > 누락된 데이터 재전송 default : 오류 발생 시 연속된 데이터 모두 재전송

    >SACK permitted : 누락된 데이터만 전송, 운영체제가 자동으로 설정함

ex2) 데이터 신자 ← 데이터 수신자 : Window size = 5000

데이터 송신자 → 데이터 수신자 : Sequence number = 4400, Data size = 1400

데이터 송신자 → 데이터 수신자 : 데이터 loss

데이터 송신자 → 데이터 수신자 : Sequence number = 7200, Data size = 1400

데이터 신자 ← 데이터 수신자 : Dup ACK (데이터 재요청) 3회

데이터 송신자 → 데이터 수신자 : Sequence number = 5800, Data size = 1400

    >SACK permitted 설정 되어있으면 누락된 데이터만 전송

데이터 수신자가 데이터를 받을 수 없을 때는 Window size = 0 전송

    >데이터 송신자는 ACK로 Keep Alive를 전송

    > Window size = 0 가 계속되면 연결을 끊음

    >관제 : Window size = 0 가 계속되면 수신자 상태 점검 필요

ex3) 데이터 신자 ← 데이터 수신자 : Window size = 0

데이터 송신자 → 데이터 수신자 : 일정 시간 이후 Keep Alive 전송

 


4 Way Handshaking

TCP 데이터 전송 후에 연결을 해제하는 과정

데이터(payload)가 없음

1. 클라이언트 → (FIN) → 서버 : 연결 종료 요청

    >FIN = 1

2. 클라이언트 ← (ACK) ← 서버 : 요청 확인 (CLOSE_WAIT : 클라이언트에게 제공했던 애플리케이션 종료)

    >ACK = 1

3. 클라이언트 ← (FIN) ← 서버 : 연결 종료 요청 확인 (LAST_ACK)

    >FIN = 1

    >CLOSE_WAIT 에서 LAST_ACK 로 전환되지 않으면 애플리케이션 점검

3. 클라이언트 → (ACK) → 서버 : 종료 확인

    >ACK = 1

    >서버는 ACK를 받으면 포트를 닫음 (세션 종료)

    >클라이언트는 ACK를 전송한 뒤 FIN 이 2번 올 수 있는 시간을 기다림 (TIME_WAIT)

클라이언트가 기다리지 않고 먼저 종료할 경우 서버는 FIN에 대한 ACK를 받지 못해서 종료하지 못하고 계속 FIN을 전송

    >서버 과부하

 


UDP

Message-Oriented Transport Protocol (메세지 기반 전송 프로토콜)

사전에 필요한 프로세스가 없음 (전송 전 상태 확인 X)

비신뢰성, 비연결지향

Data 생략 불가능

Data 단편화 진행 X

 

8 Bytes Source port number 송신지 포트 번호
Destination port number 수신지 포트 번호
Total length 전체 길이 = 헤더 길이 + 데이터 길이
Checksum 오류점검코드
오류가 검출되어도 재전송 진행 X (오류 검출 기능이 없다고 판단)

 


 

TCP   UDP
Connection oriented
연결 지향 (3WHS)
Header Connectionless
비연결지향
Sequencing 지원
순차전송 (단편화)
Sequencing 미지원
한번에 전송
Error control O
Checksum
Error control X
Checksum 있으나 제어하지 않음
Flow control O
Window size
Flow control X
Unicast 전송 Transmission Unicast, Multicast, Broadcast 전송
Full duplex
전이중
Half duplex
반이중
데이터 전송 실시간 트래픽 전송(Multimedia 등)