posted by SoundHacker 2019. 12. 16. 08:29

서브넷팅이란?

네트워크 갯수와 호스트의 갯수를 조절하여 효율적으로 네트워크 자원을 분배하는 것!

일단 IPv4는 0.0.0.0~255.255.255.255의 주소를 사용한다.

여기서 A, B, C class로 나눠 사용하게 된다.

 

A, B, C class는 나중에 따로 정리할 것이므로 우선 서브넷팅부터 알아보자.

 

124.32.1.0이라는 IPv4주소가 있다고 가정하자.

11111111.11111111.11111111.11000000 으로 서브넷팅을 하면? (십진수에서 이진수로 나타냄)

4개의 네트워크와 64개의 호스트를 받을 수 있다.

마지막에오는 "11000000"이 중요하다. 

 

여기서 11은 네트워크의 갯수를 의미한다.

1의 갯수만큼 2^n을 하면 사용가능한 네트워크수가 나오게 된다.

 

반대로 000000은 호스트의 수를 의미한다.

0의 갯수만큼 2^n을 하면 접속가능한 호스트수가 나오게 된다.

 

기본적인 원리는 위의 설명대로 사용한다.

 

이를 응용하기 위해 나온것이 가변길이 서브넷팅(VLSM)이다.

 

일단 차이점을 알아보자면, 기존 서브넷팅 한 네트워크를 또 서브넷팅으로 나눌 수 있다.

즉, 정말로 필요한 만큼 할당이 가능해 지는 것이다. 

 

만약 회사에서 A라는 부서에 100개, B라는 부서에 40개, C라는 부서에 10개를 할당해주어야 한다면,

11111111.11111111.11111111.10000000로 서브넷팅을 해서 128개 중 100개를 A에 할당,

11111111.11111111.11111111.11000000로 서브넷팅을 해서 64개 중 40개를 B에 할당,

11111111.11111111.11111111.11100000로 서브넷팅을 해서 16개 중 10개를 C에 할당한다.

 

필요한 만큼 자원을 분할하여 낭비를 줄이도록 하는 것이 서브네팅의 핵심이다.

 

'해킹보안 > Network' 카테고리의 다른 글

DHCP(Dynamic Host Configuration Protocol)이란?  (0) 2019.11.13
NAT(Network Address Translation)이란?  (0) 2019.11.13
TCP Retransmission(TCP 재전송)  (0) 2019.09.10
SSL터널링  (0) 2019.09.10
posted by SoundHacker 2019. 11. 13. 18:29

http://www.gilgil.net/?document_srl=1004275&mid=communities_kr

 

(KR) - [tip] Kali Linux 부팅시 blank screen에서 더 이상 진행이 되지 않을 때

Kali Linux를 설치하고 나서 재부팅을 하면 커서만 깜빡거리면서 더 이상 부팅이 진행이 안되는 현상이 있다. 이 현상을 방지하기 위해서는 Kali를 설치할 때 가장 마지막 부분에서  GRUB boot loader를 어디에 설치할 것인지 물어 보는데, 이 경우 Enter device manually를 선택하지 말고 첫번째 disk를 선택하도록 한다. 이거 알아 낸다고 존나 고생했다.

www.gilgil.net

칼리리눅스 Vmware에 깔고나서 여태것 블랙스크린에서 아무것도 되지않는 오류? 때문에

재설치만 4~5번은 했었던 것 같은데 찾다보니 저런글이 있어서 저대로 설치해보니 그뒤로는 한번도

블랙스크린을 볼 수 없었다.

 

GRUB 설치위치 지정할때 디폴트값 말고 아래있는걸 선택하면 해결된다...

posted by SoundHacker 2019. 11. 13. 15:03

DHCP(Dynamic Host Configuration Protocol)

- 동적 호스트 설정 통신규약(직역..)

기존에 고정 IP를 써보려 했거나 사용중이라면, 경험해 보았을 일들이 있다.

IP하나 오타로 인해 인터넷이 안되거나, 전원이 꺼져있는 컴퓨터, 네트워크 기기에 모두 IP를

할당해 주어야하는 등의 불편함이다. 그 외에도 네트워크 자원 소모 자체가 크다.

 

이러한 불편함을 해소 할 수 있는 것이 DHCP이다.

동적 호스트 설정 통신규약이라는 말처럼 DHCP는 IP를 동적으로 할당한다.

일단 필요한 개념은 임대(lease), 갱신(renewal), 반환(release)이다.

 

