2.3 인터넷 전자메일

2.3 인터넷 전자메일 인터넷 메일 시스템의 상위 요소에는 다음 3가지가 있다. 사용자 에이전트(user agent) 사용자의 메시지 읽기, 전달, 저장, 구성을 담당 ex) 지메일, 마이크로소프트 아웃룩, 스파트몬용 지메일 앱 메일 서버(mail server) 각 수신자는 메일 서버 안에 **메일박스(mailbox)**를 갖고 있다. 메일박스는 수신한 메시지를 유지하고 관리한다. 송신자의 사용자 에이전트 → 송신자의 메일 서버 → 송신자의 메일 서버의 메시지 큐 → 수신자의 메일서버 → 수신자의 메일 서버 내 메일박스 수신자의 서버 고장으로 전달할 수 없으면 메시지를 **메시지 큐(message queue)**에 보관하고 나중에 전달을 재시도한다. SMTP(Simple Mail Transfer Protocol) 인터넷 전자메일을 위한 주요 애플리케이션 계층 프로토콜 TCP의 신뢰적인 데이터 전송 서비스를 이용 송신자의 메일 서버에서 수행하는 클라이언트와 수신자 메일 서버에서 수행되는 서버를 갖고 있음. 메일 서버가 송신할 때 : SMTP의 클라이언트로 동작 메일 서버가 수신할 때 : SMTP의 서버로 동작 2.3.1 SMTP A가 B에게 메일을 보내는 과정 A는 네이버의 전자메일 사용자 에이전트에게 B의 전자메일 주소(B@gmail.com)를 제공하고 메시지를 작성하여 메시지를 보내라고 명령한다. A의 사용자 에이전트(네이버)는 메시지를 A의 메일 서버에게 보내고 그 메시지는 서버에서 메시지 큐에 들어간다. A의 메일 서버에서 동작하는 SMTP의 클라이언트 측은 메시지 큐에서 메시지를 확인한다. 이후 B의 메일 서버에서 수행되는 SMTP 서버에게 TCP 연결을 설정한다. 이때 포트는 25. 초기 SMTP 핸드셰이킹 이후에 SMTP 클라이언트는 A의 메시지를 TCP 연결로 보낸다. B의 메일 서버 호스트에서 SMTP의 서버 측은 메시지를 수신한다. 이 메시지는 B의 메일 서버의 메일박스에 저장된다. B은 사용자 에이전트를 이용해 그 메시지를 읽는다. A와 B의 메일 서버가 물리적으로 거리가 멀더라도, 중간 메일 서버는 사용하지 않는다. 따라서 B의 서버가 죽어 있으면 전달하지 못한다. 이 떄, A 서버의 메시지 큐에 두고 지속적으로 재발송한다. 일정시간이 지나면, 폐기하고 A에게 발송이 실패했음을 알린다. 두 서버의 TCP 연결이 설정되면, SMTP의 서버와 클라이언트는 애플리케이션 계층 핸드셰이킹을 수행한다. 핸드셰이킹에서 서로에 대한 정보를 알게 되는 것처럼, 이때 클라이언트는 서버에게 두 사람(송신자와 수신자)의 전자메일 주소를 제공한다. 2.3.2 메일 메시지 포맷 우편을 보낼때, 편지 봉투에는 여러 정보가 담기게 된다(발신자, 수신자 등) 전자 메일에서는 메시지 몸체 앞에 있는 헤더에 담긴다. 2.3.3 메일 접속 프로토콜 메일 서버가 개인의 로컬호스트에 있다면, 항상 메일을 받기 위해 서버가 켜져있어야 한다. 따라서, 일반 사용자는 로컬 호스트에서 사용자 에이전트를 수행하고 늘 켜져 있는 공유 메일 서버에 저장된 메일박스에 접근한다. 즉, 메일 서버는 보통 사용자들과 공유한다. 송신자의 사용자 에이전트는 메일 서버를 통해 수신자의 메일 서버로 메시지를 전송한다. 왜 송신자의 사용자 에이전트가 직접 수신자의 메일 서버로 메시지를 전송하지 않을까? 송신자의 사용자 에이전트는 수신자의 메일 서버에 도달할 수 없기 때문 이유는 보안 문제, SMTP의 규약, 스팸 방지, 신뢰성 보장 등 다양하다. 수신자의 사용자 에이전트는 받은 메시지를 보기 위해 SMTP를 사용할 수 없다. SMTP는 push지만 메시지는 pull 해야 하기 때문 메시지를 받는 방법 HTTP를 통해 요청 인터넷 메일 접근 프로토콜(Internet Mail Access Protocol, IMAP) 사용 이 둘 모두 메일 서버에 의해 유지되는 폴더를 관리하게 된다.

2024년 2월 1일 · 3 분 · 배준수

2.2 웹과 HTTP(2)

