서론

현재 Connector를 만들었다는 가정 하에 이제 다음 단계로 넘어가려고 한다

여태 우리는 Send할때 문자열을 흘러보내고있다
우리가 게임을 만들고있는데 문자열로 통신을하는게아니라
패킷이라는 클라랑 서버랑 하나의 규약이 되어있는 데이터를 보내야한다

이동 패킷 ((3, 2)좌표로 이동하고 싶다!) 패킷 : (15 3 2) 이동하고싶다는 패킷의 규약 번호 : 15 좌표 : 3,2

우리는 15번이라는 규약은 정수 두개를 보낸다고 합의를 했다고 치자
그러면 클라이언트는 해당 데이터를 서버에 뿅쏴서
서버는 패킷를 까봐서 확인해보니 15번이구나 이동하고싶구나 라는걸알게된다

또한 TCP프로토콜에서는 Send를 해도 데이터를 분할해서 보내는 경우가있다
Client가 100Byte를 Send하고 Server가 100Byte를 받는다는 보장이없다

이게 뭔 소리야?? 이게바로 TCP의 특징이다
tcp는 경우에따라서 혼잡이 일어나면 보내기 부담이되면
우리가 100Byte를 send해도 자기가 일부부만 여유되는 부분만보내고
좀 이따 나중에 보내는경우가있다

그래서 우리는 이 원리를 파악하기 위해 TCP의 개념을 알아야한다

 public override void OnReceive(ArraySegment<byte> buffer)
 {
     string recvData = Encoding.UTF8.GetString(buffer.Array, buffer.Offset, buffer.Count);
     
     Console.WriteLine($"[From Server] {recvData}");
 
 }

TCP 프로토콜 앞서 배우기 전 복습

택배를 배송할 때

저번에 여러개의 단계를 거친다고 했었다

이전에 정리한 글 ✍️네트워크 패킷 전송 비유], 💻통신 모델

이전에 통신모델에 정리한 내용중 핵심

현실 세계 예시

  1. 상품 포장
  2. 배송 정책 (택배만 문앞에 툭 놓는 경우도 있지만 중요한 택배는 수취인 확인하는 방식도 있음)
  3. 최종 주소 (from , to 경로)
  4. 단지 경로 (다음으로 이 택배를 전달해야 할 정보) (예 : 201호 경비실 택배 배송센터로 보면 지금 화살표 방향에 대한 위치를 말하는 것 현재 위치에서 다음 방향으로 가는 경로 위치라 보면됨)
  5. 택배 운송 택배를 운송하는 것

네트워크 예시

  1. 어플리케이션 HTTP, FTP, DNS
  2. 트랜스포트 전송 확인 / 오류해결 정책 (TCP, UDP관련해서 이후 제대로 설명)
  3. 네트워크 네트워크 간 경로 설정 (IPv4, IPv6) 관련 장치 : 라우터
  4. 데이터 링크 네트워크 내 경로 설정 (이더넷, PPP) 관련 장치 : 스위치
  5. 피지컬 신호 처리 관련 장치: 케이블/허브

오늘 얘기하고있는 TCP/UDP정책은 배송 정책이다 즉 트랜스포트Rare 부분이다


TCP, UDP 설명

TCP

  1. 안전한 트럭
  2. 전화 연결 방식

연결 지향성

연결형 서비스

  1. 연결을 위해 할당되는 논리적인 경로가 있다
  2. 전송 순서가 보장된다

즉 직접 선을 직접 서로 연결하는거라기보다는 논리적인 연결이라 생각하자
예를 들어 이웃집과 전화 연결을 하는 경우라 생각

또한 전송 순서가 보장된다는건 내가 안녕하세요 저는 OO입니다 라고
입력하면 받는사람은 순서 그대로 안녕하세요 저는 OO입니다 라고 정확히 도착하는 것
”안녕하세요 OO입니다 저는 X”

속도와 신뢰성

  • 신뢰성 Good
  • 속도 Bad
  1. 분실이 일어나면 책임지고 다시 전송한다 (신뢰성 Good)
  2. 물건을 주고 받을 상황이 아니면 일부만 보냄 (흐름/혼잡제어) (이거이거 중요)
  3. 고려할 것이 많으니 속도가 Bad

UDP

비유

  1. 위험한 총알 배송
  2. 우편 전송 방식

연결 지향성

비연결형 서비스

  1. 연결이라는 개념이 없다
  2. 전송 순서가 보장되지 않는다

연결이라는 개념보다는 우편센터에서 편지를 보내듯
내가 누구고 뭘 하고 싶다라는 메일을 보내는거 와 같다

첫 편지에는 안녕하세요 라고 보냈고
두번째 편지에는 OO입니다 라고 보냈다

편지에는 특별하게 여러 경로로 보내지게 되는데
정말 운 좋게 순서가 뒤바뀌어서 도착할 수 있다

그러면 받는 입장에서는 1. OO입니다 2. 안녕하세요 순으로 올 수도 있는것

속도와 신뢰성

  • 신뢰성 Bad
  • 속도 Good
  1. 분실에 대한 책임 없음 (신뢰성 Bad)
  2. 일단 보내고 생각한다
  3. 단순하기 때문에 속도가 Good

압축 결론

TCP와 UDP에는

  1. 연결과 비 연결의 차이점
  2. 분실에 대한 책임
  3. 전송 순서가 보장이 되는지?
  4. 속도가 느린지 빠른지의 차이점이 있다

TCP는 패킷을 상황을 봐 가면서 나눠서 보내는데 받는사람은 패킷이 일부가 아닌 전부 도착하면 처리하는 방식으로 가야한다

UDP는 아 몰랑 하면서 패킷을 전부 보내버리는데 이 와중에 분실이 될 수도 있다는 점도 생각하자

즉, 바운더리가 있냐 없나의 차이