2. Header 조사
2023. 2. 16. 17:22ㆍ스터디
TCP
1. TCP 헤더 조사
2. TCP 헤더의 Flag 조사
3. TCP와 UDP의 차이점
4. TCP 3Way Handshake, TCP 4way Handshake의 과정 및 차이점
5. URL과 URI의 차이점
1. TCP 헤더 조사
Sourse/Destination Port Number (각 16 비트)
- IP 주소 + 포트 번호 = 소켓 주소
양쪽 호스트 내 종단 프로세스 식별
Sequence Number (32 비트)
- 바이트 단위로 구분되어 순서화되는 번호임
이를 통해, TCP에서는 신뢰성 및 흐름제어 기능 제공
- 순서 가능 범위
시작 : 임의 값으로 시작하여, 최대값(4,294,967,295) 이후에는 `0`으로되어 시작함
최대 : 32 비트이므로 최대 4기가 바이트(232) 크기의 송신 데이터에,
순서화된 일련번호를 붙일 수 있음
- 순서번호 의미
TCP 세그먼트의 첫번째 바이트에 부여되는 번호
- 초기 순서번호 (ISN, Initial Sequence Number)
초기 TCP 연결설정을 위함
난수 발생기로 초기 순서번호(ISN)를 생성하고, 이를 순서번호 필드에 넣어 보냄
- 난수 발생기 : 매 4 ㎲ 마다 1씩 증가하는 12 비트 카운터에 의해 구현됨
TCP는 양방향이므로 각 방향 마다 다른 ISN 번호가 사용됨
Acknowledgement Number (확인응답 번호 / 승인 번호) (32 비트)
- 수신하기를 기대하는 다음 바이트 번호 = (마지막 수신 성공 순서번호 + 1)
헤더 길이 필드 (Header length, HLEN, 4 비트)
- TCP 헤더 길이를, 4 바이트(32 비트) 단위로 표시
TCP 헤더 길이는, 최소 4 x 5 = 20 바이트 부터 ~ 4 x (24 - 1) = 60 바이트 이하
6 개의 Flag bits (URG, ACK, PSH, RST, SYN, FIN)
- TCP 세그먼트 전달과 관련되어 TCP 회선 및 데이터 관리 제어 기능을 하는 플래그
관계된 기능 : 흐름제어,연결설정,연결종료,연결리셋,데이터전송모드
윈도우 크기 (Window size, 16 비트)
- 흐름제어를 위해 사용하는 16 비트 필드 (65,535 bytes까지 가능)
TCP 흐름제어를 위해 송신자에게 자신의 수신 버퍼 여유용량 크기를 지속적으로 통보
- TCP 연결은 양방향이므로, 매 TCP 세그먼트를 보낼시 마다,
- 이 필드에 자신의 수신 버퍼 용량 값을 채워 보내게 됨 (지속적인 현행화)
결국, 양방향 각각의 수신측에 의해 능동적으로 흐름제어를 수행하게 됨
Checksum (16 비트)
- 검사합
Urgent pointer (16 비트)
- TCP 세그먼트에 포함된 긴급 데이터의 마지막 바이트에 대한 일련번호
현재 일련번호(sequence number)로부터 긴급 데이터까지의 바이트 오프셋(offset)
해당 세그먼트의 일련번호에 urgent point 값을 더해 긴급 데이터의 끝을 알수있음
옵션
- 최대 40 바이트까지 옵션 데이터 포함 가능
TCP MSS 옵션을 협상하거나, (MSS)
주어진 윈도우 크기 보다 더 크게 사용하거나, (Windowing)
선택확인응답을 하거나, (SACK)
타임스탬프 옵션 정의 (Timestamp) 등
2. TCP 헤더의 Flag 조사
TCP 제어 플래그
TCP 헤더는 6개의 Control Flag 필드들이 있음
- 이들은 논리적인 TCP 연결회선 제어 및 데이터 관리를 위해 사용됨
CWR (Congestion Window Reduced)
ECE (ECN Echo)
URG (Urgent)
- Urgent Pointer 필드에 값이 채워져있음을 알림
송신측 상위 계층이 긴급 데이터라고 알려주면,
긴급비트 URG를 1 로 설정하고,순서에 상관없이 먼저 송신됨
- 긴급 데이터의 마지막 바이트 위치가 Urgent Pointer로 가리켜짐
ACK (Acknowledgement)
- 확인응답 필드에 확인응답번호(Acknowledgement Number) 값이 셋팅됐음을 알림
1로 셋팅되면, 확인번호 유효함을 뜻함
0로 셋팅되면, 확인번호 미포함 (즉, 32 비트 크기의 확인응답번호 필드 무시됨)
- SYN 세그먼트 전송 이후(TCP 연결 시작후) 모든 세그먼트에는 항상 이 비트가 1로 셋팅됨
PSH (Push)
- 버퍼링된 데이타를 가능한한 빨리 상위 계층 응용프로그램에 즉시 전달할 것
수신측은 버퍼가 찰 때까지 기다리지 않고, 수신 즉시 버퍼링된 데이터를 응용프로그램에 전달
- 사용 例)
Telnet 세션에서 `q` 입력 만으로 세션 종료를 알릴 때 등
때론, 서버측에서 더이상 전송할 데이터가 없음을 나타내기도 함
RST (Reset) [강제 연결 초기화 용도]
- 연결확립(ESTABLISHED)된 회선에 강제 리셋 요청
강제 리셋 : RST=1 (RST 세그먼트 또는 RESET 세그먼트)
연결 상의 문제를 발견한 장비가 RST 플래그를 `1`로 설정한 TCP 세그먼트를 송출
LISTEN,SYN_RCVD 상태일때 => RST 수신한 경우에 => LISTEN 상태로 들어감
그밖의 상태 일때 => RST 수신한 경우에 => 연결 끓고 CLOSED 상태로 들어감
SYN (Synchronize) [연결시작,회선개설 용도]
- TCP 연결설정 초기화를 위한 순서번호의 동기화
연결요청 : SYN=1, ACK=0 (SYN 세그먼트)
연결허락 : SYN=1, ACK=1 (SYN+ACK 세그먼트)
연결설정 : ACK=1 (ACK 세그먼트)
FIN (Finish) [연결해제,회선종결 용도]
- 송신기가 데이타 보내기를 끝마침
종결요청 : FIN=1 (FIN 세그먼트)
종결응답 : FIN=1, ACK=1 (FIN+ACK 세그먼트)
3. TCP와 UDP의 차이점
TCP
1. 신뢰적인 프로토콜
2. 연결 지향
3. 에러 체크(복구)
4. 순서제어 - Seq number
5. 상위 Application 계층 연결 - port number(내 pc 출발지 port 상대 목적지 port)
6. Windows Size(흐름 제어)
1. TCP (Transmission Control Protocol)
TCP/IP 프로토콜 중 하나
- OSI 계층모델의 관점에서 트랜스포트 계층 (4계층)에 해당
양종단 호스트 내 프로세스 상호 간에 신뢰적인 연결지향성 서비스를 제공
- IP의 비신뢰적인 최선형 서비스에다가, 신뢰적인 연결지향성 서비스를 추가 제공하게 됨
- 이렇게, IP에 추가적으로 신뢰적인 전송을 보장함으로써, 어플리케이션 구현이 한층 쉬워지게 됨
주요 특징
신뢰성 있음 (Reliable)
- 패킷 손실, 중복, 순서바뀜 등이 없도록 보장
TCP 하위계층인 IP 계층의 신뢰성 없는 서비스에 대해 다방면으로 신뢰성을 제공
연결지향적 (Connection-oriented)
- 같은 전송계층의 UDP가 비연결성(connectionless)인 것과는 달리, TCP는 연결지향적 임
이 경우, 느슨한 연결(Loosly Connected)을 갖으므로,
강한 연결을 의미하는 가상회선이라는 표현 보다는, 오히려 연결지향적이라고 말함
- 연결 관리를 위한 연결설정 및 연결해제 필요
양단간 어플리케이션/프로세스는 TCP가 제공하는 연결성 회선을 통하여 서로 통신
TCP 연결의 식별, 다중화, 포트번호
- TCP 연결(회선)의 식별 : 소켓(양단 IP주소 및 포트번호 쌍)으로 회선을 식별 함
2개의 IP 주소 및 2개의 포트 번호에 의한 4개가 하나의 연결(회선)을 식별함
- 여러 응용 간 다중화 가능 : 단일 연결 뿐만아니라 다수 연결의 동시적 처리도 가능
- 응용과의 연결점 식별 : TCP는 포트 번호에 의해 어플리케이션(응용)과의 연결점을 식별
전이중 전송방식/양방향성 (Full-Duplex)
- 종단간 양 프로세스가 서로 동시에 세그먼트를 전달할 수 있음
양방향 각각에 대해 `송수신 버퍼` 및 `데이터흐름용 순서번호` 유지
멀티캐스트 불가능 : 단대단 전송 방식 (1:1) 즉, 유니캐스트성 임
- 단일 송신자와 단일 수신자 간에 단일 경로 연결이 설정됨
한편, 차세대 전송계층 프로토콜로써,
상위 응용과는 바이트 스트림(Byte Stream)으로 주고받음
- 논리적(의미를 갖는) 단위인 메세지 스트림이 아님
각 데이터 간의 구분을 의미적으로 구분하지 않고,
단순히 바이트들의 연속적인 흐름으로 보고, 이들을 묶어 세그먼트화하여 전송
- 이는 상위 응용 개발자들이 흐름제어,회선관리,전송단위 등을 신경쓰지 않도록 함
세그먼트화 처리 : 데이터를 패키징 처리
- 바이트들을 모아서 세그먼트화하고 이에 TCP 헤더를 붙이고, 이들을 순서제어함
TCP 세그먼트 : TCP에서 IP로 전달되는 정보 단위(통상, 수 백 바이트 정도)
양 끝단의 TCP 모듈간에 서로 교환되는 데이터 단위를 TCP 세그먼트라고 함
- TCP 세그먼트의 (한 번에 보낼 수 있는) 최대 크기
흐름제어 (Flow Control)
- 송신(송신전송률) 및 수신(수신처리율) 속도를 일치시키는 것
주로, '순서번호','확인응답번호','수신윈도우 크기'라는 3개 변수로 흐름제어
혼잡제어 (Congestion Control)
- 네트워크가 혼잡하다고 판단될 때 송신률을 감속함
이에따른 여러 장치(기법)들을 다양한 TCP 버젼에서 마련하고 있음
주요활용기능 : 느린 시작, 혼잡 회피, 수신 윈도우 및 혼잡 윈도우 크기결정 등
- TCP는 혼잡제어를 위해 수신 윈도우(rwnd) 및 혼잡 윈도우(cwnd) 2개의 변수를 관리
이 중 최소가되는 크기를 윈도우 크기로 잡게됨
비 실시간적 응용
- TCP는 데이터의 전달에 대한 보장을 하지만, 전달에 따른 지연에는 취약하므로
실시간적 응용에는 통상 UDP 를 사용
TCP 활용
- 상위 프로토콜 지원 : HTTP, FTP, SMTP 듬
- 응용 지원 : TELNET, rlogin, 웹, 전자우편 등
UDP
1. 신뢰성 없는 프로토콜
2. 비연결 지향
3. 에러 체크기능은 있지만 체크만 하며, 사실은 에러제어 기능이 없는것이다,
4. 소량의 데이터 전송에 적합
5. 1:1 or 1:N의 통신
UDP (User Datagram Protocol)
TCP/IP 프로토콜 群 중 트랜스포트 계층의 통신 프로토콜의 하나 (TCP에 대비됨)
- 신뢰성이 낮은 프로토콜로써, 완전성을 보증하지 않으나,
- 가상회선을 굳이 확립할 필요가 없고, 유연하며 실시간적 응용의 데이타 전송에 적합
UDP 주요 기능 및 특징
비연결성이고, 신뢰성이 없으며, 순서화되지 않은 Datagram 서비스 제공
- (확인응답 없음) 메세지가 제대로 도착했는지 확인하지 않음
- (순서제어 없음) 수신된 메세지의 순서를 맞추지 않음
TCP 헤더와 달리 순서번호 필드 없음
- (흐름제어 없음) 흐름 제어를 위한 피드백을 제공하지 않음
- (오류제어 거의 없음) 검사합을 제외한 특별한 오류 검출 및 제어 없음
UDP를 사용하는 프로그램 쪽에서 오류제어 기능을 스스로 갖추어야 함
- (비연결성) 논리적인 가상회선 연결이 필요없음 (No Handshaking)
데이터그램 지향의 전송계층용 프로토콜
실시간 응용 및 멀티캐스팅 가능
- (실시간용) 빠른 요청과 응답이 필요한 실시간 응용에 적합
- (1:다) 여러 다수 지점에 전송 가능 (즉, Multicasting 가능)
- (무제한) 전송속도 제한 없음
헤더가 단순함
- 헤더는 고정크기의 8 바이트(TCP는 20 바이트) 만 사용
즉, 헤더 처리에 많은 시간과 노력을 요하지 않음
UDP 위에서 동작되는 다양한 프로토콜들 또는 응용분야
- TFTP, SNMP, DHCP, NFS, DNS, RIP, NTP, RTP 등
데이터 전송 단위 : 메세지
- 한편, TCP의 데이터 전송 단위는 세그먼트라 함
최대 데이터 크기
- 65,507 바이트 = 65,535 바이트 - UDP 헤더 8 바이트 - IP 헤더 20 바이트
4. TCP 3Way Handshake, TCP 4way Handshake의 과정 및 차이점
TCP 연결 3way handshaking
TCP는 안정적이고 연결지향적인 트랜스포트 계층용 프로토콜로써,
연결 세션 설정을 위해 3단계의 핸드세이킹 과정을 밟음
TCP의 3-way Handshaking 흐름도
TCP의 3-way Handshaking의 각 단계
세그먼트 1 (SYN 세그먼트) : 연결 요청 (`초기 동기화 패킷` 라고도 불리움)
- TCP 제어 플래그 : 클라이언트가 SYN 플래그 = 1로 설정
- TCP 헤더 필드
순서번호 = ISN (클라이언트측)
(확인응답 번호,윈도우 크기 필드는 미정의됨)
- "데이터 미 전송" 일때 "하나의 순서번호"를 소비합니다.
- TCP 옵션 : MSS 포함시킴
- TCP 상태 천이 : 클라이언트는 `SYN-SENT` TCP상태로 전이
세그먼트 2 (SYN+ACK 세그먼트) : 연결 허락
- TCP 제어 플래그 : SYN 플래그 = 1 및 ACK 플래그 = 1로 설정
- TCP 헤더 필드
순서번호 = ISN (서버측),
확인응답 번호 = (수신된 순서번호 + 1)
클라이언트로부터 수신을 기대하는 다음 순서번호를 확인응답/승인하며 전송
(윈도우 크기 필드는 정의됨)
- "데이터 미 전송" 일때 "하나의 순서번호"를 소비합니다.
- TCP 옵션 : MSS 포함시킴
- TCP 상태 천이 : 서버는 `LISTEN` → `SYN-RECEIVED` TCP상태로 전이
이를 절반 개방(Half Open)이라고도 함
세그먼트 3 (ACK 세그먼트) : 연결 설정
- 단순히 ACK 전송 만을 위함
- TCP 제어 플래그 : 클라이언트가 ACK 플래그 = 1로 설정
이때, 회선 설정이 이미 이뤄진 상태이므로 굳이 SYN 플래그를 설정 안해도 됨
- TCP 헤더 필드
승인번호 = (수신된 순서번호 + 1),
확인응답 번호 : (SYN+ACK 세그먼트)의 확인응답 번호를 그대로 복사 사용
- 일반적으로, 데이터 미 전송하며, 어떠한 순서번호도 소비하지 않음
- TCP 옵션 : 통상, 이 세그먼트에서는 비어 있게 됨
- TCP 상태 천이 : 양단 모두 `ESTABLISHED` TCP상태로 들어감
('SYN-SENT' → 'ESTABLISHED' 및 'SYN-RECEIVED' → 'ESTABLISHED')
※ 여기서, 초기 순서번호(ISN) 이란?
- 랜덤 수를 선택한 후 상대에게 전송
순서번호 초기화 직후 상대와의 순서번호 동기화 목적
- TCP는 양방향이므로 각 방향 마다 다른 ISN 번호가 사용됨
TCP의 3-way Handshaking의 주요 목적 둘
연결이 시작됨과 옵션이 교환됐음을 알림
ISN(랜덤한 초기 순서번호)를 생성하고 교환했음을 알림
TCP 연결과정에서 교환되는 주요 정보(유형) 셋
ISN (초기 순서번호)
- 연결된 두 장비 간에 각 방향 마다 초기 순서번호를 서로 교환함
수신 기본 윈도우 크기 (rwnd)
옵션 정보
- MSS 옵션
- 추가 윈도우 크기 스케일 옵션
- SACK 옵션 허용
- SACK 옵션 데이터 등
TCP 4way handshaking
TCP 연결종료
TCP는 안정적이고 연결지향적인 트랜스포트 계층용 프로토콜로써,
- 3단계 핸드세이킹 과정을 밟고 회선을 개설한 후, (ESTABLISHED)
- 해당 세션에서 데이터 전송을 완료한 후,
- 보통, 4번(3번도 가능)의 패킷 교환으로 회선 연결을 정상적으로 끊게됨
TCP 연결종료 특징
TCP 연결 종료는, TCP 연결 설정 보다는 복잡
- 여러 종료 상황이 있을 수 있음
- 한 방향 연결이 종료되어도, 다른 방향은 계속 오픈 상태일 수 있는 등
정상 종료인 경우에, TCP 연결 종료는, 양방향 2개 연결을 각 측이 독립적으로 닫게 됨
- 'FIN 및 그에대한 FIN-ACK'의 2 쌍(4개 세그먼트)으로써,
- 4-way 핸드세이크로써 종료함
TCP 연결 종료 구분
정상 종료 (Normal Close)
- '4단계 핸드세이킹'에 의해 양방향 모두 종료되는 것
실제로는 자주 있는 경우가 아니고 반 종료 등이 오히려 일상적임
반 종료 (Half Close)
- 양측이 동시에 회선 종료 않고, 한쪽 연결이 열린채로 놔두고 종료하는 것
즉, 송신은 가능하지만 수신은 불가능 또는 수신은 가능하지만 송신은 불가능
동시 종료 (Simultaneous Close)
- 거의 동시에 양측에서 FIN 세그먼트를 보내는 경우
강제 종료
- TCP Reset 요구(RESET 세그먼트) 기능
TCP의 4-way Handshaking 흐름도
FIN 세그먼트 : (클라이언트측의 연결 종료 요청) (능동 종료 요청측에서 발송)
- TCP 제어 플래그 : FIN 제어 비트 => '1'
- 순서번호 : 'K' (연결된 상태에서 마지막 순서번호 보다 하나 높은 값 임)
- 확인응답 번호 : '-'
ACK 세그먼트 : (연결 종료 요청에 대한 서버측의 응답)
- TCP 제어 플래그 : FIN 제어 비트 => '1', ACK 제어 비트 => '1'
- 순서번호 : 'L'
- 확인응답 번호 : 'K+1' (이전 FIN 세그먼트의 순서번호 보다 하나 높은 값임)
FIN+ACK 세그먼트 : (서버측의 종료 알림)
- TCP 제어 플래그 : FIN 제어 비트 => '1', ACK 제어 비트 => '1'
- 순서번호 : 'L'
- 확인응답 번호 : 'K+1'
ACK 세그먼트 : (클라이언트측의 최종 종료 알림)
- TCP 제어 플래그 : ACK 제어 비트 => '1'
- 순서번호 : 'K'
- 확인응답 번호 : 'L+1'
5. URL과 URI의 차이점
URL (Uniform Resource Locator)
인터넷에 존재하는 자원의 위치와 그 접근방법을 지정하기위한 것
- 주로, 특정 웹서버 내 경로상의 파일 등
일반화된 표현으로 URI(Uniform Resource Identifier) 있으나,
- 보통, URI 및 URL 을 거의 같은 뜻으로 혼용
URL 형식
프로토콜://호스트명[:포트번호]/[경로][;인자][?질의문자]
- 프로토콜(Protocol) : URI Scheme 이라고 하며, 접근 프로토콜을 지시함
http, https, file, mailto, ftp 등
- 콜론(:) : 2개를 묶은 쌍(pair)에서 좌우 구분을 위한 구분자
- 대쉬(//) : 어떤 시작을 알리는 것
- 호스트명 또는 호스트이름(Host Name) www.ktword.co.kr 등
호스트명 또는 FQDN 또는 IP주소
- 포트 번호(Port Number) 80, 8080 등
포트 번호가 생략되면, 프로토콜별 기본 포트번호(Well Known Port)를 사용함
- 경로(Path) /test/ 등
- 질의문자(Query) id=10&no=10 등
검색 용어 등을 지정하는데 쓰임
- 프래그먼트 or 태그(#) : 웹페이지 내 특정 링크의 앵커를 지정하는데 사용
표준
- RFC 1738 (RFC 4248, RFC 4266) : "Uniform Resource Locators (URL)"
- RFC 1808 (RFC 2368, RFC 2396, RFC 3986) : "Relative URL"
URI (Uniform Resource Identifier)
인터넷 서비스(웹 서비스 등)를 전제로 하여,
- 인터넷 응용 정보자원(텍스트,비디오,음향,이미지,기타 서비스 등)에 대한,
- 통일적 식별체계를 지칭하는 개념적 용어
표준 : RFC 3986 : "Uniform Resource Identifier (URI): Generic Syntax"
- (2732, 2396, 1808들의 대체)
URI 하위 종류
URL (Uniform Resource Locator) : 특정 자원이 있는 장소에 대한 경로(주소)
- 인터넷 콘텐츠에 대한 프로토콜/서비스/접근방법/경로 등 자원의 위치를 나타냄
. 지리적 위치에 무관하게 특정 호스트 내 자원의 위치를 지칭함
URN (Uniform Resource Name) : 특정 자원에 대한 이름 그 자체
- 인터넷 도메인명과는 독립적으로 특정 콘텐츠에 대한 고유 식별(ID)
특정 이름, 네임스페이스, 도서번호인 ISBN 등
URC (Uniform Resource Charcteristic) : 특정 자원에 대한 특성 정보
- 특정 콘텐츠의 저자,제목 등의 특성 정보
URI 또는 URL 구문
구문 => URI스킴://사용자이름:암호@호스트명:포트번호/경로?쿼리#URI프래그먼트
- 참고적으로,
. '콜론(:)'은 2개를 묶은 쌍(pair)에서 좌우 구분을 위한 구분자 임
. '대쉬(//)'는 어떤 시작을 알리는 것
. 원칙적으로 URI 길이 제한 없으나, 구현상 2천자 등의 상한선은 있음
URI Scheme (스킴)
- 접근 프로토콜을 가리킴
URI 표기에서, URI 시작부터 콜론(:) 직전까지의 표현
HTTP => http://www.ktword.co.kr
HTTPS => https://www.example.com
FTP => ftp://file.fileserver.com/entries/01
이메일 => mailto:사용자이름@호스트명?Subject=Feedback
SIP => sip:사용자이름:암호@호스트명;uri-parameters
전화 => tel:1234;phone-context=servername.example.com
호스트명(Hostname)
- 인터넷 상에서 유일(唯一)한 식별
- 여기서, 호스트명은, FQDN 또는 IP 주소 형태 모두 가능
- 'www.ktword.co.kr', 'file.fileserver.com', '192.168.xxx.xxx' 등
경로(path)
- 위에서, 호스트명 직후에 있는 `/entries/01`
절대 URI, 상대 URI, 기준 URI
절대(Absolute) URI : 모든 전체 경로를 다 기술한 URI 표현 (길이가 매우 클 수 있음)
상대(Relative) URI : 전체 경로 중 기준 URI로부터 상대적 경로 표현
기준(Base) URI : 보통, HTML 문서 내 'Head 요소' 안에 'Base 요소'에 표시
URI 변화방향
단순히, 정적인 자원의 위치나 식별을 나타내는 수준에서,
- 점차적으로, 동적 자원이나 서비스 결합 등을 고려하며 확대 중
문자체계의 변화 : (국제화)
- 문자체계가 과거 US - ASCII코드에서, 유니코드(Unicode)를 적용하는 국제화된 URI로 확장하며,
- 국제화된 표준인 IRI(Internationalized Resource Identifier) 도모
- (URI %인코딩 방식) `나` => UTF-8 인코딩 `%EB%82%98` (동양권 문자 3 바이트)