CS

Transport Layer - TCP

2024. 10. 7. 16:02

3.1 Transport-layer services

  • 서로 다른 호스트들의 실행중인 앱 프로세스 간의 logical communication 제공
    • Logical communication: network의 수많은 path를 고려하지 않고 end-to-end communication만 고려하는 것
  • port 번호, 전송방식(TCP/UDP) 결정 > TCP 헤더 붙음
  • Transport protocols in end sides
    • Sender : application-layer 메시지를 부분(segments)로 잘라서 network layer(IP)에게 넘겨줌
    • Receiver : IP 패킷을 받아서 TCP 또는 UDP 세그먼트로 복원한 다음, 다시 애플리케이션 레이어로 전달하여 메시지를 완성, socket을 통해 message를 app으로 demultiplex
    • 정보 전송의 과정은 IP 프로토콜을 통해 이루어지지만, 실제 데이터 형식은 TCP나 UDP에 의해 정의

 

TCP: Transmission Control Protocol

  • reliable, in-order delivery
    • error 발생 시 recovery 실시
    • out-of-order packet은 rearrange함.
  • congestion control
    • network 상에서 buffer overflow가 발생하지 않도록 Sender는 보내는 속도를 조절하는 것.
  • flow control
    • receiver 또한 받아온 packet을 transport layer의 buffer에 저장하는데, 이때 해당 버퍼에서 buffer overflow가 발생하지 않도록 sender가 보내는 속도를 조절함(throttle)

 

3.2 Multiplexing and demultiplexing

  • Multiplexing at sender: 여러 Socket에서 오는 data들에 transport header를 추가해서 packet으로 보내는 작업
  • Demultiplexing at receiver: 해당 segment의 header 정보를 이용해 적절한 socket으로 보내는 작업
    • Port 번호를 통해 Data를 목적 process에게 전달하는 작업

 

TCP에서의 demultiplexing

  • TCP socket은 4가지 tuple들에 의해서 구분 (Source IP, port / Destination IP, port)
    • demux: receiver는 segment를 올바른 socket에 연결시키기 위해서 4가지 정보를 모두 사용(애플리케이션 레이어로 전달**)**
    • server는 동시에 여러 TCP socket을 지원할 수 있음.
      • each socket은 그것의 4-tuple들에 의해서 식별됨
      • 각 socket은 서로 다른 client 하나씩 연결됨
      • socket은 1대 1 통신만 가능
    하나의 애플리케이션 내에서 여러 클라이언트 프로세스가 존재할 수 있고, 이들은 각각 독립적인 소켓을 통해 서버와 통신
    • 아래 그림에서 destination ip는 B로, port는 80으로 같지만, source IP나 port번호가 다르기 때문에 서로 다른 socket들로 demultiplex됨

 

3.3 Connection-oriented transport: TCP

(1) segment structure

  • TCP RTT(Round-Trip Time): 데이터 패킷이 전송된 후, 응답을 받기까지 걸리는 시간

(2) reliable data transfer

  • Packet이 오면 바로 ACK하는게 아니라, 좀 기다렸다가 마지막꺼에만 ACK을 보낸다. (cumulative ACK)

(3) flow control

  • receiver controls sender, so sender won’t overflow receiver’s buffer by transmitting too much, too fast
  • 만약 network layer에서 전달되는 data의 속도가 application layer에서 socket buffer를 비우는 속도보다 빠르면 어떻게 되냐? A. Buffer overflow (Loss)
    • Socker buffer에서 overflow로 인해 drop되면 cost가 너무 높아짐
    • TCP segment header에서 flow control field가 여기에 사용됨

(4) connection management

  • TCP 3 Way Handshake: TCP/IP프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에먼저정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정
    • Client > Server : TCP SYN
    • Server > Client : TCP SYN ACK
    • Client > Server : TCP ACK

 

세션(HTTP - 응용계층)

  • 클라이언트와 서버 간의 지속적인 상호작용을 가능하게 해주는 중요한 개념
    • 상태 유지: 세션은 클라이언트와 서버 간의 상태를 유지하는 데 사용. 사용자가 로그인 상태를 유지하거나 장바구니에 담은 상품 정보를 기억하는 등의 기능을 수행함.
    • 세션 식별자: 각 세션은 고유한 세션 ID를 통해 식별됨. 이 ID는 클라이언트의 요청에 포함되어 서버가 해당 세션을 인식할 수 있도록 함.
    • 기간: 세션은 일정 기간 동안 유지되며, 사용자가 로그아웃하거나 세션 타임아웃이 발생하면 종료됨.
    • 프로토콜: 세션은 HTTP와 같은 무상태 프로토콜에서 상태를 유지하기 위해 주로 사용되며, 쿠키나 URL 파라미터 등을 통해 관리됨.

 

TCP의 3-way Handshaking 과정

[STEP 1] A클라이언트는 B서버에 접속을 요청하는 SYN 패킷을 보낸다.

  • Client : CLOSED -> SYN_SENT
  • Server : LISTEN

[STEP 2] B서버는 SYN요청을 받고 A클라이언트에게 요청을 수락한다는 ACK 와 SYN flag 가 설정된 패킷을 발송하고 A가 다시 ACK으로 응답하기를 기다린다.

  • Client : CLOSED
  • Server : SYN_RCV

[STEP 3] A클라이언트는 B서버에게 ACK을 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게 되는 것이다.

  • Client : ESTABLISED
  • Server : SYN_RCV ⇒ ACK ⇒ ESTABLISED

 

 

TCP의 4-way Handshaking

  • 연결 해제
  • FIN (finish) : 세션을 종료시키는데 사용되며, 더 이상 보낸 데이터가 없음

 

3.4 TCP congestion control

  • flow control: receiver가 sender에게 너무 압도 당하지 않도록 보내는 packet 수를 제한하는 것
    • 목적: 수신자가 송신자에게 압도 당하지 않도록 데이터 전송 속도를 조절
    • 적용 대상: 송신자와 수신자 간의 개별 연결에서 발생
    • 작동 방식: 수신자가 처리할 수 있는 데이터량(버퍼 크기)에 따라 송신자가 전송하는 패킷의 수를 제한. 예를 들어, TCP에서는 수신자가 자신의 수신 창 크기를 송신자에게 알려 주고, 송신자는 이 크기를 초과하지 않도록 데이터를 전송
  • congestion control: network에 너무 많은 packet으로 인한 overhead(congestion)을 막기 위해 보내는 packet 수를 제한하는 것
    • 목적: 네트워크 전체에서 과도한 패킷으로 인한 혼잡을 방지
    • 적용 대상: 네트워크의 모든 송신자와 수신자 간의 통신에 영향
    • 작동 방식: 네트워크의 혼잡 상태를 감지하고, 패킷 손실이나 지연을 기반으로 송신 속도를 조절. TCP에서는 여러 알고리즘(예: AIMD, Slow Start 등)을 사용하여 네트워크의 상태에 따라 전송 속도를 동적으로 조절