
노드는 네트워크 장치 링크는 무선 또는 유선으로 연결된 상태를 의미한다.

네트워크에 트래픽(데이터)이 전달되면 이는 디지털 신호이기 때문에 0 또는 1즉 bit 데이터로 전달된다.
이때 처리량(throughtput)은 1초에 수신되는 bit의 수(bps)를 의미하고,
이 처리량을 단위 시간 당 max값으로 설정한 것을 대역폭이라고 한다. 따라서 대역폭과 처리량의 단위가 동일하다!
토폴로지는 노드와 링크가 어떻게 배치되어 있는 지를 의미한다.
종류는 Tree, 회선에 여러개의 노드가 연결된 Bus, 노드끼리 1대다 관계의 스타, 노드끼리 1-1-1 관계의 링, 노드끼리 다대다 관계를 가지는 메시 구조가 있다.
Bus 방식에서는 중앙 통신 회선하나에 여러개가 연결되어, 해당 노선을 따라 순차적으로 데이터가 전달된다. 따라서 중앙 통신 회선에 접속만 하면, 데이터를 송신부에서 수신부로 가기전에 가로 챌 수 있는 단점이 잇는데 이를 스푸핑 이라고한다.
가장 많이 쓰이는 Ping은 원하는 노드를 대상을 패킷을 보내 수신 상태 및 도달시간을 확인할 수 있는 명령어이다. ICMP 프로토콜을 기반으로 통신한다.

질문 1 : NAT(외부에서는 포트번호로 접근) 즉 라우터를 사용하게 되면 traceroute방식에서 해당 목적지를 어떻게 찾아갈까
DNS(인터넷 상의 전화번호부)를 확인하는 명령어
DNS 즉 외부에서 확인할 수 있는 도메인 정보가 아니라, 외부에는 공개 되지 않는 도메인 주소를 형성하여 만드는 내부 네트워크 도메인이다.
보통은 bind라는 프로그램을 메인 서버에 설치!, 원하는 도메인과 내부 ip를 연결하여, 파일로 저장해서, 도메인 이 형성되는 방식
즉 어떤 도메인이 입력되면, 외부 DNS 확인하기전에, 내부 DNS를 확인해서 있다면 해당 ip랑 연결 해주고, 없다면 외부 ip를 탐색!
질문 2 : 내가 만든 서버의 DNS가 A.com->B.com으로 바뀌었다. 다른 PC에서 내 서버ip로 DNS 테이블을 조회하면 A로 보일까 B로 보일까? 또 내 컴퓨터에서 nslookup을 하면 어떻게 보일까?
TCP와 UDP는 데이터 전송을 위한 프로토콜이다. TCP는 각 패킷을 순서대로 전달하고, 연결을 매 순간 확인하며 전달하는 방식이다. 즉 출발지에서 목적지까지 1차차로 연결이 성공하는 경로를 확인하고 그 경로로만 패킷을 전달한다. 그에 반해 UDP는 수신 여부를 확인하지 않고 데이터만 전달한다. 심지어 경로도 자유분방하다.
[3handshake]
TCP의 통신 노드는 ISN이라는 32-bit 시퀀스 번호(노드의 주민번호?)를 송신자가 보내고, 수신자가 받아서 자신의 ISN과 승인 응답으로 송신자의 ISN+1을 보낸 후, 다시 송신자가 받아서 승인 응답으로수신자의 ISN+1을 보내서 양방향으로 체크한 경우 통신을 시작한다.
이때 자신의 시퀀스 번호를 보는 과정을 SYN 승인 응답을 보내는 과정을 ACK라고 한다.
[data]
이후 인증된 TCP 통신 경로로 각 데이터를 교환하고
[4handshake]
통신을 종료하기 위해 FIN(종료 코드)을 송신자 측에서 전달하고 (1차 종료 상태), 수신자 측은 승인 응답인 ACK를 보낸다. 이 경우 ACK를 받은 송신자 측은 무응답 (2차 종료 상태)
이후 수신자 측은 응답이 없는 것을 확인하고 응답이 아닌 FIN을 처음으로 보낸다 (수신자 측의 마지막 통신). 이후 이를 받은 송신자는 2차 종료 상태에서 대기 상태로 전환되고, 승인 응답 전송한다. 이는 수신자가 받는 최종적으로 양뱡향으로 확인한 종료이기 때문에 수신자는 최종 CLOSED되고, 응답을 받을 수 없는 송신자는 대기하다가 time out되어서 CLOSED된다.

송신자는 데이터를 보냄과 동시에 이전에 통신한 기록을 기반으로 timeout을 설정한다. timeout이내로 데이터+ACK를 받지 못하면 해당 패킷을 재전송한다.

질문 3? timeout을 송신자 쪽에서 스스로 계산한다면 똑같은 데이터를 중복으로 보낼 수 있지 않나? TCP는 연결성을 보장하고 중복 데이터는 없다 그랬는데?
광섬유 등을 이용하여 물리적을 데이터를 보내는 계층 + 이더넷 계층인데 주로 맥주소를 교환한다.
결국 최종적으로 통신을 할때에는 여러 계층을 통과해야하고, 결국 각 과정에서 필요한 프로토콜들이 모두 전달되어야한다. 즉 PDU(계층에서 계층으로 전달되는 데이터)는 반드시 이전 단계의 프로토콜을 가진다.

캡슐화 즉 애플리케이션 계층에서 데이터는 전송 계층으로 넘어가면서 TCP나 UDP 프로토콜이 추가되고 (L4), 다시 인터넷 계층으로 전달되면서 IP 프로토콜 등이 추가(L3), 이후에 링크 계층으로 넘어가면서 MAC 주소 등이 추가 되서, 물리적으로 이동 된다
이후에 다시 위 과정의 역과정인 비캡슐화 과정을 통해 애플리케이션 계층의 데이터만 뽑아서 전달 된다.
VPN은 외부 접근 불가 + 연결되어야만 확인할 수 있는 일종의 보안통로로 통신하는 방식이다.
VPN도 결국 계층간 통신 과정을 거칠텐데, 왜 중간 노드에서 확인할 수 없는 보안통로를 만들 수 있는 것일까? 똑같이 비캡슐화 과정을 하면 보이는게 아닌가?
VPN에는 여러 방법이 있지만, 계층 간 통신과 연결을 하려면 IP 프로토콜 즉 L3단계에서의 로직을 봐야한다. VPN은 받은 캡슐화된 데이터(L3니까 IP+TCP+데이터)를 암호화한다. = 이전에 키교환 과정 필요
암호화한 캡슐화 데이터를 다시 L3까지의 프로토콜을 다시 붙인다.(IP+TCP+암호화:[IP+TCP+데이터]) 즉, 2중 캡슐화를 통해, 프로토콜을 통해 정상적인 통신 과정을 진행할 수 있게 하고(암호화하면 패킷의 프로토콜이 인식이 안됨), 중간에서 열어봤자 암호화 되서 볼 수 없게 하는 것이 VPN!