# 통신

프로토콜에 대한 설명에 들어가기에 앞서, 통신은 먼저 소식을 특정한 매체를 이용하여 정보 및 의사를 전달하는 것이다. 사람의 대화만 하더라도 그렇다. 한국에서는 한국말, 영어권을 쓰는 나라에서는 영어가 커뮤니케이션이 되듯이, 우리의 일상생활에서도 상호간의 의사를 전달하기 위해 소통되는 기준을 들어서 사용한다. 최초에는 의사 전달의 수단으로 손짓 발짓 또는 그림 및 문자를 통해 자기의사를 전달했다면, 이후 후대로 갈수록 장소를 달리하는 곳에서의 다수 사람들에게 내 의사를 전달하기 위해서는 특정 수단을 이용하여 전달하고자 했다. 수단을 통신이라고 하는데, 전달기능을 갖춘 서비스 행위의 한 부분이다. 예를 들자면 넓은 의미로는 방송이나 신문과같이 특정다수에게 전달하는 메세지 일수도 있고, 좁은의미로는 우편물과 전화와 같은 개별적 통신과도 같다. 원초적인 의미에서부터 시작되어 현대로 갈수록 모든 인간관계의 의사소통의 기본이자 핵심이 되어가고 있는 이 통신이란 부분을, 정보가 넘쳐나는 인터넷 환경에서도 적용이 되어진다. 즉 그것이 바로 인터넷환경에서의 수단이 되는 통신 프로토콜이다.


1. 통신 프로토콜

통신 장비 사이에서 주고 받는 메시지를 양식과 규칙을 줘서 체계를 갖춘 것이다. 뿐만 아니라 신호 체계, 인증, 그리고 오류 감지 및 수정 기능도 포함되며, 통신의 과정 등을 정의하기도 한다. 하지만 구현되는 상세 과정은 개별마다 독립적이다. 그래서 프로토콜은 H/W 및 S/W에서도 사용하며 구현된다


2. HTTP(Hyper Text Transfer Protocol)

WWW 상에서 주고 받는 프로토콜, 주로 웹 상에서 HTML 문서 및 페이지를 주고 받는데 쓰인다. TCP 및 UDP를 사용하며 80번 포트를 이용한다. 세션 방식으로는 클라이언트와 서버 사이에서 이루어지는 요청 및 응답으로 이루어지며, 클라이언트에서 웹으로 HTTP를 통해 서버로부요청을 하면 서버는 이 요청에 대한 응답으로 필요한 정보를 전달하게 된다. HTTP를 통해 전달되는 자료는 URL로 표시된다.


3. WWW((World Wide Web)

인터넷에 연결된 컴퓨터 또는 호스트를 통해 사람들이 정보공유를 할수 이는 가상의 공간이다. 간단히 웹이라 부르기도 하며, 비슷한 말로는 인터넷이라고도 하지만 전혀 다른개념이다. 웹은 인터넷 상의 다양한 서비스 종류 중 한 부분이며, 인터넷은 HTTP 및 하이퍼텍스트 등의 형식을 사용하며 텍스트 및 그림을 교환하는 방식이다.


4. HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)

웹 통신의 프로토콜 HTTP 방식의 보안 강화 버전이다. 인증과 암호화를 위해 쓰이며 저자 상거래에서 널리 쓰인다. 소켓 통신에서 일반 텍스트를 이용하며, SSL이나 TLS 프로토콜을 통해 세션을 암호화 및 강화한다. 그래서 데이터의 보안 및 보호를 보장하며 443 포트를 이용한다. 보호의 수준은 암호화 알고리즘을 통해 진행 된다.


5. 암호(cryptography, cryptology)

옛날부터 정보를 보호하기 위한 수단으로 언어학 및 수학적인 방법론적으로 접근해온 학문 방식이다. 수학을 기초로 하여 컴퓨터, 통신 등 여러 학문에서 연구 개발 되었고, 초기의 암호는 군사적 및 외교적 목적으로 사용되었지만, 현재는 데이터에 대한 보안 및 인증 서명 등 총괄적인 암호의 범주에서 접근하게 되었다. 예를 들어 은행거래 및 컴퓨터 및 장비의 패스워드, 전자 상거래 등 모두 현대적 의미로는 암호는 데이터의 안정성을 갖고가는데 필요 충분 조건이 되었다.


6. FTP(File Transfer Protocol)

TCP/IP 프로토콜을 이용해 서버와 클라이언트 사이의 파일 전송을 담당하는 프로토콜이다. OSI 7 계층은 응용계층에 속하며, 현재 인터넷 환경에서 자주 사용된다. 최초의 FTP 애플리케이션들은 커맨드 입력으로 하는 프로그램이었으며, 대부분 운영체제에서 기본으로 기능을 포함하도록 하였다. 이후, 많은 FTP 애플리케이션들이 생겨나 많은 유틸리티들이 각 장비에 맞게 개발되고 있으며, 요즘에는 웹 페이지 편집기와 같은 응용 프로그램들에 통합되고 있다.


7. SFTP(SSH File Transfer Protocol) 

컴퓨터 환경에서 SSH 파일 전송프로토콜 또는 보안 파일 전송 프로토콜로 이용되며, 데이터 스트림을 통해 접근 전송 관리를 제공한다. IETF가 보안 파일 전송 기능을 목적으로 SSH 버전의 2.0 버전을 확장 설계했다. 전송 계층 보안(TLS)를 통하는 프로그램이나 VPN 과 같은 전송에서 사용할 수 있다. 보안채널을 이용해 사용하며 즉, 서버와 클라이언트 간의 서로 인증이 되어 증명이 되면 사용할 수 있다고 한다.


8. Telnet

인터넷 또는 로컬에서 연결을 위해 쓰인다. 텔넷은 프로토콜의 클라이언트의 기능이 추가 되었으며, 대부분이 유닉스 및 리눅스 시스템에서 사용할 수 있으며, 실질상 모든 곳에서 사용가능하다. TCP/IP 통신을 이용하는 모든 환경에서 텔넷은 지원되었지만, 보안문제로 사용율이 감소되어 현재는 SSH로 대체되고 있다


9. POP(Post Office Protocol version 3)

응용계층의 프로토콜로, 원격으로부터 TCP/IP연결을 통해 이메일을 가져올떄 사용된다. 여러버전의 POP 프로토콜이 있지만 일반적으로 POP3를 지칭한다. 흔히 알려져 있는 G메일, 야후, 핫메일을 사용하며, 대다수의 이메일 프로그램은 서버에 남겨두지만 POP은 클라이언트에서 해당 메일을 가져오면 서버에서는 해당 메일을 삭제한다. 비슷한 프로토콜로 IMAP은 서버에 남김과 동시에 추가 기능이 더 많다


10. SMTP(Simple Mail Transfer Protocol)

간편 메일 전송 프로토콜은 인터넷 환경에서 이메일을 전송하기 위해 사용도니다. 포트는 25번을 이용하며, 메일 서버간의 송수신뿐 아니라 메일의 클라이언트와 서버간의 전송에도 사용된다. 텍스트 기반의 프로토콜로 메시지를 생성하는 방법을 정해놓지는 않았으며, 메시지 생성을 위해 단순한 전자 우편에 사용된다. SMTP를 이용해 메시지를 받고 TCP를 이용해 전송하는 방식을 사용한다.


11. ARP(Address Resolution Protocol)

네트워크 상에서 IP 주소를 MAC 주소로 받아오기 위해 사용하는 프로토콜이다. 여기서 MAC 주소는 이터넷 또는 네트워크 카드 주소를 말한다. 예를 들어 IP 호스트가 목적지 IP 호스트로 전송하기 위해서는 물리적인 네트워크 주소의 경로를 알고 있어야 전송이 가능한데, 이떄 물리적 주소를 가져오는 프로토콜이 ARP이다. 이와 같은 방식으로 수집된 IP 주소와 이에 해당하는 MAC 주소는 ARP 캐시라는 곳에 임시 저장이 되는데 다음 패킷을 전송을 할떄 다시 사용된다. IP 호스트의 정보를 가지고 MAC 주소를 가지고 오는 방식을 ARP 라고 한다면, 반대로 MAC 주소를 가지고 IP 호스트 정보를 가져올 때는 RARP 프로토콜을 이용한다


12. TCP(Transmission Control Protocol)

전송제어 프로토콜은 인터넷 프로토콜에 있어 중요한 프로토콜중 하나로써, IP와 함꼐 TCP/IP라고도 불린다. TCP는 통신이나 인트라넷, 인터넷환경이 가능한 컴퓨터 환경에서 실행되는 애플리캐이션 가의 일련의 정보를 에러 없이 전송할 수 있다. 전송 계층에 속하며, 통신하는 방식은 세션을 맺기 위한 3 way hand shaking 을 통해 연결 한 이후, 종료할 때는 4 way hand shaking 을 이용해 세션 연결을 끊는다. TCP의 특징은 에러없이 데이터를 주고 받는부분이 있으며, 도중에 세션연결이 끊어지면 전송하는 데이터의 정보를 받아볼 수 없다. 안정성을 필요로 하는 애플리케이션 환경에서 주로 쓰인다


13. UDP(User Datagram Protocol)

사용자 데이터 그램 프로토콜은 TCP와 마찬가지로 인터넷 프로토콜에 있어 중요한 프로토콜 중 하나이다. TCP와 함께 데이터 교환을 위해 사용하는 프로토콜로써, 전송방식은 TCP와는 다르게 단순해 별도의 세션연결이 없이 진행된다. 그래서 신뢰성이 낮아 데이터의 순서 및 중복현상을 잡아주는 오류제어 방식은 지원되지 않아 안정성이 요구되지 않는 애플리케이션 환경에서 주로 쓰인다. 예를 들어 실시간 전송의 경우 UDP를 사용한다


14. TFTP(Trivial File Transfer Protocol)

FTP와 마찬가지로 파일 전송하기 위한 프로토콜이며, UDP 환경에서 동작한다. 그래서 데이터 전송 과정에서 손실 및 불안정하다는 부분을 가지고 가며, 구현이 간단하다. 주로 임베디드 시스템에서 많이 사용하며 대부분 잘 사용하지 않는다 


15. EAP(Extensible Authentication Protocol)

확장가능 인증 프로토콜은 무선네트워크와 Point to Point 연결에 자주 사용되는 인증 방식이다. 단지 메시지 포멧을 정의하기만 할뿐이며 프로토콜의 개별 메시지 내용들을 EAP 캡슐화하는 방법을 정의한다.


16. ISO(International Organization for Standardization)

국제 표준화 기구이며 각 나라의 표준 단체들의 대표로 이룬 표준화 기구이다. 국제적으로 통용되는 표준을 개발 하고 보급한다


17. IEEE(Institute of Electrical and Electronics Engineers)

전기 전자 기술자 협회는 각 전문가들의 국제 조직이다. 현재 미국 뉴옥에 위치하고 있으며 대략 35만명의 회원을 거느리고 있어 전기 전자공학에 대한 최대 기술 조직이다. 


18. 물리계층(physical layer)

OSI 7 계층 중 가장 낮은 첫번쨰 계층이다. 한 네트워크에서 회선을 이용해 네트워크 간의 하드웨어 전송기술로 구성이 되며, 가장 기본이 되는 계층이다


19. 데이터 링크 계층(data link layer)

OSI 7 계층에서 물리 계층을 이용한 네트워크 장치들의 전송 상태를 관장한다. 데이터 링크 계층에 역할은 크게 두가지가 있으며, 물리계층으로부터 받은 신호들이 네트워크 상의 장치의 주소를 찾을 수 있도록 하는 부분과 네트워크 카드를 통해 신호가 전달 될 때 오류가 포함되는지 감지하는 역할을 한다. 만약 오류가 감지 될 경우 해당 데이터는 버린다


20. 네트워크 계층(network layer)

OSI 7 계층에서 가운데 계층이다. 중간 라우터를 통해 패킷 전송을 담당한다. 라우팅 역할을 하는데, 라우팅은 구성된 네트워크 상에서 데이터를 보낼 경로를 선택하는 과정이다. 보통 여러종류의 네트워크에서 사용되며 여러가지 망이 있으며 그곳에서 해당 패킷을 어디로 어떻게 전송할지에 대해 결정한다. 보통의 패킷이 전달 될 떄는 중간 노드 들을 거쳐 출발지에서 목적지 까지의 논리적인 주소를 가진 상태로 전달을 수행한다. 보통 라우팅 과정에서는 라우팅 테이블에 기록을 하며, 수행되고 그 기록은 라우터의 메모리에 기록이 된다. 그래서 다양한 경로를 찾을때 매번 새로운 경로를 찾는게 아니라 메모리에 기록된 경로를 기억해 전송을 하기도 한다. 좀 더 깊게 내려가 라우팅은 네트워크 주소의 구성이 비슷할 경우 장비에 대한 경로를 표시하는것을 가능하게 하고, 넓은 의미로는 인터넷 상에서 가장 지배적인 주소 형식이라고 보면 된다


21. 전송 계층(Transport layer)

전송 계층은 네트워크 구성과 프로토콜들 사이의 송 수 신자 간의 연결을 담당하는 계층이다. 전송하는 방식으로는 TCP를 사용할지 UDP를 사용할지를 프로토콜의 종류에 따라 결정하며, 일반적으로 TCP모델을 통해 전송하거나 UDP를 통해 전송한다


22. 세션 계층(Session layer) 

세션계층은 OSI 프로토콜 계층 중 5번쨰 계층이다. 만약 통신하기 위한 세션 연결이 끊어질 경우 복구를 위한 시도를 하게 된다. 그리고 오랫동안 연결이 끊어진 상태가 지속될 경우, 일시적으로 연결을 끊고 새로운 세션을 맺을 수 있도록 연결을 시도한다. 전이중 반이중 명령 중 하나를 사용하며, 동기화 지점을 제공한다


