컴퓨터망 chapter 2

Blue·2023년 10월 19일

Program 을 짠다는 건 Process 를 짠다는 것이다.
Socket 을 사용해서 Network 기능이 있는 Program 을 짜야한다.

Program을 짜면 Program 안에서 나름대로의 약속들이 정해져있다.
우리는 이걸 Application 계층이라고 한다.

Application. 도 역시 통신하기 위해서는 Protocol 이 필요하다.
서로간의 약속 없이는 Task 수행을 할수가 없다.

Client-server paradigm

Program을 짤때는 어떻게 짜는가?

Service 를 제공해주는 곳을 Server
Service 를 원하는 곳이 Client 가 기본 틀이다.

Peer-Peer Architecutre

서비스 관점에서 Paradigm shift 가 일어난것이 P2P 이다.
기존에 서버와 클라이언트를 통해서 Data를 주고 받았던것에 비해서 P2P 는 너도 나도 Peer 이고 임의의 엔드시스템끼리 Communication 이 가능하게 한다.

그렇게 인터넷 사용할때만 어드레스 하나 받아서 쓰면 된다.
이것을 Dynamic address 라고 한다.

Network 가 있다면 자기가 필요할때 여기에 맞는 IP를 할당 받아온다.
그래서 P2P는 Tcp 로 연결을 하고 내가 어떤 파일을 가지고 있는지 다 올려놨다고 생각하면 된다.

Processes Communicating

Process와 Process 간의 통신을 뜻한다.
하나의 OS 안에는 Inter 통신을 통해서 충분이 통신이 가능하다.

멀리 떨어져있는 서로 다른 시스템에서 프로세스 간의 통신을 OS 가 만들어주는것이다.

Sockets

OS 끼리 통신하기 위해서는 OS Protocol 이 있어야한다.
계층을 거쳐서 내가 보낸 Data 가 상대방까지 잘 가고 그 Data가 process 까지 잘 전달 될수있도록 해준다. 이것을 Socket 을 사용해서 Socket 이 Process 간 통신을 하게 해준다.

TCP Socket

Process 간 통신을 할때 보내고 받는 Socket 을 TCP socket을 사용한다.
보내는거 받는걸 같게 하기 위해서 TCP로 해돌라고한다.
색칠을 해서 보내는데 IP 주소와 Port Number로 색칠한다.

IP 주소는 이 Process 는 어떤 Computer 에서 작동하는지를 뜻하고
Port Number 는 누구한테 가는건지를 뜻하고 Process 를 구분한다.

TCP 는 Client 가 사용하는 API 인 Connect() 를 호출해서 나하고 통신하고자 하는 Process 는 누군지 명확하게 OS에 알려줘야한다.
이떄 Ip주소,상대방 이름인 Port Number를 알아야한다.

UDP Socket

UDP socket 은 Ip주소와 Port Number를 색칠해서 Bind 를 먼저한다.
그리고 UDP 는 편지를 보내는것처럼 SendTo() 를 해야한다. 이 SendTo() 에 보내는 사람(자신),받는 사람(IP 주소,Port Number) 다 적어야한다.

그리고 이걸 짤라서 보낸다. UDP 는 이떄 순서가 바뀔수도 있고, Data 가 비게 될수도 있다.

상대방은 ReceiveFrom() 을 사용해서 받게된다. 누가 보냈는지에 대한 정보가 있다. 위에서 말한것처럼 엉망진창일수도,Data가 비어있을수도 있다.

An application-layer protocol defines:

open protocols 는 공개되어 있는 Protocol 이다.
proprietary protocols 는 공개되어 있지 않은 Protocol 이다.

What transport service does an app need?

Transport 계층은 Network 계층에서 제공하는 Service 를 Application 에서 요구하는 Service 로 변환해주는 기능을 한다.

이때 어떤 Transport service 가 필요한지보자.

data integrity 는 보내는거 받는거 100% 같아야한다.

timing 은 end까지 10초만에 가야함을 요구하는것이다.

throughput 은 주어진 시간에 송신,수신 하는 량

security 는 보안이다.

Transport service requirements: common apps

file transfer/download 는 loss 가 없어야하고,throughput 이 elastic(왔다 갔다함,,) 하다 한다..time sensitive는 시간 을 보장..?

