1강에 있는 내용을 이어서 설명한다.
데이터 교환 방식을 정의하는 규칙 체계이다. 각기 다른 컴퓨터는 매우 상이한 소프트웨어와 하드웨어를 사용할 수 있기에, 공통된 통신 규약을 만들어 소통한다. 대표적으로 IP(Internet Protocol)가 있다.
그러나 과거에는 장비 제조사별로 다른 프로토콜을 사용하고 있었고, 이를 해결하기 위해 프로토콜을 국제적으로 표준화한 것이 OSI 7 Layers이다.
교수님 자료에서 ISO/OSI reference model이라고 표현되었다. 총 7계층으로 나누어져 있다.
전선, 광섬유 등 물리적인 연결방식을 다루는 계층이다.
바로 이웃한(=직접 연결된, neighboring) 네트워킹 장치들간의 데이터 전송을 담당한다. 대표적으로 ethernet, WI-FI가 있다.
데이터그램(=패킷)을 source부터 destination까지 라우팅을 담당한다. 대표적으로 IP가 있다.
응용 프로세스 간의 통신을 돕는다. 대표적으로 TCP/UDP가 있다.
호스트들간의 연결을 최초로 연결하고, 통신 중 연결이 끊어지지 않도록 유지시켜준다. 에러 복구도 함. 대표적으로 SSH가 있다.
데이터 값이 다양한 시스템에 저장될 때 다양한 형태로 저장되는데, 이때 다양한 표현양식(syntax)를 공통의 형식으로 변환하여 번역기 역할을 수행한다. 암호화, 압축 등의 역할도 수행한다.
네트워크 서비스들이 기능을 제공하도록 도와준다. 대표적으로 HTTP가 있다.
network layer는 호스트들간의 소통을 담당한다면, transport layer는 프로세스들간의 소통을 담당한다.
어플리케이션은 각자 다른 특성( 데이터 손실, 딜레이, 데이터 전송률(Throughput), 보안)을 요구하고, 이에 따라 사용하는 전송 서비스(transport service)가 다르다.
데이터 신뢰성을 중요시여긴다면 TCP를 사용해야 한다.
TCP는 다음과 같은 특성을 가진다.
최선을 다하는(best effort) 프로토콜이다. 커넥션 준비(establishment)가 필요없고, 세그먼트(전송 계층에 존재하는 데이터의 집합, 패킷과 비슷함)의 헤더가 작고, 혼잡 제어 기능이 없다.
데이터 손실이 발생하는대신 전송 속도가 빨라 일반적으로 멀티미디어 스트리밍에 사용된다. DNS와 SNMP 또한 UDP를 사용한다.
전송된 세그먼트의 에러를 검출하기 위함이다. 다음과 같은 과정을 거친다.
그러나 전송 도중 checksum값이 바뀔 수도 있고, 데이터가 변형되었음에도 불구하고 checksum 값이 동일한 경우도 발생할 수 있기에 완벽한 방식은 아니다.
How long does it take to send a file of 640,000 bits from host A to host B over a circuit-switched network?
- all link speeds : 1.536 Mbps
- each link uses TDM with 24 slots/sec
- 500 msec to establish end-to-end circuit
먼저 파일의 크기와 링크의 스피드 단위를 통일시켜야 한다.
link speed : 1.536 Mbps = 1,536,000 bps
1 Mbps = 1,000,000 bps
TDM은 하나의 time slot에 하나의 사용자 채널을 할당하므로, 하나의 사용자 채널(링크)의 속도는 다음과 같이 구할 수 있다.
one link speed = all link speeds / number of time slots
계산하면 1,536,000 / 24 = 64,000 bps 를 구할 수 있다. 그렇다면 총 파일 사이즈를 링크의 속도로 나누면 파일이 보내지는 시간을 구할 수 있다.
Time = File Size / Link Speed
640,000 / 64,000 = 10s가 걸린다. 이후 circuit을 초기 연결하는 데에 0.5초가 걸리므로 총 걸리는 시간은 10.5초가 된다.
어플리케이션들은 크게 세 가지 아키텍쳐를 가진다.
컴퓨터 네트워크 1에서 설명했던 아키텍쳐로, 클라이언트는 서버에게 요청을 보내고 서버에 응답하여 값을 받는다.
임의의 End system들이 직접 통신한다. End system들은 서로 클라이언트와 서버 역할을 동시에 수행하면서 동등한 지위를 가진다. 이때의 End system들을 peer라고 부르며, peer들은 간헐적으로 연결되고 ip 주소를 바꾼다. 확장성이 좋으나 관리하기 어렵다.
대표적으로 Skype와 같은 영상 통화 프로그램이 사용한다. 중앙 서버가 참여자의 주소를 찾고, 그 주소를 이용해 클라이언트들끼리 직접 연결된다. 또한 Instant Messaging에 사용하기도 한다.
호스트 안에서 실행되고 있는 프로그램을 일컫는다. 같은 호스트 안에서 실행되고 있는 두 프로세스들은 운영체제에 의해 정의되는 inter-process communication을 사용하여 통신한다. 다른 호스트 안에서 실행되는 프로세스들은 Socket을 이용해 통신한다.
프로세스가 데이터를 주고받기 위한 창구이다. 소켓은 프로토콜, IP 주소, 포트 넘버로 정의할 수 있다.
어플리케이션 레이어 프로토콜은 다음을 정의한다.
모든 호스트들은 유니크한 32-bit 주소를 가지고 있다.
IP주소를 이용해 호스트가 어딨는지 찾을 수 있다. 그러나 다양한 프로세스들은 같은 호스트 내에서 실행되기에, IP 주소만으로는 프로세스를 특정하는 것에는 한계가 존재한다. 이를 해결하기 위해 0 ~ 65536사이의 숫자를 가지는 포트 넘버를 함께 조합하여 프로세스를 찾는다.
어플리케이션 레이어 프로토콜 종류이다.
ASCII 코드로 작성되어 있다.
//Request Start line
GET /index.html HTTP/1.1\r\n
//Request Headers lines
Host:
User-Agent:
Accept:
...
Connection:
//Request Message Body
Entity Body
데이터를 이용해 어떠한 일을 할 것인지 알려준다.
//Response Start line
HTTP/1.1 200 OK\r\n
//Response Headers lines
Date:
Server:
Last-Modified:
...
Content-Type:
//Response Message Body
Entity Body(Data)
Response start line에 존재하며, request의 상태를 나타낸다.
서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각이다. 브라우저는 그 데이터 조각들을 저장해 놓았다가, 동일한 서버에 재 요청 시 저장된 데이터를 함께 전송한다. 쿠키는 두 요청이 동일한 브라우저에서 들어왔는지 아닌지를 판단할 때 주로 사용한다. 이를 이용하면 사용자의 로그인 상태를 유지할 수 있다.
쿠키는 Response Headers lines에서 설정할 수 있다.
//HTTP Response Message
Set-Cookie: yummy_cookie=choco
이후 동일한 서버로 요청을 할 때마다 Cookie 헤더에 이전에 서버로 부터 받았던 쿠키를 그대로 돌려 보낸다.
//HTTP Request Message
Cookie: yummy_cookie=choco
클라이언트가 멀리 있는 origin server까지 가지 않고 가까운 프록시 서버의 web caches 파일에 접근하여 원하는 파일을 받아오는 기술이다. 다음과 같은 과정을 거친다.
- 클라이언트가 프록시 서버에 접근하여 캐시가 있는지 확인한다.
- 있다면 프록시 서버에서 데이터를 받아온다.
- 없다면 오리진 서버에 요청에 데이터를 받아오고, 받은 데이터는 프록시 서버에 저장된다. 그리고 클라이언트에 데이터를 전달해준다.
일반적으로 캐시는 ISP(하나의 네트워크를 운영하는 대학, 회사 등)에서 설치하고 관리된다.
Domain Name System. 웹사이트에 접속할 때 우리는 외우기 어려운 ip 주소 대신 도메인 이름을 사용한다. 도메인 이름을 URL에 입력했을 때 입력한 도메인을 실제 네트워크에서 사용하는 ip주소로 바꾸고 해당 ip주소로 접속하는 시스템을 DNS 서비스라고 한다.