기간
2023/2/6 ~ 2023/2/10
수업
실시간 ZOOM 수업
서킷 스위칭은 직렬화해서 통신마다 전용선을 두는 것. 단점으로 비용이 올라간다.
패킷 스위칭은 전용선x 공유선o 회선이 짧아서 비용을 아낄 수 있음 하지만 A가 데이터를 보내는 동안 다른 곳(보내는 쪽)은 동기화 상태
→ RR알고리즘(라운드로빈) 방식처럼 데이터를 쪼개서 전송(잘개 쪼개진 데이터: 패킷)
패킷은 전송 데이터와 목적지 주소(IP)를 함께 전송
→ 그렇지 않으면 데이터가 몰린다.
데이터 하나하나는 segment(payload에 담김), IP는 heder에 담김
⇒ segement와 header가 패킷
라우터는 전송받은 패킷을 최단경로(트래픽이 낮은)를 찾아서 보냄
:패킷 포워딩
라우터의 용량(RAM)이 꽉 차면 도착한 패킷은 유실됨
보낸 순서는 segment에 붙어서 보내짐(도착 순서 보장이 안 되기 때문에 재조립을 위해서)
받은 세그먼트를 보내진 순서에 맞게 조립(하나가 안 도착하면 다시 요청 후 받음: 신뢰성있는 데이터)
⇒ 패킷 스위칭
데이터 관점에서의 동기화: 데이터 일치(아이폰과 아이클라우드를 생각하면)
프로그래밍 관점에서의 동기화: 대기 상태. 일의 순서가 있다.
인터페이스: 상하관계가 있는 규약
프로토콜: 동등한 관계의 규약
라우터를 인터페이스라고 부르는 이유는 경로가 한정되어 있기 때문
TCP/IP 이해
통신하는 프로세스에 번호(Port 번호)를 붙임(범위는 0~65,535 → 2의 16제곱 개 → 2Byte개
BufferedWrite
TCP에서 Socket으로 BufferedRead Segment(세그먼트에는 포트번호와 순번이 들어감 ⇒ 헤더)
바이너리코드가 packet으로 바뀌고 socket을 통해 segment로 바껴 프로세스(애플리케이션)에 도착
→ 역직렬화
직렬화: 기계가 이해하는 데이터로 변환하는 것
역직렬화: 인간이 이해하는 데이터로 변화하는 것
소켓이 직접 하는 건 없기 때문에 애플리케이션이 소켓에서 Buffered Read함
Buffer
버퍼가 꽉 차서 데이터가 도착하지 못함 →버퍼링
애플리케이션이 read해서 데이터를 소비해야 함
양방향이지만 동시에 송수신 x
통신
Hello.java → 컴파일 Hello.class → 실행 JVM 동작
JVM
1. 클래스 로드(메모리)
2. static 찾기
3. static 메모리 공간에서 main을 찾음
4. main 실행
5. main의 스택과 큐가 열린다.
static
단 한 번만 메모리에 할당된다.
두 번x, 메모리 관리를 할 수가 없다. 메인 종류시까지 살아있다.
heap(오브젝트)
내가 원할 때 new 해서 할당한다(인스턴스).
그래서 동적 메모리 공간이라고 한다. →제어할 수 있다. 단, 자바는 가비지컬렉션을 한다.
stack
메서드가 호출될 때 잠깐 메모리에 뜬다.
메모리 관리가 필요없다. 왜냐하면 메서드 종료시 다 사라지기 때문
jar(패키지 모음 압축 파일)