하지만 real-time audio/video 를 보자.
오디오,비디오가 Data 일때 100% 신뢰성 있게 와야하나?
그건 아니라고 한다.
loss-tolerant 는 Data 에 손실이 있어도 괜찮다라는 뜻이다.
손실이 있어도 빨리 오기만 하면 된다.

그래서 audio,video 를 나눠서 data rate 이 필요하다.throughput 이 정해져있다. 또한 Time sensitive 를 보면 알겠지만 빨리와야한다.

Internet transport protocols services

Internet 은 Best Effort Service 로 어떠한 성능이 보장되는것이 아니라 internet 이 최선을 다 할뿐 이라고 한다.
성능이 보장되지않고 이랬다 저랬다 한다고 한다..

사실 Service 가 엄청 많다고 한다. 하지만 우리는 그중에서 가장 많이 쓰는 두개를 중점으로 다룬다.

TCP

TCP 를 사용한다는것은 나의 응용에서는 이러한 서비스가 필요하니까 이걸 좀 Service 해주세요를 뜻한다.

Reliable transport

보내는거 받는걸 똑같이 해준다 - reliability

Flow control

Data 를 다 보내는데 상대방이 그걸 수용할 능력이 안된다. 넘치지 않게 해야한다.
Memory 는 두개로 Os 가 사용하는 Kernel Memeory, 일반 프로그램이 쓰는 유저가 사용하는 Memory 가 있다.
데이터가 들어오면 kernel 에서 Buffering 을 하게된다. 여기서 프로그램이 달라고 하면 Buffering 안에 있는 Data를 주는것이다.

근데 OS 가 감당할수 있는 Data 가 제한되어있따.
그럼 당연하게 Data 들을 Drop 시키게 될껀데 이걸 Overflow 라고 한다.

그러므로 수신측이 받아들일수있는 Data 양만 보내야한다. 이거를 제어해주는게 Flow Control 이다.

Congestion control

Congestion 이라는건 고속도로가 마비된것과 같다고 한다.
인터넷에는 나만 Data 를 보내는것이 아니고 모든 사람들이 Data 를 보내게 된다. 이렇게 되면 당연하게 인터넷은 어떻게 되겠나?

Packet 들이 엉망진창이 되어버린다.
그러므로 Network 가 Congestion 생기지 않게 Control 해줘야한다
이걸 Congestion control 이라고 한다.

Connection-oriented

Clinet,Server 간에 회선이 있는것처럼 Connection 만든다.
물리적으로 연결하는게 아니고 논리적으로 설정하는 것이다.

UDP

이렇게 TCP 가 좋은데 왜 UDP 쓰냐?

UDP 는 Unreliable data transfer 이다.
이말은 TCP는 보내는것과 받는걸 같게하는 reliable transport 인데 UDP 는 그냥 응용 단에 줘버린다.
순서가 어떻든 그냥 알아서 보내라 이런 의미다.

이런데 UDP 를 쓰는 이유는 UDP 같은 Service 를 더 선호하는 응용이 있을수 있기 떄문이다. 빨리 Data 를 보내야하는데 순서 안맞았다고 안보내는 TCP 와는 다르게 그냥 뭐 조금 손실이나 delay 있더라도 UDP 는 그냥 보내버리기 때문에 이런 Service를 원하는 응용이 있을수 있다.

Web and Http

Web page 는 여러 Object 로 구성되어있다.
각각 Object 는 서로 다른 web server 에서 동작할수 있다.

Object는 화면을 구성하고 있는 가장 기본 단위이다.

그리고 또한 html 은 구성이 어떻게 되어있는가를 뜻한다.
각각 objcet 를 어디서 받아올수 있는지에 대한 location 정보가 있다.(URL)

HTTP overview

client는 Server로 부터 object 를 받고
server는 client 로 부터 object 를 제공한다.
이러기 위한 Protocol 이 필요하다.

Http connections:two types

Non-persistent HTTP

Non-persistent 와 Persistent 의 차이는 통신을 계속 유지하나에 따라 나뉜다.

Non-persistent 는 첫번째 object 를 받기위해서 TCP 를 열어둔다. 그런다음 받아오면 바로 TCP 를 끊는다. 그럼 다음 또 object 를 받기위해 또 다시 TCP 를 열고 받아오면 또 TCP 닫는다.... 이렇게 계속 진행된다.

Persistent HTTP

persistent는 non-persistent 와는 다르게 한번의 TCP connection 을 하나 열어두면 여러개의 object 를 받아올떄 당연하게 하나의 connection 을 잘 활용하면된다.

