AWS - jjin-choi/study_note GitHub Wiki

Reference

Interview

Contents

  • Dev
  • Network
  • Storage
  • Security
  • Database
  • Virtualization

DevOps

  • Development (개발) κ³Ό Operations (운영) 이 합쳐진 λ‹¨μ–΄λ‘œ ν•˜λ‚˜μ˜ 아이디어 (μƒˆλ‘œμš΄ μ†Œν”„νŠΈμ›¨μ–΄ κΈ°λŠ₯, κ°œμ„  μš”μ²­ λ˜λŠ” 버그 μˆ˜μ • λ“±) κ°€ μ‚¬μš©μžμ—κ²Œ κ°€μΉ˜λ₯Ό μ œκ³΅ν•  수 μžˆλ„λ‘ 운영 ν™˜κ²½μ—μ„œ κ°œλ°œλΆ€ν„° 배포둜 μ§„ν–‰λ˜λŠ” ν”„λ‘œμ„ΈμŠ€μ˜ 속도λ₯Ό λ†’μ΄λŠ” μ ‘κ·Ό 방식을 μ˜λ―Έν•œλ‹€.

  • ν˜„μž¬ μž‘μ—… μˆ˜ν–‰ 방식을 λ„˜μ–΄μ„œλŠ” ν”„λ‘œμ„ΈμŠ€ 변경이 ν•„μš”ν•¨μ— 따라, μˆ˜ν–‰ν•˜λŠ” μž‘μ—…λ„ 변경될 μˆ˜λ°–μ— μ—†λ‹€. DevOpsλŠ” 기쑴의 λ™μΌν•œ λͺ¨λ†€λ¦¬μ‹ μ†Œν”„νŠΈμ›¨μ–΄μ˜ κ°œλ°œμ„ κ°€μ†ν™”ν•˜λŠ” 것뿐 μ•„λ‹ˆλΌ μ΄λŸ¬ν•œ 지속적인 개발 흐름에 λ”μš± μ ν•©ν•œ μƒˆλ‘œμš΄ μ’…λ₯˜μ˜ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό κ°œλ°œν•˜λŠ” 것과 관련이 μžˆλ‹€.

  • 이런 이유둜 DevOps νŒ€μ΄ [λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€] μ•„ν‚€ν…μ²˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό κ΅¬μΆ•ν•˜κ³  [API] 둜 μ΄λŸ¬ν•œ μ„œλΉ„μŠ€λ₯Ό ν•¨κ»˜ μ—°κ²°ν•˜λŠ” κ²½μš°κ°€ λ§Žλ‹€. DevOps νŒ€μ΄ 각각의 κΈ°λŠ₯을 더 μž‘μ€ λ‹¨μœ„λ‘œ κ΅¬μΆ•ν•¨μœΌλ‘œμ¨ μ„œλΉ„μŠ€λ₯Ό 보닀 μ‹ μ†ν•˜κ²Œ 제곡 κ°€λŠ₯ν•˜λ―€λ‘œ μ΄λŸ¬ν•œ μ„œλΉ„μŠ€μ™€ APIκ°€ κ΄€λ¦¬λ˜λŠ” 방식에 쀑점을 두고 이 λͺ¨λ‘λ₯Ό 톡합할 수 μžˆλŠ” μ• μžμΌ 톡합과 같은 μ „λž΅μ„ μˆ˜λ¦½ν•΄μ•Ό ν•œλ‹€.

Network

