TCP flow control 기법과 Nagle 알고리즘

글쓴이: 익명 사용자 / 작성시간: 일, 2018/08/05 - 5:50오후
tcp/ip socket 관련 책을 읽다가 nagle 알고리즘을 알게 되었고 그 특징이 매우 stop and wait 방식과 흡사하다고 생각하여 stop and wait 방식을 구현한 알고리즘을 nagle이라고 하는구나라고 이해했는데요. 저만의 해석인지라 구글링했는데 별도의 방식이라는 글을 봤습니다.
1. nagle 알고리즘을 또 하나의 flow control 기법이라고 생각해야 하는 것인지
2. 그게 아니라면 패킷 단위로 전송한 stop and wait에 이미 nagle 알고리즘이 적용된 것이고 마찬가지로 윈도우를 도입해서 좀 더 동적인 흐름제어를 한 sliding window 기법에도 ack를 받으면서 윈도우를 앞으로 전진시키니까 이미 nagle 알고리즘이 깔러있다고 생각하아 하는 것인지
3. 그것도 아니면 어떤 범주에 전달 방식으로 이해을 해야 하는 것인지
궁급합니다. 답변 부탁드립니다!
Forums:
참고해보세요.
- 랜카드 속성과 공유기 보시면. QoS 도 있어요. ㅇ_ㅇ;;
- Nagle 을 setsockopt() 함수의 TCP_NODELAY 옵션 TCP_CORK 옵션 '등으로 사용한다고 합니다.
- 윈도우의 경우. 하드와 그래픽카드 장치 드라이버. 메모리 영향도 받습니다.
- 각 함수의 인자값. 리턴값. 오류값 ' 등에 설명을 확인해보시기 바랍니다.
자세한 설명이 있네요. 책 예제 '도. 참고 해 보세요.
Tcp ip & io model
https://www.slideshare.net/namhyeonuk90/tcp-ip-io-model?qid=82b13f03-01c8-4acb-ba8f-e2de401b1c3d&v=&b=&from_search=1
TcpNoDelay, TcpAckFrequency 값을 수정하여 게임 응답속도올리기
http://windowexe.tistory.com/351
http://testingblog123.tistory.com/24
https://www.codeproject.com/search.aspx?q=nagle&x=0&y=0&sbo=kw
추천도서 - C, 자료구조, C++, STL, Win32 API, MFC, 소켓
http://egloos.zum.com/adept/v/1825638
열혈강의 TCP/IP 소켓 프로그래밍 by 윤성우
http://m.blog.daum.net/keon01/27
Nagle 알고리즘 사용시 MSS 최대 크기 만큼 쌓이면 전송.
TCP/IP 소켓 프로그래밍 9강
https://m.blog.naver.com/PostView.nhn?blogId=ccw3435&logNo=100110418816&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F
[TCP/IP 소켓 프로그래밍] 9. 소켓의 다양한 옵션
http://sdr1982.tistory.com/10
9-4. TCP_NODELAY
네트워크 상의 패킷 수를 줄이기 위해 제안된 알고리즘
ACK을 수신해야만 다음 전송을 진행하는 알고리즘.
장점 : 네트워크의 효율성이 높아진다. (적은 패킷의 양)
단점 : 전송 속도가 느리다. (ACK 수신 후 패킷 전송)
TCP 소켓의 Nagle 옵션...
http://www.gpgstudy.com/forum/viewtopic.php?t=8050
Winsock 사용 하 여 TCP 통한 작은 데이터 세그먼트를 보내는 설계 문제
https://support.microsoft.com/ko-kr/help/214397/design-issues-sending-small-data-segments-over-tcp-with-winsock
양쪽 TCP_NODELAY 옵션을 설정
소켓의 다양한 설정
http://seolis.tistory.com/entry/소켓의-다양한-설정
[SOCKET-FAQ] 2. 클라이언트와 서버 양쪽에 관한 질문 (TCP/SOCK_STREAM)
http://forum.falinux.com/zbxe/index.php?document_srl=448212&mid=network_programming
[TCP/IP] 소켓 옵션
http://springsource.tistory.com/141
Windows CE TCP / IP는 RFC 896에 설명 된 Nagle 알고리즘을 구현합니다.
이 알고리즘의 목적은 특히 지연이 큰 (원격) 링크에서 보낸 아주 작은 세그먼트의 수를 줄이는 것입니다.
Nagle 알고리즘은 승인없이 한 번에 하나의 작은 세그먼트 만 해결할 수 있습니다.
첫번째 세그먼트에 대한 ACK를 기다리는 동안 더 작은 세그먼트가 생성되면,이 세그먼트는 하나의 큰 세그먼트로 합쳐집니다.
사용 가능한 충분한 수신 윈도우가 있다고 가정 할 때, 풀 사이즈 세그먼트는 항상 즉시 송신된다.
Nagle 알고리즘은 특히 느린 연결을 통해 텔넷과 같은 대화 형 응용 프로그램에서 보내는 패킷 수를 줄이는 데 효과적입니다.
Linux에서는 TCP_NODELAY이 없나요?
https://kldp.org/node/165
tcp_nodelay 또는 tcp_nagle_limit 옵션
https://www.ibm.com/support/knowledgecenter/ko/ssw_aix_71/com.ibm.aix.performance/tcp_nodelay_tcp_nagle_limit.htm
4.4. TCP_NODELAY and Small Buffer Writes
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_MRG/1.2/html/Realtime_Tuning_Guide/sect-Realtime_Tuning_Guide-Application_Tuning_and_Deployment-TCP_NODELAY_and_Small_Buffer_Writes.html
TCP (Transmission Control Protocol)에서 간략하게 설명했듯이 기본적으로 TCP는 Nagle의 알고리즘을 사용하여 작은 송신 패킷을 수집하여 한꺼번에 전송합니다. 이것은 대기 시간에 해로운 영향을 줄 수 있습니다.
TCP_NODELAY 및 TCP_CORK을 사용하여 네트워크 대기 시간 향상
전송 된 모든 패킷에 대해 더 낮은 대기 시간을 필요로하는 응용 프로그램은 TCP_NODELAY가 사용 가능한 소켓에서 실행되어야합니다. 소켓 API를 사용하여 setsockopt 명령을 통해 활성화 할 수 있습니다.
# int one = 1;
# setsockopt (디스크립터, SOL_TCP, TCP_NODELAY, 하나, sizeof (one));
이를 효과적으로 사용하려면 응용 프로그램이 논리적으로 관련된 작고 작은 버퍼 쓰기를 수행하지 않아야합니다. TCP_NODELAY가 활성화되어 있기 때문에 이러한 작은 쓰기는 TCP가 이러한 여러 버퍼를 개별 패킷으로 보내도록하여 전체 성능이 저하 될 수 있습니다.
응용 프로그램에 논리적으로 관련된 여러 개의 버퍼가 있고 하나의 패킷으로 보내야하는 경우 연속 된 패킷을 메모리에 작성한 다음 TCP_NODELAY로 구성된 소켓에서 TCP로 논리 패킷을 보낼 수 있습니다.
또는 I / O 벡터를 작성하고 TCP_NODELAY로 구성된 소켓에서 writev를 사용하여 커널에 전달하십시오.
또 다른 옵션은 응용 프로그램이 패킷을 보내기 전에 코르크를 제거 할 때까지 기다리는 TCP_CORK를 사용하는 것입니다. 이 명령은 수신 한 버퍼가 기존 버퍼에 추가되도록합니다. 이를 통해 응용 프로그램은 커널 공간에 패킷을 작성할 수 있습니다. 계층에 대한 추상화를 제공하는 다른 라이브러리를 사용할 때 필요할 수 있습니다. TCP_CORK을 활성화하려면 setsockopt 소켓 API를 사용하여 값을 1로 설정하십시오 (이를 "소켓 연결"이라고 함).
# int one = 1;
# setsockopt (디스크립터, SOL_TCP, TCP_CORK, 하나, sizeof (one));
논리 패킷이 응용 프로그램의 다양한 구성 요소에 의해 커널에 빌드되면 TCP에 코르크를 제거하라고 지시하십시오. TCP는 응용 프로그램에서 추가 패킷을 기다리지 않고 누적 된 논리 패킷을 즉시 보냅니다.
# int zero = 0;
# setsockopt (디스크립터, SOL_TCP, TCP_CORK, & zero, sizeof (zero));
TCP_NODELAY 옵션과 Nagel 알고리즘
http://buggymind.com/310
Nagle알고리즘? 네트워크 상에 패킷의 수를 줄이기 위해 개발된 알고리즘
http://egloos.zum.com/depiness/v/772710
setsockopt function
https://docs.microsoft.com/en-us/windows/desktop/api/winsock/nf-winsock-setsockopt
1. 소켓옵션
https://www.joinc.co.kr/w/Site/Network_Programing/AdvancedComm/SocketOption
소켓 옵션 설정하기(setsockopt)
http://snowdeer.github.io/c++/2017/08/17/setsockopt/
행복한 코딩 세상 :: setsockopt(2) - socket의 속성을 설정하는 함수
http://downman.tistory.com/49
Man page ? GETSOCKOPT
https://nxmnpg.lemoda.net/ko/2/setsockopt
setsockopt() ? Set options associated with a socket
https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.3.0/com.ibm.zos.v2r3.bpxbd00/setopt.htm
setsockopt(2) - Linux man page
https://linux.die.net/man/2/setsockopt
TCP/IP Nagle 알고리즘 관련
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=819333&ref=819333
CAsyncSocket에서 통신할때, Flush()???
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=380024&ref=328186
nagle algorithm과 UDP...TT
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=277585&ref=277585
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
댓글 달기