e-mail, web, 문자메시지, p2p파일공유, 원격로그인, 멀티유저 네트워크 게임, 스트리밍 영상(YouTube, Netflix), VoIP(Voice over IP,인터넷전화 e.g.,Skype), 실시간 화상회의(Zoom), SNS, 검색
항상 켜져있는 서버가 없다.
각각의 개인이 서로서로간에 서버이자 클라이언트로서(peer로서) 동작한다.
self scalability : 새로운 peer가 서비스를 요청할 뿐만 아니라 서비스 를 제공한다.
peer는 간헐적으로 접속하면서 IP주소가 바뀐다
process : host에서 실행중인 프로그램
inter-process communication: 같은 host내에서 동작하는 다른 프로세스간 통신
message passing : 다른 호스트들 간의 프로세스는 message를 교환하며 통신
client process : communication하기위해서 통신을 시작하는 프로세스
server process : 항상 동작하면서 연결을 기다리는(wait-to-be-contacted) 프로세스
그럼 p2p 모델의 프로세스는??
그렇다면 프로세스간 통신하기 위해서는 어떻게 해야할까? 👉 소켓
e.g., 전선꼽는 돼지코 모양의 콘센트가 소켓이다. 데이터 전송을 위해 왔다갔다 할수있는 입출구역할을 한다.
위 그림에서 애플리케이션 아래 계층은 신경쓸 필요없이 애플리케이션 계층에서 소켓에다가 그냥 집어넣으면 다른 호스트에서도 애플리케이션 계층의 소켓을 통해 데이터를 꺼낸다.
소켓으로 통신을 할 수 있다 치더라도 일단 기본적으로 상대방 소켓의 이름(=주소)을 알아야 소켓을 사용하건 말건 한다.
즉, 프로세스는 통신(메시지를 주고받기위해)을 하기위해 상대방이 누구인지 식별자가 필요하다. 이 식별자가 바로 IP주소(32-bit)다.
하지만, 프로세스가 실행되고 있는 호스트의 IP주소만으로는 충분치 않다. 왜냐하면 같은 호스트내에서 아주 많은 프로세스들이 실행되고 있기 때문이다.
IP주소 뿐만아니라 반드시 port가 필요하다 !! 즉 식별자는 IP주소 + 프로세스와 연관된 port번호이다!!
연관된 포트번호란 HTTP server의 port번호가 80이고, mail server의 port번호가 25인 것 처럼 각 프로세스에는 default port번호가 대부분 정해져있다.
(1). 교환되는 메시지 타입 :
request
response
(2). 메시지 문법 :
필드와 필드간의 구별법(아래 두가지를 사용해서 구별)
메시지의 필드가 무엇인지
그 필드가 어떻게 기술되고있는지
(3). 메시지 의미 :
(4). 규칙 :
위 4가지를 모두 이용하여 만들어지는 프로토콜 :
개방 프로토콜(open protocols):
RFCs에서 정의된 표준프로토콜
상호작용(interoperability) 허용
e.g., HTTP, SMTP
독점 프로토콜(proprietary protocols):
표준이 아닌 자체적으로 만든 프로토콜
e.g., Skype
소켓은 응용계층과 전송계층의 인터페이스이므로 전송계층의 프로토콜 중 하나를 선택해야할 필요가 있다. 그럼 전송계층의 어떤 부분을 보고 선택을 해야할까??
데이터 무결성(data integrity)
어떤 앱은 데이터를 주고 받을 때 데이터가 손상되지(바뀌지) 않아야함
또 다른 앱은 데이터 손상이 쬐끔있어도 감내가능
시간(time)
e-mail같은 경우 시간이 지연되어도 됨
인터넷 전화, 게임같은 경우 효과적인 서비스를 위해 최소한의 지연을 요구
처리율(throughput)
서비스가 효율적으로 작동시키기 위한 최소한의 처리율이 필요한 앱이 있다.(멀티미디어)(이정도의 처리율은 되야 서비스작동가능한 앱)
일부 애플리케이션은 덜 민감
보안(security)
아래 그림은 1.3의 이용가능한 트랜스포트 서비스가 입맛에 맞게 골라진 실제 인터넷상의 애플리케이션들이다.
transport protocol은 2가지가 있다.
TCP(Transmission Control Protocol)
연결지향형(데이터 전송전 클라이언트-서버간 연결설정,확인)
신뢰적인 데이터 전송
송/수신 프로세스 간의 데이터의 손실 없이 올바른 순서로 전달
패킷의 Loss 발생시 tcp는 패킷을 재요청 하여 올바른 순서로 맞춰 응용계층에 올려줌
흐름 제어
혼잡 제어
❓ 제공하지 않는 서비스? 시간 보장, 최소 처리율 보장, 보안성
UDP(User Datagram Protocol)
비연결지향형(그냥 데이터 막 보냄)
비신뢰적인 데이터 전송
흐름 제어, 혼잡 제어, 시간 보장, 처리율 보장, 보안 등의 서비스도 제공하지 않음
아무 것도 하지 않으므로 빠르다.
따라서 실시긴 애플리케이션 들이 전송 속도 향상을 위해 udp 사용
실시간 애플리케이션들의 전송 속도를 위해 UDP 사용
tcp의 혼잡 제어와 패킷 오버헤드 문제를 회피
많은 방화벽들이 udp 트래픽을 차단하도록 설정되어 점차적으로 tcp 상에서 멀티미디어와 실시간 애플리케이션을 수행하도록 선택
UDP를 사용하는 대표적인 응용 프로토콜 : DNS, SNMP, RIP, VoIP
* DNS(Domain Name System, 도메인 네임 시스템)
: 호스트의 도메인 이름을 호스트의 네트워크 주소로 바꾸거나 그 반대의 변환을 수행할 수 있도록 하기 위해 개발되었다. 특정 컴퓨터의 주소를 찾기 위해 사람이 이해하기 쉬운 도메인 이름을 숫자로 된 식별 번호로 변환해준다.
* SNMP(Simple Network Management Protocol, 간이 망 관리 프로토콜)
: 네트워크 상의 각 호스트에서 정기적으로 여러가지 정보를 자동적으로 수집하여 네트워크 관리를 하기 위한 프로토콜로 UDP 상에 정의된 응용 계층 표준 프로토콜이다.
* RIP(Routing Information Protocol, 라우팅 정보 규약)
: UDP/IP 상에서 동작하는 라우팅 규약으로 경유하는 라우터의 대수에 따라 최단 경로를 동적으로 결정하는 거리 벡터 알고리즘을 사용한다.
TCP와 UDP
암호화 제공 ❌
즉, 소켓을 통해 평문이 그대로 전송됨
SSL(Secure Socket Layer)
암호화 된 TCP 연결을 제공
데이터 무결성
종단 인증
SSL은 응용계층에 있다.!