본문 바로가기

컴퓨터공학21

[Protocol] Nagle Algorithm * Nagle Algorithm? Server의 ACK를 받기 전까지 출력 버퍼에 보낼 패킷을 쌓고 ACK를 받으면 버퍼에 있던 패킷을 한번에 전송하는 TCP 통신 알고리즘 * TCP Flow Control TCP 패킷 흐름 제어 방식에는 Stop-and-wait, Sliding Window 등이 있다. 1. Stop-and-wait Stop-and-wait 같은 경우는 ACK를 수신 받아야 다음 패킷을 보낼 수 있어서 비효율적이다. 2. Sliding Window 쉽게 설명하면 Window 사이즈만큼 한번에 패킷을 전송할 수 있는 방법이다. Window 사이즈는 동적으로 변한다. * 송신했으나 아직 확인 응답을 못받았으면 Window에서 나머지만큼만 전송이 가능하다. (Window 7칸 중 2개 보냈는.. 2020. 8. 2.
[Protocol] TLS Handshake SSL (Secure Socket Layer) / TLS (Transport Layer Security) 네트워크에서 암호화하여 데이터를 전송하는 프로토콜이다. 이전에는 SSL이었고 최근에는 TLS이라는 더 강력한 버전의 SSL을 사용한다. SSL/TLS가 사용되는 대표적인 예인 HTTPS는 HTTP통신에 SSL 인증서를 사용하여 보안을 강화시키는 방법이다. 이때, TLS가 아니라 SSL로 이야기하는 것은 일반적으로 SSL을 많이 사용해왔기 때문이다. 그렇다면, 이 SSL/TLS로 어떻게 암호화 및 인증을 하는지 알아보자! 1. Client Hello (Client -> Server) Client가 사용할 SSL의 버전 정보, Cipher 할 수 있는 List, Client 난수를 생성해서 전송 2. S.. 2020. 8. 2.
[GoF] 전략 패턴 프로그래밍을 하다보면 if문으로 상황에 따른 조건을 지정해주는 경우가 있다. 가령 다음과 같은 경우이다. public fun example(item: List): Int{ var sum = 0 for(i in 0..item.size()){ if(item[i] == 1){ sum += 1 } else if(item[i]%2 == 0){ sum += 2 } else{ sum -= 1 } } return sum } 이때, 조건이 다양해 질 수록 if문이 복잡해지기 마련이다. 그래서 해당 조건에 따른 행동을 interface로 지정하고 상황에 따라서 interface를 implement한 객체를 지정해준다. 코드로 확인해보자. public class Example{ private var strategy = St.. 2020. 7. 5.
Time Complexity (시간복잡도) 시간을 기준으로 알고리즘의 효율성을 분석할 때, CPU에서의 실제 작동시간을 재지 않는다. 왜냐하면 알고리즘을 수행하는 특정 컴퓨터에 따라서 결과가 달라 질 수 있기 때문이다. 컴퓨터, 프로그래밍언어, 프로그래머뿐만 아니라 루프 색인의 증가, 포인터의 세팅 등과 같은 모든 알고리즘 상의 복잡한 세부사항과는 독립적인 측정법이 필요하다. 실행시간은 입력의 크기가 커지면 증가하고, 총 실행시간은 단위연산이 몇 번 수행되는가에 거의 비례하기 때문에 단위연산이 수행되는 횟수를 분석하여 알고리즘의 효율성을 분석한다. 즉, Time Complexity란 입력크기를 기준으로 단위연산을 몇 번 수행하는지 구하는 것이다. 단위연산의 횟수를 세는 데에는 차수가 중요하다. 복잡도 카테고리는 여러가지, 셀 수 없을 만큼 많지만.. 2018. 12. 24.