서울대학교 컴퓨터공학과 권태경 교수님의 "Topics in Computer Networks" 강의를 필기한 내용입니다.
다소 잘못된 내용과 구어적 표현 이 포함되어 있을 수 있습니다.
Background
- 인터넷 탄생 배경
- 고성능의 컴퓨터에 원격으로 접속해서 사용하기 위해
- 당시에 사용되던 전화의 경우에는 계층적이고 중앙 시스템이 필요했는데, 이것이 파괴될 경우에 대비해 중앙집권화되지 않은 네트워크 환경이 필요했기 때문
- Packet switching → 한 네트워크가 다운이 돼도 다른 네트워크를 타고 가면 됨
- 링크 계층 프로토콜들을 다양화 하기 위해(?)
- 전화 혹은 영상(tv) 가 아닌 다양한 데이터 타입을 전송하기 위해
- 계층화 디자인
- Modularity → link layer protocol 이 추가/변경되었을 때 영향을 받지 않게 하는 방법
- layer(n) 은 layer(n-1) 과의 소통에만 신경씀
- Encapsulation
- 패킷을 내려보낼 때 패킷을 변경하지 않고 앞에 헤더를 붙이는 방식으로 캡슐화, 올려보낼 때는 해당 계층의 헤더만 보고 처리한 후 헤더를 벗겨서 올려보냄
- 즉, 동일 계층 간에는 동일한 패킷이 송수신됨
- Flexibility
- (뭐라노)
- 이 계층화 디자인의 단점.. trade-offs
- 각 계층의 구현은 독립적이기 때문에 error detection 처럼 중복된 기능들이 계층마다 구현될 수 있다 → 이것은 성능 저하의 원인이 됨
- Modularity → link layer protocol 이 추가/변경되었을 때 영향을 받지 않게 하는 방법
- 어떻게 계층화를 하지?
- 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 로 모든 것을 할 수 있기 때문에