- 재전송 타이머 값이 종종 상대적으로 길어지므로, 손실된 패킷의 재전송 전에 지연시간이 커진다.
- 위의 상항을 해결하고자 중복 ACKs를 통해 손실된 세그먼트를 검출한다.
- 송신측에서 바로바로 여러 개의 세그먼트를 전송할 경우, 세그먼트가 손실되면 수신측에서는 중복 ACK를 보내게 되는데, 타임아웃 전에 송신측에서 중복 ACK를 3번받게 되면 세그먼트를 즉시 전송한다.즉, 수신측이 기다리는 순서번호의 세그먼트보다 큰 순서번호의 세그먼트가 3개 도착할 경우를 의미한다.
- 점대점(Point-to-Point) : 단일 송/수신자간의 통신 ex) 일대일 통신, Unicast 전송
Unicast : 고유 주소로 식별된 하나의 네트워크 목적지에 메시지를 전송하는 방식
Broadcast : 송신 가능한 모든 목적지에 동일한 데이터를 전송
Multicast : 특별한 주소 지정 방식을 통해 정해진 여러 목적지로 데이터를 전송
호스트가 무수히 많은 경우, Unicast로 데이터를 전송하면, 각각의 네트워크 연결마다 호스트의 컴퓨팅 리소스(자원)을 소비할 뿐 아니라 각각 다른 네트워크 대역폭을 필요로 하기 때문에 전송 비용이 많이 든다는 단점이 있다.
- 파이프라인(Pipeline) : TCP의 혼잡 제어 및 흐름 제어가 윈도우 크기(Window size)를 결정한다.
Window size : ACK받지 않은 데이터 중 최대 송신가능한 바이트 수, 수신자가 한 번에 버퍼링할 수 있는 최대 데이터 크기
Sliding Window: 두 개의 네트워크 호스트 간의 패킷의 흐름을 제어하기 위한 방법으로, TCP 프로토콜은 데이터의 전달을 보증해야 하므로 패킷 하나 하나가 정상적으로 전달되었음을 알리는 확인 신호(Acknowledgement, ACK)를 수신자가 송신자에게 보내야 한다.
패킷에 오류가 생겼을 경우, 송신측에서 해당 패킷을 재전송해야 하는데 이 때 Sliding Window가 Window Size(메모리 버퍼의 일정 영역)에 포함되는 모든 패킷을 전송하고, 패킷의 전달이 확인되는 대로 이 Window를 옆으로 옮김(Sliding)으로써 그 다음 패킷들을 전송할 준비를 한다.
- 전이중성 데이터(Full-duplex Data) : 같은 연결 상에서 양방향 데이터 흐름
- 최대 세그먼트 크기 (Maximum Segment Size, MSS)
헤더를 제외하고 TCP가 실을 수 있는 최대 데이터 크기
기본값은 IPv4 -> 536 Byte, IPv6 -> 1220 Byte이다.
최대 전송 단위(MTU)에 의해 값이 결정되며, MSS값은 헤더의 MSS 옵션 필드에 저장된다.
연결에 참여하는 두 장비가 서로 다른 MSS값을 갖을 수도 있다.
- 최대 전송 단위(Maximum Transmission Unit, MTU)
데이터 링크(2계층) 또는 네트워크(3계층)에서 하나의 프레임 또는 패킷에 담아 운반할 수 있는 헤더를 포함한 최대 데이터 크기
최소 권고값은 2계층 기준 1500Byte이며, 3계층 기준 IPv4는 MSS 크기에서 40byte(IP헤더+TCP헤더)를 추가한 576Byte이고, IPv6는 1280Byte이다.
실제로는 최대 65,646바이트 범위까지 생성가능하다.
- MTU가 IP 기반의 정보인 반면, MSS는 TCP 기반의 정보이다.
- TCP는 연결지향형으로 제어 메시지들의 교환(Handshaking)이 이루어진다. 핸드쉐이킹을 통해 데이터 교환 전에 송신자 및 수신자의 상태를 초기화한다.
- 흐름 제어(Flow Control) : 수신자의 속도에 맞춰서 송신자가 데이터를 보낸다.
- 기다리는 것보다 높은 순서번호를 가진 세그먼트가 도착. 즉, 송신측에서 여러 개의 세그먼트를 전송한 후 중간 세그먼트가 손실된 경우 => 즉시 기다리는 바이트의 순서번호에 해당하는 중복 ACK를 전송한다. 이 때, 보낼 세그먼트가 없더라도 ACK를 위해 헤더만 별도로 생성하여 송신측으로 전송한다. (ACK는 항상 세그먼트의 헤더에 포함되어 있음 - piggybacked ACK 방식)
- 위의 상황에서 발생한 갭(손실된 세그먼트)를 부분적으로 또는 모두 채워주는 세그먼트가 도착한 경우 => 부분적으로 도착하면 아직 받지 못한 세그먼트 중 가장 낮은(오래된) 순서번호의 ACK를 전송한다. 모두 도착했다면 위의 상황에서 높은 순서번호를 가진 세그먼트의 다음 세그먼트의 순서번호를 가진 ACK를 전송한다.
- 전송 프로토콜(Transport Protocol)은 종단점(end-system)에서 적용된다.
송신 호스트 : 데이터 메시지를 세그먼트로 분해하여 네트워크 계층(3계층)으로 전송한다.
수신 호스트 : 세그먼트들을 데이터 메시지로 재조립하여 응용 계층으로 전송한다.
- TCP와 UDP가 대표적인 전송 프로토콜이며, 그 외에도 많이 이용된다.
- Throughput(스루풋, 처리율) : 네트워크 통신에서 노드 사이 또는 파이프 사이에서 전달되는 단위 시간당 전송되는 디지털 데이터 처리량. 주로 초당 비트수(bps)가 사용된다.
▶ Transport VS Network Layer
- Network Layer(네트워크 계층, 3계층) : 호스트들 간의 논리적 통신을 돕는다.
- Transport Layer(전송 계층, 4계층) : 응용 프로세스 간의 논리적 통신을 돕는다.
- 네트워크 계층부터 하위 계층(1~3)들은 하드웨어적인 통신을 많이 다루고, 전송 계층부터 상위 계층(4~7)들은 소프트웨어적인 통신을 많이 다룬다.
▶ 인터넷 전송계층 프로토콜
- Transmission Control Protocol (전송 제어 프로토콜, 이하 TCP)
신뢰성 있고, 순서가 보존되는 전송 시스템
Congestion Control(혼잡 제어), Flow Control(흐름 제어), Connection Setup(연결 설정) 등 각종 오류를 제어한다.
웹 브라우저들이 월드 와이드 웹에서 서버에 연결할 때 사용되며, 이메일 전송 및 파일 전송에도 사용된다.
- User Datagram Protocol (사용자 데이터그램 프로토콜, 이하 UDP)
신뢰성 없고, 순서가 보장되지 않는 전송 시스템
꼭 필요한 기능(전송)만 하고, 오류 제어와 같은 추가 기능을 필요로 하지 않는 애플리케이션에 사용된다.
추가 기능이 없기 때문에 오버헤드가 작고 지연 시간이 짧다는 장점이 있다.
- 이용되지 못하는 서비스 : 시간 및 대역폭이 보장되지 않으므로 스루풋도 보장되지 않는다.
여기서 “보장되지 않는다.”는 것은 1초에 100개와 같이 딱 떨어지지 않음을 의미한다.
▶ Multiplexing & Demultiplexing
- 네트워크 소켓 (Network Socket) : 컴퓨터 네트워크의 사이에 있는 프로세스 간 통신의 종착점이다. 컴퓨터 간 통신의 대부분은 IP(인터넷 프로토콜)을 기반으로 하고 있고, 네트워크 소켓의 대부분은 인터넷 소켓이다. 네트워크 통신을 위해서 송,수신측에서는 소켓을 생성하고, 이 소켓을 통해 서로 데이터를 교환한다.
- Multiplexing(다중화) at Sender : 다수의 소켓들로부터 추가 정보(목적지 주소 등)를 얻어서 전송할 데이터의 헤더에 해당 정보(목적지 주소 등)를 추가하는 기능.
- Demultiplexing(역다중화) at Receiver : 수신된 데이터를 적절한 소켓으로 전달하기 위해 헤더 정보를 이용한다. 하위 계층에서 상위 계층으로 올라갈 때마다 헤더가 작아지면서 전송할 데이터가 목적지에 도착한다.