임대는 말그대로 해당 IP를 빌려주는 것이다.

보통은 8일로 기간을 설정해 두는데, 장소, 사용량에 따라 다르게 설정할 수 있다.

임대기간이 끝나면 해당 IP를 반환해야한다.

 

갱신은 보통 임대갱신이라고 하는데, 이는 임대기간을 늘려주기 위한 기능이다.

쓰고있던 IP를 사용중인지 확인하고 사용중이라면 임대기간을 늘려주는 기능이라고 생각하면 된다.

아무래도 임대 -> 반환 -> 다시 임대 하려면 시간도 낭비되고 불필요한 트래픽도 만든다.

그러므로 아예 임대 -> 갱신 하면 조금더 효율적인 사용이 가능해진다.

보통 갱신은 임대기간의 50%가 지나갈 때 시도한다. 이때 사용중이라면 기간을 연장,

만약 해당 장치가 꺼져있는등 사용하지 않는 것이 확인되거나 임의의 이유로 인해 갱신에 실패하면

2차 갱신을 시도하는데 이것은 임대기간의 87.5%가 지나갈 때 시도한다. 

2차갱신마저 실패하면 해당 IP를 반환한다. 필요할 경우 다시 임대하여 사용하여야 한다.

 

반환은 DHCP의 가장 중요한 기능이다.

임대기간이 지나거나 사용이 끝난 IP를 다시 사용가능한 주소풀에 넘겨주는 과정이다.

이게 잘 이뤄지지 않는다면 고정IP보다도 못한 프로토콜이 되므로, 가장 중요하다고 볼 수 있다.

 

이러한 원리를 바탕으로 이용하는 공격기법도 있다.

DHCP exhaustion attack이다.

일단 원리를 보자면,  MAC주소를 계속 바꿔가면서 계속 임대를 받아서 사용가능한 주소풀, 즉 네트워크 자원을

몽땅 잡아버려서 더이상 사용 불가능한 상태로 만들어 버리는 것이다.

 

그 외에도 흔히 중간자 공격으로 알고 있는  DHCP MITM attack도 가능하다.

중간자 공격은 피해자의 PC가 공격자의 DHCP를 커쳐 통신을 하게하는 방식이다. 그렇다보니 공격자는

피해자의 통신 과정속에서 주요정보를 가로채서 분석하는 것이 가능해질 뿐더러, 피싱도 가능하다.

 

'해킹보안 > Network' 카테고리의 다른 글

서브넷팅  (0) 2019.12.16
NAT(Network Address Translation)이란?  (0) 2019.11.13
TCP Retransmission(TCP 재전송)  (0) 2019.09.10
SSL터널링  (0) 2019.09.10
posted by SoundHacker 2019. 11. 13. 14:36

NAT(Network Address Translation)이란?

라우터가 광역망이랑 로컬(지역, 내부)망과 통신을 할때 사용 가능한 기능으로,

외부의 서버나 컴퓨터의 입장에서 보면 라우터(요즘은 공유기에도 NAT기능이 있다.)만 확인가능하고,

그 밑의 하위망은 PC가 몇대가 있던간에 확인 할 방법이 없다.(그야 공유기의 공인IP만 서버에겐 보이므로) 그러므로 보안에 도움이 되기도 한다.

 

한개의 인터넷 회선만으로도 여러 PC를 연결하여 사용할 수 있도록 해주는 것이 바로 이 NAT덕분이다.

외부 서버의 입장에서는 라우터 하위의 망에 있는 PC 0과 PC 1을 알 수 없다. 

또한 직접적인 외부와의 통신은 라우터가 맡아서 하기 때문에 공인IP의 소모 또한 줄일 수 있다.(다만 무수히 많은 사설IP를 배정한다면 이야기가 달라지지)

 

예시를 들어보자면, 

집에있는 공유기를 예로 들 수 있다. 3대의 PC가 집안에 있는 공유기를 거쳐 통신을 한다고 가정하자.

PC1 = 192.168.22.1 / PC2 = 192.168.22.2 / PC3 = 192.168.22.3 이라는 사설IP를 부여받았다.

공인IP는 132.423.23.1 이라고 가정한다.

 

공유기는 이 사설IP들을 가진 PC들과 통신을 거쳐서 패킷을 외부의 서버를 통해 전달하게 된다. 이 때 서버의 입장에서는 공유기에 부여된 공인IP (132.423.23.1)와 통신을 하게 된다. PC1번이든 2번이든 3번이든 상관없이 공인IP (132.423.23.1)와 통신하는것이다.

