[네트워크] TCP/IP 전송 계층
Transport Layer
수신측에 전달되는 데이터에 오류가 없고 데이터의 순서가 그대로 보존되도록 보장하는 연결 지향 서비스의 역할을 하는 종단 간 서비스(End-to-End) 계층
신뢰성 있는 전송을 하는 TCP
와 비신뢰성 전송을 하는 UDP
가 존재
- Segment
애플리케이션 계층의 메시지에 TCP 혹은 UDP의 헤더를 붙인 것을 의미.
TCP(Transmission Control Protocol)
TCP Header는 UDP에 비해서 크기가 크고 UDP Header는 작은 특성이 있다. TCP는 신뢰성 있는 데이터 전송을 위해서 가상 연결을 수행한다. 가상 연결 이후에 데이터를 송수신하는데 송신자가 메시지를 전송하면 수신자는 ACK를 되돌려서 수신 여부를 확인해준다. 만약 수신자가 동일한 ACK 번호로 반복적으로 전송한다면 어떤 이유로든 데이터를 받지 못하는 것이고 반복적인 ACK가 되돌아오면 TCP는 에러 제어 기법을 통해서 재전송을 수행한다. 이 때 재전송 방법은 Go-Back-N 방법으로 되돌아온 ACK 번호 이후의 모든 것을 전부 재전송하는 것이다.
또한 동일한 ACK 번호가 송신자에게 계속 되돌아오면 송신자는 전송 속도를 낮춘다. 이러한 것을 혼잡 제어라고 한다. 이를 통해서 네트워크 전송망을 효율적으로 사용할 수 있다. 즉, 수신 받지 못하는 상황에서 계속적으로 빠르게 전송한다면 네트워크의 부하만 유발할 것이다.
TCP는 연결을 지향할 뿐 물리적으로 연결된 것은 아니라서 주기적으로 메시지를 송수신하여 송수신 가능 여부를 확인하는데 이런 여부를 확인하는 것은 TCP의 역할이 아니며 TCP/IP 프로토콜 군의 ICMP 프토토콜이 그 역할을 담당한다.
클라이언트와 서버 간의 연결 지향, 신뢰성 있는 데이터 전송, 에러 제어, 흐름 제어, 완전이중 방식
신뢰성있는 데이터 전송을 위해 가상 연결 수행
송신자가 메시지를 전송하면 수신자는 ACK를 되돌려서 수신 여부를 확인
- 혼잡 제어(Congestion Control)
수신자 동일한 ACK 번호를 반복적으로 전송 => 데이터를 받지 못함 ==> GO-BACK-N 방법으로 재전송 - 흐름 제어(Flow Control)
수신자가 메시지를 제대로 받지 못하면 송신자는 전송 속도를 늦추어 네트워크 효율성 제어 - 순서 제어 : Sequence 번호를 가지고 메시지의 순서 파악
- 완전 이중(Full Duplex) : 전화기처럼 송신자는 송신, 수신자는 수신을 동시에 진행
- Checksum : TCP, UDP 모두 존재. 송신 중 메시지의 변조 파악하기 위해 에러 체크
- Receive Windows
수신자의 윈도우 크기이자 메모리 버퍼.
수신자의 버퍼가 비어 있으면 송신자는 해당 버퍼의 크기만큼 데이터를 한꺼번에 전송(전송 효율 관리)
TCP의 상태 전이
netstat 명령어로 확인 가능
1) 클라이언트는 서버에 연결요청 메시지인 SYN 신호를 보내고 SYN_SEND
상태 전환
2) 서버는 기동되면 클라이언트의 연결을 받기 위해 LISTEN
상태로 클라이언트의 연결 대기
3) 서버는 클라이언트로부터 SYN 메시지가 수신되면 서버는 클라이언트에게 SYN, ACK를 전송하고 SYN_RECEIVED
상태 전환
4) 클라이언트는 ACK를 서버에 전송하고 클라이언트와 서버는 ESTABLISHED
(연결 확립) 상태
TCP 프로토콜의 Header 구조
-
근원지 포트(Source Port)
가상 선로의 송신측 포트(End point of Sender) -
목적지 포트(Destination Port)
가상 선로의 수신측 포트(End point of receiver) -
일련번호(Sequence Number)
송신자가 전송하는 데이터의 일련번호로 메시지의 순서를 파악할 수 있게 해준다. 비동기 방식으로 데이터를 보내면 경로 또한 다른 경로로 보내질 수 있기 때문에 송신자의 메시지가 꼭 순서에 따라 도착하는 것은 아니다. -
전송확인(Piggyback Acknowledgement)
수신자와 응답하는 받은 데이터의 수 -
TCP 헤더 길이(Header Length)
TCP 헤더에 몇 개의32Bit
워드가 포함되어 있는가를 나타내는 필드
옵션 필드가 가변 길이를 갖기 때문에 필요, 이 값을 이용하여 실제 데이터의 시작점을 계산 -
URG(Urgent)
긴급 지점이 사용될 때 1로 설정 -
ACK(Acknowledgement)
전송 확인을 필요로 할 때 설정 -
EOM(End of Message)
마지막 메시지임을 가리킴 -
재설정(RST)
연결의 재설정. 비정상적인 종료 -
동기화(SYN, Synchronization)
연결 설정 요구 -
FIN(Finish)
연결 해제에 사용되며, 송신측에서 더 이상 전송할 데이터가 없음을 의미 -
윈도우 크기(Window size)
수신측에서 수신할 수 있는 최대 Byte 수
수신측에서는 자신의 버퍼 크기에 따라 이 값을 조절하며 윈도우 크기가 ‘0’이면 송신자는 전송을 잠시 중단한다
송신측은 전송한 데이터에 대한 수신측의 전송확인(ACK)이 도착하기 전에도 윈도우 크기만큼의 데이터를 연속적으로 전송할 수 있다 -
체크썸(Checksum)
전송 데이터에 대한 완벽한 신뢰성을 위한 것으로, 모든 데이터의 합에 대한 ‘1’의 보수로 계산 무결성을 확인하기 위해 CRC(Cyclic Redundancy Check)코드 사용 CRC : 데이터 통신에서 전송 중에 전송 오류가 발생하였는지 확인하기 위해 덧붙인 코드 -
급송 지점(Urgent point)
다음에 이어지는 데이터가 급송되어야 함을 의미. 인터럽트 메시지 대신 사용 -
옵션
전송 셋업 과정의 버퍼 크기에 대한 통신 등 기타 목적에 활용
3-Way Handshaking 기법
TCP는 클라이언트와 서버 간에 연결을 수행할 때 클라이언트가 SYN
신호를 보내고 서버는 SYN에 대한 SYN/ACK
로 응답한다. 클라이언트는 SYN/ACK를 수신받은 후 ACK
를 서버에 전송하여 연결을 확립한다.
에러 제어
우선 탐지는 수신자가 제대로 수신받고 있는지 송신자에게 알려주어야 하고 수신받은 데이터에 에러가 없는지는 송신자와 수신자 간의 일정한 약속으로 확인해야 한다. 이렇게 수신 받은 데이터에 에러가 없는지 확인하는 것은 FEC(Forward Error Correction)라고 하며, 수신자가 데이터를 수신받지 못하면 재전송한다. 이를 BEC(Backward Error Correction)이라고 한다.
FEC 기법 중에서 가장 간단한 방법은 1의 개수가 짝수 개인지 홀수 개인지를 확인해서 에러여부를 확인하는 패리티 검사이다. 또한 특정 합계를 계산하여 합계가 맞는지 확인하는 블록 합계 검사도 있고, 에러 발생 시 수정할 수 있는 해밍코드 방법도 있다.
하지만 실제 많이 사용하는 방법은 CRC 기법이고 CRC는 Checksum 비트를 전송하여 Checksum 비트로 수신자가 연산하여 에러여부를 확인하는 것으로 무선 LAN과 이더넷(Ethernet) 프레임에서 사용한다.
재전송이 필요한 BEC 기법 중 Stop-and-Wait 방식은 하나의 데이터를 송신하고 수신 확인 신호를 받을 때까지 기다린 다음 전송하는 방식이다. 송신자가 대기해야 하므로 비효율적인 방법이다.
Go-Back-N 방식은 수신자가 데이터를 수신받지 못할 경우 마지막으로 수신받은 데이터 이후의 모든 데이터를 재전송하는 방법으로 TCP 프로토콜에서 사용하는 방법이다.
Selective Repeat 방식은 수신자가 수신받은 데이터 중에서 중간에 빠져있는 것만 재전송하는 방식으로 에러를 처리한다.
-
FEC(Forward Error Correction)
송신측이 특정한 정보 비트를 함께 전송하여 수신측에서 이 정보 비트로 에러 발생 시 수정하는 방식(수신측
이 에러 처리)데이터 전송과정에서 발생한 오류를 검출하여 오류를 재전송 요구 없이 수정
재전송 요구가 없어역 채널
이 필요 없고,연속
적인 데이터 전송 가능
오류 검출 및 수정을 위한잉여비트
들이 추가 전송되므로 전송 효율 감소- 해밍 코드
- 상승 코드
-
BEC(Backward Error Correction)
수신측이 에러 검출 후 송신측에게 에러가 발생한 데이터 블록을재전송
요청(송신측
이 에러 처리,ARQ
:Auto Repeat reQuest)패리티 검사, CRC 등 CheckSum을 이용하여 오류
검출
후, 오류제어
는 ARQ가 처리-
Stop-And-Wait
하나의 데이터를 송신하고 수신 확인 신호를 받을 때까지 기다린 다음 전송 -
Go-Back-N
수신자가 데이터를 수신 받지 못할 경우 마지막으로 수신 받은 데이터 이후의 모든 데이터 재전송 TCP에서 사용하는 방식 -
Selective Repeat ARQ
수신받은 데이터 중에서 중간에 빠져있는 것만 재전송 -
Adaptive ARQ
-
흐름 제어
송수신측 사이의 전송 패킷의 양, 속도를 조절
하여 네트워크를 효율
적으로 사용. 송수신측 사이의 처리 속도, 버퍼 크기 차이에 의해 생길 수 있는 수신측 오버플로우를 방지한다.
- 슬라이딩 윈도우(Sliding Window)
호스트 간에 송수신 혹은 수신할 수 있는 Size 정보를 제공
Stop-And-Wait의 단점을 보완한 방식으로 수신측의 확인 신호를 받지 않더라도 미리 정해진 프레임의 수만큼 연속적으로 전송
수신자의 버퍼 크기를 확인함으로서 최대한 전송 효율 극대화
혼잡 제어
라우터가 패킷을 처리할 수 있는 속도보다 많은 패킷을 수신하는 경우 라우터는 패킷을 손실하게 된다. 송신측에서는 패킷을 재전송하게 되는데, 이러한 과정의 연속으로 데이터의 손실이나 지연이 발생 혼잡 제어는 송신 단말의 전송률을 직접 제어하여 혼잡으로 인해 손실된 데이터를 재전송하기 위함
-
TCP Slow Start
TCP가 시작될 때 전송속도를 초기값부터 지속적으로 올리는 방법송신측에서 패킷을 전송하는 비율과 수신측에서 수신된 ACK를 통해 Congestion Window(cwnd)를
지수
의 크기로 증가.
cwnd는 계속적으로 증가하다가 임계값에 이르게 되면 Congestion Avoidance로 동작 -
Congestion Avoidance
Duplication ACK 값이 오거나(송신 속도 초기값) 일정 시간 동안 ACK가 수신되지 않으면(임계값의 50%) 전송속도를 낮춤
매번 ACK가 수신될 때마다 cwnd를 1/cwnd만큼 증가(선형적
인 증가) -
Fast Retransmit
Retransmit Threshold 이상 연속된 Duplicate ACK를 수신하는 경우 TCP는 해당 Segment를 재전송 -
Fast Recovery
Fast Retransmit한 이후 새로 Slow Start를 통해서 설정된 연결의 안전상태에 도달할 필요없이 Congestion Avoidance 상태에서 전송할 수 있도록 하는 것
UDP(User Datagram Protocol)
UDP는 데이터를 빠르게 전송할 용도로 사용한다. 그래서 TCP에 비해 기능은 없지만, 데이터를 빠르게 송수신할 수 있다. 하지만 UDP는 재전송 기능이 없어서 네트워크에서 패킷이 손실될 수 있다. 즉, 데이터가 전송되는 것을 보장하는 않는다.
비연결성, 비신뢰성(블록 재전송 및 흐름 제어 등이 없음)을 특성으로 패킷을 고속 전달할 수 있는 프로토콜
비접속형 : 전달되는 패킷에 대한 상태 정보를 유지하지 않음
간단한 헤더구조(8Byte
), 블록 단위로 데이터 전송
UDP 프로토콜의 Header 구조
-
근원지 포트(Source Port)
-
목적지 포트(Destination Port)
-
수신자의 포트번호 길이(Length)
-
체크썸(Checksum)
VoIP(Voice Over IP)
UDP 프로토콜은 빠르게 데이터를 전송해야 하는 서비스에서 사용하는데 대표적인 활용이 VoIP
VoIP는 내부적으로 2개의 프로토콜을 사용하는데 하나는 RTP이고 또 하나는 RTCP이다.
- RTP(Real Time Protocol) : 음성 전송
- RTCP(Real Time Control Protocol) : 에러 처리
VoIP는 인터넷 전화이기 때문에 스니핑(Sniffing) 노출로 인하여 사생활 침해 등의 문제가 있고 VoIP 서비스에 대한 DDoS 보안 취약점이 있다.
댓글남기기