1. 컴퓨터 λ„€νŠΈμ›Œν¬ κΈ°λ³Έ 1

  • network edge 에 μ‚¬μš©μžκ°€ μœ„μΉ˜ν•˜κ³  network core 에 λΌμš°ν„°κ°€ μœ„μΉ˜.

    • network edge: applications and hosts
    • network core: routers, network of networks
    • access networks, physical media communication links
  • The network edge

    • end systems (hosts): run application programs (e.g. web, email).
    • client/server model: client host requests, receives service from always-on server.
      • (client) μžκΈ°κ°€ 원할 λ•Œ link 에 μ—°κ²°ν•΄μ„œ μ„œλ²„λ‘œλΆ€ν„° 정보λ₯Ό κ°€μ Έμ˜€λŠ” μš”μ†Œ.
      • (server) 24 μ‹œκ°„ μ—°κ²°λ˜μ–΄ μžˆμ–΄μ„œ client λ‘œλΆ€ν„°μ˜ μš”μ²­μ„ κΈ°λ‹€λ¦¬λŠ” μš”μ†Œ.
    • peer-peer model
  • The network edge: connection-oriented service

    • goal: data transfer between end systems.
    • TCP (Transmission Control Protocol): connection-oriented service λ₯Ό μ œκ³΅ν•˜λŠ” 톡신 방법.
      • client μ—κ²Œ λ‹€μŒκ³Ό 같은 λ‚΄μš©μ„ μ œκ³΅ν•œλ‹€.
      • reliable, in-order byte-stream data transfer. λ©”μ‹œμ§€λ₯Ό λΉ λœ¨λ¦¬μ§€ μ•Šκ³  μˆœμ„œλŒ€λ‘œ λ„μ°©ν•œλ‹€.
      • flow control: sender won't overwhelm receiver. sender κ°€ 데이터λ₯Ό 보낼 λ•Œ receiver μ—κ²Œ μ•Œλ§žμ€ μ†λ„λ‘œ μ‘°μ ˆν•˜μ—¬ 전달해쀀닀.
      • congestion control: sender slow down sending rate when network. λ„€νŠΈμ›Œν¬ 상황에 맞게 μ „λ‹¬ν•œλ‹€.
      • computing resource, networking resource κ°€ 많이 μ†Œμš”λœλ‹€.
  • The network edge: connectionless service

    • goal: data transfer between end systems.
    • UDP (User Datagram Protocol)
      • connectionless
      • unreliable data transfer
      • no flow control
      • no congestion control
      • 데이터가 μ•ˆμ •μ μœΌλ‘œ 잘 μ „μ†‘λ˜λŠ”μ§€ 상관없이 λ³΄λ‚΄κΈ°λ§Œ ν•˜κ³  μ‹Άλ‹€λ©΄ UDP λ₯Ό 써도 μ’‹λ‹€.
      • μŒμ„± μ „ν™”λŠ” λͺ‡ 개 정도 μœ μ‹€λ˜μ–΄λ„ μ‚¬λžŒλ“€μ΄ 감지λ₯Ό λͺ»ν•˜κΈ° λ•Œλ¬Έμ— UDP λ₯Ό μ‚¬μš©ν•΄λ„ λœλ‹€.
      • λŒ€λΆ€λΆ„μ˜ κ²½μš°λŠ” reliable ν•œ 게 ν•„μš”ν•˜λ―€λ‘œ TCP λ₯Ό μ‚¬μš©ν•œλ‹€.
    • packet: νŽΈμ§€ λ΄‰νˆ¬μ²˜λŸΌ λ©”μ‹œμ§€κ°€ λ‹΄κΈ΄ 것.
  • What's a protocol?

    • All communication in Internet coordinated by protocols.
  • The network core

    • mesh of interconnected routers
    • μΆœλ°œμ§€μ—μ„œ λͺ©μ μ§€κΉŒμ§€ 데이터λ₯Ό μ–΄λ–»κ²Œ 전달을 ν• κΉŒ?
    • the fundamental questions: how is data transferred through net?
      • circuit switching: μΆœλ°œμ§€μ—μ„œ λͺ©μ μ§€κΉŒμ§€ κ°€λŠ” 길을 미리 μ˜ˆμ•½μ„ 해두고 νŠΉμ • μ‚¬μš©μžλ§Œ μ‚¬μš©ν•˜λ„λ‘. μ˜ˆμ „ μœ μ„  전화망이 이 방식을 μ‚¬μš©.
      • packet-switching: statistical multiplexing. packet λ‹¨μœ„λ‘œ λ°›μ•„μ„œ κ·Έ λ•Œ κ·Έ λ•Œ μ˜¬λ°”λ₯Έ λ°©ν–₯으둜 μ „μ†‘ν•˜λŠ” 방식.
  • Packet switching versus circuit switching

    • router μ—μ„œ λ‚˜νƒ€λŠ” λ°μ΄ν„°μ˜ bandwidth κ°€ 1 Mbps 라고 ν•˜λ©΄ (μ΄ˆλ‹Ή 1Mbits)
      • 각 user 은 internet 을 μ‚¬μš©ν•  λ•Œ 100 Kbps 데이터λ₯Ό 보낸닀고 κ°€μ •.
      • 이λ₯Ό circuit switching 을 μ‚¬μš©ν•˜λ©΄ μ΅œλŒ€ 10 λͺ…κΉŒμ§€ user 만 지원해 쀄 수 μžˆλ‹€.
      • packet switching 은 μ΅œλŒ€ μ‚¬μš©μžλŠ” μ œν•œμ΄ μ—†μŒ.
  • How do loss and delay occur?

    • packets queue in router buffers.
    • packet 을 λ°›κ³  λ‹€μŒ packet 을 λ°›κΈ° κΉŒμ§€ μ–Όλ§ˆ 만큼의 delay κ°€ μƒκΈΈκΉŒ?
  • Delay in packet-switched networks

      1. nodal processing: λͺ©μ μ§€λ₯Ό ν™•μΈν•˜κ³  output link λ₯Ό κ²°μ •
      1. queueing: λ§Œμ•½ user requests κ°€ bandwidth 보닀 클 κ²½μš°μ—λŠ” μž„μ‹œ μ €μž₯ buffer ν˜Ήμ€ queue 라 λΆˆλ¦¬μš°λŠ” μ €μž₯ μž₯μ†Œκ°€ μ‘΄μž¬ν•œλ‹€. λ”°λΌμ„œ outgoing edge μ—μ„œ κΈ°λ‹€λ¦¬λŠ” μ‹œκ°„μ΄ μ‘΄μž¬ν•  수 μžˆλ‹€.
      • μ‚¬λžŒλ“€μ΄ 인터넷을 μ‚¬μš©ν•˜λŠ” pattern 에 따라 delay κ°€ λ‹¬λΌμ§ˆ 수 μžˆλ‹€.
      1. transmission delay: 첫번째 bit κ°€ μ „μ†‘λœ μ‹œμ λΆ€ν„° λ§ˆμ§€λ§‰ bit κ°€ 전솑 μ™„λ£Œλœ μ‹œμ κΉŒμ§€ κ±Έλ¦° μ‹œκ°„.
      • R: link bandwidth (bps)
      • L: packet length (bits)
      • time to send bits into link = L/R
      • router bandwidth κ°€ pipe 이고 packet 이 양동이라고 ν•˜λ©΄ 양동이에 λ‹΄κΈ΄ 물을 pipe 둜 λ„£μ–΄ 보낼 λ•Œ pipe κ°€ 쒁으면 μ‹œκ°„μ΄ 였래 걸리고 pipe κ°€ λ„“μœΌλ©΄ μ‹œκ°„μ΄ 쑰금 κ±Έλ¦°λ‹€.
      • router bandwidth 을 높이기 μœ„ν•΄ 케이블을 넓은 κ²ƒμœΌλ‘œ κ΅μ²΄ν•˜λŠ” 방법.
      1. propagation delay: λ§ˆμ§€λ§‰ bit κ°€ link 에 μ˜¬λΌμ™€μ„œ λ‹€μŒ router 에 도달할 λ•ŒκΉŒμ§€ κ±Έλ¦° μ‹œκ°„. λ‹¨μˆœνžˆ μ „μžκΈ°νŒŒ 속도. λΉ›μ˜ 속도. link 길이λ₯Ό λΉ›μ˜ μ†λ„λ‘œ λ‚˜λˆˆ 것. κΈΈλ©΄ delay κ°€ κΈΈκ³  link κ°€ 짧으면 delay κ°€ 짧아진닀.
      • d: length of physical link
      • s: propagation speed in medium
      • propagation delay = d/s
    • s and R are very different quantities !!!
    • packet-switch-delay
  • network μƒμ—μ„œλŠ” queue 보닀 더 많이 packet 이 λ“€μ–΄μ˜€λ©΄ 데이터가 loss λ˜λŠ”λ° TCP μ—μ„œλŠ” μ–΄λ–»κ²Œ reliable ν•  수 μžˆμ„ 것인가?

    • μœ μ‹€μ΄ 있기 λ§ˆλ ¨μ΄λ―€λ‘œ μž¬μ „μ†‘μ„ ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.
    • 그럼 λˆ„κ°€ μž¬μ „μ†‘μ„ ν•  것인가? 직전 router κ°€ μž¬μ „μ†‘ ν•΄μ£ΌλŠ” 방법이 μžˆμ„ 것이고 λ‹€μ‹œ μ²˜μŒλΆ€ν„° μž¬μ „μ†‘ν•΄μ£ΌλŠ” 방법이 μžˆμ„ 수 μžˆλ‹€.
    • TCP λŠ” κ°€μž₯ 처음 μœ„μΉ˜μ— μžˆλŠ” router κ°€ μž¬μ „μ†‘μ„ λ‹΄λ‹Ήν•œλ‹€.
      • κ°€μž₯ 처음 router 에 λͺ¨λ“  client edge 정보λ₯Ό 가지고 있고 λ‚˜λ¨Έμ§€λŠ” μ „λ‹¬λ§Œ ν•œλ‹€.
      • 쀑간에 μžˆλŠ” router 은 빨리 μ „μ†‘ν•˜λŠ” κ²ƒλ§Œμ„ λͺ©μ μœΌλ‘œ ν•œλ‹€.
      • ν˜„μž¬ internet λ””μžμΈμ€ λͺ¨λ“  κΈ°λŠ₯적인 λ©”μ»€λ‹ˆμ¦˜μ„ edge μ—μ„œ ν•˜κ³  dump core μ—μ„œλŠ” λ‹¨μˆœ μ „μ†‘λ§Œ λ‹΄λ‹Ήν•˜λ„λ‘.