23. 표현 계층(Presentation layer)

표현계층은 OSI 프로토콜 계층 중 6번쨰 계층이다. 네트워크에 흐르는 데이터에 대해 기계가 가지는 언어에 대하 번역 기능을 한다고 생각하면 된다. 즉 데이터 변환을 하는 계층이다.


24. 응용 계층(Application layer)

응용 계층은 각 호스트 또는 프로그램들 간의 통신접속을 위해 통신프로토콜을 사용하기 위한 추상적인 개념을 가진 계층이다. 응용 계층의 기반이 되는 전송 계층의 프로토콜인 TCP또는 UDP를 이용하여 호스트간의 연결을 결정하며, 응용 계층은 최종 계층이라 생각하면 된다


25. 인터넷 프로토콜 계층 구조와 OSI 7 계층 비교

인터넷 프로토콜 계층은 크게 네가지로 나뉜다. 응용-전송-인터넷-네트워크로 구성이되며 OSI 계층은 크게 봣을떄는 인터넷 계층과 연관은 잇지만 완전히 맞지는 않다. 큰차이는 계층의 차이 수 이며, OSI 7계층을 사용하기 위한 올바른 예는 SSL이나 TLS 프로토콜이 가미가 될때이다. 보통 SSL이나 TLS는 TCP 계층의 상위에 자리잡으며, 애플리케이션 계층의 바로 하단부에 위치하기 떄문이다.


▶ Router

 

- 라우터는 들어오는 패킷들의 목적지ip를 보고 어디로 보낼지 결정 하여(적절한 포트) 전송한다.

 

- 라우터는 왼쪽 PC에서 들어오는 패킷의 ip header를 열어 목적지 ip를 확인 한 후 ip에 해당하는 포트로 전송하고 해당 포트에서 오른쪽 PC로 패킷을 전송한다. 이때, 목적지 ip에 해당하는 포트를 mapping 시켜 놓은 것을 Routing Table(라우팅 테이블)이라고 한다.

 

- 좀 더 정확히 살펴보면 두 대의 PC는 Network가 다르다. 따라서 전송하려고 하는 PC에서는 자신의 Default Gateway의 MAC address를 알아내기 위해 ARP를 이용하여 MAC address를 알아낸다. 그 후, 패킷을 전송하는데 이 때, MAC은 ARP로 알아낸 Default Gateway의 MAC address를 입력하고 목적지 ip는 전송받는 PC의 ip를 입력한다. 그럼 패킷은 라우터로 전송이 되고 라우터에서는 전송 받은 패킷의 ip header를 보고 목적지 ip를 확인 한 후, 해당 포트로 전송을 하고 해당 포트에서 ARP를 이용하여 목적지 ip에 대한 MAC address를 알아 낸 후 패킷을 전송 하게 된다.

 

 

▶ Routing

 

- Routing 이란 라우터 목적지 ip에 해당하는 포트를 mapping 시키는 것을 말한다. mapping된 table을 Routing Table이라고 말한다.

 

※ Routing Table을 만드는 방법에는 2가지 방법이 있다.

 

① Static Routing : Static Routing은 정적인 방법으로 사용자가 명령어로 목적지 ip에 대한 포트를 mapping 시켜 Table을 만드는 것을 말한다.

 

② Dynamic Routing

 

: Dynamic Routing은 Static Routing과 달리 주변 라우터들에게 자신의 Routing Table의 정보를 전송하고 그 정보에 따라 Routing Table을 만드는 것을 Dynamic Routing이라고 말한다.

 

※ Interior and Exterior Routing

 

- Interior Routing은 Network Group 내부에서 동작하는 Routing을 말한다.

 

- Exterior Routing은 Network Group 외부에서 동작하는 Routing을 말한다.

→ 내부에서 동작하는 IGP는 자신의 Routing Table의 정보를 자세히 전송하는 방면 외부에서 동작하는 EGP는 자신의 Routing Table의 정보를 요약하여 전송한다. 그 이유는 내부에서 동작하는 IGP는 해당 Network정보를 전송하면 되는 방면, 외부에서 동작하는 EGP는 Network Group 정보를 전송하기 때문이다. AS는 Network Group의 번호로 겹치지 않는 번호이며 할당받아야하는 번호이다.

 

▶ Routing Protocols

 

- Routing Protocol은 앞서 말한 내부에서 동작하는 IGP의 종류는 많은 반면 외부에서 동작하는 EGP의 종류는 하나 인 것을 알 수 있다.

 

- 여기서 국제 표준이 된 Protocol은 RIP(소규모 네트워크에 사용), OSPF, IS-IS, BGP 이며, IGRP와 EIGRP는 Cisco가 만든 Protocol이다.

 

▶ RIP

 

 

- 1번은 각 Router가 가지고 있는 Routing Table이 초기화가 되어 각 Router에 속해있는 Network에 대한 정보만 Routing Table로 가지고 있는 상황이다.

 

- 2번은 Router들이 자신에게 인접한 다른 Router에게 자신의 Routing Table정보를 전송한다. 수신한 Router는 전송받은 Routing Table정보를 자신의 Routing Table과 비교를 하여 좀 더 나은 정보로 갱신을 하거나 없는 정보는 추가를 한다.

 

- 3번은 전송받은 Routing Table과 자신의 Routing Table의 비교를 나타낸 것인데 Network와 해당 Network에 대한 Hop을 비교하여 자신의 Routing Table을 갱신한다.

 

- 4번은 최종적으로 만들어진 Routing Table이다. 1번, 2번, 3번 과정을 시간이 흐를수록 되풀이 하여 모든 Router들은 모든 Network에 대한 Routing정보를 가지게 될 것이다.

 

→ 1번과 같이 정보를 전송할 때 사용하는 패킷을 RIP Packet이라고 말하며 정보를 전송하는 주기는 약 25~35초의 시간을 가진다.

 

※ RIP의 Routing Problem

 

 

- 위 그림은 Router와 연결된 Network가 Down되었다가 정상작동 할 대 제대로 작동하는 그림을 나타 낸 것이다.  Down이 되어있던 Network에 대한 정보를 각 Router는 연결을 할 수 없다는 것을 Routing Table에 저장하고 있는데 Down된 Network가 정상 작동 하여 해당 Network가 연결되어 있는 Router가 감지하면 Routing Table을 갱신하게 되고 갱신 된 Routing Table의 정보를 인접한 Router에게 알려 주며 모든 Router들이 가지고 있는 Routing Table이 갱신된다.

 

 

- 위 그림은 연결되어 있던 Network가 갑자기 Down되었을 때 정상적으로 작동 안하는 그림을 나타낸 것이다. Network가 갑자기 Down이 되면 해당 Network가 연결되어 잇는 Router는 이를 감지하고 자신의 Routing Table을 갱신한다. 이때 갱신을 하고 자신의 Routing Table에 대한 정보를 전송하기 전에 인접한 Router에게서 Routing Table정보를 받을 경우 Down이 된 Network에 대한 정보가 속해 있어 비교를 하여 받은 정보로 Routing Table을 갱신한다. 그 후 Network가 연결되어 있는 Router가 인접 Router에게 Routing Table 정보를 전송하면 인접 Router는 Network가 문제가 발생하여 hop이 늘었다고 착각을 하고 자신의 Routing Table을 갱신한다. 이같이 Network가 속한 Router와 그 인접 Router간에 Down된 Network에 대하여 착각을 하고 Routing Table갱신이 오류가 발생한다. 만약 어떤 Network에서 Down된 Network로 패킷을 전송하면 오류가 발생한 Router간에서 패킷이 왔다 갔다 하게 된다.

 

- RIP에서는 Network에 오류가 발생하여 전송할 수 없다는 것을 나타내기 위해 Hop을 무한대로 나타낸다.

 

※ 위 오류를 정정하기 위한 방법

① Triggered update 방법

 

- Network가 Down이 되면 Routing Table을 전송하는 시간만큼 기다리지 않고 그 즉시 Down되었다고 인접 라우터들에게 알려주는 방법이다.

 

② Split Horizon 방식

 

- Split Horizon 방식은 인접 Router에게 Routing Table을 전송할 때 인접 Router가 모를 것 같은 정보만 전송하는 방식이다. 이렇게 하기 위해서 각 Router는 Routing Table을 전송하기 전 어떠한 정보를 전송할지 판별 하여야 한다.

 

③ Poison Reverse 방법

 

- Split Horizon과 반대로 모든 정보를 전송 하지만 인접한 Router가 모를 것 같은 정보는 정상적으로 보내고 그렇지 않은 정보는 Hop을 으로 하여 전송한다.(Message는 커지지만 각 Router들이 어떠한 정보를 가지고 있는지는 알 수 있다.)

 

④ Route Poisoning 방법

 

- 일반적인 RIP방식처럼 동작을 하지만, 오류가 난 Network에 대하여 새로운 Routing Table을 갱신한 후 인접한 Router에게 알리기 전에 수신된 Routing Table에 대한 정보로 다시 Routing Table을 갱신하지 않고 Routing Table을 전송할 때 까지 기다린다.

 

⑤ Hold-down timer 방법

- 오류가 난 Network에 대하여 새로운 Routing Table을 갱신한 후 Timer를 구동한다. 인접한 Router에게서 Routing Table에 대한 정보가 오면 그 Routing Table을 보고 오류가 난 Network에 접속하기 위한 Hop이 갱신 전의 Hop보다 작으면 받은 Routing Table로 갱신을 하지만 Hop이 같거나 크면 갱신하지 않는다.

 

 

- 위 그림과 같이 1번 Router에 저장되어 있는 Routing Table에는 N2 Network에 대해서 접속하기 위해선 2번 Router로 보내야 한다고 저장되어 있어 1번 Router는 2번 라우터에게 패킷을 전송하였지만 1번과 2번 사이의 전송속도는 1Mbps밖에 되지 않아 사실상 느리게 전송이 된다. 하지만 3번을 통하여 2번에게 전송이 된 후 N2 Network에 접속하면 100Mbps로 전송속도가 빠르다. 따라서 사실상 바로 2번을 통해 접속하는 것이 아니라 3번을 통해 2번에게 접속을 하여야 더욱 빨리 접속을 할수 있다. 이렇게 Hop만 보고 Routing Table을 새울 때 발생하는 문제점 이다.

 

1. HTTP의 동작 분석 실습(1)

⦁ configuration 파일(.conf)을 수정하여 web server의 설정을 변경

 KeepAliveTimeout 30 // persistent connection을 30초간 유지

 

- client가 web server에게 연결을 요청 한 후 30초가 흘러 TCP연결이 종료가 되고 난 뒤 새로운 연결을 요청하였을 때 수집되는 패킷이 있다.

- 먼저 client가 web server에 연결을 요청 하면 TCP연결 과정을 통해 TCP가 연결이 되고 web server에 대한 요청을 한다. 그럼 server는 해당 request에 대한 response를 client에게 해줌 으로써 web server에 연결이 되고 web browser에 화면을 띄울수 있다. 그 후 아무 동작을 하지 않고 KeepAliveTime인 30초 후에 TCP연결 해제 과정을 통해 TCP의 연결이 종료가 된다. 그 후 새롭게 연결을 요청을 하면 web server의 설정이 변경이 되지 않아 변경이 된게 없기 때문에 Not Modified가 server에서 온 것을 알 수 있다.

 

2. HTTP의 동작 분석 실습 (2)

 

⦁ configuration 파일의 ExpiresActive와 ExpiresDefault를 다음과 같도록 함

ExpiresActive On, ExpiresDefault “access plus 0 seconds”

 

- web server에 대한 만료 기간을 0초로 해놓았을 때 수집되는 패킷들이다. client가 web server에게 접속요청을 하면 TCP연결부터 data받아오는 것 까지 처음 접속하는 것처럼 패킷이 수집이 된다. 이 상태에서 KeepAliveTime에 끝나서 TCP연결이 끝난 후 새로고침을 하면 4번 패킷 수집 그림처럼 Not Modified가 올 것이다. 하지만 web browser를 종료 하고 난 후 다시 web server에게 접속을 하면 위와 같이 패킷이 수집이 될 것이다. 이 이유는 web server의 말료 시간을 0초로 해놓았기 때문이다.

 

4. 연습문제 풀이

 

[1] HTTP는   _____  위주의 프로토콜이다.

 

a) 문자      b) 비트

 

→ HTTP는 Hyper Text Transfer Protocol의 약자로 문자위주의 프로토콜이다.

 

[2] HTTP의 헤더와 본문을 구분하는 것은 _____이다.

 

a) EOL                 b) blank line     c) 헤더 길이 정보       d) 패킷 전체  

 

→ blank line은 CR(=0D)과 LF(=0A)로 구성되어 있는데 라인을 CR은 한 줄 밑으로 내려가라는 명령어이며 LF는 그 줄 맨 앞으로 가라는 명령어이다. CR과 LF는 line의 끝에 항상 존재한다.

 

[3] HTTP의 응답 메시지의 시작은     _______  이다

 

a) Method              b) HTTP-Version       c) Status-Code         d) 요청 URI   

 

→ HTTP의 응답 메시지의 시작은 HTTP-Version으로 시작한다.

 

[4] HTTP의 요청 메시지의 시작은       이다.

 

a) Method              b) HTTP-Version        c) Status-Code         d) 요청 URI   

 

→ HTTP의 요청 메시지의 시작은 Method로 시작한다.

 

[5] 사용자가 특정 URL에 파일을 생성할 때 사용하는 HTTP 메소드는  _____ 이다.

a) GET                 b) POST             c) PUT                 d) DELETE

 

→ 사용자가 특정 URL에 파일을 생성할 때 사용하는 HTTP 메소드는 PUT 이다, GET은 자원을 받고자 할 때 사용하며, POST는 web browser의 요청 메시지 안의 데이터를 server에게 송신 할 때 사용 되고, DELETE는 browser가 server의 특정 폴더에 있는 파일을 삭제할 때 사용된다.

 

