데이터를 여러 개의 조각으로 나눈 패킷을 추적 및 관리하며 목적지에서는 패킷을 재조립하여 패킷의 분실 확인 처리를 함
3-way handshake라는 과정을 통해 연결을 설정하고 통신을 시작한 후, 4-way handshake 과정을 통해 연결을 해제하는 가상 회선 방식을 사용
흐름 제어, 오류 제어, 혼잡 제어를 통해 신뢰성과 데이터 전송 순서를 보장하지만, UDP보다 전송 속도가 느린 단점이 존재
신뢰적인 네트워크를 보장할 경우 4가지 문제점이 존재함
패킷이 손실될 수 있음
패킷의 순서가 바뀔 수 있음
네트워크가 혼잡될 수 있음
송신측이 오버로드 될 수 있음
IP의 개념
IP (Internet Protocol, 인터넷 프로토콜)
인터넷에 연결되어 있는 모든 장치들을 식별할 수 있도록 각각의 장비에게 부여되는 고유 주소
IPv4, IPv6 2가지 종류가 있음
IPv4 : 전 세계적으로 사용된 첫 번째 인터넷 프로토콜 주소는 32비트로, 8비트씩 4자리로 되어 있으며 온점(.)으로 구분 0 ~ 2³²개의 주소를 가질 수 있음
IPv6 : 차세대 인터넷 프로토콜 주소 주소는 128비트, 16비트씩 8자리로 되어 있으며 콜론(:)으로 구분 0 ~ 2¹²⁸개의 주소를 가질 수 있음
나누는 방식에 따라 고정 IP/유동 IP, 공인 IP/사설 IP로 나눌 수 있음
IP는 패킷 전달 여부를 보증하지 않아 패킷을 보낸 순서와 받는 순서가 다를 수 있으므로 TCP를 IP 위에서 동작하도록 하여 데이터의 전달을 보증하고 보낸 순서대로 받게 해줌 (TCP/IP 통신) 즉, IP 주소 체계를 따르고 IP 라우팅을 이용해 목적지에 도달하며 TCP의 특성을 활용해 송신측과 수신측의 논리적 연결을 생성하고 신뢰성을 유지할 수 있도록 하는 것
흐름제어
송신측과 수신측의 데이터 처리 속도 차이(흐름)를 해결하기 위한 기법
수신측에서 제한된 저장 용량을 초과한 이후에 도착하는 데이터는 손실될 수 있으며, 만약 손실된다면 불필요하게 응답과 데이터 전송이 송,수신 측 간에 빈번하게 발생하게 됨
이를 위해 흐름 제어를 통해 수신측이 패킷을 지나치게 많이 받지 않도록 조절함
해결 방법으로는 2가지가 존재
Stop and Wait 수신측이 송신측에게 현재 자신의 상태를 피드백하여 매번 전송한 패킷에 대해 확인 응답(ACK)을 받아야만 그 다음 패킷을 전송하는 방법
Sliding Window 수신측에서 설정한 윈도우 크기(버퍼의 크기)만큼 송신측에서 확인 응답 없이 세그먼트를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 방법
Stop and WaitSliding Window
오류제어
오류 검출과 재전송을 포함
해결방법으로는 3가지가 존재
Stop and Wait ARQ (Automatic Repeat Request) 송신측에서 1개의 프레임을 송신하고, 수신측에서 수신된 프레임의 에러 유무 판단에 따라 ACK 또는 NAK를 보내는 방식 NAK를 받은 송신측은 데이터를 재전송하게 됨
Go Back N ARQ 전송된 프레임이 손상되거나 분실된 경우, 그리고 ACK 패킷 손실로 인한 타임아웃이 발생한 경우 확인된 마지막 프레임 이후로 모든 프레임을 재전송하게 됨
SR (Selective-Reject) ARQ 손실된 프레임만 재전송하게 되므로 별도의 데이터 재정렬이 수행되어야 함
혼잡제어
송신측의 데이터 전달과 네트워크의 데이터 처리 속도 처리를 해결하기 위한 기법
한 라우터에 데이터가 몰릴 경우, 자신에게 온 데이터를 모두 처리할 수 없게 되어 호스트들은 또 다시 재전송을 하게 되어 오버플로우나 데이터 손실이 발생하게 됨
이를 위해 혼잡 현상을 방지하거나 제거하여 네트워크 내에 패킷의 수가 과도하게 증가하는 혼잡을 막도록 함
해결 방법으로는 4가지가 존재
AIMD (Additive Increase Multiplicative Decrease) 처음에 패킷을 하나씩 보내고 이것이 문제없이 도착하면 윈도우의 크기를 1씩 증가시켜가며 전송하는 방법 패킷 전송에 실패하거나 일정 시간을 넘으면 패킷을 보내는 속도를 절반으로 줄이도록 함 초기에 네트워크의 높은 대역폭을 사용하지 못하여 오랜 시간이 걸리며 네트워크가 혼잡해지고 나서야 감지할 수 있음
Slow Start AIMD와 마찬가지로 패킷을 하나씩 보내면서 시작하고, 패킷이 문제없이 도착하면 각각의 ACK 패킷마다 윈도우의 크기를 1씩 증가시켜 한 주기가 지나면 윈도우의 크기가 2배가 되도록 함 패킷 전송에 실패하거나 일정 시간을 넘으면 윈도우의 크기를 1로 떨어뜨리도록 함 이로 인해 AIMD보다 전송 속도가 지수 함수 꼴로 증가하게 됨
Congestion Avoidance 윈도우의 크기가 임계 값에 도달한 이후에는 데이터의 손실이 발생할 확률이 높으므로 이를 회피하기 위해 윈도우 크기를 선형적으로 1씩 증가시키는 방법
Fast Retransmit 패킷을 받는 쪽에서 먼저 도착해야할 패킷이 도착하지 않고 다음 패킷이 도착한 경우에도 ACK 패킷을 보내도록 함 중간에 하나가 손실되게 되면 송신 측에서 순번이 중복된 ACK 패킷을 받게 되므로 이를 3번 받게 되면 문제가 되는 순번의 패킷을 재전송하도록 함 그리고 약간 혼잡한 상황이 일어난 것이므로 혼잡을 감지하고 윈도우의 크기를 줄이게 됨
Fast Recovery 혼잡한 상태가 되면 윈도우의 크기를 1로 줄이지 않고 반으로 줄이고 선형증가시키는 방법 이 정책을 적용하면 혼잡 상황을 한 번 겪고 나서부터는 순수한 AIMD 방식으로 동작하게 됨