TCP and UDP
2023. 6. 13. 13:48ㆍ보안관제
개요
- TCP
- 양종단 호스트 내 프로세스 상호 간에 신뢰성 + 연결지향성 서비스를 제공.
- UDP
- 신뢰성이 낮고, 완전성 보증x, 가상회선을 굳이 확립할 필요x, 유연 + 실시간 데이터 전송에 적합
구조(TCP)
- Source Port, Destination Port
- 양쪽 호스트 내 종단 프로세스를 식별
- 소켓 주소 (Socket Address): 프로세스 식별에 쓰이는 주소
- IP Address 및 Port Number 를 조합한 것. 즉, Socket address = IP Address + Port Number
- 포트 번호 길이
- 포트의 식별을 위한 포트 번호(Port Address)는 16 비트 길이
- 이론상 2^16 = 65,536(0~65,535)개의 서로 다른 TCP 또는 UDP 연결이 가능함
- 양쪽 호스트 내 종단 프로세스를 식별
- Sequence Number
- 바이트 단위로 구분되어 순서화되는 번호(1Byte = 8Bit)
- 이를 통해 TCP에서 신뢰성 및 흐름제어 기능 제공
- 수신 측에서 올바른 순서로 데이터를 재조합 할 수 있도록 도움.
- 순서 가능 범위
- 시작 : 임의 값 ~ 최대값(2^32 - 1 = 4,294,967,295)까지, 이후: `0`으로되어 시작함
- 최대 : 32 비트이므로 최대 4바이트(2^32) 크기(0 ~ 4,294,967,295)
- 초기 순서 번호
- 초기 TCP 연결설정을 위함.(3way - handshaking)
- 난수 발생기로 초기 순서번호(ISN)를 생성하고, 이를 순서번호 필드에 넣어 송신
- TCP는 양방향이므로 각 방향 마다 다른 ISN 번호가 사용됨
- 시작 : 임의 값 ~ 최대값(2^32 - 1 = 4,294,967,295)까지, 이후: `0`으로되어 시작함
- Acknowledgement Number
- 송신 메세지가 정상 수신되었음을, 수신측에서 송신측으로 확인응답하는 것
- 수신하기를 기대하는 다음 바이트 번호 = 마지막 수신 성공 순서 번호 + 1
- 6 control flag에서 ACK = 1
- Header Length Feild
- 헤더 길이를 4바이트(32비트) 단위로 표시
- TCP 헤더 길이는 20 Byte ~ 60 Byte
- 옵션까지 포함했을 시 최대 60Byte
- TCP Header Option
- TCP 연결 관리 기능을 확장시키는데 주로 사용되는 옵션 필드
- 6 Control Flag
- TCP 세그먼트 전달과 관련되어 TCP 회선 및 데이터 관리 제어 기능을 하는 플래그
- SYN: Synchronize: 세션 연결을 시작하는 플래그
- ACK: Acknowledgement: 송신측으로부터 온 패킷을 잘 받았다고 응답하는 플래그
- FIN: Finish: 더 이상 전달할 데이터가 없고, 세션 연결 해제를 원하는 플래그
- RST: Reset: 연결 확립된 회선을 끊고, 초기화하는 플래그
- PSH: Push: 수신 버퍼가 다 채워지기 전에 받은 즉시 전달하는 플래그
- URG: Urgent: 순서 상관없이 바로 송신, Urgent Pointer가 가리키는 곳까지 응용프로그램쪽으로 전달해달라는 플래그
- TCP 세그먼트 전달과 관련되어 TCP 회선 및 데이터 관리 제어 기능을 하는 플래그
- Ckecksum
- 에러 체크 비트
- 판단 방법: 수신자에서 구한 체크섬 값과 송신측에서 보낸 체크섬 값을 더했을 때 모두 1이면 정상, 아니면 비정상
- Urgent Pointer
- TCP 세그먼트에 포함된 긴급 데이터의 마지막 바이트에 대한 일련번호
- 현재 일련번호(sequence number)로부터 긴급 데이터까지의 바이트 오프셋(offset)
- 해당 세그먼트의 일련번호에 urgent point 값을 더해 긴급 데이터의 끝을 알 수 있음
구조(UDP)
- Header size = 8Byte
- 16비트 길이의 포트 번호
- 체크섬: 선택항목
- 체크섬 값이 0이면, 수신측은 계산x
특징(TCP)
- 신뢰성
- 패킷 손실, 중복, 순서바뀜 등이 없도록 보장
- 패킷 손실 및 중복: 재전송하여 손실된 패킷 보장
- 순서 바뀜: 순서 번호를 통해 수신측에서 순서에 맞게 재조립, 확인 응답 번호를 통해 실제 수신 여부 확인 및 그 다음 보낼 순서 번호를 알려줌
- 패킷 손실, 중복, 순서바뀜 등이 없도록 보장
- 연결지향적
- 종단 호스트 내 프로세스 간에만 존재하는 연결: 세션 유지
- TCP 연결의 설정 및 해제
- 연결설정 ☞ TCP 3-way Handshaking
- 연결해제 ☞ TCP 4-way Handshaking
- 3way - handshaking
- 데이터 전송 전, 신뢰성있는 통신을 보장하기 위해 송 수신자간애 세션을 수립해나가는 과정
- 세그먼트 1 (SYN 세그먼트) : 연결 요청 (`초기 동기화 패킷` 라고도 불리움)
- TCP 제어 플래그 : SYN = 1로 설정
- TCP 상태: 클라이언트는 `SYN-SENT` TCP상태로 전이
- 세그먼트 2 (SYN+ACK 세그먼트) : 연결 허락
- TCP 제어 플래그 : SYN = 1, ACK = 1로 설정
- TCP 상태: 서버는 `LISTEN` → `SYN-RECEIVED` TCP상태로 전이, 이를 Half Open 이라고도 함
- 세그먼트 3 (ACK 세그먼트) : 연결 설정
- 단순히 ACK 전송 만을 위함
- TCP 상태: 양단 모두 `ESTABLISHED` TCP상태로 들어감
- (C: SYN-SENT` → `ESTABLISHED`, S: `SYN-RECEIVED` → `ESTABLISHED`)
- (C: SYN-SENT` → `ESTABLISHED`, S: `SYN-RECEIVED` → `ESTABLISHED`)
- 4way - handshaking
- 3way - handshaking에서 수립한 세션을 해제하기 위한 절차
- 연결 종료 순서
- FIN 세그먼트: 클라이언트측의 연결 종료 요청
- TCP 제어 플래그 : FIN: 1 - ACK 세그먼트: 연결 종료 요청에 대한 서버측의 응답
- TCP 제어 플래그 : ACK: 1 - FIN+ACK 세그먼트 : 서버측의 종료 알림
- TCP 제어 플래그 : FIN: 1, ACK: 1 - ACK 세그먼트: 클라이언트측의 최종 종료 알림
- FIN 세그먼트: 클라이언트측의 연결 종료 요청
- Flow Control
- 송신(송신전송률) 및 수신(수신처리율) 속도를 일치시키는 것: 종단간 윈도우 크기내에서 제어
- `순서번호`,`확인응답번호`,`수신윈도우 크기`라는 3개 변수로 흐름제어
- 주로 슬라이딩 윈도우 방식, 즉 연속적 ARQ 방식 채택을 사용함
- 송수신간에 버퍼 크기를 공유하고, 수신자의 버퍼 크기에 맞게 송신자도 보낼 패킷 버퍼 크기를 설정함
- 송신자는 버퍼 안 패킷을 수신자의 확인을 받지 않고, 지속적으로 전송
- 수신 확인 받으면, 보낸 데이터 만큼 다시 버퍼에 보낼 데이터를 넣음
- Stop and wait 방식도 있는데 거의 안 씀.
- 매번 전송한 패킷의 응답 번호를 받아야 다음 패킷을 전송하는 방식
- 송신(송신전송률) 및 수신(수신처리율) 속도를 일치시키는 것: 종단간 윈도우 크기내에서 제어
- Congestion Control
- 정의: 망혼잡시 전송량을 줄이고 망 정상시 다시 전송량을 늘리도록 하여 송신자와 네트워크 망 간에 속도 차이 제어
- 혼잡제어 방식
- 느린시작 (Slow Start) : 혼잡 예상 초기에 윈도우 크기 작게 시작 > 곱 증가: 1 2 4 8… > 혼잡 감지시 1로
- AIMD: 윈도우 크기 가산적 증가, 혼잡 감지시 절반
- 빠른 재전송: 수신측에서 손실 패킷 있을 시 중복 ACK 3개 패킷을 보내면, 송신측은 손실된 패킷을 다시 보내며, 윈도우 크기 줄이는 방식
- 빠른 회복 (Fast Recovery: ): 빠른 회복은 혼잡한 상태가 되면 윈도우 크기를 1로 줄이지 않고 반으로 줄이고 선형증가시키는 방법, 이 방법을 적용하면 혼잡 상황을 한번 겪고 나서부터는 AIMD 방식으로 동작
특징(UDP)
- 비연결성이고, 신뢰성이 없으며, 순서화되지 않은 Datagram 서비스 제공
- (확인응답 없음) 메세지가 제대로 도착했는지 확인하지 않음
- (순서제어 없음) 수신된 메세지의 순서를 맞추지 않음
- TCP 헤더와 달리 순서번호 필드 없음
- (흐름제어 없음) 흐름 제어를 위한 피드백을 제공하지 않음
- (오류제어 없음) 검사합을 제외한 특별한 오류 검출 및 제어 없음
- UDP를 사용하는 프로그램 쪽에서 오류제어 기능을 스스로 갖추어야 함
- (비연결성) 논리적인 가상회선 연결이 필요없음 (No Handshaking)
- 실시간 응용 및 멀티캐스팅 가능
- (실시간용) 빠른 요청과 응답이 필요한 실시간 응용에 적합
- (1:多) 여러 다수 지점에 전송 가능 (즉, Multicasting 가능)
- (무제한) 전송속도 제한 없음
- 데이터 전송 단위 : 데이터그램
- 한편, TCP의 데이터 전송 단위는 세그먼트라 함
- 최대 데이터 크기
- 65,507 바이트 = 65,535 바이트 - UDP 헤더 8 바이트 - IP 헤더 20 바이트
'보안관제' 카테고리의 다른 글
FW, IDS, IPS and DDoS 장비 (0) | 2023.07.26 |
---|---|
계층별 프로토콜 - 2 (0) | 2023.07.02 |
계층별 프로토콜 - 1 (0) | 2023.06.26 |
OSI 계층별 장비 (0) | 2023.06.17 |
OSI 7 Layer (0) | 2023.06.05 |