서울대학교 컴퓨터공학과 권태경 교수님의 "Topics in Computer Networks" 강의를 필기한 내용입니다.

다소 잘못된 내용과 구어적 표현 이 포함되어 있을 수 있습니다.

Background

  • 인터넷 탄생 배경
    • 고성능의 컴퓨터에 원격으로 접속해서 사용하기 위해
    • 당시에 사용되던 전화의 경우에는 계층적이고 중앙 시스템이 필요했는데, 이것이 파괴될 경우에 대비해 중앙집권화되지 않은 네트워크 환경이 필요했기 때문
      • Packet switching → 한 네트워크가 다운이 돼도 다른 네트워크를 타고 가면 됨
    • 링크 계층 프로토콜들을 다양화 하기 위해(?)
    • 전화 혹은 영상(tv) 가 아닌 다양한 데이터 타입을 전송하기 위해
  • 계층화 디자인
    • Modularity → link layer protocol 이 추가/변경되었을 때 영향을 받지 않게 하는 방법
      • layer(n) 은 layer(n-1) 과의 소통에만 신경씀
    • Encapsulation
      • 패킷을 내려보낼 때 패킷을 변경하지 않고 앞에 헤더를 붙이는 방식으로 캡슐화, 올려보낼 때는 해당 계층의 헤더만 보고 처리한 후 헤더를 벗겨서 올려보냄
      • 즉, 동일 계층 간에는 동일한 패킷이 송수신됨
    • Flexibility
      • (뭐라노)
    • 이 계층화 디자인의 단점.. trade-offs
      • 각 계층의 구현은 독립적이기 때문에 error detection 처럼 중복된 기능들이 계층마다 구현될 수 있다 → 이것은 성능 저하의 원인이 됨
  • 어떻게 계층화를 하지?
    • L7 → Application
    • L4 → Endpoint-specific (process routing, port)
    • L3 → Endpoint-to-endpoint
    • L2 → Hop-to-hop
  • Fate sharing
    • TCP 의 경우에는 패킷 번호를 추적함 (stateful)
    • 그리고 이것에 대한 대비가 되어 있어서 패킷을 잃는 것은 괜찮음 (재전송)
    • 하지만 실제로도 그렇냐는데?
    • Stateful vs Stateless → 상태가 있냐 없냐
      • TCP → 여기서는 State 가 seq num 으로 구현되는 것 → 몇번 패킷이 전송될지 서버와 클리이언트가 모두 알고 있고, state 가 맞지 않으면, 즉, seq num 이 같지 않으면 재전송을 통해 맞춤
      • HTTP → stateless → client 가 요청한 것만 주고 client 의 상태를 저장하지 않음
    • Hard-state vs soft-state → Control message 를 활용하냐 그렇지 않냐
      • Hard-state → TCP → Connection 을 시작하고 끝낼 때 Control message 를 주고 받으며 State 개시와 종료를 알린다
      • Soft-state → () → Connection 를 시작하고 끝내는 Control packet 을 사용하지 않음 → Master 노드가 주기적으로 heartbeat 를 보내고 이것을 받는 동안 connection 을 유지하다, 이것을 받지 못하면 master 와의 connection 을 끊고 master 가 죽었다고 판단하는 → IoT 같은 곳에서 사용한다고 한다… MQTT 에서도 이랬나?
      • “Soft” and “Hard” State
    • IP 로 모든 것을 할 수 있기 때문에