두다지 서버 개발자 양성 프로그램 Week 8

8번 째 멘토링

네트워크의 Transport Layer와 Network Layer에 대한 공부를 마치고, 그에 대한 정리를 멘토링을 통해 하였다. 또한 지난 주에 과제로 제출되었던 UDP로 TCP 구현하기 과제의 일부를 해서 갔다. 네트워크를 공부하며 느끼는 점은 물리적 계층에 가까워지는 Layer일수록 그 깊이가 더 깊어 이해하기가 힘들다는 것이다. 아직 Link Layer는 추가적으로 학습하지 못했지만 지금까지 이해한 것보다 어려울 것 같다는 느낌을 강하게 받았다.. 작년부터 전산학을 공부함에 있어 네트워크가 계속 발목을 잡는 듯한 느낌을 받는다. 앞으로 서버 개발자를 목표하기 위해서는, 멘토링 이후에도 네트워크는 추가적으로 공부를 더 해서 제대로 이해하고 넘어가야 할 것이다.

학습한 것에 대한 리뷰

  • UDP는 socket을 통해 1:1 연결을 하기 때문에 header에 2가지 정보를 포함해야 함
    • destination IP, destination Port number
  • TCP는 welcome socket 하에 1:n의 연결을 하기 때문에 header에 4가지 정보를 포함해야 함
    • destination IP, destination Port number, source IP, source Port number
  • Network Layer에서 IP protocol은 비신뢰적 전송
  • 네트워크 지원 하의 혼잡 제어는 single bit 전송을 통해 이루어짐
  • 2-way handshaking의 경우, Client의 중복된 conn_req를 Server가 Client의 종료 이후 받게 되면, Server가 socket을 열게 되는 half open connection의 문제가 발생할 수 있음
  • c언어 헤더 include 순서
    • 내 헤더를 가장 마지막에 작성해줌
  • debugging을 위해 logger 사용하자
  • 항상 unittest 하기
    • 내 프로그램이 잘 작동한다는 것은 unittest로 검증한 후에 시나리오 대로 동작시켜보아야 함
  • C에서 fread는 읽어온 것만큼만 전달하도록 readcount 변수를 추가적으로 사용해주어야 함

Computer Network

  • Transport Layer는 process 간 연결을 도와주는 계층
  • Application 단에서 Transport 계층에게 명령하여 상대 host에게 데이터를 전송
  • 왜 3-way handshake / flow control / congestion control을 하게 될까?
    • 서로 다른 계층에서의 성능 보장을 신뢰하지 못하기 때문
    • 네트워크 통신에서의 변수가 통제된 상황에서는 무조건 성능의 보장 가능
      • 그러나, 현실 네트워크는 그렇지 못하기 때문에 통제 되지 않은 상황을 고려한 프로토콜이 필요한 것
  • 전송 과정에서 거치는 hop의 성능을 알지 못하는 윗단
    • Transport Layer에서는 그저 최선의 상황을 가정해서 전송하는 것
  • Congestion control에서는 doubling의 threshold를 어떻게 잡을 까에 대한 문제 있을 수 있음
    • 결국, threshold를 잘 모르기 때문에 doubling을 구현하는 것
    • 일종의 땜빵코드(best effort..)
    • 절반으로 줄이는 TCP Tahoe도 같은 개념
    • Packet loss는 일종의 congestion 발생했다는 signal 처럼 이용되는 것
  • 네트워크 내의 여러 상황 때문에 General Purpose 상황에서 네트워크 이용률을 50%까지 올리는 것도 매우 어려운 일
  • 2-way handshake에는 다양한 문제가 있음
    • half open connection / doubly connected...
    • Server가 연결에 대해 보낸 ACK와 ACK 이후 즉시 보낸 data의 순서가 보장되지 않음
    • 따라서 서로가 정상적으로 연결(혹은 연결 해제)되었다는 것을 인지하고 communicate하는 것이 좋음!
      • cf. close는 4-way handshake
      • close 상황이 완전히 이루어지기 전에 유실되었던 segment의 전송 등을 고려하여 연결의 종료가 이루어짐

다음 주 까지의 assignment

  • 네트워크 과제 마무리
    • Packet에 TCP header 부여
    • listen() for. 3-way handshake 구현
    • flow control 구현 (순서 보장)
    • Fake Router 구현
      • Get datas from Client & send datas to Servers


+ Recent posts