[6] HTTP에서 프록시나 캐시서버를 경유하였음을 표시하는 것은      이다.

a) GET                 b) Via             c) Cache-Control       d) Pragma

  HTTP에서 프록시나 캐시서버를 경유하였음을 표시하는 것은 Via이다.

 

[7] 웹 서버의 기능을 대행하는 기능을 수행하는 웹 장비가 아닌 것은?

a) 프록시 서버          b) 캐시 서버       c) 라우터               d) 프록시 캐시서버

 

→ 웹 서버의 기능을 대행하는 기능을 수행하는 웹 장비가 아닌 것은 라우터 이다. 라우터는 네트워크의 중계역활을 한다.

 

[8] HTTP 연결이 지속되도록 요청하는 구문은       이다.

 

a) Connection : Close        b) Connection : Keep-Alive 

c) Expires                   d) Retry-After

 

→ HTTP 연결이 지속되도록 요청하는 구문은 Connection : Keep-Alive이다. Keepalive는 TCP연결이 지속되는 시간을 말하며 이것은 곧 HTTP 연결이 지속되는 시간을 말한다.

 

[9] 캐시 서버가 저장한 페이지의 유효 보관기간은       에서       를 뺀 시간이다.

 

a) Expires            b) Date       c) max-age           d) IF-Modified-Since

 

→ 캐시 서버의 유효기간은 web server의 만료기간에서 Data를 뺀 시간으로 캐시서버의 memory의 여유가 없을 경우 만료기간이 짧은 것부터 삭제를 하며 memory의 여유가 있을 경우 만료기간이 짧은 것 또는 만료기간이 끝난 web server의 data도 저장하고 있는다.

 

[10] 캐시된 내용에 대하여 요청하는 HTTP 메시지에는       이 포함된다.

 

a) From               b) If-Modified-Since         c) Referer             d) Date

 

→ client가 캐시서버에게 저장되어 있는 web server에게 접속을 요청 시 캐시 서버가 가지고 있는 web server에 대한 정보가 현재 web server의 정보와 같은지 다른지 확인을 한 후 변경 되었으면 변경된 web server의 data를 받아와야하기 때문에 modified message를 포함시킨다.

▶ Web Server와 HTTP

HyperText, Hypermedia, Hyperlink

 

- Hypermedia는 Hypertext와 music, picture 등등을 합쳐 놓은 것을 보고 Hypermedia라고 한다. 또, Hypertext는 보여지고 있는 아스키가 아닌 그 안에 여러 데이터가 내포된 것을 Hypertext라고 하며, Hyperlink는 Hypertext를 클릭하였을 때 데이터가 있는 위치로 이동 할 수 있도록 해주는 포인터이다.

 

URL

- 위 그림은 URL의 구조를 보여주고 있다. URL이란 Uniform Resource Locator의 약자로 위의 그림과 같이 Protocol와 위치(Web server의 Ip 또는 Domain Name 과 port number)가 들어가며 마지막으로 페이지의 이름이 들어간다.

 

Web Browser Server 동작

 

- Web Browser Server의 동작과정은 Client가 웹 서버에게 접속하기 위해서는 DNS로 Domain Name에 해당하는 Ip주소를 얻어 온다. 그 후, 웹 서버와 TCP연결을 한 후 HTTP를 이용하여 웹 서버와 연결을 한다.

 

HTML

- HTML은 Hyper Text Markup Language의 약자로 웹 서버의 각 페이지가 각각의 HTML을 가지고 있는데 클라이언트는 HTML의 한줄 씩 web server에게 요청을 하여 data를 받아온다.

 

- HTTP 동작

① Persistent case

 

- Persistent 동작 방식은 client가 web server로 접속을 하기 위해 TCP연결을 한 후 client가 web server에게 접속을 요청 하면 web server는 client에게 접속하려는 페이지에 해당하는 html을 전송해준다. 그럼 client는 web server가 전송한 html의 값들을 보고 web server에 접속을 할 수 있는데 이 때, html에 아스키 코드로 된 라인과 data(그림, 음성 등)로 되어 있는 라인이 있으면 아스키 코드로 된 라인은 그냥 web browser에 보이지만 data로 된 라인은 client가 web server에게 해당 data를 요청해서 TCP를 통하여 데이터를 받아 온 후 web browser에 보이게 할 수 있다.

 

- Persistent 동작은 client가 web server에게 접속하기 위해 3 hand shaking(TCP연결)을 하고 난 뒤에 client가 web server에게 페이지에 관한 data들을 주고 받은 후 Keepalive타임 안에 새로고침을 누르면 client는 web server에게 web page가 변했는 가를 물어본다.(이 때. 기준이 되는 시간도 함께 전송) web page가 변하지 않았다면 Not Modified 라고 알려주고 변한게 있다면 새롭게 변한 data들을 함께 전송해 준다. 또, Keepalive타임 동안 패킷 전송이 있지 않으면 4 hand shaking 또는 Reset Message를 전송하여 TCP연결을 종료하게 된다. 연결이 종료 된 후 새로고침을 누르면 다시 TCP연결을 하고 web page가 변한게 있으면 새로운 data를 주고 변한게 없으면 Not Modified라고 다시 알려 준다.

 

② Non-Persistent

 

- Non-Persistent방식은 하나의 요청이 올 때 TCP연결을 하고 하나의 답변을 하면 TCP연결이 종료가 된다. 위 그림에 대해서 설명해보면 client가 web server에게 접속을 요청하면 TCP연결이 되고 web server는 web page에 해당하는 html을 전송해 준다. 그 후 접속이 종료가 된다. 그 후 client는 수신 한 html을 보고 받아와야 할 data가 있으면 web server와 다시 TCP연결을 하고 그 뒤에 data에 대해 요청을 한다. 그럼 web server는 client에게 데이터를 전송 해주고 연결을 종료 한다.

 

 Proxy Server

 

- Proxy란 남이 해야 할 일을 대신 하는 것이라는 뜻을 내포하고 있다. 여기서 web proxy server는 web server가 하는 일을 대신 하는 server이다. client는 web server로 접속 하려고 한다. 하지만 client는 web proxy server와 TCP연결을 한 후 web server의 정보를 web proy server에게 요청을 한다. 그럼 web proxy server는 web server와 TCP 연결을 하고 client에게 받은 요청을 web server에게 요청을 한다. 이 때, web proxy server는 자신이 거쳐서 전달 했다는 것을 web server에게 via명령어를 통해 알려준다. 그럼 web server는 web proxy server에게 response하고 연결을 종료 하고 web proxy server는 web server에게 받은 response를 client에게 전달을 한다. 전달을 web proxy server에서 전달했다는 것을 via명령어를 통해 알려주고 TCP연결을 종료 한다.

 

→ web proxy server를 사용하는 이유는 web server에게 오는 request를 분산시키기 위해 사용한다. 또 보안이 우수하다. 외부에서 패킷을 캡쳐해보면 client의 ip는 보이지 않고 web proxy server의 ip만 보이게 된다. 또, web proxy serveer는 특정 web에 연결을 시도하려고 하는 client의 요청을 막을 수도 있다. 만약 client가 특정 web에 연결을 시도하려고 하였는데 요청이 막혀 접속이 안되서 web proxy server를 거치지 않고 web에 접속하려고 하면 TCP연결에서 막혀버린다.(방화벽 때문에 client에 해당하는 ip에서 TCP연결을 할 때 SYN이 올 경우 연결을 해주지 않음) 이렇게 보안과 request의 분산이 있어 web proxy server를 사용한다.

 

Cache Server

- 위 그림은 chche server의 동작과정 중 한 가지를 나타낸 그림이다. cache server도 proxy server와 마찬가지로 client가 web server에게 연결을 요청하려고 할 때 우선 cache server와 TCP연결을 하고 web server에 접속요청을 하면 cache server는 web server와 TCP연결을 하고 web server에 요청을 한다 이 때에도 via를 통해 자신이 전달하는 것을 알린다. 그럼 web server는 response해주고 TCP연결을 끊는다. 그 후 cache server는 response를 client에게 전달을 한다. 이때에도 via를 통해 자신이 전달하는 것을 알린다. 그 후 client와 TCP연결을 종료 한다. 여기 까지는 위에서 말했다시피 proxy server와 같은 동작을 보인다. 하지만 여기서 그치지 않고 cache server는 web server에 대한 정보를 자신이 가지고 있게 된다. 만약 client2에서 client1이 접속한 web server에 대해 연결 요청을 하면 cache server는 다시 web server에게 전달하는 것이 아니라 web server대신 cache server가 대신 request에 대한 response를 client2에게 한다. 여기서 중요 한 것이 있는데 web server가 바뀌었을 수도 있기 때문에 cache server는 web server가 바꼇는지 안바꼇는지 물어본 후 바 안 바뀌었을 때는 위에서 말했다 시피 자신이 가지고 있는 web server에 대한 정보를 알려주고 만약 바뀌었을 때는 처음 과 같이 request를 전달하여 response를 받아 response를 전달한다.

 

- 위에서 설명한 것을 위 그림을 보면 정확히 알 수 있다. 만약 web server의 만기 시간이 지나 만기 되었더라도 cache server의 memory가 부족하지 않다면 계속 web server에 대한 정보를 보관 할 수 있기 때문에 client2로부터 request가 오면 web server에 대해 바뀌었는지 안바뀌었는지만 확인 한 후 response를 한다.

 

 

1. Linux 컴퓨터에 web server 설치 와 index.html 파일 수정 및 web server에 접속 실습

 

⦁ yum intstall –y httpd

⦁ 방화벽 설정

⦁ index.html 파일 수정

(1) 터미널에서 yum install –y httpd 명령어를 통해 http server를 설치 한 후, 외부에서 접속 할 수 있도록 방화벽을 설정하고 난 뒤 vi /var/www/html/index.html 명령어를 통해 index.html 파일을 위와 같이 설정 한다.

 

web server의 설정이 완료 된 후 접속을 하였을 때 수집되는 패킷은 우선 client가 web server에게 접속을 하려고 요청을 하면 web server는 해당 web page의 html을 보낸다. 그 후 web browser에 뛰워지게 된다. 하지만 그림 파일이 내포되어 있기 때문에 그림을 뛰우기 위해 다시 web server에게 그림에 대한 data를 요청하면 TCP를 통해 data가 전송이 된다. 그럼 web browser에 web server가 설정한 html에 대한 정보가 web browser에 뛰워지게 된다. 5번째와 6번째 패킷은 favicon에 관한 패킷인데 favicon은 위의 그림에서 파란색으로 표시한 그림을 favicon이라고 한다. web server에서 favicon에 관한 설정을 하지 않아 client가 favicon에 대해 request를 하였지만 web server는 favicon에 관한 정보는 없다고 response한 것을 알 수 있다.

1. telnet 접속 시 옵션 협상 과정 패킷 분석

 

- 최초 telnet 접속을 하였을 때 발생 한 패킷으로 ip번호가 64인 단말에서 63인 단말로 전송한 패킷인 것을 알 수있다.

- will Negotiate About window size : window size에 대한 협상을 enable 하기 위한 message이다.

- will Terminal Speed : Terminal speed에 대한 option을 enable 하기 위한 message이다.

- will Terminal Type : Terminal Type에 대한 option을 enable 하기 위한 message이다.

- will New Environment Option : 새로운 환경에 대한 option을 enable 하기 위한 message이다.

- DO Echo : remote echo를 enable 하기 위한 message이다.

- will Supperess GO Ahead : Go Ahead없이 전송하는 option을 enable 하기 위한 message이다.

 - DO Terminal Type : will Terminal Type에 대한 응답으로 Terminal Type을 하라는 것을 알리는 message이다.

- DO Terminal Speed : will Terminal Speed에 대한 응답으로 Terminal Speed을 하라는 것을 알리는 message이다.

- DO X Display Location : X Display Location 하라는 명령 message이다.

- DO New Environment Option : 새로운 환경에 대한 option을 하라는 것을 알리는 message이다.

- won’t X Display Location : DO X Display Location에 대한 응답으로 X Display Location에 대한 option을 사용 하지 않을 것 이다 라는 것을 알리는 message이다.

 

2. telnet의 line mode 와 character mode 비교

 

- line mode : 라인 모드는 client에서 입력을 하고 난 뒤 enter를 입력하기 전까지 server에게 전송이 안 되고 enter를 입력하면 이때 까지 입력하였던 것들이 한번에 server에게 전송되는 방법이다.

 

- character mode : 문자 모드는 client가 enter를 입력하지 않아도 문자를 하나씩 입력 할 때마다 server에게 입력한 문자가 전송되고 그에 따른 ack가 발생하는 방법이다.

 

3. ftp server에 telnet 프로그램을 이용하여 21번 port로 접속 실습

 

telnet으로 ftp port로 접속을 할 때 수집되는 패킷들은 PuTTY를 사용하여 접속하거나 CMD명령어를 이용해서 접속을 할 때 발생한다. 위 패킷들을 보면 처음 접속을 하기 위해 SYN 패킷이 발생한다. 하지만 telnet server는 자신의 port번호가 아닌 것을 알고 RST(reset) message를 발생 시킨다.

 

4. ftp

 

- FTP는 Telnet과 다르게 2가지의 연결이 있다. 하나는 Telnet과 마찬가지로 명령어를 전송할 때 사용하며 또 다른 한 가지는 data를 전송할 때 사용한다. 명령어를 전송하는 control connection은 ftp 연결을 할 때 설정이 되며 ftp 연결이 종료 될 때 해제된다. data를 전송할 때 사용하는 data connection은 control connection으로 받은 명령을 통해 data를 전송하여야 할 때 연결이 되는데 data connection은 data는 control connection처럼 ftp 연결할 때 연결이 되고 ftp 연결 종료할 때 연결이 종료되는 것은 아니다. data를 전송할 때마다 연결이 되며 data를 모두 전송하였을 때나 client에서 Crtl+C 명령어를 통해서 data의 전송을 정지 시킬 때 data connection이 종료 된다.

 

