네트워크/데이터 통신 기본 이론 - Packet Header 의 구분
네트워크/데이터 통신 기본 이론 - Packet Header 의 구분
2021.12.31아래 그림은 Ethernet 헤더부터 IP 헤더, 그리고 TCP/UDP 헤더를 통해 패킷의 응용을 어떻게 구별하는지를 그 과정을 보이고 있습니다. L2: Ethernet Header Ethernet 헤더는 Destination MAC Address(6B), Source MAC Address(6B) 그리고 Ethernet Type(2B)로 구성이 됩니다. 그리고 위 그림과 같이 Ethernet Type의 값이 1536(0x600) 보다 크면 RFC 894에서 규정한 DIX 2.0 포맷이 되구요(아래 그림 좌측과 같이). 만약 이 보다 작은 값이면 IEEE에서 정의한 SNAP 혹은 SAP 포맷이 됩니다. 현재 유선 Ethernet 망에서 다니는 대부분의 패킷은 이 DIX 2.0 이므로 일단 이 것만 아셔도 ..
L3 - ARP(Address Resolution Protocol)
L3 - ARP(Address Resolution Protocol)
2021.12.30원격과의 데이터통신에는 총 3개의 주소가 필요하다. L4 Port Number, L3 IP Address, L2 Ethernet Address(MAC Address) IP와 Port에 대해서는 서비스 제공자로부터 App 내에 코딩된 정보 혹은 웹페이지의 도메인이름이 사전에 등록이 되어있는 경우 DNS 서버의 도움을 받아 쉽게 알아 낼 수 있다. L4와 L3는 그렇다고 치고, L2 주소( Ethernet Address)는 대체 어떻게 알아내서 통신이 진행되는 것일까? 라우터와 라우터 사이에는 별도의 프로토콜이 존재하지만, 같은 라우터를 공유하는 다른 서브넷내의 머신과의 통신에는 간단하게 ARP가 이용된다. 같은 라우터를 사용하는 다른 서브넷일 경우 ARP를 이용하면 간단하게 이더넷 주소를 얻어온다. 이때,..
L4 - TCP Sliding Window
L4 - TCP Sliding Window
2021.12.29TCP 는 원격의 Ack 통지로부터 내가 보낸 데이터가 잘갔는지 확인하고, Seq 통지를 통해 보낼 데이터의 순서를 알린다. 1. Seq로 상대에게 데이터 순서를 통지하고, 2. 상대로부터 Ack를 받은뒤, 3. 이에 따라 Seq를 정하고 다시 송신. 한번보내면, 상대도 응답을 한번 보내고 그걸 받아야만 다음 차례 송신을 진행하는 이런 방식을 핑퐁 방식 이라고 한다. 핑퐁 방식은 무엇보다도 상대로부터 Ack를 받고 다시 보내기 때문에, 상대가 어디까지 받았는지, 내가 어디서부터 보내야 할지가 매우 명확하며, 방식이 매우 심플하다. 허나 , 데이터 송신 후 상대측으로부터의 Ack 통지를 기다릴때, 상대측의 응답이 늦어질 경우 상당한 손해이다. 보낼 것은 많은데, 상대측으로부터의 응답이 없다는 이유로 기다릴..
L4 - TCP Header 구조
L4 - TCP Header 구조
2021.12.27TCP는 L4 프로토콜의 일종이며. Transmission Control Protocol 의 약자이다. 전송을 제어 하는 기능을 가진 L4 통신방식이다. L4 얘기를 한다고 하면 TCP 얘기를 많이 할것이다. 그만큼 중요하다. 통신방식을 쉽게 빠르게 이해하기를 원한다면 가장 첫번째로 보아야할 것은 바로 통신에 사용되는 Header이다. 위의 그림이 뭘 헤더라고 부르냐? 했을때 가장 간단하게 표현한 그림인듯 하다. 친구한테 메일로 HELLO라고 보낸다고 하자. 실제로는 HELLO말고도 통신에 필요한 정보들이 필요하다. 이것도 주고 받아야 컴퓨터 끼리 통신을 잘한다. 그렇다 Header, Payload는 랜선 따라서 같이가는 동반자다. 컴퓨터 네트워크 상의 통신에 사용되는 여러가지 데이터는 Header다. ..
L4 - TCP의 Connect 과정시 3Way-Hand Shake
L4 - TCP의 Connect 과정시 3Way-Hand Shake
2021.12.23전송 프로토콜로 TCP 방식을 사용하려한다면, 본격적인 데이터통신에 임하기전에 Connect(연결) 과정을 거쳐야한다. HandShake라는 이름에서도 의미를 알수 있듯이, 이것은 일종의 양측 상호확인 절차이다. (합시다. Okay 저도 수락 합니다. 아 그럼 괜찮은걸로 알겠습니다?) 같은... 클라이언트 측은 통신을 원한다는 의사를 밝힌다. 이것이 곧 서버의 특정 Port에 SYN을 보내는 행동이다. 물론 보이듯이 서버는 해당 Port를 LISTEN 상태로 두어야한다. (LISTEN 상태를 곧 열린 상태라고 보아도 된다.) 서버는 열린 Port로 들어온 Client로부터의 SYN을 받고, Okay. 통신하자 하고 SYN+ACK를 보낸다. Client는 서버에서 Okay가 왔으니 이제부터 통신할수 있겠구..
네트워크/데이터 통신 기본 이론 - Socket
네트워크/데이터 통신 기본 이론 - Socket
2021.12.22네트워크 프로그래밍을 처음 공부할때에 가장 막막한 점은 막연한 이론은 어느 서적에서나 볼 수 있다는 점이지만, 실제로 프로그램을 만든다고 할때에 이를 코드로 어떻게 구현해야 하는가? 이다. 그래서 많은 전문가들이 보통 Socket Programming부터 차근차근 하나씩 경험하기를권한다. Socket이란 무엇인가? 통신시 필요한 발신지(Source)와 목적지(Destination) 에 관한 정보와 통신 진행상황, 또 통신시 필요한 정보들을 기입해둔 데이터블럭을 이야기한다. App은 어찌 되었던 원격으로 데이터를 송신하기 위해서 Network Adapter에 접근해야 한다. 결국 하드웨어와 관련된 이야기이며, 이를 관리하는, OS 그리고 Driver를 거쳐야 하는 것이다. 정리하면 다음과 같다. App에서..
네트워크/데이터 통신 기본 이론 - OSI 7 계층 , TCP/IP 4 계층
네트워크/데이터 통신 기본 이론 - OSI 7 계층 , TCP/IP 4 계층
2021.12.22원격 통신시 거치는 과정을 계층으로 보기좋게 나타낸 것이 OSI 7 계층과 TCP/IP 4계층 이다. (표준 위원회가 있다고 하고 거기서 무슨 일을 한다고는 하던데 잘은 모르겠다.) 위로 갈수록 소프트웨어에 가까워지며, 아래로 갈수록 하드웨어에 가까워지는 특성은 같다. 실제로 네트워크 프로그래밍시에 가장 많이 신경을 쓰게 될 부분은 TCP 계층의 Application 과 Transport 계층이다. 각 계층은 통신목적지를 구분하기 위해 각기 다른 주소방식을 사용하며, 또한 각기 다른 통신규약(프로토콜)을 이용한다. TCP/IP 4계층의 Network Interface 와 OSI 7의 Datalink Layer는 MAC 어드레스를 사용하며, 이 계층에서 사용하는 Protocol을 통칭해 Ethernet 프..
[BOJ] 12869 뮤탈리스크 - 완전탐색
[BOJ] 12869 뮤탈리스크 - 완전탐색
2021.12.03문제에서 제시한 최대 SCV는 3마리 이다. 세마리의 SCV가 있다고 하자. 뮤탈의 쓰리쿠션 공격 방법은 모두 6가지 이다. A -> B -> C A -> C -> B B -> A -> C B -> C -> A C -> A -> B C -> B -> A 이 6 가지 경우로 재귀호출을 계속 하게 되면 언젠가 SCV 3마리의 체력이 모두 0이하가 될 것이다. 재귀 호출의 Depth 자체가 공격회수와 같다고 볼수있으므로, 이를 비교해 최소값을 구하면 된다. 코드를 구현하면 다음과 같다. SCV의 체력이 음수가 될수 있음에 유의한다. #define _CRT_SECURE_NO_WARNINGS #include #include #include #include int Max = 0x7FFFFFFF; using name..
[BOJ] 13902 개업 2 - 동적 계획법
[BOJ] 13902 개업 2 - 동적 계획법
2021.12.03동적계획법을 이용하면 쉽게 해결이 가능한 문제이다. 웍의 경우는 동시에 2개를 사용이 가능하므로, 웍의 조합으로 새로운 크기의 웍을 만들고 반복문을 이용해 동적계획법을 사용한다. N 그릇을 요리한다고 할때, 내가 가진 웍의 크기가 각각 3 4 5 6 이라고 하자. 그렇다면 요리횟수의 최소값은 (N - 3) 그릇을 요리하는 회수 + 1 (N - 4) 그릇을 요리하는 회수 + 1 (N - 5) 그릇을 요리하는 회수 + 1 (N - 6) 그릇을 요리하는 회수 + 1 중 하나이다. 코드로 구현하면 다음과 같다. #define _CRT_SECURE_NO_WARNINGS #include #include #include #include using namespace std; std::vector Works; bool ..
[BOJ] 1904 01타일 - 동적 계획법
[BOJ] 1904 01타일 - 동적 계획법
2021.12.03동적 계획법을 이용해야 하는 문제이다. 이전의 답이 다음의 답을 정한다. 수열을 만들때 1 또는 00 만 선택할 수 있다. N = 1 , N = 2 일 만들수 있는 수열은 각각 1 그리고 11,00 이다. 이제 3일때 부터가 중요하다. 길이가 3인 수열을 만들기 위해서는 길이가 2인 수열에 1을 추가를 하던지, 길이가 1인 수열에 00을 추가하던지, 11을 추가해야한다. 그런데 잘 생각을 해보면 길이가 1인 수열의 원소의 뒤에 11을 붙이면 경우는 길이가 2인 수열에서 1을 붙인것 과 겹친다. 길이가 N인 수열은 길이가 N-2인 수열의 개수 + 길이가 N-1인 수열의 개수 와 같다. WHY ? N-1 수열에는 N-2 에서 1을 추가해 만든 수열이 포함되어 있음을 기억하자. 따라서 N-2 수열에서는 무조건..
[BOJ] 14889 스타트와 링크 - Back Tracking
[BOJ] 14889 스타트와 링크 - Back Tracking
2021.12.02인원을 구성하는 문제 역시 Back Tracking 을 이용한 완전탐색 문제의 대표적인 예이다. 문제를 보면 같은 인원수를 원하고 있다. 10 명 중 5명을 골라서 팀을 이루면 나머지는 자동적 으로 정해지는 것이 아닌가? 따라서 재귀호출의 Depth는 선수의 수를 2로 나눈 값이 된다. 이제 재귀 함수를 만드려고 한다. 헌데 한가지 고민이 생긴다. A B 로 팀을 만들면 함수는 리턴한다. 상대팀은 자동적으로 C D 가 된다. C D 로 팀을 만들면 함수는 리턴한다. 상대팀은 자동적으로 A B 가 된다. 팀 이름만 달라지고 결국 같은 답을 두번 구하게 되는것이다. 그래서 한번 Depth의 끝에 도달하면 두개의 팀 모두의 능력치를 저장한다. A B 팀일때 C D 가 한팀이 된다. 이때 A B 를 가진 팀의 ..
[BOJ] 1003 피보나치 함수 - 동적 계획법
[BOJ] 1003 피보나치 함수 - 동적 계획법
2021.12.01동적계획법을 사용한다는 것은 이전의 연산결과를 통해 다음의 연산결과를 구해내겠다는 것이다. 위의 피보나치 함수의 예는 아주 간단하고도 대표적인 예이다. 위 함수를 F(N) 이라고 부른다고 하자. F(N) 은 F(N-1) 과 F(N-2) 를 호출한다. 그렇다면 F(N-1) 은 F(N-2)와 F(N-3)을 , F(N-2)는 F(N-3)과 F(N-4)를 호출 한다. 위의 조건을 보면 F(1)일때는 1을 출력한다. F(0)일때는 0을 출력한다. 그러면 F(2)는 ?? 1과 0을 1개씩 출력하는 것 이다. 조금만 더 계산해보면 F(3)은 F(2)의 결과 (1 과 0 각각 1개씩) 을 출력하되 F(1)의 것 (1만 1개)을 출력한다. F(4) 의 경우는 ? F(3)의 결과값에 , F(2) 결과값이 합쳐진 것이 결과..