기본적으로 TCP는 Nagle 알고리즘을 사용하여 작은 패킷들을 모아 하나의 큰 패킷으로 전송한다.
Nagle 알고리즘은 작은 크기의 데이터를 여러 번 전송하는 것보다 하나의 큰 패킷으로 묶어서 전송하는 방식이다. 이를 통해 다음과 같은 방식으로 동작합니다:
- 작은 패킷이 보낼 때: TCP 연결에서 애플리케이션이 작은 데이터를 여러 번 전송하려고 할 경우, Nagle 알고리즘은 데이터를 모아서 큰 패킷으로 묶어 보낸다.
- 버퍼가 채워질 때까지 대기: 작은 패킷을 보내는 대신, 이미 전송된 패킷에 대한 **ACK(확인 응답)**을 받기 전까지 새로운 패킷 전송을 대기한다. 또는 버퍼가 꽉 차면 전송을 진행한다.
- 큰 패킷 전송: 큰 데이터가 전송되거나, ACK를 받은 후에는 대기하던 데이터를 한 번에 전송한다.
TCP_NODELAY 설정:
- Nagle 알고리즘의 문제점:
- 패킷을 모으는 동안 지연 시간이 발생.
- 실시간 데이터 전송(예: 채팅, 게임)에는 부적합.
- 해결 방법:
1. TCP_NODELAY 옵션을 사용해 Nagle 알고리즘을 비활성화.
- 작은 패킷이라도 즉시 전송하도록 설정.
int flag = 1;
setsockopt(client_socket, IPPROTO_TCP, TCP_NODELAY, &flag, sizeof(int));
2. 스레드를 특정 CPU 코어에 고정하여 캐시 효율성을 높이고 컨텍스트 스위칭 오버헤드를 줄입니다.
-
- 멀티코어 환경에서 성능 최적화에 매우 유용.CPU 코어 고정:
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(2, &cpuset); // 2번 코어에 고정
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
'개인공부 > 네트워크' 카테고리의 다른 글
| epoll vs 멀티스레딩 (0) | 2025.01.23 |
|---|---|
| DPDK 패킷 처리 (0) | 2025.01.22 |
| 소켓프로그래밍#11 표준 입출력 함수와 시스템 함수 (1) | 2024.10.29 |
| 쿠키와 세션의 구조 - 세션 로그인과 JWT 로그인 차이 (0) | 2024.10.29 |
| NAT DHCP 목적, 구조와 동작방법 (3) | 2024.10.28 |