728x90
# TCP 헤더
크기
- 기본 : 20byte == 160 bits
- Option field 미 사용
- 최대 : 60byte == 480bits
- Option field 전체 사용
# 구성 요소
1. Source Port / Destination Port
- 크기 : 2byte == 16bits
- 출발지와 목적지를 나타내는 포트
- TCP헤더에는 IP주소를 나타내는 필드가 아니라 포트를 나타내는 필드가 존재.
- IP주소는 한 계층 밑에 있는 IP헤더에 담김
2. Sequence Number
- 크기 : 4byte == 32bits
- 전송하는 데이터의 순서
- 최대 표현 순서 : 4,294,967,296
-> 중복 염려 x - 수신자는 쪼개진 세그먼트의 순서를 파악하여 올바른 순서로 데이터를 재조립 할 수 있게 된다.
- 적용
- 최초 전송 시 seq num을 랜덤한 수로 초기화
- 자신이 보낼 데이터릐 1byte당 시퀀스 번호를 1씩 증가하며 데이터 순서 표현.
- 최대 표현 수를 넘어 갈 경우 0부터 다시 시작.
3. Acknowledgement Number
- 크기 : 4byte == 32bits
- 적용
- 연결 설정/ 연결 해제 : 상대방이 보낸 시퀀스 번호 +1 로 자신의 승인 번호를 만들어 냄 .
- 데이터 전달 : 상대방이 보낸 시퀀스 번호 + 자신이 받은 데이터의 byte로 승인 번호를 만들어 냄
4. Data Offset
- 크기 : 4 bits
- 세그멘트 중에서 헤더가 아닌 데이터가 시작되는 위치 표시
- 32bits word 단위 사용하여 표기
- 1word == 4 bytes
- 해당 필드의 값에 4를 곱하면 실제 데이터 시작 위치 파악 가능
- 표현 범위
- 4bits => 0~15 words
=> 0~ 60 bytes의 오프셋 표현 가능. - 최소 값 : option 필드 제외 필수 존재 필드
=> 5word == 20 byte
- 4bits => 0~15 words
5. Reserved
- 크기 : 3 bits
- 미래를 위해 예약된 필드.
- 모두 0으로 채워져 있어야 함.
6. Flags
- 크기 : 9bits
- 현재 세그먼트의 속성
종류
URG ; Urgent Pointer
- 긴급 포인터
- urg ==1
=> 해당 세그먼트에 긴급 데이터가 포함되었음을 인지. - Urgent Pointer가 가리키는 긴급한 데이터는 우선적으로 먼저 처리 된다.
ACK; Acknowledgement
- 필드에 값이 채워져있음을 알리는 플래그
- 0 : 승인번호 필드 자체가 무시
PSH; Push
- 수신측에게 해당 데이터를 최대한 빠르게 응용프로그램에 전달해 달라는 플래그
- 0: 수신측은 자신의 버퍼가 다 채워질 때 까지 기다림.
- 1: 세그먼트 이후에 더 이상 연결될 세그먼트가 없음을 의미
RSH; Reset
- 연결 확립(;Established)상태인 상대방에게 연결을 강제로 리셋 해달라는 요청의 의미
SYN; Synchronize
- 상대방과 연결 생성 시 시퀀스 번호의 동기화를 맞추기 위한 세그먼트
FIN; Finish
- 상대방에게 연결 종료 요청
Reserced필드를 사용하여 새롭게 추가 된 세 개의 플래그
명시적 혼잡 통보(Explicit Congestino Notification, ECN)을 위한 플래그
자세히 다루지 않고 의미만 대충 넘어가게따
NS
- ECN에서 사용하는 CWR, ECE필드가 실수나 악의적으로 은폐되는 경우를 방어하기 위함
- RFC 3540에서 추가
CWR
- 이미 ECE플래그를 받아서, 전송하는 세그먼트 윈도우의 크기를 줄였다
ECE
- ECN echo
- ECE==1 && SYN==1 : ECN을 사용하겠다.
- ECE==1 && SYN==0 : 네트워크가 혼잡하니 세그먼트 원도우의 크기를 줄여달라는 요청의 의미
7. Window Size
- 크기 : 2byte == 16bits
- 한 번에 전송할 수 있는 데이터의 양.
- 2^16== 65535 byte 까지 표현 가능
- 윈도우 사이즈 1bit == 데이터 1byte 의미
- 윈도우 최대 크기 == 64KB
- 1KB =1024byte
- +) 대용량 고속 통신 환경
- 비트를 왼쪽으로 시프트 하는 방식-> 윈도우 사이트의 최대 크기를 키움
- Option필드 -> WSCALE 필드 : 몇 번 시프트 할 것인가에 대한 정보 존재
8. Checksum
- 크기 : 2byte==16bits
- 데이터를 송신하는 중에 발생하는 오류를 검출하기 위함.
- 검증 방법 : 추후 기재 예정
9. Urgent Pointer
- 크기 : 2byte == 16bits
- 긴급 포인터
- URG 플래그 == 1 : 수신측은 이 포인터가 가리키고 있는 데이터를 우선 처리
10. Options
- 크기 : 0 byte~40bytes ; 가변적
- TCP의 기능 확장 시 사용
- 데이터 오프셋의 필드 값이 5보다 크나 TCP의 옵션을 하나도 사용하고 있지 않을 경우
=> 초과한 bytes 만큼 필드를 0으로 채워주어야 수신측이 헤더의 크기를 올바르게 측정 가능
참고 URL
https://evan-moon.github.io/2019/11/10/header-of-tcp/
728x90
'😒 저 저 저 개념없는 나 > 🌐 네트워크' 카테고리의 다른 글
[네트워크] TCP Handshake | TIME-WAIT (1) | 2024.11.24 |
---|---|
[네트워크] 프록시 | 로드밸런서 (0) | 2024.11.22 |
[네트워크] SSH (0) | 2024.11.22 |
[네트워크] HTTPS | SSL | TLS (1) | 2024.11.22 |
[네트워크] HTTP | URI | 요청 응답 (0) | 2024.11.21 |