2.2.3 HTTP 메시지 포맷 HTTP 요청 메시지 ex) 1 2 3 4 5 GET /somedir/page.html HTTP1.1 Host: www.abc.com Connection: close User-agent: Mozilla/5.0 Accept-language: fr 메시지가 일반 아스키 텍스트로 쓰여있어 우리가 읽을 수 있다. 메시지는 5줄로 되어있고 각 줄은 CR(carriage return, \r)과 LF(line feed, \n)로 구별된다. CR : \r, 맨 앞으로 이동하라는 뜻 LF: \n, 새로운 라인 첫 줄을 **요청 라인(request line)**이라고 부른다. 3개의 필드로 구성 : method(GET), URL(/somedir/page.html), HTTP 버전(HTTP1.1) 이후의 줄들은 **헤더 라인(header line)**이라고 부른다. 요청하는 객체가 존재하는 호스트(Host) 명시 TCP 연결에서 이미 알게 되었지만, 웹 프록시 캐시에서 필요함 비지속 연결 명시(Connection) 요청을 보내는 브라우저 타입(User-agent) 객체의 언어 버전(Accept-language) : 서버에 있다면 프랑스어로 보낼 것 헤더라인 이후에 개체 몸체(entity body)가 있음. POST 방식에서만 존재하는, 클라이언트가 채워 넣는 곳 GET요청에서는 body 대신 URL 끝에 parameter로 추가됨(https://url.com?…) HEAD 방식 HTTP 메시지로 응답하고, 요청 객체를 보내지 않음 개발자의 디버깅에 많이 사용 PUT, DELETE, … HTTP 응답 메시지 ex) ...

2024년 1월 31일 · 5 분 · 배준수

2.2 웹과 HTTP(1)

2.2 웹과 HTTP(1) 2.2.1 HTTP 개요 웹의 애플리케이션 계층 프로토콜인 **HTTP(HyperText Transfer Protocol)**는 웹의 중심이다. **웹 페이지(Web page, 문서)**는 객체(object)들로 구성된다. **객체(object)**는 단순히 단일 URL로 지정할 수 있는 하나의 파일(HTML 파일, JPEG 이미지, 자바스크립트, CCS 스타일 시트 파일, 비디오 클립 등)이다. 대부분의 웹 페이지는 기본 HTML 파일과 여러 참조 객체로 구성된다. 각 URL은 2개의 요소를 갖고 있다. 객체를 갖고 있는 서버의 호스트 이름 객체의 경로 이름 **웹 브라우저(Web browser)**는 HTTP의 클라이언트 측을 구현하기 떄문에 웹의 관점에서 클라이언트와 브라우저는 혼용된다. HTTP는 TCP를 전송 프로토콜로 사용한다. 과정 HTTP 클라이언트가 먼저 서버에 TCP 연결을 시작 브라우저와 서버 프로세스는 각자의 소켓 인터페이스를 통해 TCP로 접속. 소켓 인터페이스는 각 프로세스와 TCP 연결 사이에서의 출입구다. 서버와 클라이언트는 메시지를 소켓 인터페이스에게 보낸다. 이후 부터는 TCP의 몫이다. HTTP는 **비상태 프로토콜(stateless protocol)**이다. 클라이언트에 대한 정보를 유지하지 않기 떄문이다. 2.2.2 비지속 연결과 지속 연결 클라이언트-서버 상호작용이 TCP상에서 발생할 때, 각 요구/응답 쌍이 분리된 TCP 연결을 통해 보내지면 비지속 연결(non-persistent connection) 모든 요구와 해당하는 응답들이 같은 TCP 연결상으로 보내지면 지속 연결(persistent connection) HTTP/1.0가 디폴트 모드로 지속 연결을 사용하지만 HTTP 클라이언트와 서버는 비지속연결을 사용하도록 설정될 수 있다. 비지속 연결 HTTP 클라이언트가 서버에게 URL을 통해 html 파일을 요청한다고 가정해보자. HTML 파일은 여러 개의 참조 객체 이미지를 가진다. HTTP 클라이언트는 HTTP 기본 포트 번호 80을 통해 서버로 TCP 연결을 시도한다. 그 결과 클라이언트와 서버는 각각 소켓을 가진다. 클라이언트가 자신의 소켓을 통해 HTTP 요청 메시지를 보낸다. 이 요청에는 필요한 html의 경로 이름을 포함한다. 서버는 소켓으로 요청 메시지를 받고 필요한 html 객체를 추출한다. 응답 메시지에 객체를 캡슐화하고 소켓을 통해 클라이언트로 보낸다. HTTP 서버는 TCP에게 TCP 연결을 끊으라고 한다(하지만 실제로는 클라이언트가 응답을 올바로 받을 때까지 끊지 않는다). 클라이언트가 응답 메시지를 받으면 TCP 연결이 중단된다. 필요한 참조 객체(이미지) 10개를 가져오기 위해 각각의 객체에 대한 TCP 연결이 시작된다(1~4 반복). 비지속 연결에선 총 11개의 TCP 연결이 발생한다. 순차적으로 하지 않고 동시 연결(동시에 11개의 연결을 구성하여 각각 처리)로 응답 시간을 줄일 수 있다. 세 방향 핸드셰이크(three-way handshake) SYN(Synchronize) : 클라이언트가 서버에 연결을 요청하는 메시지를 보냄 SYN-ACK(Synchronize-Acknowledment) : 서버가 클라이언트의 연결 요청을 수락하고, 클라이언테에게 확인 응답을 보냄 ACK(Acknowledgment) : 클라이언트가 서버의 확인 응답을 받고, 다시 서버에 확인 메시지를 보내 연결을 완료한다. RTT(round-trip time) : 패킷이 클라이언트로부터 서버까지 가고, 다시 클라이언트로 돌아오는 데 걸리는 시간 세 방향 핸드셰이크 중 2단계가 완료될때 까지의 시간이 RTT다. ACK는 2단계가 완료된 후 요청 메시지를 보낼 때 같이 보낸다. 서버에 요청을 보낼 떄는 (TCP 연결 + 요청)이 필요하다. 따라서 서버의 응답시간은 (2RTT + 파일 전송 시간)이다. 지속 연결 HTTP 비지속 연결의 단점 각 요청 객체에 대한 새로운 연결이 설정되고 유지되어야 함. 이를 위해 필요한 TCP 버퍼는 서버에게 부담이 될 수 있음. 응답시간 (2 RTT) 지속 연결은 하나의 지속 TCP 연결로 여러 웹페이지와 관련 객체를 통신할 수 있다. 파이프라이닝(pipelining) : 각 객체에 대한 요구는 진행 중인 요구에 대한 응답을 기다리지 않고 연속해서 만들어질 수 있음. HTTP 서버는 타임아웃 기간동안 사용되지 않으면 연결을 닫기 떄문에, HTTP 디폴트 모드는 파이프라이닝을 이용해 지속 연결한다.

2024년 1월 30일 · 3 분 · 배준수

2.1 네트워크 애플리케이션의 원리

네트워크 애플리케이션 : 다른 위치의 종단 시스템에서 동작하고 네트워크를 통해 서로 통신하는 프로그램 웹 애플리케이션에는 서버와 클라어인트라는 두 가지 프로그램이 있다. 클라이언트 : 사용자의 호스트에서 실행되는 브라우저 프로그램 웹 서버 호스트에서 실행되는 웹 서버 프로그램 새로운 애플리케이션을 개발할 때, 라우터나 링크 계층 스위치처럼 네트워크 코어 장비에서 실행되는 소프트웨어까지 작성할 필요는 없다. 네트워크 코어 장비는 애플리케이션 계층에서 기능하지 않는 대신 네트워크 계층 및 그 하위 계층에서 기능한다. 종단 시스템에서만 애플리케이션 소프,트웨어가 존재한다. 2.1.1 네트워크 애플리케이션 구조 애플리케이션 구조는 네트워크 구조(ex. 1.5장에 나온 프로토콜 스택)와 다르다. 개발자 관점에서 네트워크 구조 : 고정되어 있고 해당 애플리케이션에 특정 서비스 집합을 제공 애플리케이션 구조(application architecture) : 개발자가 설계하며 애플리케이션이 다양한 종단 시스템에서 어떻게 조직되어야 하는지를 알려줌. 최근 가장 많이 사용하는 애플리케이션 구조가 현대 네트워크 애플리케이션에서 사용되는 “클라이언트-서버” 구조와 P2P 구조 클라이언트-서버 구조(client-server architecture) 서버(server) : 항상 동작하고 있는 호스트 클라이언트(client) : 서버에 서비스 요청을 보냄 이 구조에서, 클라이언트는 서로 직접적으로 통신하지 않는다. 서버는 고정 IP 주소를 갖는다. 클라이언트의 요청이 많을 경우 단일 서버 호스트가 모든 요청을 처리하긴 힘들다. 많은 수의 호스트를 갖춘 **데이터 센터(data center)**가 강력한 가상의 서버를 생성하는 역할을 함. P2P 구조 항상 켜져있는 인프라스트럭처 서버에 최소로 의존하거나 의존하지 않음 대신 **피어(peer)**라는 간헐적으로 연결된 호스트 쌍이 서로 직접 통신 피어(peer) : 서비스 제공자(service provider)가 소유하지 않고 사용자들이 제어하는 데스크톱과 랩톱 한 엔드시스템이 서버 역할을 해준다. 토렌트가 대표적인 P2P 구조 P2P구조는 **자가 확장성(self-scalability)**이 있다. 각 피어들이 파일을 요구함으로써 작업 부하를 만들어낸다. 하지만 파일을 다른 피어들에게 분배함으로써 그 시스템에 서비스 능력을 추가함. 토렌트에서 다운로드 받고 업로딩하는 사람이 많을 수록 그 파일은 다운로드 속도가 빨라지는데, 이유가 바로 이것이다. 서버 인프라스트럭처와 서버 대역폭이 필요하지 않아 비용 효율적이다. 보안, 성능, 신뢰성이 단점이다. 2.1.2 프로세스 간 통신 운영체제 용어에서 실제 통신하는 것은 프로그램이 아니라 **프로세스(process)**다. 프로세스(process) 종단 시스템에서 실행되는 프로그램 통신 프로세스가 같은 종단 시스템에서 실행될 때 그들은 서로 프로세스 간에 통신한다. 프로세스 간의 통신을 위한 규칙은 종단 시스템의 운영체제에 의해 좌우된다. 여기서 다룰 통신은 같은 호스트에서 프로세스가 통신하는 방법이 아닌, 다른 호스트에서 실행되어 통신할 때이다. 2개의 종단 시스템에서 프로세스는 컴퓨터 네트워크를 통한 메시지(message) 교환으로 통신한다. 송신 프로세스 : 메시지를 만들어서 네트워크를 보낸다. 수신 프로세스 : 메시지를 받고 역으로 메시지를 보내 응답한다. 클라이언트와 서버 프로세스 네트워크 애플리케이션 : 서로 메시지를 보내는 두 프로세스로 구성 ...

2024년 1월 24일 · 5 분 · 배준수

1.6 공격받는 네트워크

1.6 공격받는 네트워크 나쁜 친구들은 인터넷을 통해 여러분의 호스트에 멀웨어(악성코드)를 침투시킬 수 있다 장치를 데이터를 수신/송신 하기 위해 인터넷에 연결하면, 좋은 것과 함께 malware(멀웨어)라는 해로운 것도 전달된다. 파일 삭제, 주민번호, 비밀번호, ekystroke(키스트로크: 키보드 입력) 등의 사적인 정보를 모으는 스파이웨어를 설치하여 인터넷으로 전송한다. botnet(봇넷) : 면역되지 않은 장치들 수 천개로 구성된 네트워크 봇넷은 스팸 전자메일 분배나 분산 Dos(denial of servie) 공격에 이용된다. 나쁜 친구들은 서버와 네트워크 인프라스트럭처를 공격할 수 있다 Dos(Denial-Of-Service) 공격 : 네트워크, 호스트 혹은 다른 인프라스트럭처의 요소들을 정상적인 사용자가 사용할 수 없게 하는 것 웹 서버, 전자메일 서버, DNS 서버, 기관 네트워크가 공격 대상이 될 수 있다. 인터넷 Dos 공격의 세 가지 범주 취약성 공격(vulnerabilty attack) : 목표 호스트에서 공격받기 쉬운 애플리케이션 혹은 운영체제에 메시지를 보냄 대역폭 플러딩(bandwidth flooding) : 목표 호스트로 수많은 패킷을 보내 정당한 패킷들이 도달하지 못하도록 함 연결 플러딩(connection flooding) : 목표 호스트에 반열림(half-open) 혹은 전열림(fully open)된 TCP 연결을 설정하여 가짜 연결을 처리하느라 정상적인 연결을 못 받도록 만든다. 대역폭 플러딩은 서버가 가진 접속 속도보다 높은 트래픽을 전송하면 된다. 트래픽을 하나의 소스에서 방사하면 공격을 차단할 수 있기 때문에 봇넷을 이용한다. 나쁜 친구들은 패킷을 탐지할 수 있다 packet sniffer(패킷 스니퍼) : 지나가는 모든 패킷의 사본을 기록하는 수동적인 수신자 패킷 스니퍼는 채널에 패킷을 추가하지 않아 탐지가 어렵다. 암호화를 통해 방지할 수 있다. 나쁜 친구들은 여러분이 신뢰하는 사람인 것처럼 위장할 수 있다 IP spoofing(IP 스푸핑) : 출발지 주소, 패킷 내용, 목적지 주소를 가짜로 작성하여 인터넷에 보내는 것. 출발지를 바꾸면 다른 사용자인 척을 할 수 있다.

2024년 1월 17일 · 2 분 · 배준수

1.5 프로토콜 계층과 서비스 모델

1.5 프로토콜 계층과 서비스 모델 1.5.1 계층구조 프로토콜 계층화 네트워크 설계자는 프로토콜을 **layer(계층)**로 조직한다. 각 프로토콜은 한 계층에 속한다. 한 계층은 상위 계층에 **서비스(service)**를 제공한다. 이것을 계층의 **서비스 모델(service model)**이라고 한다. 각 계층은 그 계층 내부에서 어떤 동작을 수행하거나, 직접 하위 계층의 서비스를 사용한다. 프로토콜 계층은 소프트웨어, 하드웨어 또는 둘의 통합으로 나타낼 수 있다. 애플리케이션 계층(HTTP, SMTP)과 트랜스포트 계층 : end system의 소프트웨어로 구현 물리(physical) 계층과 데이터 링크 계층 : 네트워크 인터페이스 카드(이더넷, 와이파이 인터페이스 카드) 네트워크 계층 : 하드웨어와 소프트웨어로 혼합 구현 n계층 프로토콜은 네트워크를 구성하는 종단 시스템, 패킷 스위치, 그 외의 요소 사이에 분산되있다. ⇒ 각 네트워크 구성요소에는 하나의 n계층 프로토콜이 있다. 프로토콜 스택 : 다양한 계층의 프로토콜을 모두 합한 것 이 프로토콜 스택에서 애플리케이션 계층부터 다루어 내려가는 것이 top-down approach. 5개 계층의 인터넷 프로토콜 스택 애플리케이션 트랜스포트 네트워크 링크 물리 애플리케이션 계층 네트워크 애플리케이션과 애플리케이션 계층 프로토콜이 있는 곳 HTTP(웹 문서 요청과 전송 제공), SMTP(전자메일 전송 제공), FTP(두 종단 시스템 간의 파일 전송 제공) 같은 프로토콜들을 포함 이 계층에 있는 DNS(Domain Name Server)가 우리에게 친근한 인터넷 주소를 32비트 네트워크 주소로 변환한다. 애플리케이션 계층 프로토콜 : 여러 end system에 분산. 한 end system에 있는 app이 다른 end system에 있는 app과 **메시지(정보 패킷)**를 교환하는데 사용 트랜스포트 계층 클라이언트와 서버 간에 애플리케이션 계층 메시지를 전송 인터넷에는 TCP와 UDP 라는 트랜스포트 프로토콜이 있다. TCP : 연결지향형 서비스. UDP : 비연결형 서비스. 간단한 서비스. 세그먼트(segment) : 트랜스포트 계층 패킷 네트워크 계층 한 호스트에서 다른 호스트로 **datagram(데이터그램)**을 라우팅한다. 인터넷 트랜스포트 계층 프로토콜이 보낸 트랜스포트 계층 세그먼트와 목적지 주소를 목적지 호스트의 트랜스포트 계층으로 전달 IP 프로토콜 IP 데이터그램의 필드를 정의 종단 시스템과 라우터가 이 필드에 어떻게 동작하는지를 정의 네트워크 계층을 가진 모든 인터넷 요소는 IP 프로토콜을 수행해야만 한다. 인터넷 네트워크 계층은 출발지와 목적지 사이에서 데이터그램이 이동하는 경로를 결정하는 라우팅 프로토콜을 포함한다(많이). IP 계층이라고도 불린다. 링크 계층 인터넷의 네트워크 계층은 출발지와 목적지 간 일련의 패킷 스위치(인터넷에서는 라우터)를 통해 데이터그램을 라우트한다. 노드에서 노드로 패킷을 이동하기 위해 네트워크 계층은 링크 계층 서비스에 의존한다. 노드 간의 이동 과정 출발 노드의 네트워크 계층이 데이터그램을 아래 링크 계층으로 보냄 링크 계층은 데이터그램을 경로상의 다음 노드에 전달 다음 노드의 링크 계층은 데이터그램을 상위 네트워크 계층으로 보냄 링크 계층에서 제공하는 서비스는 그 링크에서 채용된 특정 링크 계층 프로토콜에 의해 결정 데이터그램은 경로상의 각기 다른 링크에서 다른 링크 계층 프로토콜에 의해 처리될 수 있다. 프레임(frame) : 링크 계층 패킷 물리 계층 링크 계층의 기능은 전체 프레임을 한 네트워크 요소에서 이웃 네트워크 요소로 이동하는 것 물리 계층의 기능은 프레임 내부의 각 비트를 한 노드에서 다음 노드로 이동하는 것 1.5.2 캡슐화(encapsulation) 호스트 : 다섯 계층을 구현 링크 계층 스위치 : 하위 1~2 계층 구현(물리, 링크) ⇒ IP 주소를 인식 못하지만 이더넷 주소는 인식하는 이유다. 라우터 : 하위 1~3 계층 구현(물리, 링크, 네트워크) 각 계층에서 패킷은 헤더 필드와 **페이로드 필드(payload field)**로 구성된다. 계층 캡슐화 헤더 필드 페이로드 필드 애플리케이션 애플리케이션 계층 메시지 애플리케이션 계층 메시지 트랜스포트 트랜스포트 계층 세그먼트 트랜스포트 계층 헤더 정보 애플리케이션 계층 메시지 네트워크 네트워크 계층 데이터그램 네트워크가 추가한 헤더 애플리케이션 계층 메시지 트랜스포트 계층 헤더 정보 링크 링크 계층 프레임 링크가 추가한 헤더 애플리케이션 계층 메시지 트랜스포트 계층 헤더 정보 네트워크가 추가한 헤더

2024년 1월 16일 · 3 분 · 배준수

1.4 패킷 교환 네트워크에서의 지연, 손실과 처리율

1.4 패킷 교환 네트워크에서의 지연, 손실과 처리율 네트워크는 반드시 두 end system 간에 처리율(전달될 수 있는 초당 뎅디터의 양)을 제한하여 end system 간에 지연을 야기하며 실제로 패킷을 잃어버리기도 한다. 1.4.1 패킷 교환 네트워크에서의 지연 개요 패킷은 한 호스트에서 일련의 라우터를 통과하며 다른 호스트까지 도달함. 경로를 따라 한 노드(호스트 혹은 라우터)에서 다음 노드로 전달될 때 다양한 지연을 겪음. nodal processiong delay(노드 처리 지연) queuing delay(큐잉 지연) transmission delay(전송 지연) propagation delay(전파 지연) 이 모두를 합쳐 total nodal delay 지연 유형 라우터 A에서 B로 보내질 때 패킷이 앞선 노드에서 도착하면 라우터 A는 패킷 헤더를 조사해서 적당한 출력 링크를 결정하고(processing delay) 만약 선택된 링크가 이용되고 있더나 큐에서 대기하는 패킷이 있다면 큐로 들어간다(queuing delay). 링크를 이용할 수 있으면 패킷을 보낸다. 패킷의 길이가 L비트, 링크의 전송률이 R bps면 transmission delay는 L/R이다(transmission delay). 비트가 링크에 전해지면 목적지인 라우터 B까지 전달되야 한다. 이 전파 속도는 링크의 물리 매체에 따라 다르다(propagation delay). 전송 지연과 전파 지연 비교 전송지연 전송률과 패킷 길이 라우터가 패킷을 내보는데 필요한 시간 한 개의 패킷 내에서 첫번째 비트부터 마지막 비트까지 라우터를 빠져나오는데 걸리는 시간. 이전에 말했듯, 첫번째 비트는 마지막 비트가 도착할때까지 저장되어있어야 함. 마지막비트가 라우터에 도착하고나서야 첫번째 비트는 다음 목적지로 전송된다. 전파지연 비트가 한 라우터에서 다음 라우터로 전파되는데 걸리는 시간 링크의 물리적 길이 라우터를 빠져나와 다음 라우터까지 도달하는데 걸리는 시간. 패킷이 라우터에 저장되는 시간으로부터 다음 라우터에 저장될때 까지의 시간은 전송지연과 전파지연의 합. 당연히 마지막 비트가 전송되기도 전에 앞선 비트가 다음 라우터에 도착할 수도있다. 1.4.2 큐잉 지연과 패킷 손실 다른 지연들과 달리 큐잉 지연은 패킷마다 다를 수 있다. 여러 패킷이 동시에 비어있는 큐에 도착한다면, 처음 큐에 들어간 패킷과 마지막에 들어간 패킷의 큐잉 지연은 크게 차이난다. 따라서 큐잉 지연은 통계 측정을 일반적으로 사용한다. 큐잉 지연은 트래픽이 큐에 도착하는 비율, 링크의 전송률 ,도착하는 트래픽의 특성에 따라 달라진다. 예시 패킷이 큐에 도착하는 평균율 : a 패킷/초 전송률(비트가 큐에서 밀려나는 비율) : R 비트/초 모든 패킷 : L 비트 따라서 평균율의 단위를 비트로 바꾸면 La 비트/초 이다. 트래픽 강도(traffic intensity) : La/R (트래픽 강도) > 1 인 경우 비트가 큐에 도착하는 평균율이ㅐ 비트가 큐에서 전송되는 비율을 초과한다. La/R > 1이면, La > R이므로 큐에 도착하는 비트의 수가 다음 목적지로 전송되는 비트보다 많다. 큐에서 처리되는 비트보다 쌓이는 비트가 많아지므로, 점차 큐잉 지연은 커질것이다. 따라서 트래픽 공학에선, 트래픽 강도가 1보다 크지 않게 시스템을 설계하라는 규칙이 있다. (트래픽 강도) ≤ 1인 경우 패킷이 주기적으로 도착한다면, 쌓이는 것보다 처리되는 것이 빠르기 떄문에 큐잉 지연이 없을 것이다. 하지만 패킷이 몰려서(버스트) 도착한다면 큐잉 지연은 존재할 것이다. 이게 반복되면 몰려서 도착하는 패킷의 횟수만큼 점차 큐잉 지연이 늘어날 것이고, 이에 따라 평균 큐잉 지연을 계산할 수 있다. 실제로, 큐에 도착하는 프로세스는 랜덤하다.\ 또한 이 예시에선 큐가 무한한 패킷을 담을 수 있다고 가정했다. 하지만 트래픽 강도가 1에 가까울 수록, 큐잉 지연이 기하급수적으로 늘어나는 건 알아둬야 함. 패킷 손실 실제로 큐는 무한한 패킷을 담을 수 없다. 따라서 큐잉지연이 무한하게 증가하지 않는다. 패킷이 도착했을 때 큐가 꽉 차있다면, 패킷은 버려지고(drop), 잃어버리게(lost) 된다. 트래픽 강도가 높을 수록, 손실 패킷의 비율은 증가한다. end system에 입장에선, 패킷이 네트워크 코어로 전송되었으나 목적지에 나타나지 않는 것 처럼 보인다. 1.4.3 종단 간 지연 위 과정들은, 단일 라우터에서를 초점으로 두었다. 출발 호스트와 목적 호스트 사이에 N-1개의 라우터(즉, N개의 링크)가 있다고 가정. d(proc) = 각 라우터와 출발지 호스트의 처리 지연 R 비트/초 = 각 호스트와 출발지 호스트에서의 전송률 d(prop) = 각 링크에서의 전파 지연 L = 패킷 크기 d(trans) = L/R (전송지연) d(end-end) = 종단 간 지연 = N * (d(proc) + d(trans) + d(prop)) Traceroute 컴퓨터 네트워크에서의 지연을 느낄 수 있는 진단 프로그램’ 종단 시스템, 애플리케이션 그리고 그 밖의 지연 이외에도 다른 중요한 지연들 도 있다. 종단 시스템에서 매체를 공유하기 위해 프로토콜의 일부로 전송을 의도적으로 지연 시킬 수도 있다. media packetization delay(미디어 패킷화 지연)은 VoIP(Voice-over-IP)에서 송신 측은 먼저 패킷을 인터넷으로 보내기 전에 패킷을 인코딩된 디지털 음성으로 채워야 한다. 1.4.4 컴퓨터 네트워크에서의 처리율 지연과 패킷 손실 외에 컴퓨터 네트워크에서 성능과 연관된 요소는 throughput(처리율) 이다. instantaneous throughput(순간적인 처리율), average throughput(평균 처리율) 예시 서버 → 라우터 → 클라이언트로 연결되어있다고 가정해보자. 서버와 라우터간의 링크 속도는 R(s)고, 라우터와 클라이언트의 링크 속도는 R(c)이다. 서버는 라우터로 R(s)의 속도로 비트를 보내고, 라우터는 클라이언트로 R(c)의 속도로 전송한다. R(s) < R(c) 일때, 결국 클라이언트는 서버로부터 R(s)의 처리율로 비트를 받는다. R(s) > R(c) 일때, 서버가 라우터로 아무리 빨리 보내더라도 결국 클라이언트는 R(c)의 속도로 비트가 처리되는 것처럼 느낀다. 따라서 이 네트워크의 처리율은 min{R(c), R(s)} 가 된다. **bottleneck link(병목 링크)**의 전송률이 처리율이 된 상황이다. 이처럼 일직선으로 되어있는 네트워크에서 서버가 클라이언트로 파일을 전송하는 경우의 처리율은 링크 속도 중 최솟값이고, 이는 병목 링크의 전송률이다. 10개의 서버와 10개의 클라이언트가 있다고 가정해보자. 서버와 클라이언트간의 연결은 모두 단 하나의 코어 링크를 지난다고 생각해보자. 어떤 서버가 어떤 클라이언트에게 파일을 전송하든, 코어 링크를 지나야 한다. R(s) : 서버와 코어링크 사이의 링크 속도 R(c): 클라잉너트와 코어 링크 사이의 링크 속도 R : 코어 링크의 링크 속도 만약 R이 R(s)와 R(c)보다 월등히 크다면, 코어 링크가 끼치는 영향은 무의미하다. 따라서 병목은 R(s)와 R(c) 중 최솟값이 된다. 하지만 R이 R(s), R(c)와 비슷하다면? R(s) = 1 Mbps, R(c) = 2 Mbps고 R = 5 Mbps 라면 어떨까? 공통된 코어 링크는 10개의 서버-클라이언트 쌍에게 전송률을 나눈다. 하나의 통신은 500 Kbps를 가지게 된다. 그렇다면 병목은 R(s)나 R(c)가 아니라 공통된 코어링크가 된다.

2024년 1월 15일 · 4 분 · 배준수

1.3 인터넷이란 무엇인가?

1.3 네트워크 코어 1.3.1 패킷 교환 end system : message 교환 packet: message의 분할 packet은 통신 링크와 packet switch를 거침 저장-후-전달 store-and-forward transmission : switch가 한 패킷 내의 모든 비트를 받아야만 전송 시작 초당 R비트의 속도로 총 L 비트을 전송하는건 L/R초 소모. 이 방식으로, L비트 짜리 패킷 1개가 엔드시스템 → 라우터 → 엔드시스템 으로 갈떄 걸리는 시간은 2L/R 받고 저장하는데 L/R + 다시 보내는데 L/R 전체 이 방식이 아니라 받는 비트별로 보내면 L/R 일 것. L 비트짜리 패킷이 3개라면? L/R 초 후 : 출발지가 송신, 라우터가 수신 2L/R 초 후 출발지가 2번째 패킷 송신, 라우터가 첫번째 패킷 송신과 두번째 패킷 수신, 목적지가 첫번째 패킷 수신 결국 4L/R 걸린다. 일반화해서, 출발지부터 목적지까지 N개의 링크로 구성(N-1개의 라우터가 존재한다는 의미)되어있고 전송률이 R이라면 종간 간 지연은 NL/R 큐잉 지연과 패킷 손실 각 패킷 스위치는 여러개의 링크를 가질 수 있음 각 링크에 대해 output buffer(output queue)를 가짐. 송신받은 패킷을 보낼려는 링크가 다른 패킷을 전송하고 있다면 output buffer에서 대기 : queuing delay output buffer 조차도 꽉차있다 : packet loss 흔한 일 : 출발지 → 라우터 는 100Mbps지만 라우터 → 목적지가 15Mbps라면 기다려야함 포워딩 테이블과 라우팅 프로토콜 보내야 할 링크를 아는 방법: IP 주소(계층적 구조 like 우편주소) forwarding table 패킷이 라우터에 도착하면 올바른 출력링크를 찾기 위해 주소의 일부를 조사 주소를 이용해 forwarding table 검색 그 패킷을 출력링크로 보냄 인터넷은 자동으로 forwarding table을 설정하는데 이용하는 routing protocol을 갖고 있음. 1.3.2 회선교환 데이터를 이동시키는 방식 : circuit switching, packet switching(지금까지 본것) circuit swtiching(회선 교환) 통신 session 동안 resource들을 reserve. 전화망 : circuit(회선)이 송수신자간의 연결 상태를 유지해서 guaranteed된 전송률 보장 각 링크가 여러개의 회선을 가져 이 중 하나를 reserve 할 수 있음 (전송용량의 1/n) 회선 교환 네트워크에서의 다중화 FDM(frequency-division multiplexing, 주파수 분할 다중화), TDM(time-division multiplexing, 시분할 다중화) : 회선을 동시에 공유할 것인가? 시간마다 번갈아가면서 전체를 쓸것인가? FDM 링크를 통해 설정된 연결은 링크의 주파수 스펙트럼을 공유. 대역폭(bandwidth): 링크가 연결되는 동안 각 연결에 대해 고정제공하는 주파수 대역의 폭 FM 라디오는 88Mhz~108MHz 사이를 공유(방송국마다 할당) TDM 시간을 일정 주기의 프레임으로 구분, 각 프레임은 고정된 수의 시간 슬롯으로 나눔 단점 : silent period(비활용기간) ⇒ 통화할때 이야기를 주고받지 않아도 다른 네트워크자원으로 쓸 수 없이 연결되어있음 : 낭비? A 에서 B로 n비트를 보낼떄, 모든 링크가 k개의 슬롯을 가지고 전송률이 v인 TDM 이라면? 각 회선의 전송률은 v/k (v만큼을 k개가 나눠쓰니까) 전송시간은 n/(v/k)초 가된다. 패킷 교환 대 회선 교환 패킷교환의 장점 패킷 교환이 회선 교환 전송 용량의 공유에서 더 효율적이다. 패킷 교환이 더 간단하고 효율적이며 회선 교환보다 더 구현 비용이 적다. 패킷교환의 단점 가변적이고 예측할 수 없는 종단 간의 지연(주로 불규칙적이고 예측할 수 없는 큐잉 지연에서 발생) 때문에 패킷 교환이 실시간 서비스(ex. 전화 통화)에는 적당하지 않음. 패킷교환이 효율적인 이유 패킷교환은 요구할떄만 링크의 사용을 할당하기 때문이다. 1.3.3 네트워크의 네트워크 종단 시스템은 접속 ISP를 통해 인터넷에 연결된다. 하지만 이는 인터넷 망에서 극히 일부에 불과하다. 접속 ISP들이 연결되어야 하기 떄문에, 네트워크의 네트워크 개념이 탄생했다. ISP들이 전 세계에 있는 모든 ISP들과 연결하는 것은 비용적으로 비효율적이다.(네트워크 구조 1) 가장 상위에 단 1개에 글로벌 ISP도 존재하기 힘들다. 이 지위를 얻기 위해 경쟁할 것이고, 두 경쟁은 서로 연결하지 않을 것이기 때문에, 다른 글로벌 ISP를 이용하는 end system간 통신은 불가능해진다.(네트워크 구조 2) 12개 정도의 1계층 ISP - 국가 ISP - 지방 ISP 순으로 연결(네트워크 구조 3) 여기에 Pop, 멀티홈, 피어링, IXP가 추가되어야 한다(네트워크 구조 4) 콘텐츠 제공자 네트워크도 추가된다.(네트워크 구조 5)

2024년 1월 14일 · 3 분 · 배준수

1.1 인터넷이란 무엇인가?

1. 컴퓨터 네트워크와 인터넷 1.1 인터넷이란 무엇인가? 구성요소를 기술하거나 분산 애플레키에션에 서비스를 제공하는 networking infrastructure 관점으로 기술할 수 있다. 공부를 시작하기 전의 나라면 수 많은 사람들의 컴퓨터가 연결되어 있는 연결망 이라고 대답할 것 같다. 1.1.1 구성요소로 본 인터넷 인터넷은 수 많은 컴퓨팅 장치를 연결하는 컴퓨터 네트워크이다. 이전에는 데스크톱 PC, 서버뿐이었지만 스마트폰과 태블릿을 넘어 가전제품, 자동차 등 다양하게 연결되는 중! 인터넷에 연결된 모든 장치를 호스트(host) 혹은 **종단 시스템(end system)**이라고 부른다. end system : **통신 링크(communication link)**와 **패킷 스위치(packet switch)**의 네트워크로 연결된다. ...

2023년 8월 2일 · 3 분 · 배준수

11.5 웹 서버

11.5 웹서버 11.5.1 웹 기초 Clients 와 servers 는 HyperText Transfer Protocol(HTTP)를 사용하여 의사소통한다. Client와 server는 TCP 연결을 설립한다. client는 컨텐츠(content)을 요구한다(request) server는 요청된 컨텐츠에 응답한다(respond). client와 서버는 연결을 끊는다(결국 언젠가는) 11.5.2 Web content 웹 서버는 **컨텐츠(content)**를 client에게 반환한다. content : 연관된 MIME(Multipurpose Internet Mail Extension) 타입을 갖는 바이트 배열 ex. MIME 타입의 예시 text/html HTML document text/plain Unformatted text image/gif Binary image encoded in GIF format image/png Binary image encoded in PNG format image/jpeg Binary image encoded in JPEG format Static and Dynamic content HTTP 응답에서 반환된 컨텐츠는 **정적(static)**일수도 **동적(dynamic)**일수도 있다. ...

2023년 4월 16일 · 8 분 · 배준수