- data connection에는 2가지의 연결이 있다 하나는 Active FTP이고 다른 하나는 Passive FTP이다. Active FTP는 server에서 data connection을 먼저 연결을 하는 것이고 Passive FTP는 client에서 data connection을 먼저 하는 것이다. 일단 Active FTP는 control connection할 때 client가 자신이 data connection할 때 사용할 port번호를 server에게 알려주는데 server는 client로부터 받은 port번호를 Destination port에 넣어 data connection을 한다. 이때 server측의 port는 20을 사용하며 client는 임의의 포트를 사용한다. Passive FTP는 Active FTP를 보완한 것이다. Active FTP를 사용할 경우 client측이 공유기를 사용하는 단말일 경우 공유기가 port번호를 바꿔버리기 때문에 data connection이 안 된다. 이것을 보완하기 위해 Passive FTP는 client가 server에게 data connection을 먼저 한다. control connection할 때 client는 server에게 Passive FTP를 하겠다는 것을 알려주면 server는 자신이 data connection할 때 사용할 port를 알려주면 client는 받은 port번호를 Destination port로 하여 data connection하게 된다. 이 때 알려주는 port는 20이 아닌 임의의 포트를 사용한다.

 

- FTP control 문자 전송에서는 Telnet과 마찬가지로 ftp client와 server가 자신이 속해 있는 os에서 control 문자를 입력을 받으면 그에 해당하는 코드로 변환을 하여 상대편으로 전송을 하게 된다. 그럼 받은 server 또는 client는 자신이 속한 os에서 사용하는 명령어로 변환하여 전송을 한다.

 

5. 연습문제 풀이

 

[1] 텔넷 클라이언트와 서버간에 전송되는 문자는  ____문자이다.

 

a) ASCII   b) NVT   c) EBCDIC   d) HEX

 

→ client와 server간에는 자신이 속한 os가 다를 수도 있기 때문에 client와 server가 명령어에 해당하는 공통된 코드로 변환하여 전송을 한다. 그리고 받은 코드를 자신의 os에 맞게 다시 명령어로 변환한다. 이렇게 server와 client간에 전송되는 문자를 NVT(Network Virtual Terminal)이라고 한다.

 

[2] 텔넷의 옵션 협상과정에서 사용하는 명령어가 아닌 것은  _____이다.

 

a) WILL   b) WONT   c) CAN   d) DON'T

 

→ WILL은 option을 enable을 하기 위해 사용하는 명령어이고, WONT는 option을 enable하지 않을 것이라고 알려주는 명령어이고, DON’T는 option을 사용하지 마라 라는 명령어이다. CAN은 아무 명령어도 아니다.

 

[3] 텔넷에서, 송신측이 자신의 옵션을 이렇게 설정하였음을 알릴 때 _____ 를 사용한다.

 

a) DO   b) WILL   c) DON'T   d) WONT

 

→ WILL은 option을 enable을 하기 위해 사용하는 명령어로써 자신의 option은 이것이라는 것을 알려준다.

 

[4] 텔넷에서, 상대방에게 옵션을 설정하도록 지시할 때    ____를 사용한다.

 

 

a) DO   b) WILL   c) DON'T   d) WONT

 

→ DO는 상대방에서 option을 해라 라고 명령하는 명령어이다. WILL은 자신의 option을 enable하기 위해 사용하는 명령어이고 DON’T는 option을 사용하지 마라 라는 명령어이고, WONT는 option을 사용 안할 것이라는 명령어이다.

 

[5] 텔넷에서, 제어문자임을 표시할 때     ______문자를 먼저 송신한다.

 

a) IAC   b) IP   c) SB   d) Go Ahead

 

→ Telnet에서 아스키 문자와는 다르게 제어하는 문제는 IAC라는 문자를 먼저 보내어 뒤에 나오는 것이 control인 것을 알려준다.

 

[6] 텔넷에서, 상대방으로부터   _____ 를 수신하여야 송신권을 얻는다.

 

a) IAC   b) IP   c) SB   d) Go Ahead

 

→ Telnet의 기본 동작모드는 Go Ahead로 server가 client에게 Go Ahead message를 보내면 client는 자신의 buffer에 저장되어 있던 문자를 전송할 수 있다.

 

 

[7] 텔넷에서, 상대방으로부터 제약 조건 없이 언제라도 송신할 수 있으려면    ____옵션이 활성화 되어야 한다.

 

a) IAC   b) Echo   c) Terminal Type   d) Suppress Go Ahead

 

→ Suppress Go Ahead는 Go Ahead없이 client가 문자를 입력 할 때마다 server에게 전송하는 option이다.

 

[8] 텔넷에서, 라인모드일 때 서버로부터 Echo는  _____된다.

 

a) 금지   b) 생성   

 

→ 라인모드일 때 remote echo를 사용하지는 않지만 local echo는 사용한다. 하지만 local echo는 enter를 입력하기 전까지는 echo가 발생하지 않기 때문에 금지 된다.

 

[9] 텔넷에서, 제어문자들의 송수신 과정을 알고 싶을 때 사용하는 명령은    ______이다

 

a) toggle   b) toggle options   c) show options   d) show

 

→ toggle options는 telnet option의 처리과정을 보여준다.

 

[10] NVT문자는 텔넷 이외에도    _______에서도 사용된다.

 

a) DNS   b) FTP   c) HTTP   d) DHCP

 

→ NVT는 telnet뿐만아니라 FTP에서도 사용한다.

 

 

[11] 텔넷에서, 문자모드인 경우 서버로 부터의 echo는 _______ 된다.

 

a) 금지   b) 생성

 

→ 문자모드인 경우 client를 입력할 때마다 server는 client에서 온 각 문자 마다 echo가 발생하여 client에게 전송이 된다.

 

[12] FTP에서, 사용자가 입력한 ls 명령은  ______ 로 변환되어 송신된다.

 

a) DIR   b) LIST   c) ABOR   d) RETR

 

→ 10번 문제의 그림과 같이 linux에서 ls명령어를 입력하면 ftp server 또는 ftp client는 list라는 명령어로 변환되어 전송이 되고 반대 편에 있는 ftp client 또는 ftp server는 list라는 명령어를 자신의 os에 맞는 명령어로 변환한다.

 

[13] FTP에서, 사용자가 입력한 ^C 명령은 _______ 로 변환되어 송신된다.

 

a) DIR   b) LIST   c) ABOR   d) RETR

 

→ ^C는 data connection의 접속의 종료를 의미하며 ABOR라는 명령어로 변환되어 전송이 된다. 14번 문제의 그림을 보면 다른 명령어들도 알 수 있다.

 

[14] FTP에서 사용자가 입력학 get명령은  ________ 로 변환되어 송신된다.

 

a) DIR   b) LIST   c) ABOR   d) RETR

 

→ get명령어는 RETR이라는 명령어로 바뀌며 download를 의미한다.

 

[15] FTP를 이용하여 파일을 내려 받고자 할 때   _____ 개의 TCP 연결이 필요하다.

 

a) 1   b) 2   c) 3   d) 4

 

→ FTP는 2개의 TCP연결이 존재하며 명령어를 전송하는 control connection과 data를 전송하는 data connection이 존재한다

 

[16] FTP의 데이터 연결 시 클라이언트의 포트번호는    ____ 연결을 이용하여 서버에게 전달된다.

 

a) 데이터   b) 제어

 

→ FTP의 data connection할 때에는 control connection할 때 client가 자신이 data connection에서 사용할 port를 server에게 알려준다. 따라서 제어 연결을 이용해서 서버에게 전달한다고 할 수 있다.

 

[17] FTP의 데이터 연결 시 개설되는 클라이언트 포트는    ______ open 상태이다.

 

a) Passive   b) Active

 

→ FTP의 데이터 연결 시 개설되는 포트는 Passive open상태로 임의의 포트 번호를 사용하게 된다.

 

[18] FTP에서 파일을 내려받고 나면, 데이터 연결로는 ___ 되고, 제어연결로는 ____된다.

 

a) 유지   b) 해제

 

  b) 해제, a) 유지

→ FTP에서 파일을 내려받고 나면, data connection은 연결 해제가 되고 control connection은 유지된다. control connection은 ftp연결 해제되면 해제가 되고 data connection은 data를 전송할 때마다 연결되고 해제된다.

 

[19] FTP에서 파일 전송중 ^C를 입력하면, 데이터 연결로는 ____되고, 제어연결로는  _____된다.

 

a) 유지   b) 해제

 

→ b) 해제, a) 유지

→ data connection은 Crtl+C를 입력하여 종료하게 되면 해제가 된다. 반면 control connection은 ftp의 연결이 종료가 될 때까지 유지가 된다.

▶ Telnet

 

① local login

 

- 자신의 단말에 로그인 하는 방식으로 키보드로 입력을 하면 모니터에 자신이 입력한 명령어 등이 출력이 된다.

 

② remote login

 

- 자신의 단말이 속해 있는 네트워크 상에 존재하는 다른 단말에 접속하는 방법으로 자신의 키보드로 명령어 등을 입력하면 접속한 다른 단말에서 명령어 등을 처리 한 후 자신의 모니터에 출력이 된다.

 

- 만약 os가 다른 단말끼리 연결을 할 경우 같은 기능을 하는 명령어가 다를 수 도 있다. 따라서 다른 명령어가 같은 기능을 하기 위해서 telnet client와 telnet server가 속해 있는 단말의 os를 판단하여 명령어를 번역하여 같은 기능을 하게 한다.

 

- 명령을 받은 단말은 자신의 터미널 드라이버에서 명령을 수행 하는 것이 아니라 가상 터미널 드라이버에서 명령을 수행하고 자신이 가지고 있는 터미널 드라이버는 명령에 대해서 아무 관여를 하지 않는다.

 

 

- 위 그림은 네트 워크 상에 있는 단말에 접속을 하여 명령어 등을 수행하는 과정을 그림으로 나타낸 것이다.

 

- client가 a라고 입력을 하면 a는 tcp를 통해서 server로 전송이 되고 전송이 된 a는 server측에있는 가상 터미널 드라이버에서 수행을 한 후 수행 결과가 tcp를 통해서 client로 도착을 하게 된다. 명령어 수행 과정에서 server측에 있는 터미널 드라이버는 아무 관여를 하지 않는다.

 

NVT:Network Virtual Terminal

 

- 위 그림은 Network Virtual Terminal의 동작 과정을 그림으로 나타낸 것이다.

- client가 명령어를 입력하면 telnet client는 명령어에 맞는 다른 코드로 변환하여 server로 전송이 된다. 그럼 server는 받은 코드를 자신의 os에 맞는 명령어로 바꾸어 명령어를 수행하게 된다.

 

- NVT에는 data와, control 2가지의 명령어가 존재한다.

- data는 아스키 코드로 os가 다르더라도 client와 server가 data명령어를 변환하지 않는다.

- control은 enter와 backspace등과 같이 제어를 하는 명령어이다. 이 명령어는 os에 따라 다르기 때문에 client와 server가 공통된 코드로 변환하여 자신의 os에 맞게 명령어로 변환한다.그리고 option의 시작은 IAC로 알린다.

 

③ telnet option

⒜ remote echo만 활성화된 경우

 

- 이 경우는 client가 명령어를 입력하면 server로 들어가게 된다. 그 후, enter를 입력하면 client에 있는 모니터로 출력이 된다.

 

⒝ local echo와 remote echo가 모두 활성화된 경우

 

- 이 경우는 client가 명령어를 입력하면 local echo에 의해서 자신의 모니터에 출력이 된다. 그 후, enter를 입력하면 server로 들어간 명령어가 다시 자신의 모니터에 출력이 된다. 따라서 이 경우는 자신이 입력한 명령어가 2번 보여지게 된다.

 

⒞ local echo만 활성화된 경우

- 이 경우는 client가 명령어를 입력하면 자신의 모니터에 입력한 모니터가 출력이 된다. 그 후, enter를 입력하여도 server로 간 명령어가 자신의 모니터에는 출력이 되지 않는다.

→ echo를 활성화 하는 이유는 자신이 입력한 명령어가 server에 제대로 도착하였는지 확인하기 위해서 활성화를 한다.

 

④ telnet option 협상 과정

 

- 위 그림은 telnet option 협상과정을 나타낸 그림이다.

 

- 처음 TCP 연결을 한 후, 클라이언트는 24에 대한 옵션의 사용을 원한다고 서버에 알려준다.

 

- message를 받은 서버는 24사에 대한 옵션을 사용해라 라고 클라이언트에게 알려준다.

- 그 후, 서버는 24에 대한 서브 옵션을 알려달라고 클라이언트에게 message를 보낸다.

- 그럼 클라이언트는 24에 대한 옵션을 알려준다.

 

→ option 협상 과정에서 만약 24에 대한 옵션을 사용하기를 원한다고 message를 보냈는데 서버가 ‘안된다.‘ 라고 하면 24에 대한 option협상은 하지 않는다. 이 때 클라이언트는 24에 대한 옵션을 계속해서 요청하지 않는다.

 

 

 option 협상과정에서 필요한 코드

 

- IAC는 control의 시작을 알린다.

- IAC+WILL+option은 option의 사용을 원한다는 것을 알릴 때 사용한다.

- IAC+WON’T+option은 option의 사용을 원하지 않는 것을 알릴 때 사용한다.

- IAC+DO+option은 IAC+WILL을 통해서 온 option에 대한 것을 사용하라 라는 것을 알릴 때 사용한다.

- IAC+DON’T+option은 IAC+WILL을 통해서 온 option에 대한 것을 사용하지 마라는 것을 알릴 때 사용한다.

- IAC+SB and SE는 option에 대한 서브 옵션의 시작과 끝을 알릴 때 사용한다.

 

