IT 꿀팁
windowsize scale 본문
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 |