그렇다면 IPv4의 갯수가 부족해서 IPv6이 나왔다는데 공유기를 문어발처럼 연결- 연결 - ... 해나가면 무한대로 늘릴수 있을까?

 

그건 불가능하다.

 

공유기가 부여받은 것은 공인IP 1개이고, 그 공인IP의 포트를 각각의 사설 IP에 부여하는 방식으로 통신을 하게 된다.

즉 65535개라는 포트갯수의 제한에 발이 묶여서 사용 불가능할 뿐더러...

65535개의 사설IP를 통한 통신을 감당할 만한 스펙의 (어마무시한)공유기가 있어야 하고, 시분할방식으로 나눠야 되는데 그렇다면 어마어마한 딜레이가 생길 것이다. 게다가... 공유기 하나 거칠때마다 TTL이 1씩 줄어드는걸 감안하면(time to live / https://soundhacker.tistory.com/7) 돌다가 폐기당할 가능성도 있다.(물론 조절은 가능하지만)

 

 

'해킹보안 > Network' 카테고리의 다른 글

서브넷팅  (0) 2019.12.16
DHCP(Dynamic Host Configuration Protocol)이란?  (0) 2019.11.13
TCP Retransmission(TCP 재전송)  (0) 2019.09.10
SSL터널링  (0) 2019.09.10
2019. 10. 23. 22:53

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

posted by SoundHacker 2019. 10. 23. 22:32

프로젝트 구상 이후 구체적인 구현방법을 정리해서 하나씩 실행해보고 있다.

 

프로젝트 간단설명

- 로보티즈에서는 roboplus라는 프로그램에서 모션을 저장하고 불러와서 사용하는 기능이 있다.

그러나 이것은 로보티즈의 cm계열 제어기를 사용할 때에만 해당하는 사항이다. 그 외의 다른 보드를 이용하거나 Embedded C를 통한 개발을 하게 된다면 모션기능은 사용할 수 없게 된다. 게다가 아두이노를 배우게 되면서 아두이노와 다이나믹셀을 사용할 때에는 각 다이나믹셀마다 위치값 지정, 토크 설정등을 개별적으로 해줘야 하는 것을 알게 되어서 다이나믹셀을 더 편하게 제어할 수 있는 방법은 없을까? 라는 의문으로 동아리에서 프로젝트를 진행하게 되었다.

 

기존에 정리해둔 메모

================================================================

1 - 다이나믹셀 쉴드를 이용하여 모션제어 구현하기
- 다이나믹셀 쉴드 필요(24,000)
- 버튼 3개 이용
- 토크 on off 버튼
- LED로 토크 상태 확인
- 현재 모터값 기록 버튼
- LCD를 이용하여 모션 번호 저장
- 가변저항과 세그먼트(엘레베이터?)를 이용하여 번호를 지정
- 지정번호 모션을 실행 할 버튼

결론

준비물
가변저항 1개 - 번호 지정
세그먼트 1개 - 번호 표시
LCD(16x2)? 1개 - 모션 갯수 확인 // 구현할 때 보드의 핀이 모자라다면 삭제될 수 있음(우선순위 가장 마지막..)
LED 1개 - 토크 on/off 상황
다이나믹셀 쉴드 1게 - 다이나믹셀..

버튼 3개 - 토크 on/off & 모터값 기록 & 지정번호 실행

------------------------------------------
2019 09 18

선택가능한 제어방법
1. 아두이노 - Dynamixel 
편하긴한데 일단 이거하려면...
- 일단 메가보드 기본으로 깔고가야함
- SW시리얼 많이써야함
- TTL 통신은 가능한게 확인됬는데 그 외 규격이 맞는질 모르겠음
- 보드 연결하면 엄청나게 더러워짐(기본적으로 다이나믹셀 하나에 TTL통신케이블 2개 + 수 to 수캐이블 3개)


2. 아두이노 - 다이나믹셀 쉴드 - Dynamixel
다이나믹셀 동작 여부 : 100% 가능함
- 가능하긴한데 다이나믹셀 쉴드를 구입해야 됨. 
- 현재 깔려있는 아두이노프로그램을 온전히 이용할 수 있음
- 인터넷에 해당 라이브러리 사용법이 잘 정리되어있음

3. openCM9.04 - Dynamixel
다이나믹셀 동작 여부 : 100% 가능함
- 가능한데 opencm을 구입해야됨.
- 일반적인 아두이노 프로그램이 아니라 로보티즈ver 아두이노를 사용해야함


4. cm530 - Dynamixel
- 이거 하려면.. 일단 기본 R+task는 의미없고, Embedded C써야함
- 설치과정 복잡
- eclipse 사용해야됨.(e메뉴얼........)


5. 아두이노 - cm530 - Dynamixel
일단 통신속도 맞추니 신호가 왔다갔다하는게 관찰은 되는데 문제는 서로 규격이 안맞는거같음
둘다 시리얼 기반이라 가능할 것 같긴한데 잘 모름..
- 가능하면 아무것도 안사고 가능함
- 전원은 cm530에서 공급받아서 안정적

 


================================================================

 

여기서 가변저항, 7세그먼트를 이용한 것은 구현이 되는지 시각적으로 확인하길 위한 요소이다.

개발할 때에는 해당 부분을 변수로 대체하여 이용한다면 소프트웨어상에서 바로 모션을 동작 시키는 것이 가능하다.

 

구현

 

시도해 본 것

1. 아두이노 우노보드와 cm530보드를 TTL통신으로 바로 연결해보자! (feat. 창동 1,2타임..)

- 통신 속도를 두 보드 다 맞춘 다음 시리얼 모니터로 체크 해본 결과

- 아두이노의 시리얼 모니터에서는 알 수 없는 문자가 잡혔다.

- 로보티즈의 시리얼 모니터에서는 아예 신호조차 잡지 못했다.

 

2. 로보티즈의 지그비를 이용하여 통신이 가능할까?

- 로보티즈의 지그비는 송-수신 모듈이 분리되어있다.

- 아두이노에서 모듈이 인식가능하다면 두 보드를 이용한 통신을 바탕으로 개발이 가능할 것이다.

- 그러나 아두이노에서 인식 시키지 못했다.

 

3. 로보티즈의 블루투스모듈 이용

- 위의 지그비와는 다르게 로보티즈는 로보티즈의, 아두이노는 아두이노의 HC-06 모듈을 사용했다.

- 그러나 두 모듈 모두 master모드(다른 기기로 연결요청을 보내는 모드)가 되지 않았다.

 

4. 아두이노 - cm530 (feat. Bluetooth)

블루투스 모듈이 양쪽다 슬레이브여서 연결이 안됨.. 

 

5. (얼마전에 찾은 유튜브..참고)다이나믹셀을 전원부만 분리하고, 데이터만 아두이노 우노에 연결한다.

- 12DC 전원을 브레드보드에 연결하고 VCC는 바로 다이나믹셀(AX-12A)에 연결.

- GND는 12DC에서 공급, 아두이노 우노보드와 다이나믹셀은 공급받는 형태로 연결.

- 실질적으로 다이나믹셀이 아두이노 우노보드와 연결된건 TX핀 -> 보드와는 데이터 통신만 함.(외부전원 공급)

- 해당 영상에서 사용한 헤더파일은 링크를 타고 들어가보니 404뜸

- 깃헙에서 같은 헤더파일로 추측되는 헤더 파일 다운로드 후 사용해봄

- 샘플코드에서 헤더를 인식 못함.

- 코드를 짠 다음 작동시켜봐도 반응이 없음.

- 그러나 전원을 공급할 때 다이나믹셀의 LED가 점등되는 것으로 보아 적정량의 외부전원을 공급했다는 것을 알 수 있음.

 

 

+ 로보티즈의 e메뉴얼을 찾다보니, 직접 주소로 통신하는 방법도 괜찮을 것이라 생각되었다.

4번 방법을 시도할 때 헤더파일을 열어서 코드를 보았는데, 사실상 헤더파일의 역할은 해당 주소를 알기 쉬운 이름으로 사전에 정의해 둔 다음 다이나믹셀의 통신규격(8bit, 패리티비트 없음, 1 stop bit)에 맞춰서 전송해 주는 역할 만 하고있었다.

그러므로 직접 헤더를 만들어서 하나씩 확인해 나가면서 시도하거나, 코드 자체에 필요한 주소만 바로 정의해 나가면서 사용하는 방법도 괜찮을 것 같다.

 

나름 여러가지 시도를 하면서 다이나믹셀에 대한 이해도가 올라가고 있다는 것을 느꼈지만,

위의 방법들이 모두 안된다면 결국 다이나믹셀 쉴드를 사고 프로젝트를 진행하는 것이 가장 좋을 것 같다.

 

2019.12

다이나믹셀 쉴드가 도착했다.

일단 다이나믹셀 쉴드를 사용하기 위해 필요한 것들을 보면,

- TTL통신 포트 (다이나믹셀 to 다이나믹셀 쉴드, 수 to 수 케이블)

- 외부전원(아두이노 보드 - 노트북 전원으로는 전압 딸림)

- 점퍼선(외부전원을 배터리를 통해 공급할 경우)

- 그 외 잡다한 것들 (I/O 용도로 사용)

 

일단 알아둬야 할 것들

가지고 있는 외부전원 공급장치

12v짜리 DC전원 공급기

11.2v짜리 배터리

 

다이나믹셀 ax-12a (16개)

TTL 통신케이블

 

직접 써보고 생긴 문제점

분명 TTL 포트는 맞는데 커넥터 형태가 달라서 잘 들어가지 않음.

억지로 넣으면 들어가긴하는데 불안정함.

통신할 때 알수없는 문자들만 나옴.(통신 속도 문제 X)

외부전원 공급할 때 배터리와 연결하는 케이블 바꿔야함(터트릴 뻔함, 케이블 살짝 탐)

 

위 문제들 덕분에 코드만 있고 정작 실행은 해보지도 못했다..

 

 

posted by SoundHacker 2019. 9. 13. 21:03

자주 쓰는 헤더

 

-stdio.h

standard input/output header파일로, 기본적인 입출력에 관련된 함수가 정의되어 있다.

 

-stdlib.h

standard library header파일로, 문자열 변환할때나, 메모리와 관련된 함수가 정의되어있다.

 

-math.h

math(수학)과 관련된 여러가지 ex)절대값 반환..등 함수가 정의되어 있다.

 