이렇기에 시간적으로 persistent 가 훨씬 빠르게 된다.

HTTP response message

이걸 알려주는 이유는 내가 지금 주는데, 너가 이걸 보려면 Viewer를 깔던지 Viewer 에 Mapping 해서 처리해라 라는 말.

HTTP response status codes

200 OK

request 던진거 정상적이다 라는뜻이다.

301 Moved Permanetly

너가 요청한거 원래 내가 가지고있었는데 지금은 없다. 다른곳에서 받아라. 하며 새로운 위치를 알려준다.

400 Bad Request

너가 요청한 Message 가 무슨 말인지 모르겠다.

404 Not Found

요청한 Object 여기 없다.
301과 다른점은 301은 새로운 위치를 알려주는 반면에 404 는 위치를 모른다.

Trying out Http for yourself

telnet 은 A,B가 있으면 A에서 telnet B 하면 B라는 Prompt 가 뜬다.
A 컴퓨터에서 B에 직접 앉아서 처리하듯이 하겠다 라는 뜻이다.

telnet {URL} {Port #} 으로 작동하며 Port # 주면 그 Port # 로 동작하고 있는 Process 와 직접적으로 연결되는 서비스 이다.

Maintaing user/server state: cookies

동일한 사이트 들어가더라도 자신이 관심 있어하는 분야에 대한 정보를 더 많이 뿌려준다 이건 Cookie 를 통해서 가능하게 된다.

  1. 처음 접속하게되면 나를 위한 아이디를 만든다 여기선 set:cookie 1678 로 확인할수있다.
  2. 그런다음 넘겨준다.
  3. DB에 저장하면서 어떤 형태의 web-browsing 을 했는지도 저장된다.
  4. 다시 접속하게되면 아마존에 접속한 history가 있기 때문에 1678을 넘겨준다.
  5. 그리고 그 아이디로 history를 확인한다.

Web caches

Object 를 Access 할때 얼마나 빨리 Access 할수있나.
이떄 Web cache 쓰면 된다.

A 가 Server 로 부터 Object 를 받아온다. B 도 동일한 Object 를 요청한다고 볼때 한대가 받아오면 Object 를 어디에 저장해두자. 라는 개념이다.

이러면 delay 를 줄일수 있따.

하지만 항상 좋은건 아니라고한다.
A 가 1에 대한 object 를 받아 온 후 Update 를 해버려서 실제 origin server 에는 update 된 Object 가 저장됐다고 가정해보자. 아직 proxy server 에는 update 된 object 가 없어서 B가 Object 를 요청하게 된다면 옛날 Object 를 받아오게 되는 문제가 생긴다.

뭐,,, Conditinoal Get 하면 된다고 합니다.

Object 요청 후 Update 를 했는지 물어본다.
Update 여부를 물어보고 Data 를 준다.
아까 봤던 Last Modified 를 통해서 최신화 할수 있다!

HTTP/2

Head of line blocking 문제를 해결하려 한다.

Head of line Blocking

Http 는 Pipeline 을 사용하는데 1,2,3,4 에 대한 Object 를 순차적으로 보낸다고 가정하고 1 Data 가 큰 경우를 생각해보자.

TCP를 하나만 쓰기 떄문에 1번이 전송 먼저 되어야한다.
TCP Level 에서 이걸 잘라서 보낸다. 그러면 손실이 생기고 다시보내라고 하는데 이부분은 다시 보자.

그래서 하여튼 Object 2,3,4 는 1 Object 가 너무 커서 수신할때 까지는 한참 기다려야한다.
이게 Head of line Blocking 은 결국 앞에서 Blocking 되어 있는거 때문에 피해를 보는것이다.

그래서 이걸 해결하기 위해서 Objcet 자체를 Frame 단위로 나누면 된다.
TCP Level 에서 자르는것과는 다르고 그냥 보내는 단위를 잘게 나눈거다.
이걸 Interleaving 이라 한다.
1,0 그리고 1,1 떄에는 TCP Connection 을 여러개 열었었다.

E-mail

Emial을 주고 받기 위한 Protocol 이 필요하다.
이떄 Protocol 이 SMTP이다.

3가지 Component 를 사용해서 응용을 제공한다.

User agent

읽고,작성하기 쉽도록 그냥 메일 쓰고 클릭,,,?

Mail server

메일 보내기 클릭하면 Mail server로 전달이 된다. 받기하면 나한테 온 Mail 이 user agent 로 올라온 것이다. 메일 서버가 상대방 메일 서버한테 메일을 전달한다.
이떄 Mail server 간의 protocl 이 필요한게 SMTP 이다.

SMTP

SMTP 도 Client,SErver 개념으로 작동된다.
Mail 을 보내는 사람은 Push Service,Http는 Mail을 가저온다 이걸 Pull service 를 뜻한다.

DNS:Domain Name System

인터넷에서 통신하기 위해서는 상대방 주소를 알아야한다
통신은 Message를 주고 받으면서 이뤄진다. 상대를 identified 할수 있는것이 IP 주소이다.

IPv4는 32비트 IPv6는 128비트이다.

어찌됐든 상대방 컴퓨터는 외우기 쉬운 이름으로 되어야한다. 이름에 해당하는 IP 주소를 찾아내는 서비스가 필요하다. 그게 DNS 이다.

DB query 날려서 주소를 받아온다. Packet 에는 주소가 있다. 보내는 받는

주소가 다 IP 주소인데 이름에 대한 IP 주소 주는게 고장나면 못보낸다,,,

Why not centralize DNS?

Single point of failure

하나가 고장나면 끝이다

Traffic volume

한쪽에 Traffic 집중

Distance centralized database

미국에 있으면 거리가 너무 멀다

Maintenance

전체를 update 하기가 힘들다

DNS:a distributed,hierarchical database

그래서 위의 해결법으로 분산 데이터베이스를 사용하면된다.
이거를 담당하는 애들을 Name Server 라고 한다.

어떤 조직이든 Local DNS Server 가 있다. 자기 안에 있는 모두의 주소를 다 알고 있다.

ac.kr는 누가 알려주면 되냐?
경북대,영남대는 누구한테 물어보면 되는지에 대한 서버가 있으면 된다.

대학은 누가 다 맡고
회사는 누가 다 맡고....
...
나눈다.

젤 높은 level 이 Root server 이다.

local DNS Server 는 Root DNS server 잘 알고있따.
그리고 자기가 다 아는게 아니고 누구한테 물어봐라 라고 하는게 Root DNS SErver 이다.

DNS name resolution:iterated query

DNS name resolution:recursive query

Peer to Peer architecutre

니나 내나 똑같다. Role 이 정해져있다.
나도 Service 하고 너도 Service 하고.
Socket 입장에서는 Client,Server 는 정해져 있다.(Connection level)

But SErvice Level 에서의 역활을 말한다.

File distribution time: client-server

특정 file 을 공유하는데 있어서 얘가 가지고 있는 file을 모두 동시에 가지고 있어야한다 보면 가장 간단한 서비스는 Server 로 부터 받아오면 되는데 P2p 는 옆에 있는 애들한테 주니까 전체적인 파일 공유 시간이 P2P가 훨씬 짧다.

Clinet-server vs P2P

P2P 에 접속한 사용자가 증가하면 할수록 Clinet-SErver는 linear 하게 증가한다 P2p는 시간이 엄청 준다.

P2P file distribution: BitTorrent

내가 가지고 있는 File 과 공유한다는 말이다.

내가 파일이 필요한데 안가져온다. 친구한테 받아야하는데 그게 누군지도 모르겠음 그럴때 어떻게 하나?

나도 Peer,너도 Peer 이기 때문에 consensus 를 모아서 망을 구성하자(이떄는 물리적인 구성이 아님,논리적인 연결이다.) 이걸 overlay network를 구성하는것이다.

Tracker 는 IP 주소를 알려준다. 얘는 누가 접속했는지 다 알고있다. 그래서 전체를 다 알려주는게 아니고 몇개를 알려줘서 연결할수 있게 한다.

Multimedia:Video

이미지가 일정한 Rate 으로 온다.1초의 24개의 이미지가 온다.이렇게 비디오를 구성하게 된다. 1초에 24개 화면 그리고 1개 화면에 Pixel 이 너무 많다. 이걸 어떻게 고치나?
그래서 MpeG 기술을 활용한다.

MPEG

비슷한 Pixel 을 RGB로 보낼 필요가 있나?

Spatial redundancy - 공간측면에서 불필요한건 보낼 필요 없다.
Temporal redundancy - 팔이 변경 된다면 그 변경된 부분만 보내면ㄷ ㅚ지 전체를 보낼 필요가 있나??

Streaming stored video

수신자 입장에서는 Data 도착 시간이 엉망이다. 어쩔떄는 빨리오고 어쩔떄는 늦게온다.
Data 보냈을때 최소값이 5초다. 근데 최대값은 7초다.
최대값과 최소값의 차이를 Jitter 라고한다.

Jitter 가 심하면 빨리올떈 빨리오고 늦게올땐 늦게온다는 뜻이다.
Jitter 가 Zero면 좋다.

현재는 Jitter가 없다는 뜻이다.

Network 는 Jitter 가 생길수 밖에 없다. BUffer를 활용하는데 Buffer 크기는 어떻게 잡아야할지,, 어떻게 Data를 아무 문제 없이 보낼지하는 기술이 필요하다.

Play 되는 동안 BUffer 가 된다. 근데 클릭하고 몇초동안 기다릴수 있을까..
한개 볼라고 30초 기다리기.? 이건 말이 안된다. 클릭 누르면 바로 play 되어야한다.

현재는 내가 필요한 시점에 Data 가 안 올수 있다.

Streaming multimedia:DASH

그래서 Network 에서 뭘 해줄수 있을까?
DASH 는 Http 도 request,response로 Video 를 Mutiple chunk 로 나눈다. 그리고 chunk 별로 다른 rate 로 인코딩이 되어있다.

인코딩 된 하나하나가 Object 이다.
이럴떄 만약 상황이 좋으면 많은 Object 를 보낼수 있고 이러면 화질이 좋다는 의미이다.

Client 는 주기적으로 Server에 서 Client Bandwidth를 잰다.
Video Data 를 제대로 받을수 있는지 측정한다.
Client가 자기의 network 상황에 따라서 Object 를 받아온다.

Clinet가 언제 Chunk 요청해야하는지 몇개를 요청해야하는지 Buffer 상황에 따라서 미리 요쳥해야하는지 Policy 가 필요하다
또한 어떤 Encoding rate를 요청할건지
어디서 요청할지느 URL 을 사용한다.
이런것들을 AI를 적용한다.

Content distribution network(CDNS)

미국 서버일때 내가 필요한 Object를 미국엣 ㅓ받아와야한다..
받아온다는게 엄청난 Network delay 이다.
이떄 CDNS 를 사용한다.

처음에는 이러한 문제를 해결하기 위해서 엄청 성능 좋은 Server 하나를 뒀다.
근데 이러면은 single point of failure, point of network congestion,long path to distant client 의 문제가 있다.

그래서 Content 를 분산시키자라는 개념이다.
Content를 군데군데 똑같이 분산시켜서 Client 입장에서 가장 Performance 가 좋은 쪽에서 받아 오면 된다.
이것이 CDNS 이다.

Enter deep

CDN Server 를 가급적 User 에게 가까이 위치 시켜야한다. 전 세계에 SErver를 둬야해서 설치를 너무 많이 한다.

Bring home

설치를 줄여보자는 의미이다.

이렇게 map을 만들어서 누구로 부터 받아오는게 빠른지, 전체 그림을 보고 있어야한다.

만약 MadMen을 보고싶다고 가정하자
그러면 netflixx 에서 바아온다.
map 에 따라 어디서 받아오면 되는지를 CDN 사업자에서 정하고 받아와야한다.

CDN content access: a closer look

  1. IP address를 받아온다.
  2. netcinema 가 authoratative Server 를 통해서 IP 받아온다.
  3. 그리고 망에 있는 애들 중에 가장 Service 빨리 해줄수 있는 애에 접속해서 Content 를 받아온다.
    이걸 DASH 를 통해진행한다.

Socket programming

UDP 는 뜯으면 내용을 통쨰로 달아둔다.
오는 순서대로 내용물만 뽑아둔다.
그리고 UDP 는 Read하면 입을 작게 벌리면 조금만 올라가되 남은 부분은 다음에 읽을수가 없다. 그래서 읽을때 최대한 크게 읽어야한다
UDP 는 message에 Boundary 가 없다.

TCP가 Buffer를 관리한다.
TCP는 물건이 오면 다 뜯는다. 그리고 Byte 단위로 순서를 맞춘다.

Program,process 에서 data를 읽고 process 에서 read() 를 호출한다.Buffer 데이터가 USer 영역으로 올라간다.

이떄 Byte 단위로 읽어라 이다.
그래서 message 에 Boundary 가 없다.

profile
할수있다가 아닌 해야한다!!

0개의 댓글