본문 바로가기

분류 전체보기91

IEnumerable과 foreach문의 관계 보호되어 있는 글 입니다. 2023. 7. 19.
문자열을 저장하는 트리, 트라이 보호되어 있는 글 입니다. 2023. 7. 18.
NAT 방식의 구분 위키백과에서 사진을 가져왔는데 조금 이해하기 힘든 부분이 있어서 나만의 설명을 조금 덧붙여보았다. Full Cone 기본적으로 NAT(NAPT)는 패킷이 NAT 장비를 거쳐 Outbound될 때 포트를 매핑한다. 그리고 매핑 정보는 테이블에 기록되어 다시 Inbound될 때 이를 참조하고 패킷을 포워딩하게 된다. Full Cone은 가장 느슨한 정책으로 한번 포트가 매핑되면 누구든지 접근할 수 있는데, 이는 상대방의 정보까지는 매핑하지 않기 때문이다. Restricted Cone Full Cone과는 달리 상대방의 IP를 함께 매핑하므로 패킷의 송수신에 제한이 있다. 좌측 그림을 보면 클라이언트는 Server 1에게 송신한 기록이 있으므로 Server 1으로부터 패킷을 수신할 수 있다. 하지만 Serve.. 2023. 7. 17.
STUN-TURN과 NAT의 관계 STUN과 TURN은 주로 VoIP나 WebRTC를 다룰 때 나오는 주제인데, 그 근본적인 원인은 NAT에게 있다고 할 수 있다. VoIP를 예로 들면, App. Layer 프로토콜인 SIP와 SDP로 세션을 수립할 때 자신의 IP, Port를 담아서 보내는데 일반적인 NAT는 이를 커버해주지 않으므로 STUN과 TURN이 필요한 것이다. 그렇다면 일반적이지 않은 NAT를 사용하면 되는게 아닌가? 싶겠지만 그 기능(ALG)에는 여러 문제가 있다. 궁금하다면 다음의 링크를 참고하시라. SIP ALG and why it should be disabled on most routers | VoiceHost 아무튼, STUN과 TURN에 대해 알아보자면... VoIP 네트워크를 위와 같이 구성했다고 치자. 그러면.. 2023. 7. 9.
다이렉트, 크로스 케이블 만드는 법 자격증때문에 준비했던 부분인데 나름 재밌지 않나 싶어서 글로 남겨둔다. 옛날부터 공작을 참 좋아했는데 어쩌면 이게 내 적성이 아닐까 싶기도 하고~~ㅠㅠ 준비물 : RJ-45 커넥터, UTP 케이블, 랜툴, 테스터기(선택), 탈피기 케이블은 대충 집에 굴러다니는 랜선으로 해결할 수 있다. 나머지는 쿠팡에서 2만원 정도면 구매 가능! 1. 케이블을 적당한 길이로 자른다. 랜툴이든 펜치든 사용해서 적당히 잘라주자. 자격증 때문이면 길게 사용할 필요가 없다. 필자는 한 뼘 정도로 잘랐다. 2. 탈피기로 피복을 벗긴다. 꾹 눌러서 케이블이 들어가기 쉽게 벌려주고, 우측 사진처럼 케이블을 넣어 3바퀴 정도 돌려주면 된다. 너무 많이 돌리면 내부 피복이 다칠 수 있으니 주의하자. 3. 꼬인 선을 풀어 준다. 선은 적.. 2023. 6. 23.
네이글(Nagle) 알고리즘이란? 네이글 알고리즘이 처음 소개된 RFC 896을 보면... 작은 패킷과 관련하여 특수한 문제가 있다. 키보드로 작성한 단일 문자를 TCP로 전송하면 일반적으로 41 바이트(1 바이트의 데이터, 40 바이트의 헤더)의 패킷이 된다. 이 4000%의 오버헤드는 짜증나지만 부하가 적은 네트워크에서는 견딜만한 수준이다. 그러나 혼잡한 네트워크에서는 이 오버헤드로 인해 손실, 재전송 등의 문제가 발생할 수 있다. 실제로 처리량이 너무 낮아지면 TCP 연결이 중단될 수도 있다. 라는 내용이 있는데, 요약하자면 1 바이트를 보내려고 수십 바이트의 헤더를 덧붙이는 게 싫다는 말이다. 이는 타이머 등을 활용해서 해결할 수도 있었지만 여러 문제가 있었기에, John Nagle은 아래의 해결책을 제시한다. ⋯간단하고 우아한 .. 2023. 5. 19.
TCP 상태 전이도 설명 소켓 프로그래밍을 해봤다면 이해가 조금 수월할 것이다. 서버의 입장에서는, 소켓을 Listen 상태로 전환한다. (LISTEN) SYN을 수신하고 SYN+ACK를 송신한다. (SYN RECEIVED) ACK를 수신한다. 클라이언트 소켓이 Accept 된다. (ESTABLISHED) 데이터를 송수신한다. FIN을 수신하고 ACK를 송신한다. (CLOSE WAIT) FIN을 송신한다. 소켓을 Close하려 한다. (LAST ACK) ACK를 수신한다. 소켓을 Close 한다. (CLOSED) 위의 흐름이 가장 일반적이다. 이는 다이어그램의 파란 선을 따라간 것이고, 회색 선을 따라가면 일반적이지 않은 전이가 보인다. 대표적으로, 서버가 먼저 SYN을 송신한다. (SYN SENT) 서버가 먼저 FIN을 송신한.. 2023. 5. 18.
accumulate의 사용법과 활용 https://cplusplus.com/reference/numeric/accumulate/ function template std::accumulate sum (1)template T accumulate (InputIterator first, InputIterator last, T init);custom (2)template T accumulate (InputIterator first, InputIterator last, T init, BinaryOperation binary_op); Accumulate values in ra cplusplus.com accumulate는 컨테이너 내부의 원소들에 대하여 누적 값을 구할 때 사용된다. 값은 무엇이든 될 수 있다. 기본적으론 합을 구하지만 아래와 같이 곱.. 2023. 5. 15.