Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Tags
more
Archives
Today
Total
관리 메뉴

IT 꿀팁

windowsize scale 본문

패킷

windowsize scale

찡찡빠 2017. 2. 16. 11:10

TCP연결을 맺을떄, Syn패킷에는 자기가받을수있는 windowsize를 상대에게 알리도록 되어있음

이값은 0~65535(64K)까지인데 TCP자체가 오래된 프로토콜이다보니 요즘세상에 64K로 뭘할라니 너무작음


그래서 RFC1323에서 TCP window scaling이라는 옵션을 정의

- TCP헤더 옵션필드에 window scale이라는 필드에 window size를 키울수있도록함

이필드에는 0~14까지 지정할수있고 이값은 2^n값으로 연산되며 window scaling factor라고함 기본 윈도우값과 곱하기연산수행

64K*2^14 연산으로 최대 1G의 윈도우크기를 얻을수있음


위의경우 4bit shift되어 기본 8192*16연산하여 131072윈도우크기를 갖게됨


TCP window scale을 사용하려면 통신하는 host모두 이옵션이 활성화 되어있어야함



윈도우 (cmd)

확인 

netsh int tcp show global












수산창 자동조정수준 결과값 확인



변경 netsh int tcp set global autotuninglevel=disable


scaling 옵션 설명

disable : 사용안함

highlyrestricted 2bit (*4) : 수신 창이 기본값 이상으로 확장될수 있도록 허용

restricted 4bit (*16) : 수신 창이 기본값 이상으로 확장될수 있도록 허용

normal 8bit (*256) : 수신 창이 거의 모든 시나리오에 맞게 확장될 수 있도록 허용

Experimental  14bit (*16384) : 수신창이 극도의 시나리오에 맞게 확장 되도록 허용

* 위의 비트시프트(factor)값은 와이어샤크로 한번해본결과임 다를수있음

normal로 했을경우 대용량 업다운로드시 속도향상있다는 뇌피셜


리눅스

확인 

sysctl net.ipv4.tcp_window_scaling 1일경우 활성화 0일경우 비활성화

변경 

sysctl -w net.ipv4.tcp_window_scaling=1

상세 커널 파라미터변경

$ sysctl -w net.core.rmem_default="253952"
$ sysctl -w net.core.wmem_default="253952"
$ sysctl -w net.core.rmem_max="16777216"
$ sysctl -w net.core.wmem_max="16777216"
$ sysctl -w net.ipv4.tcp_rmem="253952 253952 16777216"
$ sysctl -w net.ipv4.tcp_wmem="253952 253952 16777216"

일부 보안장비중 slowread탐지룰을 windowscale이 고려되지않은 windowsize로 보고 오탐하는경우가있으니 참고바람

> 스케일링되어 실제 데이터read값은 많으나 보안장비에서 스케일된내용은 참고하지 않아 적은 데이터를 오랜시간 read한다고 생각하고 탐지할수있음

'패킷' 카테고리의 다른 글

TCP flag  (0) 2017.03.02
TCP delayed ACK time  (0) 2017.03.02