-bits/stdc++.h

편의를 위한 헤더파일로, 표준 라이브러리들을 한꺼번에 정의해주는 헤더이다.

그렇다보니 메모리와 시간을 잡아먹고, gcc컴파일러에서 사용되는, GNU C++의 표준 라이브러리 헤더가 아니다보니

여러 불편한 점이 있을 수 있다.

 

데이터 처리를 위한 헤더

-ctype.h

char type 헤더? (아마 추측) 로, 문자를 검사하려 T,F로 반환하거나 특정 조건에 맞는 문자를 변환해주는 함수를 가진 헤더이다.

 

-string.h

문자열 처리를 도와주는 헤더파일로, ctype.h와 비슷해 보일 수 있으나 ctype.h는 각 문자를 하나씩 보기때문에,

문자열로 된 데이터를 처리 하기 위해서는 string.h가 조금 더 유용하다.

 

메모리관련

 

-malloc.h

malloc은 동적 메모리 할당에 사용하는 함수들을 모아놓은 헤더이다.

 

콘솔

-conio.h

console input/output 헤더로 콘솔과 관련한 입출력에 대한 함수들을 정의하고 있다.(콘솔게임 개발때 사용!)

 

-windows.h

WINAPI와 관련된 여러 함수들과 그외에 윈도우와 관련된 매크로 등을 포함하고 있는 헤더파일이다.

