TCP(Transmission Control Protocol)이란?
네트워크의 연결은 광케이블이나 구리선, 인공위성과 같이 다양한 종류와 품질를 가지는 여러종류의 회선으로 이루어져 있다. 데이터 전송 도중 데이터 손상은 불가피하며, 각 패킷이 하나의 고정된 전달 경로만을 이용하지 않고 라우터가 품질이 좋은 최적의 경로로 라우팅하여 각각 다른 경로를 통해 전송되기 때문에 데이터 순서 또한 바뀔 수 있다는걸 의미한다.
이러한 네트워크 상황에서 TCP/IP는 연결된 상태에서 올바른 통신을 하도록 도와준다. 이 프로토콜은 신뢰성 있는 전송을 수행하기 위해 두 호스트가 교환하는 데이터와 승인 메시지 뿐만아니라 어떻게 TCP 소프트웨어가 주어진 호스트의 여러가지 목적지 가운데서 하나를 구별하며 어떻게 전송 에러를 복구할 것인가를 정의한다.
TCP의 특징은
1. 세션관리
2. 핸드쉐이크
3. 패킷 순서 조합
4. 포트를 이용한 서비스 다중화
TCP는 연결지향형 프로토콜로써 데이터 전송 전 각 Host간 Three-way handshake 과정을 거친다.
[발췌]http://www.joinc.co.kr/w/Site/Network_Programing/Documents/IntroTCPIP
위와 같은 방식으로 연결이 이루어 지면 뒤의 모든 데이터는 연결된 통신선로를 통해 교환하게 된다.
TCP 동작방식
TCP는 흐름제어와 혼잡제어 두 가지 제어 메커니즘을 이용하여 end to end의 신뢰성있는 전송을 가능하게 한다.
1. TCP 흐름제어
데이터 송, 수신 노드의 데이터 처리 속도 차이해결을 위한 기법으로 수신측이 송신측 보다 데이터 처리 속도가
느리면 제한된 처리 속도에 따른 데이터 손실이 발생 할 수 있다.
이러한 위험을 줄이기 위해 송신 측 데이터 전송량을 수신측에 맞게 조절하는데 이러한 기법을 흐름제어라고 한다
흐름제어의 방식에는 Stop end wait 방식과 Sliding Window 방식이 있다.
Stop end wait방식은 송신측에서 하나의 프레임을 전송하고
수신측에서는 수신된 프레임에 대한 결과를 송신측에 ACK나 NAK을 보내는 방식이다.
구현방법이 단순하고 최대 프레임 크기의 버퍼를 하나만 잡아도 된다는 장점이 있으나
송신측이 ACK을 수신 할 때까지 다음 프레임을 전송 할 수 없는 단점이 있다.
[발췌] http://blog.daum.net/tlos6733/48
Sliding Window 방식은 수신측에서 설정한 윈도우의 크기만큼 송신측에서 확인 응답 없이 세그먼트를 전송 할 수 있게하여
효율적으로 네트워크를 사용 할 수 있게 한다.
TCP를 사용하는 모든 호스트들은 실제 데이터를 보내기 전에 먼저 TCP Three way handshaking을 통하여 수신 컴퓨터의 윈도우 크기를
맞추게 된다. 윈도우 크기라는 것은 ACK 없이 전송할 수 있는 데이터의 개수를 의미한다.
(TCP 헤더 : 순서번호, 승인번호, 윈도우 크기)
수신측 윈도우 크기를 알았으면 송신측 TCP는 수백 바이트씩 모아 세그먼트 단위로 나누고, 윈도우 크기 내에서
여러 세그먼트들을 연속으로 송신하고 한번의 ACK만 받게된다.
[발췌] http://blog.daum.net/tlos6733/48
NAK를 받았을 경우 재전송 처리(에러제어)
수신측으로 부터 보낸 데이터에 대한 ACK 프레임을 중간중간 받게 되는데, ACK프레임을 확인 한 전송 측에서는 계속해서
데이터를 전송 할 수 있다.
수신측에서는 오류 프레임을 발견하면 부정 응답프레임인 NAK를 전송측으로 보냄으로써 재전송을 요청 할 수 있는것이다.
재전송 방식에는 GBn(Go-Back-n) ARQ 방식과 SR(Selective-Reject) ARQ 방식이 있다.
1. Go-back-N ARQ
타임아웃 및 보낸쪽의 메시지로 판별 후 Sender는 Ack번호가 종료번호와 다르면 Ack번호부터 다시 이후의 프레임을 모두 재전송 한다.
ACK 분실의 경우를 대비해 송신측에서는 Ack 타이머가 돌고 있는데, 타임이웃이 발생하면 마지막 Ack된 데이터부터 재전송 한다.
구조가 간단하고 구현이 단순하며 데이터 폐기방식(수신측)을 사용하여 추가적 버퍼가 필요 없는 장점이 있다.
2. Select Repeat ARQ
보내는 사람은 받는 사람이 보낸 Ack Number가 무엇인지 확인 후 빈 부분만 보낸다. GBn ARQ는 잡음이 많은 채널에서는 프레임 손상률이 높아져 재전송 의 경우가 빈번히 발생하고 재전송으로 인한 대역폭 소모가 심해 매우 비효율적인 반면 SR ARQ는 에러 프레임에 대한 재전송을 선택적으로 하기 때문에 GBn ARQ에 비해 매우 효율적이다.
SR ARQ는 선택적으로 분실된 프레임을 재전송 하기 때문에 별도의 데이터 재 정렬을 수행할 버퍼가 추가적으로 필요하다.
SR ARQ는 프레임 재배열 등의 추가 로직으로 인해 구조가 복잡하고 프레임을 폐기하지 않음으로 순차적으로 프레임을 재 배열 할 버퍼가 필요하며 비용 및 유지관리 비용이 많이 든다.
[발췌] http://blog.daum.net/tlos6733/48
혼잡제어
데이터는 인터넷으로 연결된 대형 네트워크를 통해 전달되는데, 한 라우터에 데이터가 집중 될 경우 처리 속도가 느려지거나 처리 할 수 없게된다. 그렇게 되면 각 호스트들은 재전송 요청이 많아지고 결국 혼잡을 가중시키게 된다. 이러한 네트워크 혼잡을 피하기 위해 송신측에서 보내는 데이터의 전송 속도를 강제로 줄인다. 이러한 작업을 혼잡 제어라고 한다.
혼잡제어 알고리즘
AIMD(Additive Increase / Multiplicative Decrease)
처음에는 패킷을 하나씩 보내고 아무 문제없이 도착하면 창 크기를 1씩 증가시키면서 전송하는 방법이다. 만일 패킷 전송을 실패하거나 일정신 시간을 넘으면 패킷을 보내는 속도를 절반으로 줄이는 알고리즘이다.
데이터 전송 초기에 많은 대역폭을 사용하지 못해 시간이 오래 걸리고 네트워크 혼잡상황을 미리 알지는 못한다는 단점이 있다.
(네트워크가 혼잡해지고 나서 대역폭을 줄임으로)
Slow Start(MIMD)
느린 시작 방식또한 패킷을 하나씩 보내는 것 부터 시작하지만 패킷이 문제없이 도착하면 각각의 ACK 패킷마다 창 크기를 1씩 증가시키기 때문에 실제 전송되는 세그먼트의 수는 지수적으로 증가한다.
AIDM보다는 효율적인 방법(빠른 대역폭 점유가 가능)이지만 마찬가지로 혼잡한 상항이 된 경우에는 타임아웃이 될 때까지 기다리는 동안 긴 시간의 공백이 발생한다.
[발췌] https://ko.wikipedia.org/wiki/%EC%A7%80%EC%88%98_%ED%95%A8%EC%88%98
TCP 흐름에 따른 상태
TCP/IP 기반 어플리케이션의 예로는
웹 브라우저, 전자우편, FTP, TFTP, SSH, Rsync등이 있다.
TCP Header
두 Host사이에 전송되는 TCP 데이터 단위를 세그먼트라 하며, TCP 세그먼트는 TCP 헤더와 실제 데이터가 합쳐져 있다.
TCP 해더는 다은과 같은 구조를 같는다
[발췌]http://www.joinc.co.kr/w/Site/TCP_IP/TCP_Header
sequence number
전송되는 데이터의 고유한 일련 번호(해당 순서번호를 갖고 순서재배열 함)
ack number
다음 세그먼트를 수신 할 준비가 되었다는 사실을 알림
모든 데이터가 수신되었다는 것을 나타내는 묵시적인 확인 메시지 역할을 함
reserved
차후 사용을 위한 예약된 6비트 필드
Control flags
cwr - 혼잡 윈도우 크기감소
ecn - 혼잡을 알림
urg - urgent pointer 필드가 가르키는 세그먼트 번호까지 긴급 데이터가 포함되어 있음을 뜻함
ack - 확인 응답 메시지
psh - 데이터 포함 여부
rst - 수신 거부 여부
syn - 두 호스트 사이의 확인 메시지를 전송하기 위해 번호를 동기화 할 때 사용
fin - 작업이 끝낼 때 사용
window size
송신 시스템의 가용 수신 버퍼의 크기를 바이트 단위로 나타냄
checksum
TCP 세그먼트의 내용이 유효한지 검증하고 손상여부를 검사함
아래 그림은 실제 Encapsulation된 TCP Header를 나타낸다.
[발췌]http://www.netmanias.com/ko/post/blog/5372/ethernet-ip-ip-routing-network-protocol/packet-header-ethernet-ip-tcp-ip
UDP(User Datagram Protocol) 란?
UDP의 전송방식은 단순하며 신뢰성이 낮고 데이터 그램 도착 순서가 바뀌거나 중복되거나 심지어는 통보없이 누락된다. 일반적으로 오류감사와 수정이 필요없는 애플리케이션에서 수행함을 간주한다.
비연결형 프로토콜로써 Port만 확인하여 소켓을 식별하고 송 수신하며 handshake와 같은 연결 설정이 없다.
TCP vs UDP
연결형태
TCP = 연결지향
UDP = 비연결형
데이터 순서
TCP = 순서 유지
UDP = X
데이터 손실
TCP = 없음
UDP = 손실가능
흐름, 혼잡, 오류 제어
TCP = GBn, SR, ARQ 사용
UDP = 없음
패킷 오버해드
TCP = 20byte
UDP = 8byte
UDP의 사용예 Voip, IPTV, DNS, Audio / Video Streaming Service
[참고사이트]
'Network' 카테고리의 다른 글
멀티캐스팅, 멀티캐스트 라우팅 (0) | 2016.11.27 |
---|