⑤ 동작모드

⒜ 기본 모드

 

- telnet의 기본 동작모드는 server측에서 Go Ahead라는 message를 받으면 client에서 이때까지 입력 한 명령어들이 server측으로 전송이 된다. 이 동작모드는 server측에서 Go Ahead message를 전송 했을 경우에만 client에서 server로 명령어들이 전송이 되므로 비 효율적이다.

 

⒝ 문자 모드, ⒞ 라인 모드

 

- 문자 모드는 client에서 입력을 하면 입력한 문자 하나 하나씩 server로 전송 되어 각 문자에 대한 ack가 발생하는 방식이다. 위 그림에서 보면 Do Suppress Go Ahead를 통해서 client가 server에게 Go Ahead없이 전송한다는 것을 요청하면 server가 그에 대해 응답을 하는데 위 그림에서는 Will을 통해서 그렇게 해라라고 알려준다. 그리고 client는 WONT Echo를 server로 전송하여 loack echo는 사용안한다는 것을 알려 준 후 데이터를 입력하는 것을 알 수 있다.

 

- 라인 모드는 문자 모드와는 다르게 명령어를 입력하고 enter를 치면 enter를 치기 전까지 입력한 모든 것이 한번에 server로 전송되는 방식이다. 위 그림에서 보면 client가 WILL Linemode를 server에게 전송하여 라인 모드로 전송 할 것을 알린다. 그 후,  DONT Echo를 server에게 알려 remote echo는 안 할 것이다 라고 알려준다. 그 후, client는 명령을 입력하고 enter를 치면 입력한 명령어 모두 server에게 전송이 되는 것을 알 수 있다.

 

 - 문자모드의 동작과정은 client가 문자 하나 하나 입력할 때마다 server에게 전송이 되고 server측에 있는 가상 터미널에서 처리 한 후 remote echo가 발생하고 그 remote echo가 다시 client에게 전송이 된다.

 

 

- 라인 모드의 동작 과정은 client가 date를 입력한 후 enter를 치면 date모두 server에게 전송이 되어 server측에서 명령어에 대한 결과를 한번에 client에게 전송이 되는 것을 알 수 있다. time도 똑같은 동작을 보여 준다.

 

▶ FTP(File Transfer Protocol)

① FTP

 

- ftp는 telnet과 마찬가지로 TCP연결을 통해서 접속을 한다. ftp는 telnet과는 다르게 ftp server로부터 데이터를 받아 올 수도 있고 ftp server에게 데이터를 업로드 할 수도 있다. 하지만 telnet은 telnet server에게 명령어를 입력하고 그에 대한 결과를 확인 밖에 못한다.

 

- ftp 연결에는 control connection과 data connection이 존재한다.

 

⒜ control connection은 ftp연결과 종료를 담당하는 connection이다. 명령어는 control connection을 통해서 명령어를 ftp 서버에게 전송을 한다. 그리고 연결이 되는 것은 ftp 연결을 할 때 하고 종료는 ftp 연결을 종료 할 때 된다.

 

⒝ data connection은 ftp client로부터 받은 명령어를 통해서 data를 주고 받는 것을 담당하는 connection이다. data connection은 data를 주고 받을 때 마다 연결이 되고 종료가 된다. 즉, control connection은 ftp 연결과 종료 할 때 한번 만 하지만 data connection은 ftp연결이 된 후 data를 주고 받을 때 마다 연결이 되었다 끈어졌다 한다. 그렇기 때문에 data connection의 연결과 연결 종료는 여러번 일어날 수도 있다. 그리고 data connection의 종류는 2가지로 Active FTP와 Passive FTP가 존재한다.

 

⒝-㈀ Active FTP

- Active FTP는 Server가 Client에게 data connection을 먼저 연결을 하는 것이다. 이 방법을 사용할 때에는 client가 자신이 사용할 data connection에 대한 port number를 server에게 알려 주면 server는 data connection을 연결 할 때 source port는 well known port번호를 사용하고 destination port는 client가 알려준 port번호를 입력하여 data connection을 연결한다. Active FTP에는 큰 문제점이 있다. 만약 공유기를 사용하는 client일 때 server가 client가 알려준 port번호로 접속을 하려고 할 때 client가 가지고 있는 공유기에서 port번호를 변경하기 때문에 Active FTP의 접속이 제한이 된다. 이 문제를 해결하기 위해 Passive FTP방법이다.

 

⒝-㈁ Passive FTP

- Active FTP는 Server가 Client에게 data connection을 먼저 연결을 하는 것이다. 이 방법을 사용할 때에는 client가 자신이 사용할 data connection에 대한 port number를 server에게 알려 주면 server는 data connection을 연결 할 때 source port는 well known port번호를 사용하고 destination port는 client가 알려준 port번호를 입력하여 data connection을 연결한다. Active FTP에는 큰 문제점이 있다. 만약 공유기를 사용하는 client일 때 server가 client가 알려준 port번호로 접속을 하려고 할 때 client가 가지고 있는 공유기에서 port번호를 변경하기 때문에 Active FTP의 접속이 제한이 된다. 이 문제를 해결하기 위해 Passive FTP방법이다.

 

⒝-㈁ Passive FTP

 

- Passive FTP는 Active FTP를 보완을 위해 만들어 졌다. 이 Passive FTP는 client가 server에게 data connection을 하는 방법으로 client가 server에게 PASV로 passive FTP를 사용하겠다라고 알리면 server는 자신이 사용하려고 하는 data connection port를 알려준다. 그럼 client는 server가 알려준 port번호로 data connection을 한다. 이 때, Active FTP에서 사용하였던 server port인 20을 사용하지 않고 임의의 port번호를 사용하게 된다. 그렇기에 Passive FTP는 client server 양쪽 다 임의의 포트 번호를 사용하게 된다.

 

② FTP control 문자의 전송

 

- FTP에서의 control 문자 전송도 telnet의 control 문자 전송과 같다. os가 다를 수 있기 때문에 각 os에서 사용하는 명령어에 대해 공통의 코드로 바꿔 전송을 하고 전송 받으면 해당 os에 대한 명령어로 바꾸어 실행한다. 즉, client는 자신의 os에서 받은 명령어를 공통의 코드로 바꾼다음 server에게 전송을 하고 server는 받은 코드를 자신의 os에 맞게 명령어로 변경하여 처리한다

 

③ FTP commands

ABOR :명령, data전송중지(ctl+C)

LIST : dir, ls

PASS : password

PORT :PORT a1, a2, a3, a4, b1, b2

a1~a4는 IP address, b1* 256 + b2 는 port number

TYPE : ASCⅡ or binary

RETR : retrieve (get) 이며 download

STOR : store ( put, set) 이며 upload

PASV : passive mode

 

④ data connection의 연결종료

 

- data connection의 연결종료 되는 경우는 2가지가 있다. 하나는 data의 전송이 모두 완료 되었을 때 data connection이 종료 되고 또 한가지는 client가 Ctrl + C를 입력하여 data connection의 연결을 종료하라고 하면 server는 data를 전송도중 data connection의 연결을 종료 하게 된다.

Time-wait Timer

 

- Time Wait Timer는 연결 종류 직전 전송된 data가 연결 종료가 되고 새로운 연결이 된 후에 우연히 seq값이 맞아 전송이 된 경우를 방지하기 위한 Timer이다.

 

- Time Wait Timer은 연결이 종료되기 직전 전송된 data가 새 연결이 된 후 전송이 되는 것을 방지하기 위해 종료 후 새 연결을 하기 위해서는 일정시간이 흐른 뒤에 연결이 되게 하는 것이 Time Wait Timer이다. 연결이 종료되고 2*MSL(Maximum Segment Lifetime)후에 새 연결을 할 수 있다.

 

Sliding Window 흐름 제어 방식 분석

 

- Stop and Wait방식은 전송은 data 하나를 전송하면 그에 따른 ack가 올때까지 기다리는 방식으로 전송 효율이 떨어진다. 전송효율을 높이기 위해 Sliding Window와 같은 전송 방법을 사용하는데 Sliding Window는 아래와 같은 그림처럼 동작한다.

 

- Sliding Window는 Window Size만큼 ack의 수신없이 data를 전송한다. Source가 Window안에 있는 data만큼 전송을 하는 도중 Destination에서 ack가 올 경우 Window는 ack에 대해 window를 이동하게 된다. 이때, Destination은 ack를 발생시킬 때 자신이 수신 할 수 있는 data의 양을 Source에게 알려주면 Window Size는 그에 따라 줄어들기도 하며 늘어나기도 한다. 즉, Window Size는 Destination가 data를 처리하기 위해 가지고 있는 buffer의 양에 따라 줄기도 하며 늘어나기도 하며, ack가 발생함에 따라 Window가 이동하게 된다.

 

 

Keepalive 타미어 동작 실습

 

 

(1)  Linux가 아닌 Windows의 CMD창에서 telnet 192.168.52.63 명령어를 이용하여 Linux에 설치되어 있는 telnet server로 접속을 한다.

 

(2) telnet에 접속이 되면 Linux의 id와 password를 입력을 하여 접속을 하게 된다. 그 후, LAN을 뽑아 telnet server가 설치된 컴퓨터에서 수집되는 packet을 확인한다.

client가 server로 전송한 ACK message가 수집되고 난 후, Client의 LAN선을 뽑으면 정확히 60초 후, Keep Alive Message가 수집된다. Keep Alive Message는 1초 간격 씩 수집이 되며 5개의 Keep Alive Message가 수집되고 난 뒤 Reset Message가 수집이 된다. Keep Alive Message가 최초 60초 후에 수집 되는 이유는 #sysctl –w net.ipv4.tcp_keepalive_time=60 명령어를 통해서 설정했기 때문이고, Message가 1초 간격 씩 수집되는 이유와 5개의 Keep Alive Message가 수집 되는 이유도 #sysctl –w net.ipv4.tcp_keepalive_intvl=1와 #sysctl –w net.ipv4.tcp_keepalive_probes=5 명령어로 설정을 했기 때문이다.

 

재전송 타이머 및 exponenetial backoff

 

- source가 destination으로 data를 전송하다가 destination이 고장이 나서 전송 받은 data에 대해 ack를 전송을 못할 때 source는 ack를 수신 하지 못하였기 때문에 재전송을 하게 된다. 하지만 destination은 고장이 났기 때문에 ack가 발생하지 않고 source는 다시 재전송을 하는데 이때 ack가 올때까지 기다리는 시간은 처음 기다렸던 시간의 2배이다. 이 시간은 재전송을 할때마다 2배씩 증가가 되며 최대 약 1분 까지 증가된다. 최대 12번의 재전송을 하였지만 ack의 응답이 안오면 source는 destination에게 reset message를 전송하고 연결을 끊게 된다.

 

 

Persist 타이머

 

- Persist Timer는 Destination이 수신한 data의 처리를 관리하는 buffer가 꽉 차 source에게 자신은 이제 data를 수신 할 수 없다는 것을 알려준 뒤 buffer에 있는 data를 처리 하고 buffer가 비어 져있을 경우 data를 수신 할 수 있다는 것을 source에게 알려주는데 이때 알려주는 ack message가 전송 도중 손실이 되어 source에게 전송이 되지 않았을 경우 발생한다. source는 ack가 오지 않으니 probe message를 Destination에게 전송을 한다. 만약 ack를 수신 하지 못하면 probe message를 발생하는 시간 간격을 2배씩 증가시키지만 ack를 수신 할 경우 source는 Destination에게 data를 전송하게 된다. ack를 수신 하지 못하여 probe message를 발생하는 시간 간격의 증가량은 계속해서 2배씩 증가가 되지만 약 1분이 되면 더 이상 증가 시키지 않고 1분 간격으로 probe message를 발생시킨다.

 

 

 Slow start 알고리즘 실습

 

- Slow start는 Congestion Control하기 위한 방법 중의 하나이다. Slow start는 최초 cwnd를 1로 하여 Destination에게 data를 전송하게 된다. 그럼 Destination은 이 data를 수신하여 ack를 발생 시키는데 ack를 수신한 Source는 cwnd를 2배 증가시켜 다시 data를 전송하게 된다. 이렇게 Source는 Destination이 발생시키는 ack를 수신할 때마다 cwnd를 2배씩 증가를 시켜서 전송한다. Source는 무한히 2배씩 증가를 시키지 않고 임계치 까지 증가를 2배씩 증가를 시켜 data를 전송하게 된다.

 

연습문제 풀이

 

[2] 다음 중 TCP에서 사용되는 알고리즘이 아닌 것은?

a) Karn        b) Dijkstra

c) Jacobson     d) Nagle

→ Karn algorithm 은 RTO를 계산할 때 사용하는 알고리즘이며, Nagle algorithm은 SWS에서 사용되는 알고리즘이고 Jacobson algorithm은 congestion avoidance방식에서 사용하는 알고리즘이다. 정확한 명칭은 Van Jacobson algorithm이다.

 

[3] sily window Syndrome을 방지하는 방법이 아닌 것은?

 

a) Nagle       b) Delated ACK

c) Clark       d) Fast Retransmission

 

→ SWS는 data의 길이가 data가 가지는 header의 길이보다 작을 때 수신측에서 알려준 자신이 수신할 수 있는 data의 양의 50%까지 data를 모아서 전송한다. 따라서 Fast Retransmission은 알맞지 않다.

 

[8]Windows = 0인 패킷을 수신하면, 타이머를 기동시킨다.

 

a) Persist      b) Keepalive

c) Retransmisson d) TIME-WAIT

 

→ Persist는 Windows = 0 인 패킷을 받은 후 Destination에서 data를 처리 한 후 Windows가 바뀌었다는 것을 알려주기 위해 ack를 전송 하였지만 전송도중 ack가 손실 되어 통신이 이루어지지 않는 것을 방지하기 위해 작동하는 Timer이다.

 

