컴퓨터 네트워크 스터디 4주차
컴퓨터 네트워크 스터디 4주차
UDP
UDP의 장단점
User Datagram Protocol의 약어인 UDP는 실시간성을 높이기 위하여 사용한다.
비연결성 프로토콜 이므로 일방적으로 UDP 커넥션이라는 통신로를 만들고 애플리케이션 데이터를 송신한다.
UDP는 신뢰성을 희생한 대신, 실시간성을 높인 프로토콜이라 할 수 있다.
UDP 패킷의 구조 & 체크섬
UDP 패킷
- Source Port : 송신 포트 번호
- Destination Port : 수신 포트 번호
- Length : 패킷의 길이
- Checksum : 체크섬
여기서 체크섬은 수신 단말이 받아 들인 UDP 패킷의 손상 여부를 체크하는 데 사용되는 필드이다.
이때 ‘1의 보수 연산’을 사용하여 손상 여부를 체크하고. 데이터그램을 받은 단말은 검증에 성공하면 데이터그램을 받는다.
체크섬은 이와 같이 데이터가 손상되었을 경우 이를 탐지할 수 있게 한다.
그러나 체크섬 에러는 데이터 유실의 필요 조건이기 때문에
체크섬 에러가 발생하지 않았다 하더라도 데이터가 유실되지 않았다는 것을 100% 보장하지는 못한다.
신뢰적 데이터 전송의 원리
Stop-And-Wait 프로토콜
이 프로토콜은 송신자가 하나의 프레임을 전송하고, 수신자로부터의 확인 신호(ACK)가 도착할 때까지 기다리는 프로토콜이다.
송신자는 수신자로부터 확인 신호(ACK)를 받으면 다음 프레임을 전송하고, 부정 신호(NAK)를 받으면 같은 프레임을 재전송한다.
이 프로토콜은 구현이 간단하고, 오류 검출 및 복구가 쉽지만,
송신자는 매번 하나의 프레임만 전송할 수 있고 응답 신호를 기다려야 하므로 효율성이 낮다는 단점이 있다.
Pipeline 프로토콜
stop-and-wait 프로토콜이 지닌 효율성이 낮은 단점을 극복하기 위한 프로토콜이다.
파이프라인 같이 패킷을 한번에 보낼때 여러개를 보내는 프로토콜이다.
그리고, 파이프라인 프로토콜에서 발생하는 오류를 처리하는 방법에 따라 Go-Back-N, Selective Repeat으로 나뉜다.
Go-Back-N(N부터 반복)
이 그림에서 보이듯이 pkt 2가 유실되었으므로, sender는 pkt2가 유실되었음을 감지한다.
이때 이미 송신된 pkt 3,4,5도 전부 다시 송신하게 된다
Go-Back-N은 누락된 패킷(N)부터 모든 패킷을 재전송한다.
그러나 하나의 패킷 오류 때문에 많은 패킷은 재전송하는 것은 낭비이다. 그리고 이를 해결하기 위한 것이 Selective Repeat 모델이다.
Selective Repeat
selective repeat는 N번까지 잘 받았다는 의미의 Go-Back-N의 ACK(N)과 다른 의미인,
딴 건 모르겠고 N번 패킷은 잘 받았다는 의미의 ACK(N)을 사용한다.
따라서 유실된 패킷 하나만 더 보내면 되므로 Go-Back-N보다 효율적이다.
Select Repeat은 유실된 패킷만을 재전송한다.
TCP
Transmission Control Protocol은 데이터 전송의 신뢰성을 요구하는 곳에서 사용하는 프로토콜이다.
TCP는 TCP 커넥션이라는 논리적 통신로를 만들어 송신파이프, 수신파이프를 사용한다.
송신 측 단말이 ‘데이터를 보냄!’ 수신 측 단말이 ‘데이터를 받음!’하며 서로 확인해 가며 데이터를 보내기 때문에 신뢰성이 높다.
TCP 커넥션의 단계
- 접속 시작 단계 : 3 way handshake
- 접속 확립 단계 : 흐름 제어, 혼잡 제어, 재전송 제어
- 접속 종료 단계 : 4 way handshake
기본 지식
- SYN : synchronize squence numbers
- ACK : acknowledgment
3 way handshake
3 way handshake는 TCP 커넥션을 확립하기 전에 3번의 인사를 수행하는 절차이다.
- 클라이언트는 서버에 접속을 요청하는 SYN 패킷을 보낸다.
- 서버는 SYN 패킷을 받고 SYN/ACK 패킷으로 응답한다.
- 클라이언트는 서버에 ACK를 보내고 연결이 이루어 진다.
4 way handshake
4 way handshake는 TCP 커넥션을 종료하기 위해 수행하는 절차이다.
- 클라이언트가 연결을 종료하겠다는 FIN 패킷을 전송한다.
- 서버는 ACK를 보내고 자신의 통신이 끝날때 까지 기다린다.
- 서버가 통신이 끝났으면 연결이 종료되었다고 FIN 패킷 전송
- 클라이언트는 서버에 ACK를 보내 확인했다고 알린다.
- 클라이언트는 잠시 동안 TIME_WAIT상태에서 혹시 모를 패킷을 기다린 후, 커넥션을 삭제한다.
TCP 제어
Flow Control
흐름 제어는 수신 측 단말이 수행하는 흐름양 제어이다.
원도우의 크기를 송신 측에 알려서 수신 측 단말이 데이터를 못 받는 경우가 발생하지 않는 선에서 가능한 많은 데이터를 송신하게 한다.
Congestion Control
혼잡 제어는 송신 측 단말이 수행하는 흐름양 제어이다.
TCP가 대량의 송신 패킷에 의해 네트워크가 혼잡해지지 않도록 혼잡 제어 알고리즘을 이용하는데, 어떤 정보에 기반해 혼잡을 판단하는지에 따라
- 로그 기반 : 패킷이 유실
- 지연 기반 : 패킷이 지연
- 하이브리드 기반
으로 나눌 수 있다.
TCP 빠른 재전송
수신 측은 자신이 정상적으로 수신한 패킷의 다음 순번을 ACK 패킷으로 보내는데, 만일 중복 ACK가 수신되었다면 이는 데이터의 누락이 발생한 것.
송신 측이 중복 ACK를 받게 되면, 자신이 설정한 타임아웃 시간이 지나지 않았어도 바로 해당 패킷을 재전송 하기 때문에, 빠른 전송률를 유지할 수 있다.
중복 ACK가 발생하지 않는 에러(마지막 패킷의 유실 혹은 ACK가 유실)는 재전송 타임아웃에 의해 재전송 된다.
Leave a comment