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 등)을 사용하여 네트워크의 상태에 따라 전송 속도를 동적으로 조절