[9] 혼잡제어를 위하여 재전송이 발생한 경우 송신측은 _____를 1로 설정한다.

a) Window              b) Sequence 번호

c) ACK 번호          d) Congestion Window

 

→ Window는 ack없이 전송할 수 있는 data의 크기를 나타내며, Sequence 번호와 ACK 번호는 data를 구별해주는 값이다. congestion window의 값이 1로 되어 있다는 것은 Congestion control을 하기 위해 slow start를 하거나 congestion avoidance를 하겠다는 것을 의미한다.

 

RTT(Round – Trip Time)과 Karn 알고리즘 분석

 

① RTT(Round – Trip Time)

- 재전송 시간 간격 RTO가 짧으면 전송한 data에 대한 ack가 오기 전 재전송이 될 것이고 RTO가 너무 길면 전송 효율이 비효율적이게 되는데, 이런 RTO값을 적당히 설정하기 위해 data를 전송한 다음 이에 대한 ack를 수신하는 시간인 RTT를 고려하여 RTO 값을 설정해야 한다. 이렇게 RTT는 RTO를 설정하는데 중요한 역할을 한다. 하지만, RTT값은 네트워크상태에 따라 실시간 변화 하기 때문에 이전에 전송한 data에 대한 RTT값은 RTO값으로 설정하는 것은 부적절 하다. 따라서 아래의 식으로 RTT의 값을 구해야 한다.

 

- 여기서 알파는 smoothing factor로 일반적으로 0.9를 사용하며, M은 측정된 RTT값이다. 알파를 일반적으로 0.9로 사용하는 이유는 알파값이 커지면 이전의 RTT값에 비중이 커지게 되므로 새로 측정한 M값의 비중이 작아진다. 반면 알파값이 작아지면 이전의 RTT값의 비중은 작아지고 새로 측정한 M값의 비중이 커지게 된다. 따라서 크면 이전의 RTT값에 민감하게 반응하며 작으면 새로 측정한 RTT값에 민감하게 반응하게 된다.

- 이렇게 구한 RTT로 RTO를 설정할 수 있는데 RTO를 구하는 식은 아래와 같다.

- 베타는 지연분산 요소로서 이 값이 1이면 RTO값은 RTT가 되므로 패킷의 손실이 되면 그만큼 감지를 빠르게 할 수 있으나 낮은 RTO값으로 인해 잦은 재전송이 이루어 진다. 기본적으로 베타는 2의 값을 사용한다.

 

② Karn 알고리즘

 

- 재전송은 RTO가 끝나면 실행되는데, 이 재전송에 대한 ack가 source측이 수신을 하면 처음에 보냈던 data에 대한 ack인지 재전송한 data에 대한 ack인지 알 수 없다. 만약 처음 전송한 data에 대한 ack라면 RTT값은 매우 증가 할 것이고 반면 재전송한 data에 대한 ack라면 RTT는 매우 줄어 들 것이다. 이렇게 재전송은 RTT를 측정하는데 큰 방해요소로 작용한다. 그렇기에 Karn은 이런 방해요소를 배제하기 위해 재전송된 data에 대한 ack를 이용하여 RTT를 측정하는 것이 아닌 재전송하지 않은 data에 대해 발생한 ack에 대해서만 RTT값을 측정한다. 이것이 Karn의 알고리즘이다.

Flow Control

 

-Source측에서 보낼 수 있는 data의 양을 조절한다.

- Receiver window : rwnd(수신 할 수 있는 data의 양) 와, Sender window : cwnd(ack의 수신없이 전송할 수 있는 data의 양)로 Source가 Destination에게 전송하는 data의 양을 조절한다.

- window size는 rwnd와 cwnd중 작은 값을 따른다.

 

① Stop – and – Wait

 

- Stop – and – Wait 방식은 Source가 Destination에게 data를 하나를 전송 한 후 Destination으로부터 ack를 받기 까지 기다리는 방식이다. 따라서 ack가 오기 전까지 낭비되는 시간이 많아 전송효율이 떨어진다. ※ 전송하려는 data를 하나씩 전송하는 방법

 

 

② Sliding Window

 

 - Sliding Window는 Stop – and – wait 방식과는 달리 Source가 여러 data를 전송하는 방식이다. Source가 Destination에게 data를 전송할 때 Window Size만큼 전송을 한다. Destination에게로 data를 전송도중 Destination에게로부터 ack를 수신 하면 ack값에 따라 Window가 움직이게 되어 새로운 data를 전송할 수 있게 된다. 만약 Window안에 n~m 까지의 data가 있다고 치면 m+1까지는 ack를 받은 data이다. 그리고 Window안에 있는 data들을 전송하고 있는데 m-1번 data까지 수신을 했다는 ack를 받으면 Window는 움직이게 되어 n-2~m-2까지의 data가 Window안에 들어가게 된다.

 

- 위 그림은 Sliding Window를 통해 한번에 여러 data를 전송하는 것을 보여주는 그림이다. 위 그림을 보면 Source측 window는 4096이며, Destination window는 4096인 것으로 Window size는 4096이 된다. 또, data의 크기가 1024로 한번에 전송할 수 있는 data의 수는 4(4096/1024 = 4)개 인 것을 알 수 있다.

 

- 처음 window에는 1, 2, 3, 4 총 4개의 data가 들어가게 된다. Source가 window에 있는 data를 전송하고 있는 도중 Destination에서부터 Ack block 2 win 4096 이란 응답을 받으면 window는 움직이게 되어 3, 4, 5, 6 총 4개의 data가 들어가게 된다. 그 이 후 3번 data에 대해 ack를 발생 하며 win 3072라는 응답을 발생 하게 되는데 그럼 Destination이 받을 수 있는 data가 3(3072/1024 = 3)개 라는 것을 인지하고 window에는 4, 5, 6 총 3개의 data가 들어가게 된다. 그 이후 source가 data를 전송하는데 Destination으로부터 4번 data에 대한 ack를 발생하며 win 4096이라고 응답을 받으면 Destination이 받을 수 있는 data가 4개 이고 4번까지 잘 받았다는 것을 인지하고 window가 움직이게 되어 5, 6, 7, 8 data가 들어가게 된다.

- 위 그림도 마찬가지로 Window size를 이용한 전송 방법을 나타내고 있다.

 

- Destination이 자신이 수신 가능한 data의 크기는 1000byte라는 것을 Source에게 알려주면 Source는 1000byte의 data를 전송하게 된다. 그럼 Destination은 수신 한 1000byte를 처리 하지 못하였지만 잘 받았기 때문에 자신이 수신 가능한 data의 크기가 0byte라는 것을 알려주며 ack를 발생한다. 그럼 Source는 Destination의 window size가 0인 것을 알고 대기 하게 된다. 그 후 Destination이 data를 처리하고 자신이 수신 할 수 있는 data의 크기가 500byte라는 것을 알려주면 Source는 이전에 전송한 data부터 500byte를 전송한다.

→ Flow Control은 Source측의 Window Size에 대해서 전송하는 data의 양을 조절하는 방법이다.

 

Persist Timer

- Persist Timer는 Source로부터 data를 전송 받고 있는 도중 Destination자신이 처리하는 data의 양이 꽉 차서 window size가 0이 되어 ack를 발생 한 다음 data를 처리 후 data를 수신 할 수 있다는 ack를 발생 시켰지만 ack가 손실될 경우를 방지하기 위한 Timer이다

 

- Destination이 이제 data를 수신할 수 있다는 것을 Source에게 알려주기 위해 ack를 발생 시켰지만 ack가 손실이 되어 Source가 이를 수신 하지 못한 경우 Source는 Destination이 data가 꽉 차있다는 ack를 받은 후 일정 시간 지나서 probe message를 발생 시키게 된다. Destination으로부터 ack가 오지 않으면 처음에 전송한 시간의 2배씩 증가 시키며 probe message를 발생 하게 되고 시간이 약 1분이 되면 1분 간격으로 probe message를 전송하게 된다. 만약 probe message에 대한 ack가 올 경우 Source는 Destination에게 data를 다시 전송하게 된다.

 

SWS(Sily Window Syndrome)

 

- 전송 하려는 data의 크기가 매우 작아 data 크기 보다 header의 크기가 훨씬 커지는 현상을 말한다.

 

- 이 경우에는 Destination이 자신이 수신 가능한 data의 양을 알려주면 Source는 알려준 양의 50%만큼 data가 모일 때 까지 기다린 후 data가 모이면 전송 한다. 이때 Source측은 data가 모일 때까지 무한정 기다리지 않고 일정 시간 지나면 data를 전송한다. 만약 모인 data의 양이 MSS만큼 모이게 되면 ack없이도 전송이 가능하다.

 

- Destination은 자신이 수신 가능한 data의 양이 0이 되고 난 후 약간의 data가 처리가 되고 수신 가능한 data의 양이 약간 생기면 바로 Source에게 알려주지 않는다. 만약 알려주게 되면 패킷의 낭비가 심해지기 때문이다. 이것을 방지하기 위해 Destination은 자신이 수신 가능한 data의 양이 전체의 50%가 될 때 까지 Source에게 알려주지 않고 기다린다. 만약 처리가 느려져 오래 기다리는 것을 방지하기 위해 일정 시간 지나면 Source에게 알려주게 된다. 만약 Destination이 자신이 수신 할 수 있는 data의 양이 늘게 되면 Source에게 알려주기 위한 시간이 새롭게 갱신된다.

 

 Congestion Control

- Congestion은 Source가 전송하는 data의 속도가 Destination이 data를 처리하는 속도보다 빠른 경우에 발생한다.

 

 - Congestion Control을 위한 방법 중 하나인 Slow Start, Exponential Increase 방식이다. 이 방식은 처음 Source는 ack를 수신 하지 않은 상태에서 전송할 수 있는 data의 개수를 1개로 하여 전송한다. 그 후 Destination에서 ack가 오면 Source는 ack를 수신 하지 않은 상태에서 전송할 수 있는 data의 개수를*2하여 전송하는 방식이다. cwnd는 최대 임계치 까지 증가한다.

 

- Source가 data를 전송하고 그에 따른 ack가 오면 Source는 전송하는 data의 개수를 *2배씩 증가시키는 방식이 Slow Start, Exponential Increase이다.

 

 

- Congestion Control을 위한 다른 방법은 Congestion Avoidance, Additive Increase 방식이다. 이 방식은 처음 Source는 ack를 수신 하지 않은 상태에서 전송 할 수 있는 data의 개수를 1개로 하여 전송한다. 그 후 Destination에서 ack가 오면 Source는 ack를 수신 하지 않은 상태에서 전송할 수 있는 data의 개수를+1하여 전송하는 방식이다.

- Source가 data를 전송하고 그에 따른 ack가 오면 Source는 전송하는 data의 개수를 +1개씩 증가시켜 전송하는 방식이 Congestion Avoidance, Additive Increase 방식이다.

→ Slow Start, Exponential Increase와 Congestion Avoidance, Additive Increase방식의 차이점은 cwnd가 증가 하는 방식에 따라 있다. Slow Start는 *2배씩 증가하는 반면 congestion Avoidance방식은 +1개씩 증가한다.

 

- TCP는 트랜스 포트 계층에 위치하고 있다. UDP와 달리 Connection-oriented(연결위주)전송 방식이다. data 전송 전에 송·수신 양쪽 TCP들 사이에 TCP연결을 미리 설정하여야 한다. 또 TCP는 Reliable data transfer(신뢰성 있는 data 전달)을 한다. 이때 필수로 ACK message와 Retransmission Timer가 필요하다.

 

- TCP는 data전송을 하기 전 필수로 송·수신 간 TCP 연결을 한 후 data전송을 한다. 그 후 data전송을 완료하면 송·수신 간 TCP 연결을 해제 하는 과정이 필요하다.

 

 - TCP는 port번호의 형식은 UDP와 같은 형식으로 사용한다. 클라이언트는 ephemeral port(임의의 포트번호)를 사용하고 서버는 well-known port(표준으로 지정된 포트번호)를 사용한다.

 

 - TCP 패킷의 형태는source port와 destination port, 송·수신 간 data가 잘 전송이 되었는지 확인하기 위한 sequence number와 acknowledgement number가 들어가며 TCP head 길이를 나타내는 head length, flag영역인 U, A, P, R, S, F 영역이 들어가며 수신측의 수신가는한 버퍼 용량을 나타내는 receive window size영역과 오류를 검사하는 checksum영역. urgent data의 위치를 나타내는 urg.data pointer영역, 그리고 option영역과 응용계층에서 받은 데이터를 나타내기위한 application data영역으로 구성되어 있다.

 

- flag영역은 U, A. P, R, S, F로 구성되어 있는데 각각 URG(urgent data), ACK, PSH(push data now), RST(reset), SYN(연결 설정과정에서 사용되는 패킷을 나타냄), FIN(연결 종료과정에서 사용되는 패킷을 나타냄)을 나타낸다. 아래그림은 각 field에 따른 의미이다.

 

URG - Urgent pointer 영역에 긴급 data보유

ACK - Acknowledgement 포함

PSH - Application layer 로 즉시처리요구

RST - 현재의 연결을 즉시 단절 지시( 오류발생 시 사용)

SYN - 연결 설정 시작 요구

FIN - 정상적인연결 단절 요구

 

- 만약 URG영역이 1이 들어갈 경우 urgent data는 헤드 영역 바로 뒤에 붙게 되고 urgent point는 헤드 끝부터 어디까지가 urgent data인 것을 알려준다.

- sequence number는 송신 바이트 번호 즉 내가 전송하려는 data의 번호를 나타낸다.