2. 컴퓨터 λ„€νŠΈμ›Œν¬ κΈ°λ³Έ 2

  • (Review) Four sources of packet delay: packet 이 쀑간에 μ—¬λŸ¬ router 을 κ±°μ³μ„œ μ „μ†‘λ˜λŠ”λ° 이 λ•Œ router κ°€ packet 을 λ°›μ•„μ„œ μ•Œλ§žμ€ λ°©ν–₯으둜 μ „λ‹¬ν•˜λŠ” κ³Όμ •μ—μ„œ delay κ°€ λ°œμƒν•œλ‹€.

    • delay λΆ„λ₯˜
      • nodal processing delay: packet 을 κ²€μ‚¬ν•˜λŠ”λ° κ±Έλ¦¬λŠ” μ‹œκ°„ (μ΅œμ’… λͺ©μ μ§€λŠ” 어디인지, λ‹€μŒ router λŠ” 무엇일지)
      • queueing delay
      • transmission delay
      • propagation delay
    • ν•œ λ²ˆμ— λ™μ‹œμ— λ§Žμ€ μ‚¬μš©μžκ°€ router 에 packet 을 보낼 κ²½μš°μ— λ¬Έμ œκ°€ λ°œμƒν•  수 있으며 μΌλΆ€λŠ” queue 에 packet 이 μŒ“μ΄κ² μ§€λ§Œ, queue 보닀 더 λ§Žμ€ packet 이 λ“€μ–΄μ˜€κ²Œ 되면 packet loss κ°€ μΌμ–΄λ‚œλ‹€.
  • 2.1. Principles of network applications

    • OSI-layer
    • Application (HTTP) -> Transport (TCP, UDP) -> Network (IP) -> Data Link layer (WiFi, LTE/3G, Ethernet)
    • 각 κ³„μΈ΅μ—λŠ” λ‹€μ–‘ν•œ protocol 이 μ‘΄μž¬ν•˜λ©° 각 κ³„μΈ΅μ—μ„œ μ€‘μš”ν•œ protocol 에 λŒ€ν•΄μ„œ μ•Œμ•„λ³Ό μ˜ˆμ •.
      • ν•˜μœ„ κ³„μΈ΅μ—μ„œ μƒμœ„ κ³„μΈ΅μ—κ²Œ service, κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€.
      • 즉 Application 은 ν•˜μœ„ 계측인 Transport μ—μ„œ μ œκ³΅ν•˜λŠ” κΈ°λŠ₯을 μ‚¬μš©ν•  수 μžˆλ‹€.
    • Client-Server architecture
      • 인터넷 상 μ‘΄μž¬ν•˜λŠ” computer 은 κ³ μœ ν•œ μ£Όμ†Œ (IP address) λ₯Ό κ°–κ³  있음.
      • κ·Έ μ€‘μ—μ„œ server 은 permanent IP address λ₯Ό κ°–κ³  μžˆμ–΄μ•Ό ν•œλ‹€.
      • λ°˜λŒ€λ‘œ client λŠ” κ³ μ •λ˜μ–΄ μžˆμ§€ μ•Šμ•„λ„ λœλ‹€.
    • Processing communicating
      • process: program running within a host.
      • ν•˜λ‚˜μ˜ 컴퓨터 λ‚΄μ—μ„œ inter-process communication (IPC) 즉 ν”„λ‘œμ„ΈμŠ€ κ°„ 톡신을 μœ„ν•΄μ„œ OS κ°€ system call, 즉 interface λ₯Ό λ§Œλ“€μ–΄ λ‘μ—ˆλ‹€.
      • μ§€κΈˆ λ‹€λ£¨λŠ” λ‚΄μš©μ€ λ‹€λ₯Έ hosts μ‚¬μ΄μ˜ ν”„λ‘œμ„ΈμŠ€ κ°„ 톡신을 λ§ν•˜λ©° μ΄λŠ” exchanging message 둜, 즉 Socket (interface) 을 μ΄μš©ν•˜μ—¬ ν†΅μ‹ ν•œλ‹€.
    • Socket
      • Host1 κ³Ό Host2 의 Process1 그리고 Process2 κ°€ μ„œλ‘œ ν†΅μ‹ ν•˜κΈ° μœ„ν•΄μ„œλŠ” 사전에 Host1 κ³Ό Host2 κ°€ μ—°κ²°λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€. μ—°κ²°μ‹œν‚€λ €λ©΄ Process1 이 Process2 의 socket κ³Ό μ—°κ²°ν•˜κ³  μ‹Άλ‹€λŠ” μ˜μ‚¬ν‘œν˜„μ„ ν•˜κΈ° μœ„ν•΄μ„œλŠ” Process2 socket 의 μ£Όμ†Œλ₯Ό μ•Œκ³  μžˆμ–΄μ•Ό ν•œλ‹€. Process2 socket 의 μ£Όμ†Œ 역할을 ν•˜λŠ” 게 λ°”λ‘œ IP address + Port number 쑰합이닀.
      • IP address λŠ” 인터넷 상에 μ‘΄μž¬ν•˜λŠ” Host 의 μ£Όμ†Œμ΄κ³  ν•΄λ‹Ή Host 에 μ—¬λŸ¬ Process κ°€ μžˆμ„ν…λ° νŠΉμ • ν”„λ‘œμ„ΈμŠ€λ₯Ό 지칭할 λ•Œ Port κ°€ μ‚¬μš©λœλ‹€.
      • 예λ₯Ό λ“€μ–΄ naver μ›Ή λΈŒλΌμš°μ €μ— μ ‘μ†ν•˜κ³ μž ν•œλ‹€λ©΄, X.X.X.X:80 μ΄λΌλŠ” IP address + port λ₯Ό μž…λ ₯ν•΄μ•Ό ν•˜μ§€λ§Œ, 이λ₯Ό μ™Έμš°κΈ° μ–΄λ ΅κΈ° λ•Œλ¬Έμ— μ•ŒνŒŒλ²³ μ£Όμ†ŒμΈ www.naver.com 으둜 μ ‘μ†ν•˜κ³  μ΄λ ‡κ²Œ μž…λ ₯될 경우 DNS (IP μ£Όμ†Œλ§Œ λ²ˆμ—­ν•΄ μ£Όκ³  port number 은 λ™μΌν•œ 80 으둜 약속) 에 μ˜ν•΄μ„œ ν•΄λ‹Ή IP address + port 둜 μ ‘μ†λœλ‹€.
      • λͺ¨λ“  μ›Ή μ„œλ²„λŠ” 80 번의 port 을 μ‚¬μš©ν•œλ‹€.
    • What Transport service does an Application need?
      • data integrity: 데이터 무결성
      • timing: μ‹œκ°„μ— λŒ€ν•œ 희망 사항
      • throughput: 1μ΄ˆμ— μ–΄λŠμ •λ„μ˜ μ •λ³΄λŸ‰μ΄ 도달해야 ν•œλ‹€λŠ” 의미. (packet 이 νŠΉμ • μ‹œμ μ— λͺ°μ•„μ„œ ν•œλ²ˆμ— μ „μ†‘λ˜κ±°λ‚˜ λ‚˜λ‰˜μ–΄ μ „μ†‘λ˜κ±°λ‚˜ 동일. 예λ₯Ό λ“€μ–΄ μ˜ν™” λ‹€μš΄ λ‘œλ“œ 같은 경우)
      • security
      • μ‹€μ œ Transfort μ—μ„œ μ œκ³΅ν•˜λŠ” κΈ°λŠ₯은 data integrity μ„œλΉ„μŠ€λ§Œ μ œκ³΅ν•˜λ©° (TCP) λ‚˜λ¨Έμ§€ timing, throughput, security λŠ” ν˜„μž¬ μ œκ³΅ν•΄μ£Όμ§€ μ•ŠλŠ” κΈ°λŠ₯이닀.
      • λ”°λΌμ„œ security κ°€ μ œκ³΅λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— Application layer μ—μ„œ application 을 톡해 κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€.
  • 2.2 Web and HTTP (HyperText Transfer Protocol)

    • HTTP: Hypertext 을 μ „λ‹¬ν•˜λŠ” protocol
      • Hypertext: λ‹€λ₯Έ ν…μŠ€νŠΈλ₯Ό μ§€μΉ­ν•˜λŠ” 링크가 μ‘΄μž¬ν•˜λŠ” ν…μŠ€νŠΈ
      • request: μ›ν•˜λŠ” hypertext file 이름
      • response: ν•΄λ‹Ή hypertext file 전달
      • Application layer 의 HTTP λ₯Ό μœ„ν•΄μ„œλŠ” Transport layer 의 TCP λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄ 사전에 연결을 ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.
      • HTTP is "stateless": HTTP λŠ” 정말 λ‹¨μˆœν•΄μ„œ request 에 ν•΄λ‹Ήν•˜λŠ” νŒŒμΌμ„ 읽어 λ³΄λ‚΄λŠ” μ—­ν• λ§Œ ν•œλ‹€. 즉 μƒλŒ€λ°©μ— λŒ€ν•œ μƒνƒœλ₯Ό κΈ°μ–΅ν•˜μ§€ μ•ŠμŒ.
      • server maintains no information about past client requests.
    • HTTP connections: TCP λ₯Ό μ‚¬μš©ν•˜λŠ” 방식에 λ”°λΌμ„œ 2κ°€μ§€λ‘œ λ‚˜λˆ„μ–΄μ§„λ‹€.
      • TCP connections 을 λ§Œλ“€κ³  HTTP 둜 message 을 μ£Όκ³  받은 ν›„ TCP connection 을 μž¬μ‚¬μš©ν•˜λŠ”μ§€, ν˜Ήμ€ λŠλŠ”μ§€μ— λ”°λΌμ„œ μ•„λž˜μ™€ 같이 λ‚˜λˆ„μ–΄μ§.
      • non-persistent HTTP: at most one object sent over TCP connection, then closed.
      • persistent HTTP: multiple objects can be sent over single TCP connection between client, server
    • Non-Persistent HTTP
      • μ–΄λ–€ URL 에 text 와 10 개의 jpeg image 에 λŒ€ν•œ reference κ°€ μžˆλ‹€κ³  κ°€μ •ν•œλ‹€λ©΄,
        1. κ°€μž₯ λ¨Όμ € TCP connection 을 ν•œλ‹€.
        1. hypertext file 에 λŒ€ν•œ request / response κ°€ μΌμ–΄λ‚œλ‹€.
        1. TCP connection 을 closed ν•œλ‹€.
        1. κ·Έ λ‹€μŒμ— 10 개의 jpeg image 에 λŒ€ν•œ reference 도 μ½μ–΄μ„œ 가져와야 ν•œλ‹€.
          1. ~ 3) 을 λ‹€μ‹œ λ°˜λ³΅ν•œλ‹€.
    • Non-Persistent HTTP: response time
      • RTT: time for a small packet to travel from client to server and back
    • μ‹€μ œλ‘œλŠ” 1개의 hypertext file 만 μ£Όκ³  λ°›μœΌλ©΄ λ„ˆλ¬΄ 였래 걸리기 λ•Œλ¬Έμ— pipeline 처럼 μ—¬λŸ¬κ°œλ₯Ό ν•œλ²ˆμ— μ „μ†‘ν•˜κ³  ν•œλ²ˆμ— λ°›λŠ” λ°©μ‹μœΌλ‘œ μ§„ν–‰λœλ‹€.
  • 2.3 FTP

  • 2.4 Eletronic mail (SMTP, POP3, IMAP)

  • 2.5 DNS

  • 2.6 P2P application

  • 2.7 Socket programming with UDP and TCP

