공부한 내용 정리하는 공간입니다.
틀린 내용이 있을 수 있습니다.
모든 지적, 첨언 환영합니다.
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 등) |
'클라우드기반 스마트 융합보안 과정 > Network' 카테고리의 다른 글
| [Network] IP Header, TTL, ICMP (0) | 2025.02.04 |
|---|---|
| [Network] 단편화, MTU, MSS (0) | 2025.02.04 |
| [Network] Sniffing, Wireshark, 무차별모드, Sniffing 방식 (0) | 2025.02.03 |
| [Network] OSI 7 참조 모델 (0) | 2025.01.27 |
| [Network] 문자 주소만 알고 있을 때 트래픽 흐름 (0) | 2025.01.24 |