728x90
반응형
전송 계층
- 전송 계층은 송신자와 수신자 간에 논리적 연결을 수행하는 것으로 TCP 프로토콜과 UDP 프로토콜이 존재한다. TCP 프로토콜을 사용하는 경우 연결 지향 방식을 사용하고 UDP는 비연결성 방식을 사용한다
- 수신 측에 전달되는 데이터에 오류가 없고 데이터의 순서가 그대로 보존되도록 보장하는 연결 지향 서비스의 역할을 하는 종단 간(End-to-End) 서비스 계층이다.
- 전송 계층의 프로토콜은 신뢰성 있는 전송을 하는 TCP와 비신뢰성 전송을 하는 UDP 프로토콜이 존재한다.
TCP
- 네트워크 계층의 상위에서 수행되는 전송 계층의 프로토콜로, 클라이언트와 서버 간의 연결 지향, 신뢰성 있는 데이터 전송, 에러 제어, 흐름 제어 등의 기능을 수행하는 프로토콜이다.
- TCP 프로토콜은 연결 지향으로 메시지를 송수신하기 전에 먼저 연결을 확인하고 연결이 확립되면 메시지를 송수신하는 방식으로 기동된다.
TCP의 구조
▶ Segment
- 애플리케이션 계층의 메시지에 TCP 혹은 UDP의 Header를 붙인 것을 Segment라고 한다.
항목 | 내용 |
근원지 포트 | 송신측 포트이다.(end point of sender) |
목적지 포트 | 수신측 포트이다.(end point of receiver) |
일련번호 | 송신자가 전송하는 데이터의 일련번호 |
전송확인 | 수신자가 응답하는 받은 데이터의 수 |
TCP 헤더 길이 |
|
URG | 긴급 지점이 사용될 때 1로 설정 |
ACK | 전송확인을 필요로 할 때 설정 |
EOM | 마지막 메시지임을 가리킴 |
재설정 | 연결의 재설정 |
동기화 | 연결 설정 요구 |
FIN | 연결 해제에 사용되며, 송신측에서 더 이상 전송할 데이터가 없음을 의미 |
윈도우 크기 | 수신측에서 수신할 수 있는 최대 byte 수 |
체크썸 | 전송 데이터에 대한 완벽한 신뢰성을 위한 것으로, 모든 데이터의 합에 대한 '1'의 보수로 계산 |
급송 지점 | 다음에 이어지는 데이터가 급송되어야 함을 의미하며, 인터럽트 메시지 대신 사용 |
옵션 | 전송 셋업 과정의 버퍼 크기에 대한 통신 등 기타 목적에 활용 |
TCP 상태전이
- TCP 상태 전이는 TCP 프로토콜에서 가장 중요한 요소로 TCP의 최초 연결 신청부터 연결/종료까지의 상태변화를 의미한다. TCP의 상태정보를 확인할 수 있는 가장 손쉬운 방법은 리눅스 혹은 윈도우에서 netstat 명령을 실행하는 것이다.
- 클라이언트는 먼저 서버에 연결 요청 메시지인 SYN 신호를 보내고 SYN_SENT 상태가 된다.
- 서버는 처음 기동되면 클라이언트의 연결을 받기 위해서 LISTEN 상태로 클라이언트의 연결을 대기한다.
- 그리고 클라이언트로부터 SYN 메시지가 수신되면 서버는 클라이언트에게 SYN, ACK를 전송하고 SYN_RECEIVED 상태로 바뀐다.
- 그리고 클라이언트 ACK를 서버에 전송하고 클라이언트와 서버는 ESTABLISHED 상태인 연결 확립 상태가 된다.
TPC의 특징
① 신뢰성 있는 전송
- 수신자는 데이터를 송신받고 ACK Number를 송신자에게 전송한다. 송신자는 ACK Number가 수신되지 않으면 재전송을 실행하여 신뢰성 있는 데이터 송수신을 수행한다.
- 3-handshaking 기법과 재전송 방식으로 신뢰성을 보장한다.
② 순서 제어
- 송신자는 메시지 순서를 맞추기 위해서 메시지 전송 시 Sequence Number를 같이 보낸다. 그러면 수신자는 메시지의 순서가 맞지 않게 도착해도 Sequence Number를 통해서 정렬을 수행할 수 있다.
③ 전이중(Full Duplex)
- 전화기처럼 송신자는 송신, 수신자는 수신을 동시에 할 수 있다.
④ 3-Way Handshaking 기법
- TCP는 클라이언트와 서버 간에 연결을 수행할 때 Client가 SYN 신호를 보내고 서버는 SYN에 대한 SYN/ACK로 응답한다. 클라이언트는 SYN/ACK를 수신받은 후 ACK를 서버에 전송하여 연결을 확립한다.
- 먼저 클라이언트는 LISTEN상태에서 연결 요청 메시지인 SYNSENT를 서버에 보내고 서버는 LISTEN상태에서 요청을 받으면 SYN_RECEIVED상태가 되고 연결이 완료되면 ESTABLISHED상태가 된다.
- 연결이 완료되면 이제 클라이언트는 서버에게 데이터를 요청할 수 있다. 데이터 요청도 마찬가지로 서버에게 ACK를 보내 데이터를 요청하면 서버는 SYN/ACK를 보내 응답한다. 이에 클라이언트는 SYN/ACK를 받은 후 ACK를 서버에 전송하여 데이터를 전송이 완료된 걸 확인시켜 준다.
⑤ 에러 제어(Error Control)
- 네트워크를 사용해서 데이터를 송신하다 보면 정말 다양한 에러가 발생한다.
- 에러는 크게 ACK 손실, Timeout이 있다.
- TCP는 FEC, BEC, duplicate ACK 등의 기법으로 에러를 제어한다.
- FEC 기법 중에서 가장 간단한 방법은 1의 개수가 짝수 개인지 홀수 개인지를 확인해서 에러 여부를 확인하는 패리티 검사이다. 또한 특정 블록 합계 검사도 있고, 에러 발생 시 수정까지 할 수 있는 해밍코드 방법도 있다. 하지만 실제 많이 사용되는 방법은 CRC 기법이다. CRC는 Checksum 비트를 전송하여 Checksum비트로 수신자가 연산하여 에러 여부를 확인한다.
▶ 에러 제어 기법
기법 | 내용 |
FEC (Forward Error Correction) |
|
BEC (Backward Error Correction) |
|
▶ BEC 기법의 특징
기법 | Stop-and-Wait | Go-Back-N | Selective Repeat |
재전송 요청 방법 | 에러발생 즉시 재전송 | 오류 발생 또는 잃어버린 프레임 이후의 모든 프레임을 재요청하거나 타임아웃으로 자동 재송신됨 | 오류 발생 또는 잃어버린 프레임에 대해서만 재요청 또는 타임아웃으로 인한 자동 재송신 |
수신 방법 | 순차적으로 수신 | 프레임의 송신 순서와 수신 순서가 동일해야 수신 | 순서와 상관없이 윈도우 크기만큼의 범위 내에서 자유롭게 수신 |
장단점 |
|
|
|
⑥ 흐름 제어(Flow Control)
- 송수신 측 사이의 전송 패킷의 양, 속도를 조절하여 네트워크를 효율적으로 사용한다.
- 송수신 측 사이의 처리 속도, 버퍼 크기 차이에 의해 생길 수 있는 수신 측 오버플로를 방지한다.
▶ 슬라이딩 윈도우(Sliding Windows)
- TCP 호스트 간의 효율적인 데이터 전송을 위해서 호스트 간에 송수신 혹은 수신할 수 있는 Size 정보를 제공한다. (송신 측의 윈도우와 수신 측의 윈도우 제공)
- Stop-and-Wait의 단점을 보완한 방식으로 수신측의 확인 신호를 받지 않더라도 미리 정해진 프레임의 수만큼 연속적으로 전송한다.
▶ 슬라이딩 윈도우 사용의 장점
- 송신자와 수신자 간의 네트워크 전송효율을 극대화하기 위해서 수신자의 버퍼 크기를 확인하고 최대한 전송 효율을 극대화한다.
- 수신자의 ACK의 경우 매번 ACK를 받을 수 있지만, ACK 신호도 묶어서 처리하면, 불필요한 네트워크 부하를 최소화할 수 있다.
⑦ 혼잡 제어
- 혼잡 제어는 송신 단말의 전송률을 직접 제어하여 혼잡으로 인해 손실된 데이터를 재전송하기 위함이다.
- TCP Slow Start는 혼잡 제어를 하는 방법 중 하나로 tcp가 시작될 때 전송속도를 초기 값부터 지속적으로 올리는 방법이다.
▶ Slow Start
- 처음 TCP 연결이 시작할 때, Congestion window의 값은 1 MSS(Maximum Segment Size)로 초기화된다.
- cwnd는 한 번에 전송할 수 있는 데이터의 양이라도 생각하면 된다.
- slow start는 cwnd를 전송마다 지수적으로(일반적으로 2배씩) 증가시켜 전송률을 높여준다.
- 그러나 계속해서 증가하는 것이 아니다. 크게 두 가지 이유로 전송률을 감소시킨다.
- 첫 번째, timeout이 발생하면 cwnd를 1로 초기화하고 임곗값(ssthresh)는 cwnd/2로 설정하고 다시 slow start과정을 반복한다.
- 두 번째, cwnd가 임곗값(ssthresh)에 도달하면 congestion avoidance mode로 전환한다.
▶ Congestion Avoidance
- congestion avoidance mode에서는 전송률을 선형(1씩)으로 증가시킨다.
- TCP Tahoe의 그래프를 보면 cwnd는 1에서 시작해서 지수적으로 증가하다가 ssthresh부터는 1씩만 증가하는 것을 알 수 있다.
- 1씩 증가하다가 timeout이 발생해서 cwnd는 1, ssthresh 이전 최대 cwnd(12)의 절반이 6으로 설정되었다.
- 그리고 다시 slow start mode를 진행하였다.
▶ Fast retransmit
- Retransmit threshold는 연속된 Duplicate ACK를 수신하는 경우 TCP는 해당 Segment를 다시 전송한다.
▶ Fast recovery
- Fast retransmit 한 이후 새로 slow star를 통해서 설정된 연결의 안정상태에 도달할 필요 없이 congestion avoidance 상태에서 전송할 수 있도록 하는 것이다.
728x90
반응형
'Network' 카테고리의 다른 글
Network - HTTP 상태코드 정리(Status Code) (0) | 2022.10.05 |
---|---|
Network - VPN(Virtual Private Network)의 개념 (0) | 2022.10.04 |