Note : Introduction, Protocols, and Layering

1-4 socket

앱과 앱 사이에 통신하려면 host를 통해서 한다.
앱과 앱 바로 통신할 수 있지만 로컬에서만 가능하기 때문에 네트워크에서 하는게 나음
앱의 예 ) 파일 전송, 웹 브라우징, 에코

어떻게 앱을 만드나?
Socket API를 이용 – 넓게 이용 되고 있다.

소켓은 2종류의 네트워크 서비스를 제공.
Stream : 서버랑 클라이언트 사이의 바이트 스트림이 안정적으로 배달이 된다.
Datagrams : 안정적이지 않게 보냄.

앱마다 소켓 API를 각자 가지고 있고, 소켓은 포트 번호를 가지고 있다. (이게 로컬 주소)
각자 다른 어플리케이션들마다 다른 포트 번호를 가지고 있으니까 이걸로 찾아낼 수 있다. (can be used to identify)

소켓 API
socket, send, receive : 주고 받는 콜들

나머지 콜들은 커넥션을 set up하거나 tear down (파괴)하는데 사용됨
커넥션 모델인 스트림 (stream : 앞에서 나온 첫번째 말하는듯)은 전화랑 비슷하다. (전화를 하기전에 셋업이 필요한게 비슷) connect 콜은 연결하기 위해 필요하고 bind, listen, accept는 다른쪽에서 오는 콜을 받기 위해 준비하는 과정에 필요

close 는 커넥션을 해제할때 사용

1.5 traceroute

traceroute (command-line tool)로 네트워크 안을 본다.
모든 os에 있다( 윈도우는 tracert )

연속적인 hop인 네트워크 path를 찾으려면..
처음 hop에가서 host에 return을 한다.
그다음 두번째 hop에가서 host에 리턴하고.. 반복
목적지에 가서도 host에 return

1.6 protocol layers

네트워크는 앱을위해 많은일을 하는데, (커넥션 연결하거나 path 찾아주거나 등등..) 복잡한 걸 다루고 재사용을 할 수 있도록 모듈화 할 필요가 있음.

Protocol 이랑 Layering이 네트워크를 기능별로 나누는 기본 structuring method

프로토콜은 수평적이고, 레이어는 수직적

프로토콜 : TCP, IP, 802.11, Ethernet, HTTP, SSL, DNS 등
프로토콜 스택 예 : 인터넷에 연결하는 웹브라우저

Demultiplexing

들어오는 메세지는 사용되는 프로토콜에 전달 되는데, 어떻게 어떤 프로토콜로 들어올지 아나?
헤더에 있는 demultiplexing key가 답

첫번째가 이더넷. 이더넷의 헤더에서 다음 꺼의 정보를 알려준다. 그게 Ethertype value인데 그 값을 보면 이어지는 IP의 정보를 알려준다. 그다음 IP 헤더에서 IP protocol field를 보면 거기서 TCP를 알려주는 식으로 진행된다.

레이어링의 장점

브라우저랑 서버는 이더넷을 통해 연결하든 802.11을 통해 연결하든 신경을 안쓴다 – hiding
TCP, IP 부분은 겹치니까 재사용을 할 수 있다 – reuse

802.11이랑 이더넷이랑 연결 중간에 박스를 둬서 IP부분부터 통일을 시키면 밑 부분 종류에 신경쓰지않고 연결을 할 수 있다. (이게 라우터)

1-7 reference models

각 레이어에서 어떤 기능을 구현해야 하는지 어떻게 아나? (어떤 프로토콜로 구현을 해야하는지..)
reference models이 방향을 제시해주는 프레임워크를 제공해줌

OSI “7layer” reference model. -> 영향력은 있는데 실제로 사용 안됨
Internet Reference Model

NOTE : 위 레이어들에 관한 내용은 가이드라인일 뿐, 엄격하게 지켜질 수 없다.
한 레이어에 여러 프로토콜이 들어가거나 어떤 프로토콜인지 확실히 정의 할 수 없는 경우도 있음