문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/77886?language=cpp [월간 코드 챌린지 시즌2]에 나온 문제라고 한다.문제는 짧아서 좋긴 한데, 풀기 어려웠다. 문제 핵심 및 풀이 우선순위 파악 이 문제에서 구해야 하는 것은 입력 숫자에 대해 사전순으로 가장 빠른 것을 찾는 것이다. 앞자리에 '0'이 많을수록 사전순으로 빠르다.110을 삽입할 때, 적어도 기존의 위치보다는 더 앞자리에 있어야 한다. 110을 삽입한다고 생각해 보자.만약 '0' 앞에 삽입한다면 이 자리에 있던 '0'은 원래 자리보다 3칸이나 더 뒤로 미뤄지는 것이다. 그래서 '0'이 있다면 뒤에 삽입하는 것이 사전순으로 이득일 것이다. 이런 식의 사고를 이어가..
문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/72414?language=cpp 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 2021 카카오 블라인드 코딩 테스트에서 나온 문제 제한 시간을 두고 풀었을 때는, 감도 잡기 어려웠다. 처음에는 그리디처럼 생겨서 이리저리 정렬해 보다가 실패했다. 문제 핵심 및 풀이 누적합 누적합이라는 아이디어만 떠올리면, 해당 문제는 수월한데.. 떠올리기가 어렵다. 힌트를 얻을 수 있는 부분은 광고 누적 재생시간의 계산 방식이다. 임의에 시각에 시작해서 재생..
TCP 연결 관리 일반적인 네트워크 공격의 대부분은 TCP 연결 관리의 취약점을 악용 SYN 플러드(flood) 공격 등 TCP 연결 설정의 자세한 과정 가정 호스트(클라이언트)에서 운영되는 프로세스가 다른 호스트(서버)의 프로세스와 연결 설정을 원함 → 클라이언트 TCP에게 연결 설정을 원하다는 사실을 알린다. → 클라이언트 TCP는 TCP를 이용해 서버와 TCP 연결 설정을 시작함 연결 설정을 위해 두 호스트 사이에서 3개의 패킷이 송신됨 → 세 방향 핸드 셰이크 세 방향 핸드셰이크 1단계 클라이언트 측 TCP는 서버 TCP에게 SYN 세그먼트를 송신 SYN 세그먼트 애플리케이션 계층 데이터를 포함하지 않는다. SYN 비트라고 불리는 하나의 비트 플래그를 1로 설정 → SYN 세그먼트라고 불리는 이유..
흐름 제어 서비스(flow-control service) 애플리케이션에게 흐름 제어 서비스를 제공하는 이유 TCP 연결의 각 종단에서 호스트들은 연결에 대한 개별 수신 버퍼를 설정 → 송신자는 수신자의 버퍼를 오버플로시키는 것을 방지하기 위해 제공 수신자의 버퍼가 오버플로가 발생하는 과정 TCP 연결이 순서대로 올바르게 바이트를 수신할 때 TCP는 데이터를 수신 버퍼에 저장 해당 애플리케이션 프로세스는 버퍼에서 데이터를 읽지만, 수신한 시점에 읽을 필요 없음 → 오랜 시간 동안 데이터를 읽지 않을 수도 있음 송신자가 점점 더 많은 데이터를 전송함으로써 연결의 수신 버퍼에 오버플로 발생 애플리케이션이 데이터 읽는 속도가 느릴수록 발생 가능성 높음 송신자의 데이터 전송 속도가 빠를수록 발생 가능성 높음 흐름..
신뢰적인 데이터 전송 비신뢰적인 인터넷의 네트워크 계층(IP 서비스) 인터넷 프로토콜은 데이터그램 전달을 보장 X 데이터그램이 순서대로 전달되는 것도 보장 X 데이터그램에 포함된 데이터의 무결성(intergrity)을 보장 X 비트가 손상될 수도 있다. IP 서비스에서 데이터그램은 라우터의 버퍼를 오버플로 상태로 만들 수 있음 트랜스포트 계층의 세그먼트가 IP 데이터그램에 의해 네트워크 상에서 운반됨 → 트랜스포트 계층의 세그먼트도 이러한 문제를 겪을 수 있음 TCP의 신뢰적인 데이터 전송 서비스 TCP는 IP의 비신뢰적인 최선형 서비스에서 신뢰적인 데이터 전송 서비스를 제공 TCP 타이머 관리 절차에서는 단일 재전송 타이머 사용을 권장한다. 전송됐지만 아직 확인응답받지 못한 세그먼트와 개별적인 타이머가..
왕복 시간(RTT) 예측 TCP는 손실 세그먼트를 발견하기 위해 타임아웃/재전송 메커니즘을 사용 SampleRTT SamepleRTT : RTT 샘플 세그먼트 RTT(Rount-trip time) : 세그먼트가 송신된 시간부터 긍정 확인응답될 때까지의 시간의 길이 TCP는 한 번에 하나의 SampleRTT만 측정 → 모든 전송된 세그먼트에 대해 SampleRTT를 측정하지 않는다. → SampleRTT가 전송되었지만 현재 확인응답이 없는 세그먼트 중 하나에 대해서만 측정됨 이 측정시간은 왕복시간마다 SampleRTT의 새로운 값을 얻게 한다. TCP는 재전송한 세그먼트에 대한 SampleRTT는 계산하지 않고, 한 번 전송된 세그먼트에 대해서만 측정한다. SampleRTT의 값 해당 값은 라우터에서의 혼..
순서 번호와 확인 응답 번호 TCP 세그먼트 헤더에서 가장 중요한 필드 TCP의 신뢰적인 데이터 전송 서비스의 중대한 부분 순서 번호의 사용 일련의 전송된 세그먼트에 대해가 아닌, 전송된 바이트 스트림에 대한 관점을 반영 TCP는 데이터를 구조화하지 않고, 순서대로 정렬되어 있는 바이트 스트림으로 봄 세그먼트에 대한 순서 번호 → 세그먼트에 있는 첫 번째 바이트의 바이트 스트림 번호 실제 TCP 연결 양쪽 모두 시작 순서 번호를 임의로 선택 → 종료 이후에도 네트워크에 남아있던 세그먼트와의 오인될 확률을 최소화하기 위해 → 같은 호스트 간의 나중 연결을 위해서 순서 번호 사용 예시 가정 호스트 A 프로세스는 TCP 연결상에서 호스트 B의 프로세스로 데이터 스트림의 전송을 원함 호스트 A의 TCP는 데이터..
TCP 연결 TCP - 연결지향형(connection-oriented) 두 프로세스 간의 데이터 전송 및 수신을 위해 핸드셰이크가 필요 데이터 전송을 보장하는 파라미터들을 설정해야 함 → 각자 어떤 사전 세그먼트들을 보낸다. TCP 연결의 양단은 TCP 연결과 연관된 많은 TCP 상태 변수를 초기화한다. TCP 관점에서의 연결 두 통신 종단 시스템의 TCP에 존재하는 상태를 공유하는 논리적인 것 TCP 프로토콜은 오직 종단 시스템에서만 동작, 중간 네트워크 요소에서는 동작 X → 중간 네트워크 요소들은 TCP 연결 상태를 유지하지 않는다. 중간 라우터들은 TCP 연결을 전혀 감지하지 못한다. 중간 라우터는 연결은 보지 못하고, 데이터그램만 봄 TCP 연결은 한쪽 호스트에서의 소켓 연결과 다른 쪽 호스트에..