[UDP]
1. UDP에 대해 설명해주세요.
TCP와 달리 UDP는 연결 지향형이 아니고,
신뢰적인 데이터 전송을 보장하지 않습니다.
단지 체크섬을 통해 수신된 패킷의 오류 여부 정도만을 알 수 있습니다.
UDP는 TCP에 비해 기능이 별로 없기 때문에 적은 오버헤드로 빠른 전송이 가능 합니다.
따라서 일정 전송 요구량이 있고,
조금의 데이터 손실을 허용하는 스트링 애플리케이션에 어울립니다.
"UDP는 User Datagram Protocol의 약자로, TCP와 함께 네트워크 통신에 사용되는 프로토콜 중 하나입니다. TCP와 달리 연결 설정이 없어 빠른 데이터 전송이 가능하지만, 데이터 손실이나 중복 전송에 대한 보장이 없습니다. 주로 음성 및 영상 스트리밍, 온라인 게임, DNS와 같은 실시간 통신이 필요한 상황에서 사용됩니다."
응용 프로세스로부터 데이터가 송신 소켓에 전달되면,
송신 UDP는 해당 데이터를 포함하는 UDP Datagram 생성.
각 UDP Datagram은 IP를 통해 독립적으로 목적지 UDP 소켓에 전송
2. UDP의 장단점을 설명해 주세요.
장점
- 비연결형 서비스이므로 TCP에 비해 속도가 빠르며 네트워크 부하가 적습니다.
- 1:1, 1:N, N:N 통신이 가능합니다.
단점
- 데이터의 신뢰성이 없습니다.
"UDP의 장점은 연결 설정이 없고, 헤더 크기가 작고 단순해서 데이터를 빠르게 송수신할 수 있습니다.
단점으로는 데이터 손실이나 중복 전송에 대한 보장이 없어, 데이터의 정확성을 요구하는 경우에는 부적합할 수 있습니다.
또한 흐름 제어나, 혼잡 제어 기능이 없어 네트워크 상황에 따른 동적인 대처가 어렵습니다.
그리고 전송된 데이터의 순서를 보장하지 않는다는 단점이 있습니다.
3. UDP 체크섬에 대해 설명해주세요.
UDP 체크섬은 UDP 세그먼트의 오류 검출을 위해 사용되는 것 입니다.
체크섬은 송신할 세그먼트를 16비트 단위로 나누고,
모두 더한 다음 1의 보수를 취해서 만들어 집니다.
이제 이 체크섬을 세그먼트와 같이 전송 합니다.
수신자는 수신된 세그먼트에 대해 동일한 방식으로 체크섬을 만들고
헤더의 체크섬과 일치하는지 비교함으로써
수신된 세그먼트의 오류를 검출할 수 있습니다.
"UDP 체크섬(UDP checksum)은 UDP 헤더와 데이터에 대한 오류를 검출하기 위한 값으로 사용됩니다. 이 값은 UDP 패킷의 무결성을 확인하고 데이터 전송 중 발생할 수 있는 오류를 최소화하는 데 도움을 줍니다."
[장점]
- 높은 오류 검출 능력
- 단순함
[단점]
- 각 데이터 단위에서 발생하는 오류의 합이 0이 되는 오류 검출 불가
- checksum을 변경하지 않는 오류 검출 불가
[동작 방식]
- 송신자.
1) 송신하는 메시지를 정해진 길이의 데이터 단위로 나눈다.
2) 모든 데이터 단위를 '1의 보수 연산'으로 더한 결과 sum을 구한다.
3) sum의 1의 보수인 checksum을 생성하고, checksum을 추가하여 메시지를 전송한다.
- 수신자.
1) 수신된 메시지를 정해진 길이의 데이터 단위로 나눈다. (checksum 포함)
2) 모든 데이터 단위를 '1의 보수 연산'으로 더한 결과 sum을 구한다.
3) sum이 0이면 성공적인 수신, 아니면 오류를 발생시킨다.
[신뢰적 데이터 전송의 원리]
1. 전송 후 대기 프로토콜이 뭘까요?
전송 후 대기 프로토콜은 패킷을 전송하고 그 패킷에 대한 수신 확인 응답을 받고나서, 다음 패킷을 전송하는 방식입니다.
이러한 방식은 네트워크 링크 이용률이 낮아 속도가 느리다는 단점이 있습니다.
"전송 후 대기 프로토콜(Stop-and-Wait)은 송신자가 데이터를 전송한 후 수신자로부터 확인(ACK)을 받을 때까지 대기하는 방식의 프로토콜을 말합니다. 대표적으로 ARQ(Automatic Repeat Request), ARQ with SN이 있습니다."
1) ARQ
문제점
- ACK 세그먼트에 오류 발생 시 중복 전송
- 수신자 중복 세그먼트 구분 불가
2) ARQ with SN
개념
- 각 세그먼트에 순서 번호 부여
- 송신 SN : 현재 송신 세그먼트 번호
- 수신 SN : 다음 송신 세그먼트 번호 (송신 SN + 1)
문제점
- ACK가 도착할 때까지 전송 대기
- 대기 시간 동안 링크 미사용 → 링크 사용률 저하
2. 파이프라인 프로토콜이 뭘까요?
파이프라이닝 프로토콜은 전송한 패킷에 대한 수신 확인 응답을 받지 않고도,
여러 개의 패킷을 연속으로 전송하여 링크 이용률과 전송 속도를 높이는 프로토콜 입니다.
"파이프라인(Pipeline) 프로토콜은 송신자가 데이터를 전송한 후 수신자로부터 확인(ACK)을 받기 전 RTT(Roud Trip Time)동안 링크에 N개의 세그먼트를 전송하는 프로토콜을 말합니다. 이는 Stop-and-Wait 에서의 링크 효율을 높이기 위해 사용되었습니다.
대표적으로 Go-back-N ARQ, Selective-Repeat ARQ가 있습니다."
1) Go-back-N ARQ
개념
- 오류 세그먼트 이후의 모든 세그먼트 재전송
동작 방식
1) RTT 동안 링크에 최대 M개의 세그먼트를 전송하고 버퍼에 유지 (송신 윈도우 = M)
2) ACK 수신하면 해당 세그먼트(첫번째 세그먼트)를 버퍼에서 제거하고,
송신 가능 순서번호 범위를 1씩 이동 (송신 윈도우 슬라이딩)
3) 세그먼트 재전송 타이머가 종료될 때까지 ACK가 수신되지 않으면
해당 세그먼트부터 송신 윈도우의 모든 세그먼트 재전송
문제점
- 오류 세그먼트 이후 도착한 정상 세그먼트 재전송
→ 불필요한 재전송 증가
→ 링크 효율 저하
2) Selective-Repeat ARQ
개념
- 오류 세그먼트만 재전송
동작 방식
1) RTT 동안 링크에 송신 윈도우 크기인 S개의 세그먼트를 전송한다.
2) 누적 ACK 수신하면 송신 윈도우를 누적 ACK 수만큼 이동한다.
3) 비누적 ACK 수신하면 해당 세그먼트의 ACK 수신 사실을 기록한다.
4) 재전송 타이머가 종료될 때까지 ACK가 수신되지 않으면 해당 세그먼트를 재전송한다.
[TCP]
1. TCP에 대해 설명해주세요.
"TCP는 Transmission Control Protocol의 약자로, 안정적이고 신뢰성 있는 데이터 전송을 위한 프로토콜입니다. 연결을 설정하고 유지하며, 흐름 제어, 혼잡 제어, 순서 보장 등의 기능을 통해 데이터 통신을 효과적으로 관리합니다."
2. 3 way handshake에 대해 설명해주세요.
"3-way handshake는 TCP 연결 설정의 과정으로, 먼저 송신자가 SYN 패킷을 전송하면, 수신자가 이를 받아들여 SYN-ACK 패킷을 보내고, 송신자가 다시 ACK 패킷을 전송함으로써 안정적인 연결이 확립됩니다."
클라이언트와 서버 간에 동기(synchronization)를 맞추는 과정
동기 정보 : 소켓 주소 / 시작 순서 번호 / 수신 윈도우 크기
3. 4 way handshake에 대해 설명해주세요.
"4-way handshake는 TCP 연결 종료의 과정으로, 먼저 송신자가 FIN 패킷을 보내고 수신자가 이에 대해 ACK 패킷을 응답합니다.
그 후에 수신자가 FIN 패킷을 송신자에게 보내고, 송신자는 이에 대해 ACK 패킷을 응답함으로써 연결이 완전히 종료됩니다."
+ plus.
Full Close (3 way handshake)
- 전체 연결을 종료하는 상황
Half Close (4 way handshake)
- 한 쪽에서만 데이터 전송(연결)을 종료하는 상황으로 다른 한 쪽에서는 계속 데이터를 수신할 수 있습니다.
- 필요한 이유
- 클라이언트(A), 서버(B)가 있다.
A는 데이터를 송신하고 B는 수신하는 입장이다.
B는 A가 데이터를 다 전송할 때까지, 소켓을 계속 열고 있는 상태여야 한다.
B가 소켓을 계속 열고 있는 상태가 된다면 블로킹이 발생할 수도 있기 때문에, A에서 송신의 끝(EOF)을 알려주어야 한다.
close()로 스트림을 종료할 경우, B는 A가 전송하는 데이터를 모두 수신하지 못할 수도 있기 때문에
입력 스트림만 종료하여 Half-close를 해야한다.
출처
- https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=sdug12051205&logNo=221053748674
4. TCP 빠른 재전송에 대해서 설명해주세요.
"TCP 빠른 재전송은 3개 이상의 중복된 ACK을 기반으로 패킷 손실을 빠르게 감지하고, (Timeout과 무관하게 누적 수신확인 다음 세그먼트를) 재전송하여 효율적인 데이터 전송을 지원하는 기술입니다. 이를 통해 패킷 손실에 따른 대기 시간을 최소화하고 데이터 전송의 효율성을 높입니다."
순서가 바뀐 세그먼트 도착- 1~2개의 중복 ACK 후에 정상 ACK 회신- 연속된 세그먼트의 도착 시간에 큰 차이가 없음그러나 3개 이상의 중복 ACK가 발생하면 순서 문제가 아닌, 세그먼트 손실이라고 판단한다.
5. Congestion control에 대해 설명해주세요.
"혼잡 제어는 네트워크에서 발생할 수 있는 혼잡을 방지하고 관리하는 기술입니다.
이는 흐름 제어, 혼잡 윈도우, 그리고 혼잡 제어 알고리즘을 통해 네트워크 대역폭을 효과적으로 활용하고 패킷 손실을 최소화합니다."
1) 네트워크 혼잡
: 트래픽의 증가로 인해 router / switch 버퍼의 큐잉 지연시간 증가 및 오버플로우 발생
2) 혼잡 인식
경미한 혼잡 제어
- 중복 ACK 발생 → 빠른 재전송
심각한 혼잡 제어
- Timeout 발생
3) 혼잡 제어 기법
[1] 슬로우 스타트
- 연결 시작 or 혼잡 발생시에 혼잡 윈도우를 최소값(ex. 1)부터 전송률을 낮게 시작
- ACK가 수신될 때마다 혼잡 윈도우 + 1
- RTT마다 혼잡 윈도우 * 2
[2] 혼잡 회피
- 연결 시작 구간에는 슬로우 스타트
- 혼잡 윈도우가 설정한 임계치에 도달하면, 선형적으로 증가하도록 조정하는 알고리즘
- ACK가 수신될 때마다 혼잡 윈도우 + 1
- RTT마다 혼잡 윈도우 + 1
[3] 빠른 복구
- 3개의 중복 ACK에 의한 빠른 재전송 시에 적용
- 정상 ACK가 수신되어 오류 복구가 완료되면 혼잡 회피 단계로 진입
알고리즘
1) 임계치를 현재 혼잡 윈도우의 1/2 설정
2) 손실된 세그먼트 재전송
3) 혼잡 윈도우를 임계치 + 3
4) 여전히 중복 ACK를 수신하면, cwnd += 1
5) 정상 ACK 수신하면, 혼잡 회피 단계로 진입
4) 혼잡 제어 알고리즘
[1] TCP Tahoe 버전
1) 임계치를 혼잡 윈도우의 1/2 설정
2) 슬로우 스타트 개시
3) 혼잡 윈도우가 임계치에 도달하거나 넘어가면 혼잡 회피 수행
[2] TCP Reno 버전
1) Timeout 발생 시, Taho 버전과 동일하게 동작
2) 3개 중복 ACK 발생 시, 빠른 회복 알고리즘 적용
6. Flow control에 대해 설명해주세요.
"흐름 제어는 데이터의 흐름을 조절하여 네트워크 혼잡을 방지하고 관리하는 기술입니다.
이는 슬라이딩 윈도우와 피드백 메커니즘을 통해 구현되며, 송신자와 수신자 간의 속도를 조절하여 대역폭을 효과적으로 활용합니다."
정의
: 송신 TCP가 많은 데이터를 한꺼번에 송신함으로써, 수신 TCP의 버퍼가 넘쳐 데이터 손실이 발생하는 문제를 방지하는 매커니즘
방안
: 수신 TCP는 ACK 세그먼트를 통해 자신의 수신 버퍼 내의 여유 공간의 크기(수신 윈도우)를 송신 TCP에게 전송하고,
송신 TCP는 전송된 여유 공간의 크기보다 적은 양의 데이터를 송신한다.
수신윈도우 0
: 수신 TCP는 송신 TCP로 전송할 확인 세그먼트가 없어 수신 윈도우 변화를 전송하지 못함.
→ Deadlock 상태 진입
Probe 세그먼트
- 수신 윈도우가 0일 때 송신 TCP가 수신 TCP에게 주기적으로 전송하는 1 byte 세그먼트
'CS > 네트워크' 카테고리의 다른 글
5주차. 네트워크 레이어 (0) | 2024.02.13 |
---|---|
3주차. 애플리케이션 레이어 (0) | 2024.01.21 |
2주차. 애플리케이션 레이어 HTTP, HTTPS, DNS (0) | 2024.01.17 |
1주차. 컴퓨터 네트워크와 네트워크 레이어 (0) | 2024.01.11 |