TCP flow control 기법과 Nagle 알고리즘

익명 사용자의 이미지

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. 그것도 아니면 어떤 범주에 전달 방식으로 이해을 해야 하는 것인지

궁급합니다. 답변 부탁드립니다!

shint의 이미지

- 랜카드 속성과 공유기 보시면. 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

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.