여러 헤더파일들을 자식 헤더로 가지고 있는데 그중에 위의 ctype.h가 포함되어있다.

  • excpt.h - 예외 처리
  • stdarg.h - 가변 인자 함수들(표준 C 헤더)
  • windef.h - 다양한 매크로와 타입들
  • winnt.h - 다양한 매크로와 타입들 (윈도우 NT를 위한)
  • basetsd.h - 다양한 타입들
  • guiddef.h - GUID 타입
  • ctype.h - 문자 분류 (표준 C 헤더)
  • string.h - 문자열과 버퍼들 (표준 C 헤더)
  • winbase.h - kernel32.dll: 커널 서비스; advapi32.dll:커널 서비스(예를들면 CreateProcessAsUser 함수), 접근 제어(예를들면 AdjustTokenGroups 함수).
  • winerror.h - 윈도우 에러 코드
  • wingdi.h - GDI (그래픽 장치 인터페이스)
  • winuser.h - user32.dll: 사용자 서비스
  • winnls.h - NLS (네이티브 언어 지원)
  • wincon.h - 콘솔 서비스
  • winver.h - 버전 정보
  • winreg.h - 윈도우 레지스트리
  • winnetwk.h - WNet (윈도우 네트워킹)
  • winsvc.h - 윈도우 서비스와 SCM (서비스 제어 관리자)
  • imm.h - IME (입력기)

