✔️ TCP와 IP
TCP의 개념
- TCP (Transmission Control Protocol, 전송 제어 프로토콜)
- 네트워크 통신에서 신뢰적인 연결방식을 보장할 수 있도록 하는 프로토콜
- 데이터를 여러 개의 조각으로 나눈 패킷을 추적 및 관리하며
목적지에서는 패킷을 재조립하여 패킷의 분실 확인 처리를 함 - 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¹²⁸개의 주소를 가질 수 있음
- IPv4 : 전 세계적으로 사용된 첫 번째 인터넷 프로토콜
- 나누는 방식에 따라 고정 IP/유동 IP, 공인 IP/사설 IP로 나눌 수 있음
- IP는 패킷 전달 여부를 보증하지 않아 패킷을 보낸 순서와 받는 순서가 다를 수 있으므로
TCP를 IP 위에서 동작하도록 하여 데이터의 전달을 보증하고 보낸 순서대로 받게 해줌 (TCP/IP 통신)
즉, IP 주소 체계를 따르고 IP 라우팅을 이용해 목적지에 도달하며
TCP의 특성을 활용해 송신측과 수신측의 논리적 연결을 생성하고 신뢰성을 유지할 수 있도록 하는 것
흐름제어
- 송신측과 수신측의 데이터 처리 속도 차이(흐름)를 해결하기 위한 기법
- 수신측에서 제한된 저장 용량을 초과한 이후에 도착하는 데이터는 손실될 수 있으며,
만약 손실된다면 불필요하게 응답과 데이터 전송이 송,수신 측 간에 빈번하게 발생하게 됨 - 이를 위해 흐름 제어를 통해 수신측이 패킷을 지나치게 많이 받지 않도록 조절함
- 해결 방법으로는 2가지가 존재
- Stop and Wait
수신측이 송신측에게 현재 자신의 상태를 피드백하여
매번 전송한 패킷에 대해 확인 응답(ACK)을 받아야만 그 다음 패킷을 전송하는 방법 - Sliding Window
수신측에서 설정한 윈도우 크기(버퍼의 크기)만큼 송신측에서 확인 응답 없이 세그먼트를 전송할 수 있게 하여
데이터 흐름을 동적으로 조절하는 방법
- Stop and Wait
오류제어
- 오류 검출과 재전송을 포함
- 해결방법으로는 3가지가 존재
- Stop and Wait ARQ (Automatic Repeat Request)
송신측에서 1개의 프레임을 송신하고, 수신측에서 수신된 프레임의 에러 유무 판단에 따라 ACK 또는 NAK를 보내는 방식
NAK를 받은 송신측은 데이터를 재전송하게 됨 - Go Back N ARQ
전송된 프레임이 손상되거나 분실된 경우,
그리고 ACK 패킷 손실로 인한 타임아웃이 발생한 경우 확인된 마지막 프레임 이후로 모든 프레임을 재전송하게 됨 - SR (Selective-Reject) ARQ
손실된 프레임만 재전송하게 되므로 별도의 데이터 재정렬이 수행되어야 함
- Stop and Wait ARQ (Automatic Repeat Request)
혼잡제어
- 송신측의 데이터 전달과 네트워크의 데이터 처리 속도 처리를 해결하기 위한 기법
- 한 라우터에 데이터가 몰릴 경우, 자신에게 온 데이터를 모두 처리할 수 없게 되어
호스트들은 또 다시 재전송을 하게 되어 오버플로우나 데이터 손실이 발생하게 됨 - 이를 위해 혼잡 현상을 방지하거나 제거하여 네트워크 내에 패킷의 수가 과도하게 증가하는 혼잡을 막도록 함
- 해결 방법으로는 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 방식으로 동작하게 됨
- AIMD (Additive Increase Multiplicative Decrease)
'Tech Interview > Network' 카테고리의 다른 글
[Network] 쿠키와 세션 (0) | 2024.01.17 |
---|---|
[Network] CORS (0) | 2024.01.17 |
[Network] HTTP와 HTTPS (0) | 2024.01.16 |
[Network] TCP와 UDP (0) | 2024.01.16 |
[Network] OSI 7계층 (0) | 2024.01.15 |