- 또, acknowledgement number는 다음에 받기를 원하는 sequence number를 나타낸다. 

 

 - 만약  송신 측이 sequence number를 10으로 하여 10byte를 보내면 수신측은 10~19까지 10byte를 수신하게 되고 이때 수신측이 발생시키는 ACK의 값은 20이 된다. ACK를 받은 송신측은 ACK의 값인 20부터 다시 10byte의 data를 전송시키게 된다.

 

 -Option은 TLV(Type+Length+Value)로 구성되어 있으며 TCP의 Length영역은 DHCP와 다르게 Type+Length+Value의 크기를 다 더한 값이 저장이 된다.(DHCP에서는 Value의 크기만 나타냄

- end of option list는 option의 끝을 의미하고 No operation은 option영역의 크기를 4byte의 배수로 맞추기 위해서 사용하며 MSS는 Maximum Segment Size로 TCP의 최대 data크기로 최대 송신 Size를 나타낸다. 간혹 SYN message의 option으로 넣기도 한다.

 

※ TCP는 Connection control, Error control, Flow control, Congestioncontrol의 기능을 한다.

①-⑴ Connection control

 

- Data 송수신 전 연결하는 과정은 연결을 하기 위해서 발생하는 message의 종류로 SYN, ACK가 발생한다.

 

- TCP 연결을 하기 위해서 클라이언트가 서버로 SYN message를 보내면 서버는 SYN과 ACK를 보내고 다시 클라이언트는 서버로 마지막으로 ACK를 보내게 되고 TCP 연결이 된다. 이 과정에서 총 3개의 패킷이 발생하게 되는데 이를 3-way handshaking이라고 한다.

 

- data 송·수신이 끝난 후 TCP 연결을 해제하는 과정은 연결을 해제 하기 위해서 발생하는 message의 종류로 FIN, ACK가 발생한다.

 

- TCP 연결을 해제 하기 위해서 연결을 종료하려고 하는 A에서 FIN message를 B에게 전송하면 B는 받은 FIN에 대하여 ACK를 발생시키고 난 후 B가 종료가 될 준비가 되면 FIN과 ACK를 전송한다. FIN과 ACK를 받은 A는 B에게 마지막으로 ACK를 발생시켜 연결을 종료한다.

 

* 이때 중요한 것은 최초 발생하는 SYN message의 flag영역은 SYN부분만 1로 되어 있다. 이유는 SYN message 발생 전 data를 주고 받지 않기 때문이다. 최초 발생되는 FIN message의 flag영역은 FIN부분만 1로 되어있지 않고 ACK영역도 1로 되어있을 것이다. 이유는 FIN message 발생 직 전 data를 주고 받았기 때문에 ACK도 1로 되어있다.

 

①-⑵ Connection Reset

 

- TCP Reset message가 발생하는 과정은 client와 server가 TCP 연결이 되었고 data를 송·수신 중이였는데 server가 down된 후 client는 server가 down되었는지 안되었는지 모르기 때문에 data를 송신하게 된다. 그럼 data를 받은 server는 이전에 TCP 연결이 되어있던 client가 있었는지 없었는지 모르는 상태이기 때문에 data를 전송한 client에게 강제로 접속을 종료하겠다는 Reset message를 보내게 된다.

- 이 밖에도 server에 잘못된 SYN message를 수신하였을 경우에도 Reset을 발생시키고, TCP연결 후 data의 송·수신 과정이 오랜 시간동안 없을 경우 Reset이 발생된다.

 

② Error Control

 

- Rule 1 : client가 seq값을 1201로 하여 200byte를 data를 전송을 하며 ACK 값을 4001로 하여 server에게 4001번 data를 보내라고 하였다. 그럼 server는 seq값을 4001부터 전송을 하게 되며 1201~1400까지 data를 받았기 때문에 ACK를 1401로 하여 전송을 하게 된다.

 

- Rule 2 : server가 client로 ACK를 1401로 하여 전송을 하였지만 client의 buffer에는 1401번부터 data가 없는 것을 알고 application에서 data를 줄때까지 약간의 시간을 기다리지만 data가 없는 것을 알고 server에서 보낸 data에 대한 ACK만 발생한다.

 

- Rule 3 : 전송하는 data는 필요에 따라 여러 개 보낼 수 있다. 이 경우에는 buffer에 data가 많은 것을 server가 감지하고 5001~6000까지 보낸 후 6001~7000까지 한번 더 보냈다. 이 때 클라이언트는 수신한 data에 대하여 ACK를 발생시키는데 이때 2번 발생하는 것이 아니라 마지막에 받은 data에 대해서 ACK가 발생한다.

 

- Rule 4 : 이 경우는 data가 필요에 따라 여러 개 보냈는데 먼저 보낸 data가 중간에 없어지고 나중에 보낸 data가 제대로 도착하였을 경우 data를 받은 쪽은 ACK를 마지막에 받은 data에 대해서 발생시키지 않고 못 받은 data를 받기 위하여 잃어버린 data에 대해서 ACK를 발생 시킨다.

 

- Rule 5 : 잃어버린 data에 대한 ACK를 수신 받은 쪽은 나중에라도 잃어버린 data에 대한 ACK를 수신 받을 수도 있기 때문에 RTO(Retransmission Time Out)동안 기다린다. ACK를 못받고 RTO가 종료가 되면 data를 재 전송하게된다. 그럼 data를 받은 쪽은 재 전송 받은 data에 대해서 ACK를 발생 시키는 것이 아니라 buffer에 저장되어 있는 마지막 data 다음에 받아야 될 data를 나타내는 ACK를 발생 시킨다.

 

- Rule 6 : data를 수신하여 ACK를 발생 시켰지만 ACK가 중간에 없어졌다. 그럼 data를 전송하는 쪽은 ACK를 기다리다가 전송한 data가 가지고 있는 RTO가 종료가 되면 한번 더 재 전송하게 되고 같은 ACK가 발생된다.

 

 - Piggybacked ACK란 data와 ACK를 함께 포함하고 있는 message를 말한다.

 

③ Timer의 종류(Retransmission, Persistence, Keepalive, TIME-WAIT)

 

- Retransmission Timer란 data를 TCP 연결이 끝난 직후 data를 전송하게 되는데 data를 받는 쪽이 TCP 연결 직 후 고장이 나버려 응답을 할 수 없게 된 경우에 발생하게 된다. 송신측은 data를 전송 한 후 응답을 기다리지만 수신측은 응답을 할 수가 없어 송신측은 RTO가 종료가 되면 재 전송을 하게 된다. 하지만 응답은 오지 않기 때문에 재 전송 하는 시간을 2배씩 늘리게 된다. 재 전송 Timer가 약 1분이 되면 더 이상 2배로 늘리지 않고 재 전송을 하게 된다. 이때 계속 data를 재 전송하지 않고 data를 전송하고 난 후 약 10분 전에 연결을 종료 하게 된다.

- Keepalive Timer 란 TCP 연결이 되어 있는 상태에서 data가 송·수신을 하지 않을 경우 Keepalive time 동안 TCP 연결을 종료하지 않고 유지 하고 있게 된다. 그 후 Keepalive time이 끝나면 data를 수신하는 쪽은 송신측에게 data이제 더 이상 보낼 것 없냐 라고 물어보는 Probe message를 발생 시키게 되고 Probe message에 대한 ACK가 오면 TCP 연결은 유지 하게 되고 만약 ACK가 발생하지 않아 Probe message의 재 전송을 약 10번(이하)동안 보냈지만 ACK가 발생하지 않으면 Reset을 발생시키고 강제로 종료하게 된다.

1. Hosts 파일을 이용한 이름과 IP address mapping 실습

 

(1)  vi /etc /hosts 명령어를 통해 hosts파일을 열어 ip+도메인주소의 정보가 없는 것을 확인한다.

 

(2) vi /etc /hosts 명령어를 통해 hosts파일을 열어  ip+도메인주소의  정보를 입력 한다.ex) 127.0.0.1 localhost localhost.localdomain localhost4 local host4. localdomain4

::1 localhost localhost. localdomain localhost6 localhost6. localdomain6

115.68.7.43 infocom.aaa.ac.kr

(3)  hosts파일에 ip+도메인주소의 정보를 입력한 후 ping명령어를 발생 시킨다. 그럼 위와 같이 패킷이 수집되지 않는데 패킷이 수집되지 않는 이유는 입력한  ip주소가 자신의 hosts파일에 있기 때문에 DNS 패킷이 수집되지 않는 것을 알 수 있다.

 

2. IP address를 응답받기 위한 DNS query (Type A) 절차 분석 실습

 

 ⦁ DNS query request 패킷의 내용을 hex값으로 적고 그 내용을 분석

 

 

ex)

 

 

 

 

 

 

 

 

 

 

 74

 fc

 01

 00

 00

 01

 00

 00

 00

 00

 00

 00

 07

 69

 6e

 66

 6f

63

6f

 6d

04 

 69

 6e

 6a

 65

 02

 61

 63

 02

 6b

 72

 00

 00

 01

 00

 01

 

 

 

- 74 fc : identification 값이다.

- 01 00 : flags의 값이다. Q/R영역은 0의 값으로 Request인 것을 나타내고 OPCode영역은 0000의 값으로 표준 query를 나타내고 TC영역은 Request이기 때문에 0이 들어가고 RD영역 단말이  recursive query방식을 원하기 때문에 1의 값이 들어가고 RA영역은 Request이기 때문에 위의 사진에는 나타나 있지 않지만 0의 값이 들어가 있을 것이고 예약필드는 0으로 0 0 0의 값이 들어가고 AA영역은 Request이기 때문에 0의 값이 들어가게 된다. 마지막으로 R code영역은 Request이기 때문에 값이 저장되어 있지 않는 것을 알 수 있다.

- 00 01 : number of questions의 값이다.

- 00 00 : number of answer RRs의 영역내며 Request이기 때문에 00 00이 들어가는 것을 알 수 있다.

- 00 00 : number of authority RRs의 영역내며 Request이기 때문에 00 00이 들어가는 것을 알 수 있다.

- 00 00 : number of additional RR의 영역내며 Request이기 때문에 00 00이 들어가는 것을 알 수 있다.

- 07 69 6e 66 6f 63 6f 6d 04 69 6e 6a 65 02 61 63 02 6b 72 00 00 01 00 01 : Questions을 나타낸다. 07은 뒤에 7byte는 각 name의 아스키 코드 값을 나타낸다.(02 02 도 마찬가지)따라서 각각 infoncom inje ac kr을 나타내며 마지막 00은 name의 끝을 알려준다. 00 01은 Query type(Type A)을 나타낸다. 00 01은 Query class(Internet)를 나타낸다.

 

⦁ DNS query response 패킷의 내용을 hex값으로 적고 그 내용을 분석

 

ex)

 

 

 

 

 

 

 

 

 

 

74

fc

85

80

00

01

00

01

00

01

00

01

07

69

6e

66

6f

63

6f

6d

04

69

6e

6a

65

02

61

63

02

6b

72

00

00

01

00

01

c0

0c

00

01

00

01

00

00

0e

10

00

04

73

44

07

2b

c0

14

00

02

00

01

00

00

0e

10

00

07

04

62

61

64

61

c0

14

c0

40

00

01

00

01

00

00

0e

10

00

04

cb

f1

fa

16

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

- 74 fc : identification의 값이다.

 

- 85 80 : flags의 값이다. Q/R영역은 1로 Response를 나타내고 OPCode는 0000으로 표준 Query를 나타내고, AA는 1로 Authoritative DNS server가 보낸 것이 라는 것을 알 수 있고 TC는 0으로 Response의 길이가 512Byte이하 인 것을 알 수 있고, RD는 1로 단말이 Recursive query방식을 원했다는 것을 알 수 있고, RA는 1로 RD에 대한 응답으로 Recursive query방식을 지원하는 것을 알 수 있고, 예약필드는 기본 값으로 000 이 저장되어 있고, R code영역은 Error가 발생 하지 않아 0000의 값이 들어가 있는 것 알 수 있다.

- 00 01 : number of questions의 값이다. 이 패킷의 Question의 개수는 1개 인 것을 알 수 있다.

- 00 01 : number of answer RRs의 값이다. Response를 받았기에 1개로 나타난다.

- 00 01 : number of authority RRs의 값이다. infocom.inje.ac.kr에 해당하는 ip주소를 가지는 DNS server가 직접 응답해주었다는 것을 알 수 있다.

- 00 01 : number of additional RRs의 값이다. 추가적으로 다른 DNS server에서도 Response가 발생 한 것을 알 수 있다.

- 07 69 6e 66 6f 63 6f 6d 04 69 6e 6a 65 02 61 63 02 6b 72 00 00 01 00 01 : Question에 대한 정보이다. query request message에 있는 Question영역의 값과 같다.

- c0 0c 00 01 00 01 00 00 0e 10 00 04 73 44 07 2b : c0 0c는 DNS message시작 후 0x0c 뒤에 name이 있다는 것을 알려 준다. 00 01 00 01 은 type과 class를 나타내며 00 00 0e 10은 TTL을 나타낸다. 또, 00 04는 Resource data의 길이를 나타내며 73 44 07 2b 는 Resource data를 나타낸다. 73 44 07 2b는 115.68.7.43 으로 infocom.inje.ac.kr의 ip주소는 115.68.7.43인 것을 알 수 있다.

- c0 14 00 02 00 01 00 00 0e 10 00 07 04 62 61 64 61 c0 14 : c0 14는 DNS message시작 후 0x14 뒤에 name이 있다는 것을 알려 준다. 00 02은 type을 나타내며 authoritative DNS server가 응답 했다는 것을 알려주고, 00 01은 class를 나타내며 internet인 것을 알 수 있다. 00 00 0e 10은 TTL을 나타내며 00 07은 Response data의 길이를 나타내며 04 62 61 64 61 c0 14는 Response data를 나타낸다.

 

