HTTP/1.0한 연결당 하나의 요청을 처리하도록 설계단점: 서버로부터 파일을 가져올 때마다 TCP의 3-way-handshake를 계속해서 열어야 하기 때문에 RTT가 증가RTT : 패킷이 목적지에 도달하고 나서 다시 출발지로 돌아오기까지 걸리는 시간 HTTP/1.1매번 TCP 연결을 하는 것이 아니라 한 번 TCP 초기화를 한 이후에 keep-alive라는 옵션으로 여러 개의 파일을 송수신할 수 있게 바뀜문서 안에 포함된 다수의 리소스(이미지, 동영상...)를 처리하려면 요청할 리소스 개수에 비례해서 대기시간이 길어짐헤더에 쿠키 등 많은 메타데이터가 들어 있고 압축이 되지 않아 무거웠음 HOL BlockingHead Of Line Blocking네트워크에서 같은 큐에 있는 패킷이 그 첫 번째 패킷에 ..
CS/Network
L7 스위치애플리케이션 계층을 처리하는 기기로드밸런서, 서버의 부하를 분산하는 기기클라이언트로부터 오는 요청들을 뒤쪽의 여러 서버로 나누는 역할시스템이 처리할 수 있는 트래픽 증가를 목표로 함 URL, 서버, 캐시, 쿠키들을 기반으로 트래픽을 분산바이러스, 불필요한 외부 데이터 등을 걸러내는 필터링 기능응용 프로그램 수준의 트래픽 모니터링 가능 L4 스위치전송 계층을 처리하는 기기스트리밍 관련 서비스에서는 사용 불가메시지를 기반으로 인식하지 못하고 IP와 포트를 기반으로 트래픽을 분산 로드밸런싱L7 스위치 : ALB(Application Load Balancer) 컴포터넌트로 로드밸런싱L4 스위치 : NLB(Network Load Balancer) 컴포터넌트로 로드밸런싱한 서버에서 장애가 생겼을 때 다..
TCP패킷 사이의 순서를 보장하고 연결지향 프로토콜을 사용해서 연결을 하여 신뢰성을 구축해서 순시 여부를 확인가상회선 패킷 교환 방식 사용 가상회선 패킷 교환 방식각 패킷에는 가상회선 식별자가 포함되며모든 패킷을 전송하면 가상회선이 해제되고 패킷들은 전송된 순서대로 도착 3-way-handshake [1 단계]클라이언트는 서버에 클라이언트의 ISN을 담아 SYN을 보냅니다.ISN은 새로운 TCP 연결의 첫 번쨰 패킷에 할당된 임의의 시퀀스 번호를 말함[2 단계]서버는 클라이언트의 SYN을 수신하고 서버의 ISN을 보내며 승인번호로 클라이언트의 ISN + 1을 보냅니다[3 단계]클라이언트는 서버의 ISN + 1한 값인 승인번호를 담아 ACK를 서버에 보냄 4-way-handshake [1 단계]먼저 클라이..
트리 토폴로지노드의 추가 삭제가 쉬우며 특정 노드에 트래픽이 집중될 때 하위 노드에 영향을 끼칠 수 있음 버스 토폴로지중앙 통신 회선 하나에 여러 개의 노드가 연결되어 공유하는 네트워크 구성노드를 추가하거나 삭제하기 쉬움LAN에서 활용설치 비용이 적음신뢰성 우수스푸핑이 가능함... 스타 토폴로지중앙에 있는 노드에 모두 연결된 네트워크 구성노드를 추가하거나 에러를 탐지하기 쉬움패킷의 충돌 발생 가능성이 적음중앙 노드에 장애가 발생하면 전체 네트워크를 사용할 수 없고 설치 비용이 고가임 링형 토폴로지각각의 노드가 양 옆의 두 노드와 연결하여 전체적으로 고리처럼 하나의 연속된 길을 통해 통신하는 방식데이터는 노드에서 노드로 이동각각의 노드는 고리 모양의 길을 통해 패킷을 처리노드 수가 증가되어도 네트워크 상의..
이더넷의 다중 접근 제어CSMA/CD (Carrier-Sense Mutiple Access with Collision Detection)노드는 데이터 전송 이전에 회선이 사용 중인지 점검회선이 사용 중이면 임의의 시간만큼 기다린 뒤 다시 시도회선이 사용 중이 아님이 확인되면 데이터 전송 시작데이터 전송 중 충돌이 검출되면 충돌 발생 사실을 모든 노드에게 통보충돌이 발생하면 임의의 시간 동안 대기한 후 다시 시도 무선 랜의 다중 접근 제어CSMA/CA (Carrier-Sense Multiple Access with Collision Avoidance)RTS(Request To Send)와 CTS(Clear To Send)를 이용하여 어느 순간이든 허락된 한 쌍의 노드들 사이에만 데이터 전송 (매체 이용)이..
https://github.com/l2yujw/JavaNetwork/tree/main
Thread Process와 Thread Process에서 실제로 작업을 수행하는 것은 Thread이다. Process Program을 실행하면 Operating System (OS)은 실행에 필요한 자원을 할당받아 Process가 된다.Process의 자원을 이용해서 실제로 작업을 수행하는 것은 Thread이다.모든 Process는 최소한 하나 이상의 Thread가 존재한다.Process가 가질 수 있는 Thread의 개수는 제한되어 있지 않다.Thread가 작업을 수행하는 데 개별적인 Memory 공간인 Call Stack을 필요로 하기 때문에 Memory에 의존적이다. Thread 구현Thread Class를 상속받아 구현하는 방법Java는 단일 상속을 지원하기 때문에 Thread Class를 상속..
Socket Socket Programming java.net package를 이용하면 Network Application을 쉽게 작성할 수 있다.하지만 Network 관련 지식이 필요하다!TCP/IP Networking Model에 대한 이해 TCP/UDP가 Network Application 개발하는데 중요하다 Socket API Flow[Server] [Client]Socket() Socket() bind() listen() accept() read()/write() write() / read() //Stream을 잘 다뤄야 한다 close() close..
Router Architecture Input PortRouter의 Physical Link 종단에서 Physical Layer 기능을 수행한다.Input Link의 반대편에 위치한 Link Layer와 상호 운용 (Interoperability)하기 위해 필요한 Link Layer 기능을 수행한다.Input Port에서 Lookup 기능을 수행하는 점이 가장 중요하다. ☑ Forwarding Table을 참조하여 Switch Fabric를 통해 전달되는 Packet의 Router Output Port를 결정한다.☑ Control Packet은 Input Port에서 Routing Processor로 전달된다. Switching FabricRouter의 Input Port와 Output Port를 연..
Network Layer=> 송신 Host에서 수신 Host로 Packet을 전달하는 역할을 수행한다.Forwarding☑ Packet이 Router의 Input Link에 도착했을 때 Router는 Packet을 적절한 Out Link로 이동시켜야 한다.☑ Network Layer의 Data Plane에서 실행된다. Routing☑ 송신자가 수신자에게 Packet을 전송할 때 Network Layer은 Packet의 경로 (Route or Path)를 결정해야한다.☑ 이러한 경로를 계산하는 Algorithm을 Routing Algorithm이라고 한다.☑ Network Layer의 Control Plane에서 실행된다. Network Layer에서 Forwarding과 Routing의 의미가 혼용되기도..
Internet ProtocolDatagram Format => TCP/IP Protocol에서 Network Layer의 Packet을 Datagram이라고 한다. [Version] [Header] [Type of Service ] [ Datagram Length (bytes) ] [ 16-bit Identifier ] [ Flags ] [ 13-bit Fragmentation offset ] [Time-to-live] [Upper-layer protocol] [ Header checksum ] [ ..
Java IO Stream Java에서 입출력을 수행하기 위해서는 Stream을 이용한다.Stream이란 Data를 운반하는데 사용되는 연결통로이다.Stream은 단방향통신만 가능하기 때문에 하나의 Stream으로는 입력과 출력을 동시에 처리할 수 없다.Stream은 연속적으로 Data를 주고 받는다.Queue와 같은 FIFO (First In First Output) 구조로 동작한다고 생각하면 이해하기 쉽다. Stream은 Byte단위로 Data를 전송하며 입출력 대상에 따라 각기 다른 Stream을 사용한다.File] => FileInputStream / FileOutputStream[Memory] => ByteArrayInputStream / ByteArrayOutputS..