Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- Hill Climbing
- node.js
- Local Search
- AWS
- 철학
- Search Algorithm
- typescript
- 알고리즘
- CS
- 코드
- 배포
- lightsailor
- 문자열처리
- node배포
- multer-s3
- 파이썬
- computerscience
- 문자열
- 컴퓨터과학
- 컴퓨터공학
- Simulated Annealing
Archives
- Today
- Total
지식의모듈화
[CS면접 Handbook] 3편 Computer Network 본문
- Application Layer
- store and forward: 패킷은 도착이 완료된 후에나 포워딩이 가능함. 한편, 라우터의 큐가 꽉 차면 packet loss가 가능하다.
- circuit Switching vs Packet switching
- transmissinon delay(store and forward)+processing delay(table lookup in router)+ queueing delay+ propogation delay(전송의 물리적 시간)
- 코어보단 end point가 bottleneck
- TCP UDP 모두 timing, throuput, security를 제공하지 않음. 단, TCP는 flow control, congestion control이 가능함.
- Server-Clinet외에도, P2P모델도 존재함. P2P에서는 peer가 서버가 될수도 클라가 될 수도 있다.
- Prcoess and Socket: IP+port number로 구체화한다.
- HTTP: hypertext transfer model, TCP, stateless
- URL: location, ULI: identifier로 web object를 구체적으로 지시함
- HTTP: hypertext transfer model, TCP, stateless
- Web Caching: Origin Server가 아닌 proxy server에 저장함.
- Non-Persistent HTTP: object하나의 수신을 위해서 매번 RTT만큼이 소요됨. (RTT: packet의 round trip time), 최소 2RTT+file tranmission time이 필요하다. tcp handshake를 위해서 packet이 사전에 RTT를 소모하기 떄문이다. 그렇다면 server가 connection을 기억하게 할 수 없을까? => Persistent HTTP
- HTTP message가 연속적으로 오고가면된다. 그러면 거의 one RTT에 가깝게 소요된다. HTTP multiplexing
- 200 OK, 301 moved permanently, 400Bad request, 404 not found, 505 http version not supported
- Cookies: HTTP는 connection state를 저장하지 않기에 이를 저장할 방법이 필요하다. 서버에서 cookie header line을 생성해서 response에 같이 돌려보내준다. 다음번 Request를 보낼 때 유저는 Cookie header line을 포함한다. 또한, cookie file은 user host에 보관되며, DB에도 보관된다. (현대에선 cookie외에도 session, local storage를 사용하긴 한다. Cooki를 사용하게 되면 반드시 요청에 쿠키가 포함되지만 session 들의 경우에는 그렇지 않다.)
- Proxy Server만들고 cache하게 되면 일반적으로 많은 통신 비용을 아낄 수 있다.
- SMTP: 25, TCP: messages must be in 7-bit ascii, 보내고자하는 서버의 mailbox에 넣음. 또한 outgoing mail은 message queue에 존재함. SMTP의 경우 data가 모두 ascii여야 하지만 http의 경우에는 그러한 제약이 없다. 또한 smtp는 push, html은 pull에 가깝다.
- DNS: name server에서 hostname과 ip address사이의 번역을 제공한다. 또한, load distribution: 하나의 도메인 네임에서 여러개의 IP address에 보내주기도한다. 또한, 하나의 IP주소가 여러개의 도메인 네임을 가지는 aliasing 역시 지원한다.
- DNS: distributed, heirarchical database로 구성되어있다. TLD server 아래에 authorative DNS server가 존재한다.
- 전세계에 13새의 root name server가 존재한다.
- TLD 서버의 경우 각 회사에서 운영한다. verisign이 .com TLD, educase가 .edu TLD 운영
- authoritative DNS: 각 DNS 회사에서 운영하게 된다.
- authoritative DNS: 각 DNS 회사에서 운영하게 된다.
- docs.google.com , cloud.goolge.com인 상황과, google.docs.com, google.cloud.com을 생각해보자. 전자의 경우에 google은 google DNS, docs.google DNS, cloud.google DNS(3개)를 관리하면 된다, 하지만 후자의 경우 docs DNS, cloud DNS, google.docs DNS, google.cloud DNS (4개)를 관리해야한다. 만약 n개의 서비스를 진행중이라고 가정해보자. 그러면 전자의 경우에는 n+1개의 DNS서버를 관리하면 되지만 후자의 경우에는 2*n개를 관리해야 한다.
- Local DNS에는 dns들이 cache된다. TLD server들은 대부분 cache되어 있다. cache에는 TTL(timetoleave)가 기록되어 있다. out-of-date될 가능성을 막기 위해서이다. 그렇기에 중요한 domain name의 ip address change가 이뤄지는 경우에는 update/notify가 이뤄져야 한다.
- DNS의 record:(DB내에 있는) 타입에 따라 4가지 분류로 나뉜다. A, NS, MX, CNAME. 각각이 무엇인지는 설명하지 않겠습니다.
- DNS protocol의 message foramt은 query와 reply가 같은 형태를 띄고 있다.
- DNS의 시작을 위해선 DNS registrar (veriSign)에 등록해야 한다.
- DNS공격: (1) DDOS? => local DNS에 root server들이 cache되어 있어서 실패했다. 하지만 여전히 TLD server에 대한 공격은 highly possible하다. (2) Redirect Attack: intercepting query, 혹은 malicious reply를 caching해버림.
- P2P: voIP(Skype), Streaming, 등에 활용될 수 있으며 역할이 변경 가능하다. (NO always-on server)
- 1개의 서버에서 N개의 clinet에게 file을 분산하는 경우를 상상해보자. client-server모델에선, Server Transmission에 N*F(파일크기)/u_s(server upload capcity)가 소요되고 client download에 max{NF/u_s, F/d}가 소요된다. P2P model에선 Server transmission에 F/u_s가 소요된다. client하나가 다운로드 받기 위해서는 F/d가 소요된다. 모든 클라이언트가 받기 위해서는 max{F/u_s, F/d, NF/(u_s+sum(u_i)} 가 소요될 것이다. 각 peer가 service capcity에 기여하기 때문이다.
- BitTorrent: 자신에게 가장 빠른 속도로 upload해주고 있는 4개의 peer에게 자신의 chunk를 공유한다. 매번, 10초마다 이를 재평가한다. 30초마다 임의의 멤버에게 chunk를 전송함. (256KB)
- CDN(Content Distriution Network)
- Multimedia: video: encoding within and between images. VBR(variable bit rate): encoding rate가 가변적임. 초당 전송되는 bite수로 나누면 된다. 아래의 단위는 Megabit per sec, MB/s 로는 나누기 8을 통해 얻을 수 있다.
- DASH: 영상을 일부분으로 자른 chunk file이 존재한다. chunk file에 대한 URL은 manifest file에 적혀있다. Client는 manifest file을 통해 chunk를 request한다. DASH에선 client 는 when, where, what encoding rate를 결정해서 요청을 보낼 수 있다. manifest file을 가지고 있는 파일중 어떤 서버에 요청을 전송할지 결정할 수 있다.
- 어떻게 컨텐츠를 여러명의 유저에게 동시에 재생시킬 것인가? 여러 지역에 걸쳐 분산되어 있는 서버에 저장해야 한다. (1)많은 location에 CDN server 두기 (2) large cluster를 일부 지역에 구축하기.
- Socket의 위치: Application, transport 사이에 존재함. socket은 TCP/UDP 2 type이 존재함. UDP의 경우 unreliable. TCP server side에서는 client와의 connection이 확정되면 새로운 TCP socket을 하나 더 만든다. 해당 client와의 대화를 위해 사용하기 위해서.
- Transport Layer
- Logical end-end이다. TCP의 경우 reliable, congestion(네트워크과부화), flow control(client과부화)이 가능하다. 하지만 TCP나 UDP나 모두 delay guarantee, bandwidth guarantee 못한다. Throuput이나 timing에 대해 보장하지 못한다는 뜻.
- Transport Layer에선 multiplexing와 demultiplexing 또한 수행한다. 여러개의 socket에서 수신받은 것을 적절한 process socket에 연결함.(demultiplexing) 우리가 송신할 때 transport header를 붙여서 제공함.(multiplexing)
- tranport layer에선 source, dest port number만 있으면 된다. 하지만 하위 network layer에선 ip가 요구된다.
- UDP: Connectionless Demux: 한 socket이 여러 process의 receiver side가 될 수 있다. different source ip에서 왔지만 destination ip, port가 같다면 같은 socket으로 들어오게 된다. 전부 하나의 socket을 이용하는 것이다. UDP에선 socket은 host port number마다 identify된다.
- TCP: connection-oriented demux: source ip:host, dest ip:host를 모두 명시해야 한다. socket은 4개의 튜플마다 고유하게 생성된다. 아래의 그림을 보면 connection-oriented 는 port number가 같아도 별도의 socket이 존재하는 반면, udp에선 다르게 지원된다.
- UDP: connectionless, best effort servcice, congestion control이 없기에 가장 빠르게 전송 가능함. ㅇ=> multimedia apps, DNS 에 사용
- RDT 1.0: underlying channel is assumed to be perfectly reliable
- RDT 2.0: bit error may arise. ACK:packet이 괜찮다고 explicit 하게 말한다, NAK:오류가 존재함을 말한다.
- RDT 2.1: ACK, NAK may be corrupted= > seqence number of 1, 0를 항상 packet이 같이 보낸다. 그럼으로서 expected number를 receiver 쪽에서 인지할 수 있도록 한다.
- RDT 2.2: NAK삭제
- RDT 3.0: underlying channel에서 pakcet loss가 가능. Sender입장에선 이미 보낸 packet에 대한 ACK이 유한시간 내에 돌아오지 않으면 retransmit한다. 만약 동시에 같은 packet이 들어오면? seq_number로 구분하면 된다. (stop and wait): correct but poor
- 위에 대비하기 위해서 pieplining.
- Pipelining protocol에는 크게 2종류가 존재한다. (1) Go-Back-N, (2) Selective Repeat. 1번의 경우에는 sender의 경우 N개의 unAcked Packet에 대한 tolerance를 가지며 receiver는 ack을 여러개보내는 것이다. 0123번 packet이 날아오고 server에선 ACK도 0123으로 해주는 것이다. 4개씩 끊어서. (2)의 경우에는 서버에서 버퍼를 한다. 그래서 수신하지 못한 packet에 대한 ACK을 날리되 도착한것들은 buffer에 보관한다. 앞선 프로토콜에선 미수신시에 buffer없이 모두 삭제했던 것과는 다르다.
- TCP Fast Retransmit: Sender의 timeout을 기다리는것은 늦다. 그래서 결국 3 duplicate ACK을 reciever로부터 받게 되면 즉각적으로 retransmit을 진행한다.
- TCP Flow Control:receiver에서 ACK을 보낼 때 header에 자신의 잔여 버퍼를 rwnd field에 포함하여 보낸다. (received window)
- 3-way handshake of TCP
- 4-way handshaker of TCP
- Congestion Collapse: Packet drop은 언제나 비용임. 특히 router를 많이 타고 와서 라우터라는 리소스를 잔뜩 이용한 상태에서 buffer 부족으로 떨어지게 된다면 여태까지의 router hop 비용을 다 소모해버린 것임. 즉, 버퍼 overflow가 발생하기 시작하면 throuput은 지속적으로 떨어져버리는 상황이 발생한다. (deadlock) 정사각형 모양의 router의 buffer가 서로 꽉 차있다고 생각해보자.
- Congestion window를 활용해야 한다. 왜냐하면 cwnd/RTT=~ TCP sending rate
- TCP slow start: cwnd=1, cwnd를 점점 늘림. Packet loss가 감지되면 Cwnd를 반토막 내지만 그 전까지는 지속적으로 늘려준다.
- Network Layer
- 모든 host, router에 존재하는 layer이다. Internet하면 생각나는 레이어. Best effort model이며 timing order loss bandwidth 그 무엇도 보장해주지 않는다. Forwarding과 Routing이 주된 핵심이다. 또한 Layer은 data plane과 control plane으로 구성되어 있다.
- 이러한 그림으로 이해하는게 좋은데 쉽게 말하자면 router내부에 어디로 forwarding될 것인지 결정하는 table이 존재하여 table에 따라 routing이 결정된다는 뜻이다. 만약 input port에 도착하는 속도가 더 빠르면 queueing이 필요해진다. 이때 어디로 보낼지는 longest prefix matching에 따라서 결정한다. 해당 switching fabric의 구현 방법은 memory, bus, crossbar 3종류로 다양하다.
- Network layer의 protocol들: Routing Protocol이 forwarding table을 결정한다. IP, ICMP Protocol
- datagram의 특징은 쪼개질 수 있다는 것이다. 물론 ip header은 추가적으로 복사되어 붙는다. reassemble은 final destination에서. Largest possible link-level frame 단위로 쪼개진다.
- IP addressing: IP는 host나 router의 각 interface마다 부여된다. 즉 router는 일반적으로 여러개의 ip주소를 가진다.
그러나 실제로는
- Ethernet Switches 혹은 WIFI base station을 통해서 우리는 접근합니다.
- 추가적으로 subnet이라는 개념이 필요합니다. subnet내의 주체들은 router의 도움없이 서로에게 닿을 수 있습니다. subnet part는 주로 low order bits로 구성되어 있습니다. IP addressing: CIDR; 하위 x자리는 subnet bit의 개수
- DHCP를 통해서 IP를 부여받습니다. 이때 IP뿐만 아니라 DNS server의 이름과 IP주소도 일반적으로 받게 됩니다.
- Hierarchial Addressing: ISP 인 경우 더 추상적인, local인 경우에는 더 구체적인 주소를 갖게 됩니다.
- Private IP의 경우에는 within a network에서 사용할 목적으로 사용되는 주소입니다. (subnet). 또한 IP shortage 문제를 해결합니다.
- ipv6에는 header가 20byte가 아니라 40byte라는 특성이 존재한다.
'CS면접 Handbook' 카테고리의 다른 글
[CS면접 Handbook] 2편 System Programming (0) | 2022.07.27 |
---|---|
[CS면접 Handbook] 1편 OS (0) | 2022.07.20 |