- c0 40 00 01 00 01 00 00 0e 10 00 04 cb f1 fa : c0 40은 DNS message시작 후 0x40뒤에 name이 있다는 것을 알려 준다. 00 01 00 01 은 type과 class를 나타내며 ip주소를 응답하고 internet이라는 것을 알 수 있다. 00 00 0e 10은 TTL을 나타내며 00 04는 Response data의 길이를 나타내며 나머지 cb f1 fa 16는 Response data를 나타내고 infocom.inje.ac.kr의 또다른 ip주소는 203.241.250.22인 것을 알 수 있다.

 

 

3. Domain name을 응답받기 위한 DNS query (Type PTR) 절차 분석 실습

 

DNS query request 패킷의 내용을 hex값으로 적고 그 내용을 분석

 

ex)

 

 

 

 

 

 

 

 

 

 

 46

 67

 01

 00

 00

 01

 00

00

 00

 00

 00

 00

 03

 32

 34

 36

 03

 31

33 

39 

02 

31 

30 

 03

 31

 30

 36

 07

 69

 6e

 2d

 61

 64

 64

 72

 04

 61

 72

70 

61 

 00

 00

 0c

 00

 01

 

 

 

 

 

 

 

 

 

 

 

- 46 67 : identification의 값이다.

- 01 00 : flags의 값이다. Q/R영역은 0의 값으로 Request인 것을 나타내고 OPCode영역은 0000의 값으로 표준 query를 나타내고 TC영역은 Request이기 때문에 0이 들어가고 RD영역 단말이 recursive query방식을 원하기 때문에 1의 값이 들어가고 RA영역은 Request이기 때문에 위의 사진에는 나타나 있지 않지만 0의 값이 들어가 있을 것이고 예약필드는 0으로 0 0 0의 값이 들어가고 AA영역은 Request이기 때문에 0의 값이 들어가게 된다. 마지막으로 R code영역은 Request이기 때문에 값이 저장되어 있지 않는 것을 알 수 있다.

 

- 00 01 00 00 00 00 00 00 : Request message이기 때문에 Questions의 영역에만 1이 들어가게 되고 다른 number of Answer RRs, number of Authority RRs, number ofAdditional RRs의 영역에는 0이 들어간다.

 

- 03 32 34 36 03 31 33 39 02 31 30 03 31 30 36 07 69 6e 2d 61 64 64 72 04 61 72 70 61 00 00 0c 00 01 : 03 32 34 36 03 31 33 39 02 31 30 03 31 30 36은 ip주소 106.10.139.246에 해당하는 아스키 코드의 값이다. 앞의 Type A와 마찬가지로 길이를 먼저 나타낸 후 그다음 각 ip자리에 대한 아스키 코드 값이 적힌다. 여기서 눈여겨 볼 점은 nslookup 106.10.139.246의 명령어를 통해 PTR DNS packet들을 수집하였다. 하지만 여기서 name string영역에 해당하는 값을 보면 246 139 10 106이 저장되어있는데 이것을 보아 앞에서 이론 설명한 부분에서 말했듯 뒤에서부터 거꾸로 검색하는 것을 알 수 있다. 07 69 6e 2d 61 64 64 72는 in-addr를 나타낸다. 07은 길이고 나머지 부분이 in-addr을 나타낸다. 04 61 72 70 61은 arpa를 나타낸다. 04는 길이고 나머지 부분이 arpa를 나타낸다. 00은 name string이 끝나는 것을 알려준다. 00 0c 00 01은 query type과 query class를 나타내는데 ip주소에 대한 name을 알기위한 RTP Type이기 때문에 type에는 00 0c가 들어가고 internet을 의미하는 00 01이 들어간다.

 

DNS query response

 

 

 

 

 

 

 

 

 

 

 

 46

 67

 81

 80

 00

 01

 00

01 

 00

 05

 00

06 

 03

 32

 34

 36

 03

31 

 33

 39

02

31 

30

03

31

30

36

07

69

6e

2d

61

64

64

72

04

61

72

70

61

00

00

0c

00

01

c0

0c

00

0c

00

01

00

00

04

54

00

1a

03

69

72

31

02

66

70

03

76

69

70

03

73

67

33

05

79

61

68

6f

6f

03

63

6f

6d

00

c0

10

00

02

00

01

00

00

a6

4c

00

06

03

6e

73

32

c0

48

c0

10

00

02

00

01

00

00

a6

4c

00

06

03

6e

73

33

c0

48

c0

10

00

02

00

01

00

00

a6

4c

00

06

03

6e

73

34

c0

48

c0

10

00

02

00

01

00

00

a6

4c

00

06

03

6e

73

35

c0

48

c0

10

00

02

00

01

00

00

a6

4c

00

06

03

6e

73

31

c0

48

c0

95

00

01

00

01

00

01

7d

53

00

04

77

a0

f7

7c

c0

5f

00

01

00

01

00

01

7d

53

00

04

44

8e

ff

10

c0

71

00

01

00

01

00

01

7d

53

00

04

cb

54

dd

35

c0

71

00

1c

00

01

00

01

ae

f6

00

10

24

06

86

00

00

b8

fe

03

00

00

00

00

00

00

10

03

c0

a7

00

01

00

01

00

01

7d

53

00

04

44

b4

83

10

c0

83

00

01

00

01

00

01

7d

53

00

04

62

8a

0b

9d

 

 

 

 

 

 

 

 

 

 

 

 

 

 

- 46 67 : identification의 값이다

 

- 81 80 : flags의 값이다. Q/R영역은 1로 Response를 나타내고OPCode는 0000으로 표준 Query를 나타내고, AA는 0로Authoritative DNS server가 아닌 다른 DNS server에서 보낸 것이 라는 것을 알 수 있고 TC는 0으로 Response의 길이가 512Byte이하 인 것을 알 수 있고, RD는 1로 단말이 Recursive query방식을 원했다는 것을 알 수 있고, RA는 1로 RD에 대한 응답으로 Recursive query방식을 지원하는 것을 알 수 있고, 예약필드는 기본 값으로 000 이 저장되어 있고, R code영역은 Error가 발생 하지 않아 0000의 값이 들어가 있는 것 알 수 있다.

 

- 00 01 00 01 00 05 00 06 : Query의 Question의 개수가 1개이고 Response가 발생하여 1이 들어 가 있고 Authority RR이 5개 발생하고 Additional RR의 개수가 6개 인 것을 알수 있다.

 

- 03 32 34 36 03 31 33 39 02 31 30 03 31 30 36 07 69 6ㄷ 2ㅇ 61 64 64 72 04 61 72 70 61 00 00 0c 00 01 : Question에 대한 정보이다. query request message에 있는 Question영역의 값과 같다.

 

- c0 0c 00 0c 00 01 00 00 04 54 00 1a 03 69 72 31 02 66 70 03 76 69 70 03 73 67 33 05 79 61 68 6f 6f 03 63 6f 6d 00 : Answer에 대한 정보이다. 이 값을 보면 c0 0c 가 나오는데 name string의 부분이 DNS message의 시작 부분부터 0x0c 뒤에 있다는 것을 나타내며 00 0c 00 01은 type과 class로 PTR Type이므로 00 0c가 들어가고 internet을 의미하는 00 01이 저장되어 있다. 00 00 04 54는 TTL을 나타내며 00 1a은 Resource data의 길이를 나타낸다.마지막으로 03 69 72 31 02 66 70 03 76 69 70 03 73 67 33 05 76 61 68 6f 6f 03 63 6f 6d 00은 Resource data의 값이다. 앞의 빨간색의 숫자는 자리수를 나타내며 파란색의 숫자는 name에 대한 정보가 아스키 코드 값으로 저장이 되어 있다. 마지막 빨간 00은 Resource data의 끝을 의미한다.

* 여기서 주의해서 볼 점은 Type A의 answer부분에는 ip주소가 Hex값으로 나타난다. RTP request 할 때처럼 ip를 아스키 코드로 바꿔서 저장이 되지 않는다. 하지만 Type RTP의 answer부분에는 name이 Type A 할 때처럼 name을 아스키 코드로 바꿔서 저장이 된다.

 

- c0 10 00 02 00 01 00 00 a6 4c 00 06 03 6e 73 32 c0 48 c0 10 00 02 00 01 00 00 a6 4c 00 06 03 6e 73 32 c0 48 c0 10 00 02 00 01 00 00 a6 4c 00 06 03 6e 73 33 c0 48 c0 10 00 02 00 01 00 00 a6 4c 00 06 03 6e 73 34 c0 48 c0 10 00 02 00 01 00 00 a6 4c 00 06 03 6e 73 35 c0 48 c0 10 00 02 00 01 00 00 a6 4c 00 06 03 6e 73 31 c0 48 : Authoritative에 대한 정보이다. number of answer RRs의 값이 00 05이였기 때문에 많은 양의 정보가 저장되어 있다. 각각의 RR에 대한 정보의 시작은 c0이 나타내어주고 name string의 위치는 c0 뒤에 있는 hex값으로 표기한다.

 

- c0 95 00 01 00 01 00 01 7d 53 00 04 77 a0 f7 7c c0 5f 00 01 00 01 00 01 7d 53 00 04 44 8e ff 10 c0 71 00 01 00 01 00 01 7d 53 00 04 cb 54 dd 35 c0 71 00 1c 00 01 00 01 ae f6 00 10 24 06 86 00 00 b8 fe 03 00 00 00 00 00 00 10 03 c0 a7 00 01 00 01 00 01 7d 53 00 04 44 b4 83 10 c0 83 00 01 00 01 00 01 7d 53 00 04 62 8a 0b 9d : Additional information의 값이다. number of additional RRs의 값이 00 06으로 RR이 6개가 발생하였기 때문에 Additional information이 가지는 정보의 양은 많다. 마찬가지로 c0이 각각의 RR의 정보가 시작하는 것을 알려주고 뒤에 있는 hex값이 name string의 위치를 알려 준다.

 

4. DNS Query 종류

① Recursive queries

 

- host가 자신의 hosts file에 자신이 알고 싶어 하는 name에 대한 ip의 정보가 없으면 host는 자신의 local DNS server에 request한다. 이때 local DNS server도 request에 대한 정보가 없으면 root DNS server(TLD(Top Level Domain)에 따른 DNS server의 정보를 가지고 있는 DNS server)에 request하고 이 root DNS server도 request에 대한 정보가 없으면 TLD를 보고 그에 맞는 TLD DNS server에 request한다. 또, TLD DNS server도 request에 대한 정보가 없으면 TLD하위에 있는 부분을 관리하는 DNS인 authoritative DNS server로 request한다. 그럼 이 authoritative DNS server는 request에 대한 정보을 reply한다. reply할 때에는 authoritative DNS server가 TLD DNS server에게 reply하고 TLD DNS server는 root DNS server에게 reply하고 root DNS server는 local DNS server에게 reply하고 마지막으로 local DNS server는 물어 보았던 host에게 알려준다. 모든 DNS가 request에 대한 정보를 모른다고 하면 request는 host → local → root → TLD → authoritative(물어보는 정보를 가지고 있는 DNS) 순으로 보내지게 되고 reply는 authoritative → TLD → root → local → host(정보를 알기 위해 request를 최초 발생시킨 단말) 순으로 보내지게 되어 마지막으로 host가 알게 되는 것이다. 만약 request를 받은 DNS들이 request에 대한 정보가 있으면 그 DNS는 다음 DNS로 request하는 것이 아니라 자신에게 request를 보낸 곳에 reply한다. 예를 들면 host가 물어보는 정보가 root DNS server에 있다고 하면 host는 request를 local DNS server에게 발생시키고 local DNS server는 정보가 없기에 root DNS server에 request를 보낸다. 그럼 root는 정보를 가지고 있기 때문에 TLD DNS server에 request하는 것이 아니라 local DNS server에 reply를 보낸다. 그럼 local DNS server는 reply를 host로 보내는 것이다.

 

- reply를 받은 DNS들은 request에 대한 정보를 버리지 않고 자신도 저장하게 된다.

 

② Iterative queries

 

- Iterative queries방식은 Recursive queries방식과 차이가 있다. Recursive queries 방식은 DNS가 해당 DNS 에 request를 보내고 reply가 올 때까지 기다리는 방면 Iterative queries방식은 local DNS server가 각 DNS에게 계속 해서 request를 한다.

 

- Iterative queries방식은 일단 host가 local DNS server에게 request하면 local DNS server는 root  DNS server에게 request한다. root DNS server는 정보가 없으면 자신이 TLD DNS server에 request하는 것이 아니라 TLD DNS server의 정보를 local DNS server에게 알려준다. 그럼 local DNS server는 TLD DNS server로 request보내고 TLD DNS server는 정보를 가지고 있지 않으면 authoritative DNS server의 정보를 local DNS server에게 알려준다. 그럼 local DNS server는 authoritative DNS server에게 request를 보내게 되고 authoritative DNS server는 request에 대한 정보를 local DNS server에게 reply하고 local DNS server는 host에게 reply하는 방식이다. 만약 정보를 가지고 있는 DNS가 있으면 다음 DNS의 정보를 알려 주는 것이 아니라 request에 대한 정보를 reply한다.

 

③ Recursive and Iterative queries

 

- Recursive and Iterative queries방식은 Recurs queries와 Iterative queries를 합쳐진 방식이다. 이 방식은 local DNS server가 root DNS server에게 request하면 root DNS server는 request에 대한 정보를 가지고 있는 DNS의 정보를 local DNS server에게 알려준다.(Iterative queries방식과 같음) 그 후 local DNS server는 root DNS server에게 받은 DNS에게 request를 하고 reply가 올 때까지 기다린다.(Recursive queries방식과 같음)

'IT > 통신프로토콜 실습&연습문제' 카테고리의 다른 글

통신프로토콜 TCP(3)  (0) 2016.12.21
통신프로토콜 TCP(1)  (0) 2016.12.20
통신프로토콜 DNS(1)  (0) 2016.12.19
통신프로토콜 DHCP&연습문제(2)  (0) 2016.12.19
통신프로토콜 DHCP(1)  (0) 2016.12.18

+ Recent posts