운영체제 12, 17장 - file management, network protocols


12장
파일시스템은 파일을 쉽게 사용할수 있게 사용자 인터페이스 제공
오래 저장되기를 기대, 사용자가 로그오프 해도 저장되어야
프로세스간 공유
계층적으로 저장되어서 찾기 쉽게


위 기능 제공


일반적 구조
DB에서 배움



17장
프로토콜 - 데이터를 디바이스간 교환하기 위한 절차
물리적으로는 문제가 있을수 있는 통신선을 사용해서 논리적으로는 문제가 없는 통신을 제공해야. 이것을 위해 여러 절차가 약속되어 있다


통신을 하기 위해서는
통신망에서의 목적지 위치를 알려주고 연결을 시도
source system은 목적지 시스템이 준비가 되어 있다는걸 알고 시작해야
예를 들어 파일을 전달하는 프로그램이 있다면 서버가 받아들일걸 확신하고 시도를 하게 된다
데이터포맷이 다를경우 번역기능 필요

이것이 사용자 입장에서 네트워킹 시스템이 해줘야 하는 일이다



 
프로토콜은 - 데이터의 상호 교환을 지배하는 규칙들의 집합, 서로 다른 시스템이 통신할수 있게 약속을 정함
 
프로토콜의 3가지 요소
syntax - 문법, 어떤 데이터 레벨과 시그널로 데이터를 보낼지
semantics - 의미, 어떤 상황에서 정보를 주고받을때의 의미
timing - 타이밍, 통신할때 주고받는 속도와 sequence





TCP/IP는 모두 5개의 독립적인 계층으로 구성되어 있다




physical layer - 물리 인터페이스를 정의, 연결에 어떤 medium을 사용하는지 주파수가 어떻게 되는지, 신호는 어떻게 만들어지는지, data rate는 어떻게 되는지
 
network access layer -  그 위에 계층, 어떻게 미디어를 엑세스 할것인가

internet layer - 여러 연결된 라우터의 네트워크 위에서, 데이터를 전달을 어떻게 할것인가. 라우터를 거쳐서 경로를 찾아서 목적지까지 패킷을 전달

transport layer - 끝에서 끝으로 데이터 교환에서 신뢰성을 제공, TCP

application layer - 사용자가 필요로 하는 기능 제공


파일을 보내는 프로토콜을 생각해보자




모든 entity들은 주소를 갖는다, ip주소와 포트번호
tow levels of addressing이라고 하고
ip주소는 host의 번호, unique하다. 이 unique global internet address로 ip 계층에서 routing과 delivery를 하게 된다

각 애플리케이션은 서버에 어디에 접속될 것인가를 표현해줘야 하는데, 그 번호가 포트 번호다


TCP Header


네트워킹을 하기위해서 클라이언트 프로그램을 작성하기 위해 사용하는 인터페이스는 소켓


소켓은 ip 주소로 구분됨
stream sockets - stream based방식 통신, tcp
datagram sockets - 보장은 안되나 하부 통신선이 안전한 경우 오버헤드 없이 데이터를 보냄, udp
raw sockets - low layer직접 접근 용도로 사용


소켓을 만들기 위해 관련 자료구조를 만드는 함수
tcp/ip 프로토콜에 사용여부, udp인지 tcp인지 표현하여 만들게 된다


소켓 생성후 주소를 연결하는 함수


소켓이 연결되기 위해서는 bind된 소켓을 가지고 클라이언트가 connect() 함수로 연결
서버측에서는 listen() 함수를 불러서 서비스를 요청하는 클라이언트를 기다리게 된다
클라이언트가 도착하면 accept() 함수를 불러서 일을 하게 된다


stream communication을 하기 위해서
send(), recv()를 보내게 된다
통신을 끝낸후에는 close()로 닫는다

datagram communication에서는
sendto(), recvfrom()을 데이터를 주고받는다


socket system call을 사용해서 클라이언트와 서버간 연결과정
socket() 사용해서 자료구조 확보, 엔드포인트 셋업
bind() 사용해서 하나의 ip주소를 소켓에 연결
listen() 클라이언트가 연결 요구를 기다림
accept() 서버측 에서는 클라이언트가 요청이 오기를 기다림

클라이언트에서도 socket()을 열고 connect()을 부르게 되면
요청하고 받아들이는 과정을 통해 connection이 만들어진다
그러면 새로운 소켓을 하나 만들어서 연결해주게 된다(기존 80포트는 계속 받아들이도록 유지되어야)

연결을 만든 다음엔 클라이언트와 서버가 send(), receive()로 주고받게 된다. 그리고 close()로 닫는다