TCP는 체증제어(Congestion Control)을 하는데 다음과 같은 상황에서 발생한다. 데이터가 많이 몰려 막혔을 때 어떠한 패킷에 Time out 발생 시 Duplicated ACK가 3개 이상 왔을 때 처리 방법은 대표적으로 3가지가 있다. 첫째, AIMD AIMD(Additive Increase / Multicaticve Decrease) 방식은 네트워크에 별 문제가 없을 때 전송속도를 더 빠르게 하려고 한다면 혼잡 윈도우의 크기를 1씩 증가 시키지만 이때 데이터가 유실되거나 응답이 오지 않는 등 혼잡 상태가 발생하면 혼잡 윈도우 크기를 반으로 줄인다. 둘째, Slow Start(SS) AIMD와 비슷한 방식으로 윈도우 크기를 지수함수꼴로 증가 시키다가 혼잡이 감지되면 윈도우 크기를 1로 줄..
첫째, TCP 연결시엔 3-way Handshaking을 사용한다. 클라이언트가 TCP 연결을 위하여 SYN 패킷을 보내어 연결을 요청한다. 서버가 SYN 패킷을 받고, 클라이언트로 받았다는 신호인 ACK와 SYN 패킷을 전송 해 준다. 클라이언트는 SYN + ACK 신호를 받았다는 의미로 ACK 패킷을 서버에 다시 보내어준다. 이러한 방식으로 TCP 연결이 설정된다. 3번의 과정을 거치기 때문에 TCP 3 way HandShaking이라고 불린다. 둘째, TCP 연결 해제시엔 4-way Handshaking을 사용한다. 클라이언트는 서버에게 TCP 연결 종료를 위하여 TCP 헤더 flag에 있는 FIN을 보낸다. 서버는 FIN을 받고, 남은 데이터 저장을 위한 ACK를 클라이언트에게 보낸다. 그 이후,..
TCP는 신뢰성 전송이라고 한다. 이를 위해 가지는 기능들을 알아보자. 일단 TCP는 Transmission Control Protocol로 OSI Layer 4계층인 Transport(전송) 계층이고, 연결 지향 서비스로 무결성을 보장해 준다. 4계층 Transport Layer 흐름 제어와 오류제어, 메세지를 전달함, (process 간의 통신 ex. 카카오톡은 카카오톡 끼리 통신) 프로토콜: TCP(Transmission Control Protocol), UDP(User Datagram Protocol) 첫째, TCP는 3-way HandShaking을 통해 세션을 맺고 통신을 시작한다. SYN을 전송하고, SYN+ACK를 받아와 내가 보낸 패킷을 상대가 받은지 확인 하고, 그 다음 패킷을 보내는 ..
1번 import java.util.Scanner; import java.util.Vector; public class main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); Vector ve = new Vector(); System.out.print("정수(-1이 입력 될 때 까지)>> "); int max = 0; while(true){ int n = sc.nextInt(); if(n == -1) break; ve.add(n); if(max < n){ max = n; } } System.out.print("가장 큰 수는 " + max); } } 2번 import java.util.Scanner; impor..
실습문제 1번 import java.util.Scanner; class MyPoint{ private int x, y; public MyPoint(int x, int y) {this.x = x; this.y = y;} public String toString(){ return "Point(" + x + ", " + y + ")"; } public boolean equals(Object obj){ MyPoint p = (MyPoint)obj; if(x == p.x && y == p.y){ return true; } return false; } } public class main { public static void main(String[] args) { MyPoint p = new MyPoint(3, 50..
실습문제 1번 import java.util.Scanner; class TV { private int size; public TV(int size) { this.size = size; } protected int getSize() { return size; } } class ColorTV extends TV { private int color; public ColorTV(int size, int color) { super(size); this.color = color; } public void printProperty() { System.out.println(getSize() + "인치 " + color + "컬러"); } } public class main { public static void main..
1번 #include #include using namespace std; template T biggest(T arr[], int n) { T max = arr[0]; for (int i = 1; i max) max = arr[i]; } return max; } int main() { int x[] = { 1, 10, 100, 5, 4 }; cout