- server
- 항상 켜져있음
- 영구적인 IP 주소
- 데이터 센터
- client
- 서버와 통신
- 간헐적 연결
- 비영구적인 IP 주소
- 클라이언트간 통신 x
- 서버 없음
- 엔드시스템 간의 통신
- IP의 변동과 간헐적 접속으로 관리가 어려움
- 같은 호스트의 2개의 프로세스 : OS가 제공하는 통신 밥법으로 통신
- 다른 호스트 : 메시지를 주고 받아야 함
- 소켓을 통해 통신
- 소켓통신을 위해 프로세스의 고유한 번호를 식별해야함
- IP주소는 호스트만을 식별 가능
- 추가로 포트번호로 프로세스까지 구분 함
- type of message
- request? response?
- message syntax
- 형식을 정의
- message semantics
- 의미 정의
- reles
- data integrity
- 데이터가 변조 되는지? 오디오는 100퍼까진 필요 없을 수 있음(tolerate)
- timing
- low delay? (game)
- throughput
- 미니멈을 요구 할 수 있음(미디어 앱)

- reliable tranport : 데이터 손실이 없음
- flow control : 전송속도 조절(받는 사람과 속도 맞추기 가능)
- congestion control : 네트워크 느릴떄 속도 조절로 혼잡 제어
- not provide
- timing : 이건 다 불가능함
- security
- connection-oriented : 미리 서버와 클라이언트 연결 해야함
- unreliable data transfer : 데이터 손실이 있을 수 있음
- not provide : timing, security, flow control, reliability
- connection setup이 필요 없기 떄문에 빠르게 보내고 싶을때 사용
- TCP 사용
- 클라이언트 소켓 생성
- 서버 응답
- HTTP 전송
- HTTP : stateless : 상태를 저장하지 않는다
- non persistent HTTP
- 한번에 하나의 오브젝트만 주고받기 가능(이미지 10개면 10번 연결 해야함
- 반응 시간 : 2RTT + file transmissin time
RTT : 한번 왕복하는 시간
- persistent HTTP
- 커넥션을 유지 : 1RTT만 필요


첫줄 : status code
- 200 : OK
- 301 : Moved Parmanently : 파일이 이동함, 추가로 이동된 위치를 제공
- 400 : Bad Request : 잘못된 형식
- 404 : Not Found
- 505 : Version Not Serviced
- 클라이언트에 쿠키정보를 저장
- 후에 해당 사이트의 쿠키정보를 접속시 보냄
- 쿠키정보가 포함된 요청이면 서버에서 다른 정보를 보낼 수 있음

오리진 서버 보다 가까운 프록시 서버에 정보가 있으면 거기서 제공해줌(정보가 없으면 프록시 서버가 오리진에 요청 후 일정 기간동안 저장해둠)


- mail server가 존재
- 보내거나 받을떄 먼저 메일 서버에 저장
- 서버간의 통신을 위한 protocol : SMTP
- mailbox : 받는 메일 저장
- message queue : 보내는 메일 큐에 넣고 보냄
- 메일서버가 클라이언트, 서버 역할로 SMTP로 통신
- TCP 사용(포트 = 25)
- direct transfer : 경유 x
- handshaking(SMTP 통신을 위한 메시지)

- pop3
- 클라이언트가 서버에서 이메일을 가져오면 서버에서 삭제
- 오프라인상태에서 클라이언트가 이메일 관리
- 일반적으로 한 기기에서만 관리
- IMAP
- 서버, 클라이언트가 연결된 상태에서 이메일 관리
- 실시간으로 이메일을 동기화
-> pop3는 이메일을 다운로드 후 관리 IMAP은 실시간 동기화
- Application layer
- hostname to IP address
- 같은 호스트를 여러개의 이름으로 부를 수 잇음
- 여러개의 IP를 하나의 이름으로 정의해 부하를 줄임(구글)
- 분산된 네임서버가 계층적으로 저장되어있는 데이터베이스 구조

계층적으로 요청
Root name server
TLD server(top-level-domain)
authoritative server
로컬 DNS 네임 서버
iterated query(반복)

로컬 DNS서버가 루트, TLD, authoritative서버에 각각 물어본 뒤 종합해서 제공

재귀방식 : 디도스나 성능의 문제로 잘 사용하지 않음
- 보통 일정시간(TTL)만큼 캐시를 저장함
- out of data : 서버 정보가 바뀌어도 캐시는 TTL만큼은 유지가됨 -> 그 후에 캐시가 사라지면 다시 요청하는데 그 전까지는 어쩔 수 없이 다른 정보가 있을 수 있다
- RR: 하나의 레코드로 저장
- 타입의 종류에 따라 name과 value의 형식이 바뀜
- TTL시간 후 삭제
protocol
- message타입 : query, reply 2가지
- 형식은 똑같음

.com을 담당하는 TLD서버에 IP와 이름을 저장 해야함
2개의 RR를 TLD서버에 저장
DDOS
- 루트 서버 공격
- 트래픽 필터링과 캐시가 있기 떄문에 성공한 적 없음
- TLD서버 공격 : 사기업이 운영하기 때문에 취약할 수 있음
- 리디렉션 공격
- man in middle : 쿼리 가로채기
- DNS 해킹 : 잘못된 정보를 보내 캐싱 시킬수 있음
- DNS를 DDOS로 활용 : 소스 ip를 공격 대상으로 활용 : 많은 쿼리가 요청 될 수 있음
client-server VS P2P
- c-s :
서버에서 클라이언트 요청만큼 업로드(- p2p :
p2p는 서버에서 최소 한번 업로드 후 각 클라이언트가 또 업로드 가능 : 결국 요청 수 만큼만 업로드 하면 되는데 업로드 하는 기기가 늘어남
- 파일을 여러 조각(256kb 단위)으로 쪼갠 후, 토렌토 안의 피어들끼리 공유.
- 트랙커(tracker) : 토렌트에 참여하고 있는 피어들의 정보를 가지고 있는 서버
토렌트(torrent) : 파일들을 교환하는 피어 그룹- 파일이 없는 피어는 추적기로부터 피어 목록을 가져와서, 다른 피어로부터 파일의 조각들을 받아 누적함.
- 다운로드하는 동안 피어가 다른 피어에 파일 조각들을 업로드함.
- 파일을 교환하는 피어 변경 가능.
- 피어가 전체 파일을 가지고 있으면, 토렌토를 떠날 수도 남아있을 수도 있음.
- Video : 이미지의 연속
-> 모든 이미지를 전솔하면 트래픽이 너무 커짐- redundancy를 활용한 코딩으로 트래픽을 줄임
- spatial : 이미지 속 배경의 중복. 동일한 배경의 경우 모든 색상 값을 내보내지 않고 반복되는 값만 내보냄.(어디부터 어디까지는 무슨 색이다)
- temporal : 이전 이미지와 다음 이미지에서 달라진 부분만 내보냄.
- CBR and VBR
- CBR : 고정된 비트 레이트 : 파일크기 일정하게 유지, 특정 대역폭 요구시 유리 낭비발생 가능성 있음
- VBR : 가변적 비트 레이트 : 복잡도에 따라 가변적으로 비트레이트 조절 오래걸릴 수 있음
DASH (Dynamic, Adaptive Streaming over HTTP)
- Server
- 하나의 비디오를 여러개의 청크로 저장
- 각각의 청크는 다른 rate로 저장(같은 시간대의 청크가 여러 종류인거임)
- manifest file : 각각의 청크를 여러 서버에 저장하고 그 정보를 기록해둔 파일
- client
- bandwidth를 파악
- menifest파일 요청, bandwith에 맞는 청크를 요청
- 시간에 따라 다른 rate의 청크를 요청할 수 있음
CDN (Content Distribution Network)
- 서버와 사용자 사이의 물리적인 거리를 줄여 콘텐츠 로딩 시간을 최소화하는 콘텐츠 전송 기술. 각 지역에 캐시서버를 분산 배치해서, 근접한 사용자의 요청에 원본 서버가 아닌 캐시 서버가 콘텐츠를 전달하도록 함.
- menifest 파일을 통해서 가까운 CDN에 영상을 요청하는 방식
-> Over The Top(OTT) : 인터넷으로 데이터를 주고 받는 것
- 소켓은 16비트이다