초보 코린이의 성장 일지
컴퓨터 네트워크 4주차 스터디 정리 본문
목차
UDP
UDP
- 비연결 지향 전송 프로토콜로, 데이터를 전송하기 전에 연결 설정 과정이 없으며, 독립적으로 데이터를 전송한다.
- TCP에 비해 단순하고, 오버헤드가 적어 빠른 전송 속도를 제공하지만, 데이터의 신뢰성은 보장하지 않는다.
- 데이터 전송에 대한 보장이 없기 때문에, 데이터가 손실되거나 순서가 바뀌어도 복구하지 않는다.
- 데이터 전송된 순서대로 도착한다는 보장이 없다.
- 수신자의 처리 능력을 고려하지 않고 데이터를 전송한다.
- 네트워크 혼잡을 감지하고 회피하는 기능이 없다.
- 데이터 손실이 일정 허용되는 실시간 스트리밍, 빠른 응답 속도가 중요한 게임에서 UDP를 활용한다.
- 유니캐스팅(1:1), 브로드캐스팅(1:N), 멀티캐스팅(1:다수)
UDP 체크섬
- UDP 헤더와 데이터의 무결성을 검사하기 위해 사용되는 16비트 값, 데이터가 전송 중에 손상되었는지 여부를 확인하는 데 사용
- UDP가 신뢰성을 보장하지 않는 프로토콜이지만, 체크섬을 통해 데이터 전송 중 오류나 데이터 손상 여부를 확인하고 오류가 있는 패킷을 페기함으로써 어느 정도의 데이터 무결성을 유지할 수 있다.
- UDP에서는 체크섬이 선택적 기능으로 IPv4 환경에서는 선택, IPv6 환경에서는 필수로 사용해야 한다.
UDP 체크섬 계산과정 및 검증 과정
계산 과정
- 가상 헤더 생성 : 실제 UDP 패킷에는 포함되지 않지만, 체크섬 계산을 위해 임시로 생성되는 헤더 (송, 수신 IP주소 등)
- UDP 패킷 구성 : UDP 헤더와 데이터를 연결, UDP 헤더에는 송신 포트, 수신 포트, 길이 체크섬 필드 등 포함.
- 체크섬 계산 : 가상 헤더, UDP 헤더, 데이터를 16비트 단위로 더하고, 만약 총길이가 홀수 바이트면, 패딩 바이트(0x00)를 추가하여 짝수 바이트로 만든다.
- 1의 보수 : 최종 덧셈 결과에 대해 1의 보수를 취한다. 즉, 모든 비트를 반전시키고 이 값이 UDP 체크섬 값이 된다. (0은 1로, 1은 0으로 반전)
- 체크섬 삽입 : 계산된 체크섬 값을 UDP 헤더의 체크섬 필드에 삽입한다.
검증 과정
- 수신된 패킷 : UDP 패킷을 수신
- 체크섬 계산 : 송신 측과 동일한 방식으로 가상 헤더, UDP 헤더, 데이터를 사용하여 체크섬을 계산한다.
- 체크섬 비교 : 계산된 체크섬 값을 UDP 헤더의 체크섬 필드 값과 비교한다. 비교한 값이 일치하는 경우 데이터가 손상되지 않았다고 판단하고, 일치하지 않는 경우 데이터가 손상되었다고 판단하여 패킷을 페기 한다.
검증 과정에서에 핵심
- 수신 측은 송신 측에서 보낸 가상 헤더를 받지 않는다. (수신 측 가상헤더를 받아서 사용하는 게 x)
- 수신 측은 자신이 직접 송신 측과 동일한 방식으로 가상 헤더를 생성한다.
- 수신 측은 송신 측과 동일한 데이터 양을 사용하는 것이 아니라, 동일한 방식으로 계산한다.
- 데이터의 내용이 변경되었다면, 의도된 값이 아니므로 체크섬 값은 달라지게 된다.
신뢰적 데이터 전송
전송 후 대기 프로토콜
- 간단한 형태의 데이터 전송 프로토콜로, 송신 측에서 데이터를 전송한 후 수신 측으로부터 확인 응답(ACK)을 받을 때까지 기다리는 방식.
- 응답을 받았다면 다음 데이터를 전송하고, 받지 못했다면 데이터를 재전송한다.
- 구현이 간단하고, 혼잡하게 제어할 필요가 없다.
- 송신 측이 각 패킷을 전송할 때마다 응답을 기다려야 하므로, 네트워크 대역폭을 충분히 활용하지 못해 네트워크 지연 시간이 긴 경우 성능이 저하되고, 재전송으로 인한 오버헤드가 발생할 수 있다.
파이프라인 프로토콜
- 여러 개의 데이터 패킷을 연속적으로 전송하고, 각 패킷에 대한 확인 응답을 개별적으로 기다리지 않고 여러 응답을 묶어서 처리하는 방식
- 전송 후 대기 프로토콜의 비효율성을 개선하기 위한 방법으로, 네트워크 대역폭 활용률을 높이고 전송 속도를 향상시킨다.
- 네트워크 혼잡 방지를 위해 제어 메커니즘이 필요하지만 알고리즘을 사용해 메커니즘을 구현했다면, 네트워크가 혼잡해도 제어할 수 있다.
- 구현이 복잡하고, 패킷 손실 시 재전송 및 순서 재정렬 과정이 복잡해질 수 있다.
SR (Selective Repeat)
- 파이프라이닝 ARQ(Automatic Repeat reQuest) 프로토콜 중 하나이며, GBN 프로토콜의 비효율성을 개선하기 위해 개발되었다. (위성 통신, 무선 통신에 활용)
- 오류가 발생한 패킷만 선택적으로 재전송하여 네트워크 자원 낭비를 줄이고 전송 효율을 높이는데 중점을 둔다.
- 각 패킷에 대한 응답을 개별적으로 처리하고, 송신 측과 수신 측 모두 버퍼(데이터 임시 저장하는 메모리 영역)를 사용하여 전송 및 수신된 패킷을 저장한다.
- 수신 측에서는 패킷의 순서가 잘못된 경우, 우선 버퍼에 저장하고 올바른 순서로 재정렬한다.
- 불필요한 재전송을 줄여 전송 속도를 향상할 수 있고, 오류가 발생한 패킷만 전송하므로 재전송으로 인한 오버헤드를 줄일 수 있다.
- GBN보다 구현이 복잡하고, 송신 측과 수신 측 버퍼를 모두 관리해야 한다.
- 송신 측과 수신 측 모두 버퍼를 사용하여 패킷을 저장하므로, 메모리 요구량이 높고, 순서 재정렬에 알고리즘이 필요하다.
GBN (Go-Back-N)
- 파이프라이닝 ARQ 프로토콜의 한 종류이며, SR 프로토콜보다 구현이 간단하다. (LAN, 음성 통화, 온라인 게임)
- 오류가 발생하면 해당 패킷부터 이후의 모든 패킷을 재전송하는 방식으로 작동한다.
- GBN 프로토콜에서 수신 윈도우 크기는 항상 1이다. 이는 수신자가 항상 순서대로 정확히 하나의 패킷만 수신할 준비가 되어 있다는 걸 의미한다. (송신 윈도우 크기는 1보다 커야 하며, 이는 송신자가 ACK 받기 전에 여러 패킷을 보낼 수 있도록 한다.)
- SR보다 구현이 간단하고, 송신 측은 타이머만 관리하면 되고, 수신 측은 버퍼링 및 순서 재정렬이 필요 없기 때문에 메모리 요구량이 낮다
- 오류가 발생하면 불필요한 패킷까지 재전송하므로 전송 속도가 저하될 수 있고, 네트워크 대역폭을 비효율적으로 사용할 수 있다.
- 재전송시 오버헤드가 증가한다.
TCP
TCP
- 연결 지향적이며, 오류 복구, 흐름 제어 등의 기능을 제공하여 신뢰성 있는 데이터 통신을 보장한다 (Email, 파일전송, 원격 접속, 데이터 베이스)
- 데이터를 전송하기 전에 송신자와 수신자 간에 연결을 설정한다. 이 연결 설정 과정은 3-way handshake를 통해 이루어진다
- 연결 설정 후에는 데이터를 양방향으로 전송할 수 있고, 데이터 전송이 완료되면 종료된다.
- 체크섬을 사용하여 데이터 오류를 검출하고, ARQ 메커니즘을 사용하여 손실된 데이터를 재전송할 수 있다.
- 시퀀스 번호를 사용하여 패킷의 순서를 보장한다.
- 송신자의 데이터 전송 속도를 수신자의 처리 능력에 맞춰서 조절하고(흐름제어), 네트워크 혼잡을 감지하고 혼잡을 완화하기 위해 송신자의 데이터 속도를 조절한다.(혼잡 제어)
- 연결 설정 및 종료 과정으로 인해 UDP 보다 속도가 느리고, 많은 제어와 기능들이 있어 추가적인 오버헤드가 발생한다.
- TCP 헤더에 다양한 플래그와 옵션이 포함되어 있기 때문에 분석이 복잡할 수 있고, 그만큼 불필요한 지연 시간이 발생할 수 있다.
TCP 빠른 재전송
- 빠른 재전송은 중복 RTO에 의존하지 않고, 수신자가 보내는 ACK를 사용하여 패킷 손실을 빠르게 감지하고 복구하는 메커니즘이다.
- 패킷 손실을 빠르게 복구하는 만큼 전송 효율을 향상시킨다.
- 불필요한 RTO 기반 재전송을 줄여 네트워크 혼잡을 완화한다.
- 드물게, 패킷 손실 없이 패킷 순서가 변경되었을 때 중복 ACK가 발생할 수 있다 이 경우, 송신자는 가짜 혼잡을 감지하고 불필요하게 전송 속도를 줄일 수 있다.
- 여러 개의 패킷이 동시에 손실된 경우에는 효율성이 떨어질 수 있다. 이때 SACK 옵션을 사용하면 수신자가 정상적으로 수신한 패킷의 범위를 송신자에게 알려줄 수 있으므로, 송신자는 손실된 패킷만 선택적으로 재전송할 수 있다.
3 way handshake
- 클라이언트와 서버 TCP 연결을 설정하기 위해 3개의 패킷을 주고받는 과정
- 각 방향으로 시퀀스 번호를 동기화한다 (데이터 순서 보장, 손실/중복 패킷 감지, 데이터 혼선 방지)
- 초기 윈도우 크기를 교환한다. (흐름제어)
SYN (Synchronize) : 클라이언트 -> 서버
- 클라이언트는 서버에게 SYN(연결 요청 플래그) 패킷을 전송하여 연결 요청을 보낸다.
- SYN 패킷에는 클라이언트가 사용할 초기 시퀀스 번호가(ISN) 포함되고, 시퀀스 번호는 임의의 값으로 설정된다.
- SYN 패킷의 TCP 헤더에는 SYN 플래그가 설정된다. (SYN = 1)
SYN-ACK (Synchronize-Acknowledge) : 서버 -> 클라이언트
- 서버는 클라이언트의 SYN 패킷을 수신하고, 클라이언트에게 SYN-ACK 패킷을 전송하여 요청을 수락한다.
- 서버가 사용할 ISN과 클라이언트의 ISN에 대한 확인 ACK가 포함된다.
- 확인 ACK는 클라이언트의 ISN에 1을 더한 값으로 설정된다. (ACK = 클라이언트 ISN + 1) 이는 서버가 클라이언트의 SYN 패킷을 성공적으로 수신했다는 것을 의미한다
- SYN-ACK 패킷의 TCP 헤더에는 SYN 플래그와 ACK 플래그가 모두 설정된다. (SYN = 1, ACK = 1)
ACK (Acknowledge) : 클라이언트 -> 서버
- 클라이언트는 서버의 SYN-ACK 패킷을 수신하고, 서버에게 ACK 패킷을 전송하여 연결 설정을 완료한다.
- ACK 패킷에는 서버의 ISN에 대한 확인 ACK가 포함된다.
- 여기서 ACK 번호는 서버의 ISN + 1 한 값, ACK 번호는 서버의 ISN를 기반으로 설정된다. 이는 클라이언트가 서버의 SYN-ACK 패킷을 성공적으로 수신했다는 것을 의미한다.
- ACK 패킷의 TCP 헤더에는 ACK 플래그가 설정된다. (ACK = 1)
4 way handshake
- 클라이언트와 서버 TCP 연결을 안전하게 종료하기 위해 4개의 패킷을 주고받는 과정
- 양방향 연결을 안전하게 종료하기 위해 각 방향으로의 데이터 전송이 완료되었는지 확인한다
- 연결 종료 시 데이터 손실을 방지한다.
- ACK 패킷이 손실되었을 경우, 상대방이 FIN 패킷을 재전송할 수 있도록 TIME_WAIT 상태로 잠시 대기하여 재전송된 FIN 패킷을 처리할 수 있도록 한다.
FIN (Finish) : 클라이언트 -> 서버
- 클라이언트는 서버에게 FIN 패킷을 전송하여 연결 종료를 요청한다
- FIN 패킷에는 연결 종료를 요청하는 시퀀스 번호가 포함되어 있다.
- FIN 패킷의 TCP 헤더에는 FIN 플래그가 설정된다 (FIN = 1)
ACK ( Acknowledge) : 서버 -> 클라이언트
- FIN 패킷을 수신한 서버는 클라이언트에게 ACK 패킷을 전송하여 FIN 패킷 수신을 확인한다.
- 확인 ACK 번호는 FIN 패킷의 시퀀스 번호 + 1 한 값으로 설정된다
- ACK 패킷의 TCP 헤더에는 ACK 플래그가 설정된다 (ACK = 1)
- 이 단계에서 연결이 완전히 종료된 게 아니므로, 아직 데이터를 전송할 수 있다.
FIN (Finish) : 서버 -> 클라이언트
- 연결 종료 요청을 받은 서버가 클라이언트에게 종료 요청과 FIN 패킷을 전송한다.
- FIN 패킷에는 연결 종료를 요청하는 서버의 시퀀스 번호가 포함된다.
- FIN 패킷의 TCP 헤더에는 FIN 플래그가 설정된다. (FIN = 1)
ACK ( Acknowledge) : 클라이언트 -> 서버
- 서버에서 온 종료 요청과 FIN 패킷을 수신한 클라이언트는, 서버에게 ACK 패킷을 전송하고 모든 연결을 종료한다.
- ACK 패킷에는 FIN 패킷에 대한 확인 ACK 포함된다.
- 확인 ACK 번호는 FIN 패킷의 시퀀스 번호 + 1 한 값으로 설정된다.
- ACK 패킷의 TCP 헤더에는 ACK 플래그가 설정된다. (ACK = 1)
Congestion Control (네트워크 혼잡 제어)
- TCP 프로토콜에서 네트워크 혼잡을 감지하고, 혼잡을 완화하여 안정적인 데이터 전송을 보장하는 메커니즘.
- TCP는 신뢰성 있는 데이터 전송을 제공하기 때문에 혼잡 제어 기능을 필수적으로 포함한다.
- 혼잡 제어 방식은 크게 개방 루프 방식, 폐쇄 루프 방식으로 나눌 수 있다.
개방 루프 방식 (예방적)
- 혼잡 발생 가능성을 미리 예측하고, 혼잡을 예방하기 위한 조치를 취한다.
- 송신자의 행동을 제한하여 네트워크에 과도한 부하를 주지 않도록 한다.
- RTO 값 조정, 윈도우 크기 제한, ACK 전송 빈도 조절, 혼잡을 피할 수 있는 경로 선택
폐쇄 루프 방식 (사후적)
- 네트워크 상태를 모니터링하고, 혼잡이 발생하면 피드백을 통해 혼잡을 완화한다.
- 송신자는 네트워크로부터 혼잡 정보를 받고, 전송률을 조절한다
- 혼잡 제어 알고리즘을 사용하여 네트워크 혼잡에 대응한다.
혼잡 제어 알고리즘
- Slow Start
- 연결 시작 시 윈도우 크기를 1로 시작하여, ACK를 받을 때마다 윈도우 크기를 두 배씩 증가시킨다.
- 윈도우 크기를 증가시키므로, 초기 전송 속도를 빠르게 높일 수 있다.
- 혼잡이 발생하면 윈도우 크기를 1로 줄이고 다시 Slow Start를 시작한다.
- Congestion Avoidance
- Slow Start 단계에서 혼잡 윈도우 크기가 Slow Start Threshold (기준점)에 도달하면, 혼잡 회피 단계로 넘어간다
- 혼잡 회피 단계에 들어오면 윈도우 크기를 절반으로 줄인다.
- 네트워크혼잡을 피하면서 안정적으로 전송률을 유지
Flow Control (네트워크 흐름 제어)
- 송신자와 수신자 간의 데이터 전송 속도를 조절하여, 수신 측이 송신 측으로부터 과도한 데이터를 받아 버퍼 오버플로우가 발생하는 것을 방지하는 메커니즘이다.
- 데이터 손실 없이 신뢰성 있는 데이터 전송을 보장하기 위한 필수적인 기능.
- 흐름 제어 방식은 크게 정지-대기(Stop-and-Wait), 슬라이딩 윈도우(Sliding Window) 방식으로 나눌 수 있다.
정지-대기 방식
- 송신자는 데이터를 전송한 후, 수신자로부터 ACK를 받을 때까지 기다린다.
- ACK 받으면 다음 데이터를 전송한다.
- 간단한 흐름 제어 방식이지만, RTT 동안 송신자는 아무것도 하지 못하기 때문에 비효율적 방법이다.
슬라이딩 윈도우
- 송신자는 수신자로부터 윈도우 크기를 받는다.
- 송신자는 ACK를 받지 않고도 윈도우 크기만큼의 데이터를 연속적으로 전송할 수 있다.
- 수신자는 데이터를 정상적으로 수신하면 ACK를 전송한다
- ACK 받으면 윈도우를 슬라이딩하여 다음 데이터를 전송한다.
- 정지-대기 방식보다 효율적이며, 대부분의 프로토콜에서 사용된다.
'네트워크' 카테고리의 다른 글
컴퓨터 네트워크 5주차 스터디 정리 (0) | 2025.04.09 |
---|---|
컴퓨터 네트워크 3주차 스터디 정리 (0) | 2025.03.25 |
컴퓨터 네트워크 2주차 스터디 정리 (0) | 2025.03.18 |
컴퓨터 네트워크 1주차 스터디 정리 (2) | 2025.03.13 |
11 (0) | 2025.03.11 |
Comments