본문 바로가기

CS38

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.
정지 문제(Halting problem)의 간단한 증명 증명을 위해 정지 문제를 판별할 수 있는 함수 H가 존재한다고 하자. (귀류법) 함수 H는 판별할 함수 I를 인자로 받는다. 이 때 함수 J를 아래와 같이 정의하면 모순이 발생한다. J의 인자로 J를 제공하면, - H(J)가 참이라면 J는 언젠가 끝난다는 뜻이지만 J는 무한루프에 의해 끝나지 않는다. - H(J)가 거짓이라면 J는 끝나지 않는다는 뜻이지만 J는 return문에 의해 끝나게 된다. 따라서 이는 모순이다. 2023. 4. 28.
2-way handshake를 사용하지 않는 이유? 3-way handshake에 대해 알아보다 문득 2-way를 사용하지 않는 이유가 궁금해졌는데, 이에 내가 알아본 바를 간략하게 정리해보려고 한다. 위 그림처럼 timeout이 발생하면 isn이 어긋나게 된다 구글에 2-way handshake를 검색하면 바로 나오는 그림인데, 뭔가 그럴듯해 보인다. 그러나 아무리 눈을 씻고 찾아봐도 2-way에 대한 ieee 표준은 찾아볼 수가 없으니... 따라서 저 그림도 표준은 아닐 것이고, 실제로 서버가 ACK+SYN을 보내면 해결되는 문제다. 신뢰할 수 없다 호스트의 입장에서 연결을 신뢰하려면 아래 사항이 모두 확인되어야 한다. (1) 상대방에게 패킷을 전달할 수 있다. (2) 상대방으로부터 패킷을 전달받을 수 있다. 그러나 2-way에서는 일부만 확인된다. .. 2023. 4. 18.
와이어샤크로 DHCP 패킷 캡쳐하기 *이 글은 위키의 내용을 참고하여 작성하였습니다 Wireshark/DHCP - Wikiversity Wireshark is a free and open source packet analyzer used for network troubleshooting and analysis. These activities will show you how to use Wireshark to capture and analyze Dynamic Host Configuration Protocol (DHCP) traffic. To prepare for this activity: en.wikiversity.org 언제 한번 와이어샤크를 써봐야겠다 하고 벼르고 있었는데, 마침 DHCP에 대한 호기심이 생겨서 와이어샤크를 설치하게 되었.. 2023. 3. 14.