3. Application Layer

  • Socket

    • ν˜„μž¬ OS μ—λŠ” Transport Layer μ—λŠ” TCP ν˜Ήμ€ UDP 만 κ΅¬ν˜„λ˜μ–΄ μžˆλ‹€. λ‘˜ 쀑 ν•˜λ‚˜λ₯Ό μ„ νƒν•˜μ—¬ ν•΄λ‹Ή socket 을 μ‚¬μš©ν•˜μ—¬ Application Layer λŠ” 톡신을 ν•˜κ²Œ λœλ‹€.
    • TCP Socket 에 데이터λ₯Ό μ“°λ©΄ TCP λ₯Ό μ‚¬μš©ν•˜λŠ” 것이고 UDP Socket 에 데이터λ₯Ό μ“°λ©΄ UDP λ₯Ό μ‚¬μš©ν•˜λŠ” 것.
    • TCP Socket 은 SOCK_STREAM 이라 뢈리우고 UDP λŠ” SOCK_DGRAM 이라고 λΆˆλ¦¬μš΄λ‹€.
  • Big picture: Socket functions (API)

    • TCP Server
      • socket(): web server κ°€ socket 을 μƒμ„±ν•œλ‹€.
      • bind(): 방금 μƒμ„±ν•œ socket 을 νŠΉμ • port 에 bind ν•˜κ² λ‹€λŠ” 의미.
      • listen(): 이 socket μš©λ„λ₯Ό listen ν•˜λŠ”λ° μ‚¬μš©ν•˜κ² λ‹€. (server μ΄λ―€λ‘œ)
      • accept(): client λ‘œλΆ€ν„° μš”μ²­μ„ 받을 μ€€λΉ„κ°€ λ˜μ—ˆλ‹€λŠ” 의미.
      • μ—¬κΈ°κΉŒμ§€ μˆ˜ν–‰μ΄ 되면 client λ‘œλΆ€ν„° connection 이 올 λ•ŒκΉŒμ§€ server λŠ” blocking 이 λœλ‹€. (μˆ˜λ™μ )
    • TCP Client
      • socket(): socket 을 μ—΄κ³ 
      • connect(): μ›ν•˜λŠ” process 에 connect ν•˜κ² λ‹€λŠ” 의미.
    • Connection 을 λŠμ„ λ•Œμ—λŠ” TCP Client μ—μ„œ close() λ₯Ό ν•˜κ³  TCP Server κ°€ 이λ₯Ό read() ν•œ 후에 close() ν•œλ‹€.
  • Socket Creation and Setup

    • Function: socket()
      • int socket(int domain, int type, int protocol);
      • type: SOCK_STREAM for TCP, SOCK_DGRAM for UDP
    • Function: bind()
      • int bind(int sockfd, struct sockaddr* myaddr, int addrlen);
    • Function: listen()
      • int listen(int sockfd, int backlog);
      • backlog: λ™μ‹œμ— request κ°€ μ—¬λŸ¬ 개 λ“€μ–΄μ˜€λ©΄ μ΅œλŒ€ λͺ‡ 개λ₯Ό μ²˜λ¦¬ν•  것인지
    • Function: accept()
      • int accept(int sockfd, struct sockaddr* cliaddr, int* addrlen);
      • accept is blocking: accept κ°€ μˆ˜ν–‰λ˜λ©΄ blocking 이 λ˜μ—ˆλ‹€κ°€ client λ‘œλΆ€ν„° connection μš”μ²­μ΄ λ“€μ–΄μ˜€λ©΄ μˆ˜ν–‰μ΄ λ˜λ©΄μ„œ return 이 λœλ‹€.
      • return 이 될 λ•Œ client ip 와 port κ°€ μ €μž₯이 λœλ‹€.
  • Tearing Down a connection (TCP)

    • Function: close()
      • socket μ‚¬μš©μ΄ λλ‚œ 이후에 close ν•  λ•Œ
  • Multiplexing and Demultiplexing

    • 컴퓨터 Application layer 에 λ§Žμ€ ν”„λ‘œμ„ΈμŠ€λ“€μ΄ μžˆλŠ” 상황에 각자 socket 을 κ°–κ³  μžˆλŠ” μƒν™©μ—μ„œ Transport layer 은 Application layer λ‘œλΆ€ν„° 받은 message λ₯Ό segment 둜 λ§Œλ“€μ–΄ μ•„λž˜ layer 둜 보내주어야 ν•œλ‹€. 이λ₯Ό Multiplexing 이라고 ν•œλ‹€.
    • Receiver 츑면의 Transport layer μ—μ„œ segment λ₯Ό Application layer 의 μ—¬λŸ¬ socket 쀑에 λ°›μ•„μ•Ό ν•  socket 으둜 λ³΄λ‚΄μ£ΌλŠ” 것이 Demultiplexing 이닀.
    • Segment λŠ” data + header 둜 κ΅¬μ„±λœλ‹€. header 내에 field κ°€ 있고 이 쀑에 source port #, dest port # 이 λ‚˜μ™€μžˆλ‹€. (각각 16 bits)
    • UDP 의 경우 demultiplexing λΆ€ν„° μ‚΄νŽ΄λ³΄μž. Connectionless demux (UDP) μ΄λ―€λ‘œ λͺ¨λ‘ UDP socket 을 μ—΄μ–΄λ‘” μƒνƒœμ΄λ‹€.
      • Transport layer μ—μ„œμ˜ segment 의 header μ—λŠ” source port, dest port κ°€ 적히고 Network layer μ—μ„œμ˜ packet 의 header 에 λͺ©μ μ§€μ˜ IP address κ°€ μ νžŒλ‹€.
      • μ„œλ‘œ λ‹€λ₯Έ server μ—μ„œ μ˜€λ”λΌλ„ λͺ¨λ‘ 같은 port, socket 으둜 λ“€μ–΄κ°„λ‹€. (같은 process 둜 λ“€μ–΄κ°„λ‹€λŠ” 의미)
      • UDP λ₯Ό μ‚¬μš©ν•˜λŠ” κ²½μš°μ—λŠ” demultiplexing 이 destination IP + destination Port λ§Œμ„ μ‚¬μš©ν•΄μ„œ μ–΄λ–€ socket 으둜 μ˜¬λ¦΄μ§€ demultiplexing 이 이루어진닀.
    • TCP 의 경우 demultiplexing 을 μ‚΄νŽ΄λ³΄μž. Connection-oriented demux (TCP)
      • source IP, source port, destination IP, destination port 4 개의 값을 기반으둜 μ–΄λ–€ socket 으둜 μ˜¬λ¦΄μ§€ demultiplexing 이 이루어진닀. 이 4 개 κ°’ 쀑 1κ°œλΌλ„ λ‹€λ₯Ό κ²½μš°μ—λŠ” λ‹€λ₯Έ socket 으둜 μ „μ†‘λœλ‹€.
      • destination IP, destination port κ°€ λ™μΌν•˜λ‹€κ³  할지라도 demultiplexing 의 결과둜 λͺ¨λ‘ λ‹€λ₯Έ socket 으둜 전솑될 수 μžˆλ‹€.
      • 즉 connection-oriented 라고 λ³Ό 수 μžˆλŠ”λ° κ·Έ μ΄μœ λŠ” νŠΉμ • IP address λ‘œλΆ€ν„°μ˜ process λŠ” 항상 νŠΉμ • socket 으둜.
      • UDP λŠ” μ–΄λŠ λˆ„κ΅¬μ™€ μ—°κ²°λœ socket 이 μžˆλŠ”κ²Œ μ•„λ‹ˆλΌ destination IP, port 만 맞으면 μ•„λ¬΄λ‚˜ λ‹€ 받을 수 μžˆλ‹€.
      • λ”°λΌμ„œ ν•΄λ‹Ή process 의 thread κ°€ 각각의 socket 을 λ‹΄λ‹Ήν•œλ‹€. λ”°λΌμ„œ μžμ›μ„ 많이 μ†Œλͺ¨ν•œλ‹€.
      • μ–΄μ¨Œλ“  TCP, UDP λŠ” multiplexing κ³Ό error checking 을 ν•΄μ€€λ‹€.
  • UDP (User Datagram Protocol)

    • Segment header field λŠ” 4 개 밖에 μ—†μŒ. λ™μž‘μ΄ λ‹¨μˆœν•˜λ‹€.
      • fields: source port number (16 bits), dest port number (16 bits), length (16 bits), checksum (16 bits)
      • checksum: μ‹€μ œ λ‹΄κΈ΄ data λ₯Ό μ „μ†‘ν•˜λŠ” 도쀑에 μ—λŸ¬κ°€ μžˆμ—ˆλŠ”μ§€ μ—†μ—ˆλŠ”μ§€ 확인해 μ£ΌλŠ” field.
      • 데이터에 μ—λŸ¬κ°€ λ°œμƒν•œ κ²½μš°μ—λŠ” 데이터λ₯Ό μ˜¬λ €λ³΄λ‚΄μ§€ μ•Šκ³  λ°”λ‘œ drop.
      • UDP λ₯Ό ν†΅ν•΄μ„œ message λ₯Ό 받은 κ²½μš°μ— μ΅œμ†Œν•œ 데이터 전솑 과정에 μ—λŸ¬κ°€ λ°œμƒν•˜μ§€λŠ” μ•Šμ•˜λ‹€λŠ” 것을 보μž₯.
  • TCP 처럼 Reliable ν•˜κ²Œ μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€? Reliable Data Transfer

    • Transport μ•„λž˜ layers 와 λΌμš°ν„° μ‚¬μ΄μ˜ 톡신은 사싀 unreliable ν•œ ν™˜κ²½μ΄λ‹€.
      • 이둜 인해 message error, message loss 두 가지 κ²°κ³Όλ₯Ό μ΄ˆλž˜ν•  수 μžˆλ‹€.
    • Simple Reliable Data Transfer
      • ν•œ λ²ˆμ— packet 을 1κ°œμ”©λ§Œ λ³΄λ‚΄λŠ” 방식.
    • Rdt 1.0
      • κ°€μ •: μ™„λ²½ν•˜κ²Œ reliable ν•˜λ‹€κ³  κ°€μ • (no packet errors, no packet loss) ν•œλ‹€λ©΄ μš°λ¦¬κ°€ ν•„μš”ν•œ mechanisms 이 λ”°λ‘œ μ—†λ‹€.
    • Rdt 2.0
      • κ°€μ •: packet errors (no loss) 상황이라고 κ°€μ •ν•œλ‹€λ©΄, 이 μ—λŸ¬λ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ μ–΄λ–€ mechanism 이 ν•„μš”ν• κΉŒ?
      • Error Detection: add checksum bits 으둜 νŒλ‹¨. λ§Œμ•½ μ—λŸ¬κ°€ μžˆμ—ˆλ‹€λ©΄ λ‹€μ‹œ 보내달라고 μš”μ²­ν•˜κ±°λ‚˜ feedback 을 μ£Όμ–΄μ•Ό ν•œλ‹€.
      • Feedback: Acknowledgements (ACKs) / Negative Acknowledgements (NAKs). packet 을 받을 λ•Œλ§ˆλ‹€ ν”Όλ“œλ°±μ„ μ€˜μ•Ό ν•œλ‹€.
      • Re-transmission: μž¬μ „μ†‘
    • Rdt 2.0: Can this completely solve errors?
      • feedback packet 에도 checksum 이 μžˆμ–΄μ•Ό ν•œλ‹€. κ·Έλž˜μ•Ό feedback 에도 μ—λŸ¬κ°€ μžˆλŠ”μ§€ μ•Œ 수 μžˆλ‹€.
      • feedback 에 μ—λŸ¬κ°€ 있으면 receiver κ°€ μ œλŒ€λ‘œ λ°›μ•˜λŠ”μ§€ μ•ˆ λ°›μ•˜λŠ”μ§€ μ•Œ 수 μ—†λ‹€. λ”°λΌμ„œ μž¬μ „μ†‘μ„ ν•˜κ²Œ 되면 receiver μž…μž₯μ—μ„œλŠ” μ œλŒ€λ‘œ 정상 λ°›μ•˜λŠ”λ° μ€‘λ³΅λœ packet 이 전달될 μˆ˜λ„ μžˆλ‹€.
      • receiver μž…μž₯μ—μ„œ μƒˆλ‘œμš΄ 정보인지 duplicate 정보인지 μ–΄λ–»κ²Œ μ•Œ 수 μžˆμ„κΉŒ?
    • Rdt 2.1: Handling duplicate packets
      • sender κ°€ sequence number 을 packet 에 λΆ™μ—¬μ„œ 보낸닀.
      • feedback 에 μ—λŸ¬κ°€ μžˆμ„ κ²½μš°μ—λŠ” 무쑰건 μž¬μ „μ†‘. μž¬μ „μ†‘μ„ ν•˜λ”λΌλ„ sequence number κ°€ μžˆμœΌλ―€λ‘œ receiver λŠ” 쀑볡 정보λ₯Ό μ²˜λ¦¬ν•  수 있게 λœλ‹€.
      • sequence number 은 뢀가적인 μ •λ³΄μ΄λ―€λ‘œ header 에 μ ν˜€μ„œ λ³΄λ‚΄μ§ˆν…λ°, 이λ₯Ό 0 λΆ€ν„° 순차적으둜 μ¦κ°€ν•˜λ„λ‘ ν•˜λ©΄ λ¬΄ν•œλŒ€λ‘œ 컀질 수 μžˆλ‹€. 즉 header 크기가 맀우 컀질 수 있음.
      • field 의 ν¬κΈ°λŠ” μ΅œμ†Œν™”ν•΄μ•Ό 함.
      • sequence number 은 2개둜 μΆ©λΆ„. λ²ˆκ°ˆμ•„ κ°€λ©΄μ„œ μ‚¬μš©ν•˜λ©΄ λœλ‹€. (1개의 packet 만 λ³΄λ‚΄λŠ” κ²½μš°μ—λŠ”)
      • μš”μ•½ν•˜μžλ©΄, error detection, feedback, re-transmission, sequence number 을 μ΄μš©ν•œλ‹€.
      • Receiver 은 항상 ACK / NAK 을 전솑해야 ν•œλ‹€.
    • Rdt 2.2: NAK-free protocol
      • ACK λŒ€μ‹ μ— κ°€μž₯ λ§ˆμ§€λ§‰μœΌλ‘œ 정상 μˆ˜μ‹ ν•œ sequence number 을 적어보내쀀닀.
      • 즉 PKT(0) 을 λ°›μœΌλ©΄ ACK(0) 을 보내고, PKT(1) 을 sender κ°€ λ³΄λƒˆλŠ”λ° μ—¬κΈ°μ„œ μ—λŸ¬κ°€ λ°œμƒν•˜μ—¬ receiver κ°€ 이λ₯Ό μ •μƒμ μœΌλ‘œ 받지 λͺ»ν•˜μ˜€λ‹€λ©΄ receiver 은 또 ACK(0) 을 보낸닀. 그럼 sender 은 λ­”κ°€ 잘 λͺ» μ „μ†‘λ˜μ—ˆλ‹€λŠ” 것을 μ•Œκ²Œ 되고 PKT(1) 을 μž¬μ „μ†‘ν•œλ‹€. 그럼 ACK(1) 을 μ „μ†‘ν•˜κ³  PKT(0) 을 λ‹€μ‹œ 보낼 수 있게 λœλ‹€.
    • Rdt 3.0: channel with "loss" & packet errors
      • sender μž…μž₯μ—μ„œ message loss κ°€ λ°œμƒν•˜λ©΄ μ•„λ¬΄λŸ° response 을 받지 λͺ»ν•œλ‹€.
      • What mechanisms do we need for packet loss? "Timer" !
      • Sender 은 packet 을 보낼 λ•Œλ§ˆλ‹€ timer 을 μ΄μš©ν•˜μ—¬ 일정 μ‹œκ°„μ΄ μ§€λ‚˜λ©΄ μœ μ‹€ λ˜μ—ˆλ‹€κ³  νŒλ‹¨ν•˜κ³  μž¬μ „μ†‘ν•˜λ©΄ λœλ‹€.
      • 그럼 μ–Όλ§ŒνΌ κΈ°λ‹€λ €μ•Ό ν• κΉŒ? μ΄λŠ” 정닡이 μ—†λ‹€. "reasonable" amount of time.
      • timer μ‹œκ°„μ΄ 짧으면 μ‹€μ œλ‘œ μœ μ‹€μ΄ μžƒμ–΄λ‚  수 μžˆμ„ κ²½μš°μ— recovery κ°€ λΉ λ₯΄λ‹€. ν•˜μ§€λ§Œ 단점은 packet 이 λ‹€μ‹œ 전솑될 수 μžˆμ–΄μ„œ network 에 overhead λ₯Ό 쀄 수 μžˆλ‹€.
      • timer μ‹œκ°„μ΄ κΈΈλ©΄ network overhead λ₯Ό 쀄일 수 μžˆμ§€λ§Œ loss κ°€ λ°œμƒν–ˆμ„ λ•Œ λ°˜μ‘μ΄ λŠ¦μ–΄μ§€κ²Œ λœλ‹€.
      • timer 을 짧게 μž‘μ•„μ„œ μž¬μ „μ†‘μ„ ν•˜κ²Œ 되면 receiver κ°€ μ€‘λ³΅λœ packet 이라 λ°›μ§€λŠ” μ•Šμ„ 거라 receiver 에 λ¬Έμ œκ°€ λ˜μ§€λŠ” μ•Šκ³  network 상 overhead κ°€ λ°œμƒν•˜λŠ” 것.
      • sender λ‘œλΆ€ν„°μ˜ packet 이 μœ μ‹€λ˜κ±°λ‚˜ receiver λ‘œλΆ€ν„°μ˜ packet 이 μœ μ‹€λ˜κ±°λ‚˜ sender μž…μž₯μ—μ„œλŠ” λ™μΌν•˜λ‹€.
    • Recap: Principles of Reliable Data Transfer
      • Unreliable channel μ—μ„œλŠ” packet error, packet loss κ°€ λ°œμƒν•  수 μžˆλ‹€.
      • Packet error 을 μœ„ν•œ mechanisms 은 Error detection, feedback, re-transmission, sequence number
      • Packet loss 을 μœ„ν•œ mechanisms 은 Timeout 이 μžˆλ‹€.
      • 이λ₯Ό μœ„ν•œ μ •λ³΄λŠ” TCP header 의 field 둜 κ΅¬μ„±λ˜μ–΄ μžˆλ‹€.
      • TCP κ°€ μ œκ³΅ν•˜λŠ” κΈ°λŠ₯이 reliable ν•œ 것 말고도 많기 λ•Œλ¬Έμ— header 에 λ“€μ–΄κ°€λŠ” 정보가 λ§Žμ„ 수 밖에 μ—†λ‹€.
    • Performance of Rdt 3.0
      • μš°λ¦¬κ°€ λ§Œλ“  Rdt 3.0 ν”„λ‘œν† μ½œμ€ λ„ˆλ¬΄ λ‹¨μˆœν•˜λ‹€. ν•œ λ²ˆμ— 1개의 packet 만 보내고 κ²°κ³Όλ₯Ό ν™•μΈν•˜λŠ” 식이기 λ•Œλ¬Έμ— κ²°κ³Όλ₯Ό 받을 λ•ŒκΉŒμ§€ 아무것도 ν•˜μ§€ μ•ŠλŠ”λ‹€.
    • Performance of Rdt 3.0
      • μ‹€μ œ μ„±λŠ₯을 보면, μ‚¬μš©ν•  수 μžˆμ„ μ •λ„λŠ” μ•„λ‹ˆλ‹€.
      • 전체 μ‹œκ°„ μ€‘μ—μ„œ sender κ°€ network λ₯Ό μ‚¬μš©ν•˜λŠ” λΉ„μœ¨μ΄ 클수둝 μ’‹λ‹€.
      • T (transmit) = L (packet length in bits) / R (transmission rate, bps)
      • U (sender utilization) = ( L / R ) / ( RoundTurnTime + L / R )
      • 이λ₯Ό κ³„μ‚°ν•˜λ©΄ 1% 도 μ•ˆλœλ‹€. λ„ˆλ¬΄λ‚˜ λΉ„νš¨μœ¨μ .
    • Pipeline protocols
      • ν•œ λ²ˆμ— μ—¬λŸ¬ 개의 packets 을 보내고 이에 λŒ€ν•œ κ²°κ³Όλ₯Ό λ°›λŠ” λ°©μ‹μœΌλ‘œ μ§„ν–‰λœλ‹€.
      • μ΄λ ‡κ²Œ 되면 feedback, sequence number 관리가 λ³΅μž‘ν•΄μ§„λ‹€.
      • μ‹€μ œλ‘œ μ‚¬μš©ν•˜λŠ” ν”„λ‘œν† μ½œμ€ λ‹Ήμ—°νžˆ pipelining 을 ν•˜κ³  μžˆλ‹€.
      • Two generic forms of pipelined protocols: go-Back-N, selective repeat
  • Go-Back-N

    • Sender
      • window size κ°€ ν•œ λ²ˆμ— 보낼 수 μžˆλŠ” packet 의 μ–‘
      • 각각 packet 에 λŒ€ν•˜μ—¬ timer κ°€ 달렀 μžˆλ‹€. feedback λ°›κΈ° 전에 (ACK λ₯Ό λ°›κΈ° 전에) timeout 에 λ„λ‹¬ν•˜λ©΄ window μ•ˆμ— λ“€μ–΄μžˆλŠ” 본인 보닀 큰 packet 을 ν¬ν•¨ν•˜μ—¬ λͺ¨λ‘ λ‹€ μž¬μ „μ†‘.
      • ACK(n): cumulative ACK.
      • ex) ACK(11): 11 λ²ˆμ§ΈκΉŒμ§€ packet 을 잘 전솑 λ°›μ•˜λ‹€λŠ” 의미. 12 번째 packet 을 기닀리고 μžˆλ‹€λŠ” 의미.
    • Receiver
      • receiver 은 buffer 도 μ—†κ³  λ‹¨μˆœνžˆ μžμ‹ μ΄ λ°›μ•„μ•Ό ν•  sequence number 만 κΈ°λ‹€λ¦°λ‹€.
      • PKT(0) 이 λ„λ‹¬ν•˜λ©΄ 이λ₯Ό Application layer 에 λ„˜κ²¨μ£Όκ³  ACK(0) 을 μ „μ†‘ν•˜κ³  이제 1 번째 PKT을 κΈ°λ‹€λ¦°λ‹€.
      • λ§Œμ•½ PKT(1) 보닀 PKT(2) κ°€ λ¨Όμ € λ„μ°©ν•˜λ©΄ μ›ν•˜λŠ” 게 μ•„λ‹ˆλ―€λ‘œ ACK(0) 을 μ „μ†‘ν•œλ‹€.
      • PKT(1) 이 였면 ACK(1) 을 보내고 이제 2 번째 PKT을 κΈ°λ‹€λ¦°λ‹€.
    • GBN in action (window size = 4 일 경우)
      • PKT0 ~ PKT3 κΉŒμ§€λ₯Ό Sender κ°€ μ „μ†‘ν•˜κ³  Receiver κ°€ PKT0, PKT1 은 잘 λ°›μ•˜μœΌλ‹ˆ PKT2 κ°€ loss 된 경우 PKT3 은 discard ν•˜κ³  ACK1 을 μ „μ†‘ν•œλ‹€.
      • Sender 은 PKT3 κΉŒμ§€ μ „μ†‘ν•œ 이후 wait μƒνƒœλ‘œ μžˆλ‹€.
      • PKT0, PKT1 은 잘 μ „μ†‘λ˜μ—ˆμœΌλ―€λ‘œ 더 이상 window 내에 μžˆμ„ ν•„μš”κ°€ μ—†λ‹€.
      • λ‹€μŒ PCK4, PCK5 을 μ „μ†‘ν•˜μ§€λ§Œ Receiver 은 계속 PCK2 을 기닀리고 μžˆμœΌλ―€λ‘œ PCK4, PCK5 도 받지 μ•ŠλŠ”λ‹€.
      • PCK2 의 Timer λŠ” ACK 이 전달받지 μ•Šμ§€ λͺ»ν•˜μ˜€μœΌλ―€λ‘œ μ‘°λ§Œκ°„ Timer κ°€ timeout 에 λ„λ‹¬ν•œλ‹€.
      • PCK2 λΆ€ν„° λͺ¨λ‘ μž¬μ „μ†‘ (PCK2 ~ PCK5)
      • Receiver 은 PCK2 λ₯Ό λ°›μ•˜μœΌλ―€λ‘œ ACK2 λ₯Ό 보낸닀.
      • Send, Receive 사이에 loss 도 μ—†κ³  error 도 μ—†κ³  timeout 도 μ—†λ‹€λ©΄ window κ°€ μ­‰ μ§„ν–‰λœλ‹€.
    • 즉, 계속 진행이 λ˜λ‹€κ°€ (Go) μœ μ‹€ 상황이 λ°œμƒν•˜μ—¬ timeout 이 λ°œμƒν•˜λ©΄ window size N 만큼 λŒμ•„μ™€μ„œ (N back) μž¬μ „μ†‘ν•˜κ³  λ‹€μ‹œ Go.
      • Sender λŠ”, window μ•ˆμ— λ“€μ–΄μžˆλŠ” packet 은 buffer 에 λ“€κ³  μžˆμ–΄μ•Ό ν•œλ‹€. μ™œλƒλ©΄ window μ•ˆμ— μžˆλŠ” packet 은 아직 receiver κ°€ λ°›μ•˜λŠ”μ§€ μ•ˆ λ°›μ•˜λŠ”μ§€ ν™•μ‹ ν•˜μ§€ λͺ»ν•œ 상황이기 λ•Œλ¬Έμ΄λ‹€.
      • 단점은 1κ°œκ°€ μœ μ‹€λ˜μ—ˆλŠ”λ° window size N 만큼이 λ‹€μ‹œ 보내져야 ν•œλ‹€.
  • Selective Repeat

    • Selective ν•˜κ²Œ repeat ν•˜λŠ” 방식
      • μ΄μ œλŠ” ACK κ°€ cumulative ν•˜λ©΄ μ•ˆλœλ‹€. λ§Œμ•½ ACK11 이라면 PKT11 을 잘 λ°›μ•˜λ‹€λŠ” 의미둜 봐야 ν•œλ‹€.
      • λ”°λΌμ„œ Receiver κ°€ μžμ‹ μ΄ 기닀리고 μžˆμ§€ μ•ŠλŠ” PKT λ₯Ό 받더라도 이λ₯Ό μ €μž₯ν•  수 μžˆλ„λ‘ Receiver 츑에 Buffer κ°€ ν•„μš”ν•˜λ‹€.
      • Sender 은 ACK 을 전달 λ°›μœΌλ©΄ ν•΄λ‹Ή PKT 의 Timer 을 ν•΄μ œν•œλ‹€.
      • Timer κ°€ ν•΄μ œλ˜μ§€ μ•Šμ€ PKT λŠ” Timeout 에 λ„λ‹¬ν•˜κ³  Sender λŠ” 이λ₯Ό λ‹€μ‹œ μž¬μ „μ†‘ν•œλ‹€.
      • μž¬μ „μ†‘λœ PKT λ₯Ό 받은 Receiver κ°€ Buffer 에 μ €μž₯ν•˜κ³  ACK λ₯Ό 보낸닀.
    • Dilemma
      • Sequence number κ°€ 계속 λŠ˜μ–΄λ‚˜λ©΄ header κ°€ 계속 μ»€μ§€λ―€λ‘œ 쒋지 μ•Šλ‹€.
      • 그럼 μ–΄λ–»κ²Œ μ΅œμ†Œν•œμ˜ λ²”μœ„λ‘œ μ‚¬μš©ν•  수 μžˆμ„κΉŒ?
      • window size = 3 이면 sequence number κ°œμˆ˜λŠ”? 4개둜 ν•΄λ³΄μž.
      • PKT μˆœμ„œ: 0 1 2 3 0 1 2 3 0 1 2 3
      • sender κ°€ 0 1 2 λ₯Ό ν•œ λ²ˆμ— 보낼 수 μžˆλ‹€. 그런데 Receiver κ°€ 이λ₯Ό λͺ¨λ‘ 전달 λ°›μ•˜κ³  ACK λ₯Ό μ „μ†‘ν•˜λŠ” κ³Όμ •μ—μ„œ ACK0 ACK1 ACK2 κ°€ λͺ¨λ‘ μœ μ‹€λ˜μ—ˆλ‹€κ³  ν•˜λ©΄, Sender 의 PKT0 PKT1 PKT2 의 Timer κ°€ λͺ¨λ‘ timeout λ˜μ–΄ 0 λΆ€ν„° λ‹€μ‹œ μž¬μ „μ†‘μ„ ν•œλ‹€.
      • Receiver λŠ” 이미 0 ~ 2 κΉŒμ§€λŠ” 전달 λ°›μ•˜κΈ° λ•Œλ¬Έμ— 3 을 기닀리고 μžˆλŠ” 상황이고 μž¬μ „μ†‘λœ 0 ~ 2 κ°€ 3 번 λ‹€μŒμœΌλ‘œ λ“€μ–΄μ˜¨ PKT 이라고 μƒκ°ν•˜μ—¬ 이λ₯Ό Buffer 에 μ €μž₯ν•œλ‹€. 그런데 사싀 μ΄λŠ” Duplicated pkt 이닀.
      • λ”°λΌμ„œ window size = N 일 λ•Œ buffer 크기가 N + 1 이면 λ¬Έμ œκ°€ 생긴닀.
      • sequence number λ²”μœ„λ₯Ό 늘리면 해결이 λ˜μ§€λ§Œ 그럼 μƒˆλ‘œμš΄ packet κ³Ό duplicate packet 을 ꡬ뢄할 수 μžˆλŠ” μ΅œμ†Œμ˜ λ²”μœ„λŠ” μ–Όλ§ˆμΌκΉŒ?
      • λͺ¨λ“  packet 에 timer 을 달아야 ν•˜λŠ” 단점.
      • λ™μ‹œμ— μˆ˜ν–‰λ˜λŠ” process κ°œμˆ˜κ°€ 맀우 λ§Žμ€λ° λͺ¨λ‘ TCP connection 을 가지고 있고 이게 λͺ¨λ‘ timer 을 가지고 μžˆλ‹€λ©΄ μ‹€μ œλ‘œ 적용이 어렀움.
  • 볡슡

    • Application layer (message)
    • Transport layer - TCP (segment): segment = header (meta data) + data (message)
    • Network layer - IP (packet): packet = header + data (segment)
    • Link layer: frame = header + data (packet)
  • Connection-Oriented transport: TCP

    • Overview

      • point-to-point: one sender, one receiver. ν•œ 쌍의 sockets (1 개의 socket κ³Ό 1 개의 socket) κ°„ 톡신을 μ±…μž„μ§„λ‹€. process 1κ°œμ— socket 이 μ—¬λŸ¬κ°œ μžˆμ„ 수 μžˆλŠ”λ° 이 μ€‘μ—μ„œλ„ 1 개의 socket 와 1개의 socket 의 톡신.
      • reliable, in order byte stream: μœ μ‹€λ˜μ§€ μ•Šκ³  μˆœμ„œλŒ€λ‘œ
      • pipelined: window size λ₯Ό μ„€μ •ν•˜μ—¬ μ‚¬μš©
      • send & receive buffers: sender μ΄λ©΄μ„œ receiver. sender buffer 은 μž¬μ „μ†‘ν•˜κΈ° μœ„ν•΄μ„œ. receive buffer 은 out of order 둜 λ“€μ–΄μ˜¨ 데이터λ₯Ό μˆœμ„œλŒ€λ‘œ μ €μž₯ν•˜κΈ° μœ„ν•΄.
      • full duplex data: 데이터가 μ–‘λ°©ν–₯으둜 μ§„ν–‰λœλ‹€. 즉 sender 만 ν•˜λŠ” server κ°€ μžˆλŠ”κ²Œ μ•„λ‹ˆλΌ sender μ΄λ©΄μ„œ receiver μ΄λΌλŠ” 의미.
      • connection-oriented: handshaking
      • flow controlled: receiver 의 μ†Œν™” λŠ₯λ ₯에 맞게 보내주어야 ν•œλ‹€.
      • λ‚΄λΆ€ λ„€νŠΈμ›Œν¬ 상황이 받아듀일 수 μžˆλŠ” 만큼만
    • TCP Segment Structure - header

      • source port number (16 bits), destination port number (16 bits)
      • sequence number (32 bits)
      • acknowledgement number (32 bits)
      • receive window (16 bits): receive buffer 에 μ–Όλ§ŒνΌμ˜ μ—¬μœ κ°€ μžˆλŠ”μ§€ μ•Œλ €μ£ΌκΈ° μœ„ν•œ
      • checksum (16 bits): μ „μ†‘λ˜λŠ” λ™μ•ˆ μ—λŸ¬κ°€ λ°œμƒν–ˆλŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•œ μš©λ„
    • TCP sequence number's and ACKs

      • Host A 와 Host B κ°€ μžˆλŠ” μƒν™©μ—μ„œ 'C' character 1 byte 을 λ³΄λ‚΄κ³ μž ν•œλ‹€. (전솑계측2 16:15)
    • Reliable Data Transfer

    • Flow control

    • Connection management