부가적인 헤더파일들

  • cderr.h - CommDlgExtendedError 함수 에러 코드
  • commdlg.h - 일반적인 대화 상자
  • dde.h - DDE (동적 데이터 교환)
  • ddeml.h - DDE 관리 라이브러리
  • dlgs.h - 일반 대화 상자를 위한 다양한 상수들
  • lzexpand.h - LZ (Lempel-Ziv) 압축/압축해제
  • mmsystem.h - 윈도우 멀티미디어
  • nb30.h - NetBIOS
  • rpc.h - RPC (원격 프로시저 호출)
  • shellapi.h - 윈도우 셸 API
  • wincrypt.h - 암호화 API
  • winperf.h - 성능 모니터링
  • winresrc.h - 리소스에서 사용되는
  • winsock.h - Winsock (윈도우 소켓), 버전 1.1
  • winspool.h - 프린트 스풀러
  • winbgim.h - 표준 그래픽 라이브러리

-

posted by SoundHacker 2019. 9. 10. 21:51

TCP재전송이란?

간단히 정리하자면

서버와 클라이언트 사이에서 정체모를 이유로 통신중에 패킷이 도착하지 못할 경우

다시 패킷을 보내주는것을 말한다.(양방향 모두 포함)

 

구현은 어떻게 할까?

Timer(타이머)를 이용하여 구현하게 된다.

즉 타이머가 만료되기 전에 도착하는가? 를 기준으로 판단하여 재전송 여부를 결정하는 것이다.

 

그러면 각 상황별로 살펴보게된다면?

1. Server to Client

이 과정에서 서버가 클라이언트에게 패킷(Packet)을 보내다가 어떤 이유로 수신을 하지 못하게 된 경우,

응답(ACK)를 받지 못한 송신자의 타이머는 만료되게 된다.

2. Client to Server

위의 과정에서 볼 수 있는 것처럼 클라이언트에게 패킷을 보내서 정상적으로 클라이언트가 패킷을 수신하더라도

ACK가 오는 과정에서 손실이 될 수 있다. 이 경우에도 마찬가지로 송신을 받지 못하게 된 송신자의 타이머는 만료된다.

3. To...Many..Delay....

분명 정상적으로 패킷을 보내고, 수신자도 정상적으로 ACK를 보낸다..그러나 이 과정에서 네트워크 지연이 생기게 되면?

분명 타이머의 형태이기에 이 타이머가 끝난 다음에 도착할 수도 있다. 바로 이 case를 말하는 것이다.

 

그래서! 타이머의 시간을 적당히 설정하는게 중요하다.

그 이유는 위에서 알 수 있듯

1, 2번에서는 너무 타이머가 길면 말 그대로 TCP Retransmission까지 걸리는 시간이 너무 길어지고,

반대로 타이머가 너무 짧으면 3번 현상이 너무 많이 일어나면서 정상적으로 도착한 경우에도 타이머가 만료되어

재전송을 하게 되기 때문이다.

 

그래서 Retransmission TimeOut (RTO)라는 것이 있다.

RTO는 위의 상황을 막기 위해 적절한 타이머 만료시간을 설정하는 것이다.

보통 운영체제 커널에 있으나, 네트워크 상황별로 유동적으로 변하게 된다.

 

물론! 굳이 타이머만 써야 하는건 아니다.

Triple Duplicate ACK라는 방법도 있다.

이걸 직역하면 3개의 복제된 ACK인데 정말 말 그대로다.

3개의 ACK를 받으면 재전송을 하는 방법으로, 시간 지연은 발생하지 않게 되고

수신자가 보낸 ACK가 타이머의 역할을 대신 하고 있기때문에 빠르게 재전송을 할 수 있는 것이다.

 

그리고 ACK를 줄이기 위해 효율적인 방법으로는 Delayed ACK, 즉 일정 시간만큼 기다렸다가 ACK를 보내는 것이다.

말 그대로 효율을 위한 것이기 때문에 딜레이된 시간동안 도착한 패킷이 있다면 Delayed ACK timeout을 다시 초기화하고, 그렇지 않으면 ACK를 보낸다. (Delay ACK timeout은 일반적으로 200ms)

 

 

'해킹보안 > Network' 카테고리의 다른 글

서브넷팅  (0) 2019.12.16
DHCP(Dynamic Host Configuration Protocol)이란?  (0) 2019.11.13
NAT(Network Address Translation)이란?  (0) 2019.11.13
SSL터널링  (0) 2019.09.10