TCP/IP 모델
- 프로토콜
- 서로다른 하드웨어와 운영체제 등이 서로 통신을 하기위해 모든 요소에 규칙이 필요합니다. 이런 규칙을 프로토콜이라고 부릅니다.
- 패킷(Packet)이란?
- 인터넷 내에서 데이터를 보내기 위한 경로 배정(라우팅)을 효율적으로 하기 위해서 데이터를 여러 개의 조각으로 나누어 전송을 하는데, 이때 조각을 패킷이라고 한다. 보통 모든 데이터 단어가 패킷의 범주라고 합니다.
- TCP/IP 모델
- TCP/IP는 인터넷 프로토콜 중 가장 중요한 역할을 하는 TCP와 IP의 합성어로 데이터의 흐름 관리, 정확성 확인, 패킷의 목적지 보장을 담당한다. 데이터의 정확성 확인은 TCP가, 패킷을 목적지까지 전송하는 일은 IP가 담당한다.
- 인터넷 프로토콜(Internet Protocol Stack)는 지금 대부분 TCP/IP를 따르고 있다. TCP/IP는 OSI 표준 모델과 달리 4계층에 다 포함시키고 있다. 데이터는 위의 그림과 같이 헤더를 점점 붙여 전송하는 데이터 캡슐화를 거친다.
- (Data → Segment → Datagram → Frame)
- 응용(애플리케이션) 계층 : 실질적으로 사람들에 서비스를 제공하는 계층입니다.
- 대표 프로토콜 : FTP, HTTP, SSH, DNS
- 전송 계층 : 송신측과 수신측을 연결하는 통신 서비스를 제공하고 연결지향적, 신뢰성, 흐름제어를 제공합니다. → 애플리케이션과 인터넷 계층 사이의 DATA가 전달되도록 중계합니다.
- 대표 프로토콜 : TCP, UDP, QUIC
- 인터넷 계층 : 장치로부터 받은 패킷을 목적지 IP주소로 전송하기 위해 사용하는 계층입니다. 비연결형으로 상대가 제대로 받았는지 보장하지 않습니다.
- 대표 프로토콜 : IP, ARP, ICMP
- 네트워크 (링크)계층 : 전선, 무선 등으로 실질적으로 데이터를 전달하며 장치 간에 신호를 주고받는 규칙을 정하는 계층입니다. 몇몇의 경우 TCP/IP 계층을 5단계로 나누어 네트워크 접근 계층을 피지컬 계층과 데이터 링크 계층으로 나누기도 합니다.
- 피지컬 계층 : LAN을 통해 비트(0 or 1) 단위의 데이터를 보내는 계층입니다.
- 데이터 링크 계층 : 이더넷 프레임을 통해 오류 제어, 흐름 제어, 접근 제어를 담당하는 계층입니다.
- 대표 프로토콜 : 이더넷
- 애플리케이션
- 정리하자면 응용(브라우저, 프로그램 등)에서 서버에 보낼 데이터를 입력하면 Socket을 통해 os에 메시지를 전달합니다. TCP 정보를 추가하고 IP 패킷을 생성하며, 이 TCP/IP 패킷이 인터넷 망을 통해 서버로 전송되고 역캡슐화하여 데이터가 전송된다.
TCP/IP란?
- TCP/IP
- TCP/IP는 인터넷 프로토콜 중 가장 중요한 역할을 하는 TCP와 IP의 합성어로 데이터가 원하는 수신측으로 보낼 수 있도록 보장해주는 통신 규약입니다.
- 데이터의 정확성 확인, 흐름 관리는 TCP가, 패킷을 목적지까지 전송하는 일은 IP가 담당한다.
- TCP
- 신뢰 있는 데이터 전송을 지원하는 연결 지향형 프로토콜
- 3-way handshake라는 과정을 통해 연결을 설정하고 통신을 시작하여 연결지향적 서비스를 제공한다.
- 4-way handshake 과정을 통해 연결을 해제(가상 회선 방식)한다.
- 흐름 제어, 혼잡 제어, 오류 제어를 통해 신뢰성을 보장한다. 그래서 header가 크고 UDP보다 전송 속도가 느리다.
- 데이터의 전송 순서를 보장하며 수신 여부를 확인할 수 있다.
- TCP를 사용하는 예로는 대부분의 웹 HTTP 통신, 이메일, 파일 전송에 사용된다.
- TCP가 가상회선 방식은 송신측과 수신측을 연결하여 패킷을 전송하기 위한 논리적 경로를 배정한다는 뜻이다.
- IP란?
- IP는 Internet Protocol의 줄임말로, 인터넷에서 컴퓨터의 위치를 찾아서 데이터를 전송하기 위한 규약입니다. 수많은 컴퓨터가 인터넷을 하기 위해서는 서로를 알 수 있도록 주소를 부여했는데 이 것을 IP주소라고 합니다.
- IP는 4개의 숫자로 구성되며 숫자의 크기에 따라 IPv4(32비트, 각 숫자는 1바이트), IPv6(128비트, 각 숫자는 4바이트)로 나뉩니다. 일반적으로는 IPv4는 10진수로 표현하며 각 자리는 .으로 구분하고, IPv6는 각 자리를 4자리 16진수로 표현하며 각 자리는 :로 구분합니다. 맨 아래 계층인 IP는 올바른 목적지를 찾는 내비게이션 역할을합니다.
- 이 때 IP만 알고 있으면, IP에서도 어디서 필요한 패킷인지 알 수 없습니다. 이때 PORT정보를 통해 데이터를 어디에 전달할지를 구분한다. 즉, 한 PC가 여러 대의 서버와 통신하고 있을 때, TCP/IP 패킷에 담긴 PORT에 따라 동일 IP 내의 프로세스를 구분할 수 있습니다. PORT는 0~65535까지 할당이 가능하지만, 0~1023 포트까지는 잘 알려진 포트이므로 사용하지 않는 것이 좋습니다.
흐름제어
- 송신측과 수신측의 데이터 처리 속도 차이(송신측 속도가 빠른경우)로 수신측에서 제한된 저장 용량을 초과후에 도착하는 데이터는 손실 될 수 있으며, 만약 손실 된다면 불필요하게 전송이나 응답이 발생할 수 있다.
- 이것을 방지하기 위해 송신측의 데이터 전송량을 제어하는 것이 흐름제어이다.
- stop and wait 방식
- 전송한 패킷마다 확인 응답을 받는 경우만 그 다음 데이터를 전송하는 방법
- 패킷을 하나씩 보내 비효율적이다.
- Sliding Window
- 수신 측에서 설정한 윈도우 크기만큼 송신 측에서 확인 응답(ACK) 없이 segment를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 제어 기법이다.
- 동작방식
- 윈도우에 포함되는 모든 패킷을 전송하고, 그 패킷들의 전달이 확인되는대로 이 윈도우를 옆으로 옮겨서 그 다음 패킷들을 전송
- 윈도우의 크기는 3 way handshaking을 통해 수신측의 윈도우 크기로 설정되고, 이후 수신측 버퍼의 남은 공간에 따라 변한다.해결방법
- stop and wait 방식
혼잡제어
- 만약 한 라우터에 데이터가 몰려 처리할 수 있는 양을 넘으면 초과된 데이터는 라우터가 처리하지 못한다. 이때 송신측에서는 처리하지 못한 데이터를 손실 데이터로 판단하여 계속 재전송하여 네트워크를 혼잡하게 한다. 이것을 방지하기 위해 송신 측의 전송 속도를 조절하는 것이 혼잡제어이다.
- 즉, 흐름 제어는 송 수신 측 사이의 전송속도를 제어하는 것이고, 혼잡 제어는 송신측에서 네트워크내의 패킷수를 조절하여 네트워크의 혼잡을 방지하는 것이다.
- 해결방법
- AIMD(Additive Increase / Multiplicative Decrease)
- 직역하면 합 증가 / 곱 감소
- 처음에 패킷을 하나씩 보내고 문제없이 도착하면 window 크기를 1씩 증가시켜가며 전송하고 실패하거나 일정 시간이 지나면 보내는 속도를 1/2으로 줄인다.
- 여러 호스트가 한 네트워크를 공유하고 있으면 후진입하는 쪽이 처음에는 불리하지만, 시간이 흐르면 평형상태로 수렴한다.(공평한 상태라고도 한다.)
- 문제점은 초기에 네트워크의 높은 대역폭을 사용하지 못하여 처음 전송 속도를 올리는 것에 오랜 시간이 걸리게 되고, 혼잡을 미리 감지하지 못한다. → 후조치
- Slow Start (느린 시작)
- Slow Start는 윈도우의 크기를 2^n과 같이 지수적으로 증가시키다가 혼잡이 감지되면 윈도우 크기를 1로 줄인다.
- 전송속도는 AIMD에 반해 지수 함수 꼴로 증가한다. 대신에 혼잡 현상이 발생하면 window size를 1로 떨어뜨리게 된다.
- 이 방식은 보냈던 데이터의 ACK가 도착할 때마다 윈도우 크기를 증가시키기 때문에 윈도우 크기가 느리게 증가할지라도, 나중에는 윈도우 크기가 가파르게 증가한다는 장점이 있다.
- Fast Retransmit (빠른 재전송)
- 빠른 재전송은 TCP의 혼잡 조절에 추가된 정책이다.
- 수신측에서 패킷이 순서대로 도착하지 않는 경우 순서대로 도착한 마지막 패킷의 다음 순번을 ACK 패킷에 실어서 보내게 된다.
- 즉, 중간에 하나가 손실하면 송신측에서는 순번이 중복된 ACK 패킷을 받는다.
- 이런 중복 ACK를 3개를 받으면 재전송을 하고, 혼잡을 감지하고 윈도우 크기를 줄인다.
- 이것을 감지하는 순간 문제가 되는 순번의 패킷을 재전송 해줄 수 있다.
- Fast Recovery (빠른 회복)
- 혼잡시 window size를 1로 줄이지 않고 1/2으로 줄인 후 선형증가시키는 방법이다. 이 정책까지 적용하면 혼잡 상황을 한번 겪고 나서부터는 AIMD 방식으로 동작한다.
- AIMD(Additive Increase / Multiplicative Decrease)
'CS > 네트워크' 카테고리의 다른 글
Blocking,Non-blocking & Synchronous,Asynchronous (0) | 2022.09.20 |
---|---|
TLS/SSL HandShake (0) | 2022.09.20 |
HTTP & HTTPS (0) | 2022.09.20 |
대칭키 VS 공개키 (0) | 2022.09.20 |
UDP (0) | 2022.09.20 |