반응형

분류 전체보기 285

컴퓨터 네트워크 - TCP Three & Four way handshaking

TCP Connection Management TCP 송신 측과 수신 측은 데이터 세그먼트들을 주고받기 전에 연결을 맺는다. 이때 sequence number, buffer size, flow control info(RcvWindow 등) 등의 변수들이 초기화돼서 설정이 된다. 서버(수신 측)는 특정 포트번호를 주어 소켓을 생성하면 welcomeSocket을 가지고 클라이언트(송신 측) 요청에 대기한다. 클라이언트는 소켓을 생성할 때 연결한 서버의 ID(Domain name), 포트 번호를 주면 바로 서버의 welcomSocket으로 three-way handshaking(연결)을 시작한다. 서버는 클라이언트로부터 요청이 오면 이에 대응하는 한 개의 소켓(connection socket)을 생성하여 클라..

컴퓨터 네트워크 - TCP Flow Control

TCP Flow Control Flow control은 송신 측이 너무 많이, 너무 빨리 데이터를 전송하여 수신 측의 버퍼를 오버플로 하지 않게 하기 위한 스피드 매칭이다. 수신 측이 처리할 수 있는 속도보다 송신 측이 전송 속도를 일치시킨다. 수신자가 송신측에게 하는 행위이다. 수신측은 수신 버퍼(RcvBuffer)를 가지고 있다. 버퍼에 있는 TCP data를 application process가 읽어 들이는 속도가 송신 측에서 데이터를 보내는 속도보다 느린 경우 버퍼가 꽉 차게 되고 이후 들어오는 데이터는 손실(loss) 된다. 수신 버퍼의 남은 공간을 Receive Window(RcvWindow)라 부른다. RcvWindow의 크기는 RcvBuffer(전체 공간) - [LastByteRcvd - ..

컴퓨터 네트워크 - TCP Fast Retransmit

Fast Retransmit Fast retransmit은 타이머의 타임 아웃 기간이 상대적으로 너무 길어 타이머가 종료되기 전이라도 중복된(duplicate) ACK를 3번 받으면 바로 재전송을 하는 기능이다. 손실된 패킷을 재전송하기 전 발생하는 긴 지연시간을 줄여준다. Duplicate ACK 수신을 통해 세그먼트가 손실되었음을 감지한다. 손실된 경우 수신 측은 여러 중복 ACK들을 발생시킨다. 송신자는 동일한 데이터에 대해 3개의 ACK를 수신하면 ACK 된 데이터 이후의 세그먼트가 손실된 것으로 가정한다. Duplicate ACK는 비정상적인 순서(out-of-order)의 패킷이 수신될 시 수신 측에서 발생시키기 때문에 현재까지 ACK가 완료된 패킷 다음 패킷이 손실 난 상태에서 그다음 패킷들..

[백준 Baekjoon] 7569번 토마토- JAVA

[백준 Baekjoon] 7569번 토마토- JAVA 문제 풀이 상자에 들어 있는 토마토가 모두 익을 때까지 최소 날짜를 출력하는 문제이다. 최소 날짜와 위, 아래, 왼쪽, 오른쪽, 앞, 뒤 여섯 방향을 보고 bfs탐색으로 푸는 문제란 걸 알았다. 3차원 도형으로 복잡해 보이지만, 3차원 배열로 입력받고 토마토가 있는 위치에서 여섯 방향으로 bfs탐색을 하면 쉽게 풀리는 문제이다. 7576번 토마토 문제에서 살짝 업그레이드 된 문제이다. https://dlee0129.tistory.com/202 [백준 Baekjoon] 7576번 토마토- JAVA [백준 Baekjoon] 7576번 토마토- JAVA 문제 풀이 상자에 들어 있는 토마토가 모두 익을 때까지 최소 날짜를 출력하는 문제이다. 최소 날짜와 왼쪽..

[백준 Baekjoon] 7576번 토마토- JAVA

[백준 Baekjoon] 7576번 토마토- JAVA 문제 풀이 상자에 들어 있는 토마토가 모두 익을 때까지 최소 날짜를 출력하는 문제이다. 최소 날짜와 왼쪽, 오른쪽, 앞, 뒤 네 방향을 보고 bfs탐색으로 푸는 문제란 걸 알았다. 입력으로 주어진 토마토는 1 익은 토마토, 0 익지 않은 토마토, -1 토마토가 들어있지 않은 칸 이렇게 세 가지 종류이다. bfs탐색으로 탐색해야 하는 칸(cnt)은 M * N (상자의 크기) - 익은 토마토 - 토마토가 들어있지 않은 칸이다. 익은 토마토에서 주변 토마토가 익기 때문에 큐에 모든 익은 토마토를 저장하고 bfs탐색을 한다. bfs 탐색으로 새로 탐색하는 칸은 방문하지 않았으며 토마토가 들어있지 않은 칸으로 새로 토마토가 익는 경우이다. 이 경우 cnt를 감..

[백준 Baekjoon] 15711번 환상의 짝궁- JAVA

[백준 Baekjoon] 15711번 환상의 짝궁- JAVA 문제 풀이 문제의 설명만 보면 정말 간단한 문제처럼 보인다. A, B를 더한 값을 소수 2개로 만들 수 있는지 검사하면 된다. 하지만 제한사항의 A와 B의 최댓값이 2 x 10^12로 매우 커서 일반적인 방법으로는 불가능하다. A와 B의 합이 최대 4 * 10^12로 범위가 매우 큰데 그것의 루트값 2000000으로만 검사해주면 된다.. 합이 4미만의 경우 합이 4미만인 경우 소수 2개로 만드는 방법은 없다. 합이 짝수인 경우 골드바흐의 추축에 의하면 2보다 큰 모든 짝수는 두 개의 소수의 합으로 표시할 수 있다. 합이 홀수인 경우 두 수의 합이 홀수가 되려면 짝수 + 홀수이어야만 한다. 따라서 짝수인 소수 + 홀수인 소수로 동일한 합을 만들 ..

[백준 Baekjoon] 18870번 좌표 압축 - JAVA

백준 Baekjoon 18870번 좌표 압축 - JAVA 문제 풀이 주어진 입력 값들을 정렬했을 때 몇번째 순서인지 출력하는 문제이다. 입력 배열은 후에 다시 사용되어 새로운 배열에 복사한 다음 정렬한다. Map 을 사용하여 0부터 좌표의 순서를 저장한다. 중복되는 좌표값들이 있기 때문에 Map을 사용한다. 입력 값들을 Map에서 찾으면 그 순서를 알 수 있다. 소스 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Strin..

컴퓨터 네트워크 - 신뢰성 있는 데이터 전송 (Pipelined Protocols)

신뢰성 있는 데이터 전송과 RDT를 먼저 알고 봐야 합니다. https://dlee0129.tistory.com/198 컴퓨터 네트워크 - 신뢰성 있는 데이터 전송 (RDT) 신뢰성 있는 데이터 전송 신뢰성 있는 데이터 전송은 네트워크 중요 10가지 토픽 중 한 가지일 정도로 중요하게 여겨진다. 이는 Data Link layer, Transport layer, Application layer에서 구현된다. 이 중 Transp. dlee0129.tistory.com Pipelined Protocols Pipelined protocols에서는 go-Back-N, selective repeat 방식을 사용하여 RDT 3.0의 성능 문제를 해결한다. ACK를 받지 않고도 복수개의 패킷을 전송할 수 있게 하여 A..

컴퓨터 네트워크 - 신뢰성 있는 데이터 전송 (RDT)

신뢰성 있는 데이터 전송 신뢰성 있는 데이터 전송은 네트워크 중요 10가지 토픽 중 한 가지일 정도로 중요하게 여겨진다. 이는 Data Link layer, Transport layer, Application layer에서 구현된다. 이 중 Transport layer의 주 역할이 신뢰성 있는 데이터 전송이다. 신뢰성 있는 데이터 전송을 위해서는 수신된 데이터의 오류 복구 기능이 필요하다. 데이터 전달 중 데이터 손상이 발생하여 송신 측에서 보낸 데이터의 checksum과 수신 측에서 계산한 checksum이 같지 않을 수 있다(bit error). 또한, 송신 측은 패킷을 전송하였지만 전달 과정에서 손실(loss)이 발생하여 수신 측까지 전달되지 않을 수 있다. 이러한 상황들에서 복구하여 정상적으로 패..

컴퓨터 네트워크 - UDP

UDP (User Datagram Protocol) UDP는 복잡한 기능들을 제거한 단순한 프로토콜이다. 송신 측과 수신 측은 handshaking(연결)을 하지 않는 연결이 없는(connectionless) 통신 방법이다. 연결이 없기 때문에 UDP 세그먼트는 통신 중에 손실될 수 있으며, 전송 순서대로 도착하는 것을 보장하지 않는다. TCP와 비교했을 때 UDP는 손실 발생, 순서 보장하지 않는 단점이 있는데 왜 UDP를 사용하는지 의문이 들 수 있다. UDP는 연결을 하지 않기 때문에 연결에서 발생하는 지연이 없으며, 간단하며, 작은 세그먼트 헤더를 갖는 장점이 있다. 혼잡 제어(congestion control)를 하지 않아 빠르게 저세그먼트를 보낼 수 있는데, 이는 장점이자 단점이다. UDP는..

반응형