보안/학교,기관

전송층 개요(네트워크보안)(Wireshark로 배우는 컴퓨터 네트워크)

지트리아 2022. 11. 24. 20:19

용어정리

 

 

 

본문정리

개요

전송층은 프로세스-대-프로세스 통신ㅇ르 제공하는데, 하나는 로컬 호스트이고 나머진 원격 호스트이다. 데이터가 전송될 때 라우터를 거치는데 라우터는 하위 3계층만 이용한다. 따라서 전송층은 논리적인 연결로 직접 통신한다 생각해도 좋다.

 

전송층 서비스

전송층은 응용층에게 서비스를 제공하기 위해 네트워크층으로부터 서비스를 제공받는다. 이하는 전송층이 제공하는 서비스이다.

 

프로세스-대-프로세스 통신

호스트-대-호스트 통신과 프로세스-대-프로세스 통신에는 차이가 있다. 네트워크층은 컴퓨터 레벨 통신(호스트-대-호스트)만 책임을 진다. 이후 전송층은 해당 메시지를 올바른 프로세스에서 처리한다.

 

주소 체계 : 포트 번호

프로세스-대-프로세스 통신을 수행하기 위한 가장 보편적인 방식은 클라이언트 서버 패러다임이다. 클라이언트(로컬 호스트)에 있는 프로세스는 서버(원격 호스트)에 있는 프로세스로부터 제공되는 서비스를 필요로 한다.(클라이언트와 서버 프로세스는 같은 이름을 가지고 있다.(daytime 클라이언트/서버 프로세스)) 오늘날 운영체제는 다중 사용자와 다중 프로그래밍 환경을 제공하기 때문에 다음과 같은 사항이 정의 되어야 한다.(로컬 호스트/프로세스, 원격 호스트/프로세스)

호스트는 IP주소를 이용하여 정의되며 프로세스는 포트 번호로 식별된다. 여기서 클라이언트 프로그램은 임시 포트 번호로 자신을 지정하지만 서버 프로세스는 임시가 아닌 잘 알려진 포트 번호(범용 포트 번호)로 지정된다. 모든 클라이언트 프로세스는 대응되는 서버 프로세스의 잘 알려진 포트 번호를 알고 있다.

데이터의 최종 목적지를 선택함에 있어 IP 주소와 포트 번호가 담당하는 역할이 다르다. IP주소는 특정 호스트를 정의하기 위해, 포트 번호는 여러 프로세스 중 하나의 프로세스를 정의하기 위해 사용된다.

포트 번호는 0과 65,535 사이의 번호 인데 ICANN은 포트 번호를 잘 알려진, 등록된, 동적(또는 사설)로 나누었다. 잘 알려진 포트 번호는 0과 1023범위 · 등록된 포트 번호는 1024와 49,151범위 · 동적 포트 번호는 49,152와 65,535범위이다.

소켓 주소IP 주소와 포트 번호의 조합이다. 클라이언트 소켓 주소는 클라이언트 프로세스를 유일하게 정의하고, 서버 소켓 주소는 서버 프로세스를 유일하게 정의한다. 전송층 서비스를 이용하기 위해선 두 개의 소켓 주소가 필요하다. 네트워크층 헤더는 IP 주소를 포함하고 전송층 헤더는 포트 번호를 포함한다.

 

캡슐화와 역캡슐화

캡슐화는 전송측, 역캡슐화는 수신측에서 수행된다. 전송할 메시지가 있는 프로세스는 한 쌍의 소켓 주소, 전송층에 필요한 정보들을 전송층에 보낸다. 전송층은 여기에 자신의 헤더를 붙인다. 수신측에선 전송층이 헤더를 제거하고 메시지를 응용층에서 실행하는 프로세스에 전달한다. 수신된 메시지에 대한 응답을 보낼 경우를 대비해 송신 측 소켓 주소가 프로세스로 전달된다.

 

다중화와 역다중화

다중화는 여러 발신지로부터 정보를 수신하는 경우, 역다중화는 여러 목적지로 전달하는 경우를 의미한다. 송신 측은 다중화를, 수신측은 역다중화를 수행한다.(헷갈리고 있다 ㅎ... 일단 송신의 '전송층'은 세 개의 프로세스로부터 세 개의 메시지를 받는다. 여기서 '수신'을 한다고 생각하면 된다. 수신측의 전송층은 해당 메시지를 받으면 해당 메시지가 전달되어야 하는 목적지(프로세스)로 전달한다! 이걸 '송신'이라 생각하면 된다.) 빨간글은 다중화 장치, 역다중화 장치로서 전송층은 임무를 행한다.

 

흐름 제어

흐름 제어는 소비자(수신측) 측에서 데이터를 과도하게 수신하여 정보의 일부를 손실시키는 것을 방지하는 것이다.

정보를 생산자에서 소비자로 전달하는 방식은 밀기와 끌기 중 하나로 이루어진다. 밀기소비자의 요청 없이 정보가 생성될 때마다 전송 측에서 정보를 전달하는 경우이고, 끌기는 소비자가 요청한 경우에만 생산자가 정보를 전달하는 경우이다.

밀기 방식은 과도한 수신으로 정보를 손실할 수도 있다. 따라서 전송을 중지해달라, 다시 수신할 준비가 되었다는 흐름 제어가 필요하다. 끌기는 흐름제어가 필요없다.

전송층 통신을 위해선 송신 프로세스/전송층, 수신 전송층/프로세스가 필요하다. 

송신 프로세스는 생산자로 밀기 방식을 이용한다.

송신 전송층은 소비자와 생산자 역할을 둘 다 하며 송신 프로세스로 부터 받은 데이터를 캡슐화 한 후 밀기 방식으로 수신 전송층에 보낸다.

수신 전송층은 소비자와 생산자 역할을 둘 다 하며 메시지를 역캡슐화하고 응용층으로 전달하지만 끌기 방식으로 수신 프로세스에 보낸다.

 

흐름 제어는 여러 방식으로 구현될 수 있지만 흔한 방식은 두 개의 버퍼를 이용하는 것이다. 수신 전송층의 버퍼가 가득 차면 송신 전층에게 전송을 멈추도록 알리고, 버퍼에 빈 공간이 생기면 수신 전송층은 송신 전송층에게 다시 전송해도 된다는 메시지를 보낸다.

 

오류 제어

네트워크층은 신뢰성을 제공하지 않기 때문에 응용층에서 신뢰성을 요구하는 경우 전송층에서 신뢰성을 제공할 수 있어야 한다. 오류 제어 서비스를 추가함으로써 신뢰성을 제공한다. 제공 기능은 다음과 같다.

1. 훼손된 패킷의 감지 및 폐기

2. 손실되거나 제거된 패킷을 추적하고 재전송

3. 중복 수신 패킷을 확인하고 폐기

4. 손실된 패킷이 도착할 때까지 순서에 어긋나게 들어온 패킷을 버퍼에 저장

오류제어는 송신/수신 전송층만 관여한다.

 

패키의 순서 번호를 저장할 수 있도록 전송층 패킷에 한 필드가 추가되었다. 이는 패킷이 훼손, 손실 발생시 송신 전송층에게 몇번 패킷을 재전송하도록 알려줄 수 있으며, 만약 순서 번호가 같다면 중복 수신을 감지할 수도 있고, 순서가 어긋난것도 알 수 있다. 다만 모듈러 기반으로 증가하기 때문에 겹칠 수 있다. 만약 3비트가 설정되었다면 0~7다시 0~7 즉 순서 번호가 겹칠 수 있다. 

 

수신 측에서는 오류 없이 잘 수신된 패킷에 대해 확인응답(ACK)를 전송할 수 있다. 수신 측은 훼손된 패킷을 단순히 버린다.(응답을 주지 않음) 송신 측은 타이머를 구동하여, 타이머가 만료되기 전 ACK가 도착하지 않으면 재전송한다. 수신 측은 이때 중복된 패킷을 폐기한다. 순서가 어긋나면 폐기하거나 버퍼에 저장된다.

 

흐름 제어와 오류 제어의 결합

두 개의 버퍼에 번호가 매겨지면 오류 제어와 흐름 제어 기능이 결합할 수 있다.

버퍼는 미닫이 창이라고 하는 일련의 패킷으로 표현된다. 송신 측에서 패킷이 전송되면 관련 패킷이 마크가 되는데 패킷이 마크가 되면 버퍼가 다 차서 더이상 수신할 수 없다는 것을 의미한다. 확인응답이 수신되면 해당 패킷의 마크는 해체된다. 대부분의 프로토콜은 선형 표현 방식을 이용하여 미닫이 창을 보여준다. 이는 좀 더 작은 공간을 이용하여 표현할 수 있다는 장점이 있다.

 

혼잡 제어

로드는 네트워크에서 처리할 수 있는 패킷의 수를 나타낸다. 이때 로드의 용량을 초과하는 경우 혼잡이 발생한다. 혼잡 제어는 혼잡을 제어하고 로드가 용량보다 작도록 하기 위한 메커니즘과 기술들이다.

혼잡은 라우터나 스위치가 패킷을 저장하기 위한 버퍼인 큐를 가지고 있기 때문에 발생한다. 큐의 용량은 유한하며 저장할 수  있는 것보다 많은 패킷이 라우터에 들어올 수 있다.

 

개방 루프 혼잡 제어에서는 혼잡을 사전에 방지하기 위한 정책들이 적용된다. 이하의 정책이 포함된다.

재전송 정책은 일반적으로 혼잡을 가중시키나 적절한 방식(재전송 정책과 재전송 타이머)은 효율을 최적화하며 혼잡을 방지한다. 

창 정책은 송신 측에서 창(window)의 형태 역시 혼잡에 영향을 미침을 의미하는데 선택적 반복 창 방식이 N-프레임-후퇴 창보다 좋은 성능을 제공한다.(무슨 소린지 모르겠다..

확인응답 정책 또한 영향을 미친다. 수신 측에서 수신한 각 패킷에 대해 확인응답을 천천히 하면 송신 측의 전송 속도는 느려지며 이는 확인 응답에 도움이 된다. 즉 적은 확인응답 전송은 네트워크 부하를 줄인다.

 

폐 루프 혼잡 제어는 혼잡이 발생한 후 혼잡을 완화시키기 위한 방식이다. 송신 창의 크기는 가변적인데 송신 측 전송층은 패킷의 손실을 관찰하여 인터넷에서 혼잡을 감시하고 혼잡이 증가하는 경우에는 창의 크기를 작게 하거나 또는 혼잡이 완화하는 경우에는 창의 크기를 늘린다.

 

비연결형과 연결형 서비스

전송층 프로토콜도 비연결형과 연결형 서비스를 제공하는데  네트워크층과는 의미가 다르다.  전송층은 물리적이 아닌 논리적으로 연결되어 있기 때문이다. 전송층의 비연결형 서비스패킷 간의 독립성을 의미하며, 연결형 서비스는 종속성을 의미한다.

 

비연결형 서비스메시지를 전송층에서 수신 가능한 크기의 여러 개의 데이터 단편으로 나눈 후 각 데이터 단편을 하나씩 전송층으로 전달한다. 즉 데이터들의 관계를 고려하지 않고 데이터 단편을 독립적인 단위로 간주한다. 따라서 송신측엔 메시지가 순서에 맞지 않게 도착할 수도 있고 수신측엔 메시지가 손실 되었는지 알 수가 없다. 비연결형 서비스는 흐름 제어, 오류 제어, 혼잡 제어가 구현될 필요가 없다.

 

연결형 서비스에서 클라이언트와 서버는 먼저 연결을 설정되며 데이터 교환이 완료된 후 연결은 해제된다. 네트워크층의 연결형 서비스는 호스트와 그 사이 라우터들 간의 협력을 의미 하지만 전송층의 연결형 서비스는 종단 호스트만을 포함한다. 연결형 서비스는 흐름 제어, 오류 제어, 혼잡 제어 등이 구현될 수 있다.

 

전송층 프로토콜

전송층 프로토콜은 앞에서 설명한 서비스들을 결합함으로써 이루어진다.

 

단순 프로토콜

단순 비연결형 프로토콜은 흐름 제어나 오류 제어가 없다. 수신 측은 수신한 패킷을 즉시 처리할 수 있을거라 가정하기 대문에 버퍼 초과가 발생하지 않는다고 생각한다. 

 

정지-후-대기 프로토콜

정지-후-대기 프로토콜은 흐름 제어와 오류 제어를 모두 제공한다. 이는 연결형 프로토콜이다. 송/수신측은 모두 크기가 1인 미닫이 창을 사용한다. 즉 송신 측은 한 번에 하나의 패킷을 전송하고 확인응답이 오기 전까지는 다음 패킷을 전송하지 않는다. 패킷이 훼손되었는지를 검사하기 위하여 각 데이터 패킷에 검사합을 추가한다. 훼손되었다면 응답없이 단순히 버린다. 이후 송신측은 패킷을 전송할  때마다 타이머를 구동하며 이후 위에 설명처럼 활동한다. 

패킷을 중복 수신하지 않도록 프로토콜은 순서 번호와 확인응답 번호를 사용한다. 일반적인 상식으로 활동할 수 있지만 예외가 하나있다. 바로 확인응답이 훼손되거나 손실되는 경우이다. 이때는 패킷이 중복된다. 순서 번호를 0123---으로 설정하기보단 010101--로 설정하는 것이 해당 프로토콜의 특징이다.

수신측의 확인응답 번호는 수신 측에서 받기 원하는 다음 패킷 번호를 나타낸다. 예를 들어 패킷 1이 들어오면 확인응답번호로 0을 보낼 것(ACK)이다.

해당 프로토콜은 비효율적이다. 대역폭이 크고 왕복 지연이 길기 때문이다. 두 값을 곱한 것을 대역폭-지연 곱이라 한다.

 

 

파이프라인이란 네트워크와 다른 분야에서 이전 업무가 완료되기 전에 새로운 업무가 시작되는 경우를 일컷는다. 예를 들어 정지후대기 프로토콜은 확인응답 받기 전엔 다음 패킷을 전송하지 못하기 때문에 파이프라인의 기능을 못하지만 N-프레임-후퇴 프로토콜과 선택적 반복 프로토콜피드백을 수신하기 전에 추가적인 패킷을 전송할 수 있어 파이프라인이 제공된다. 파이프라인은 대역폭 지연 곱의 관점에서 비트의 수가 많은 경우 효율을 향상 시킨다.

 

N-프레임-후퇴 프로토콜

효율을 향상시키기 위해선 확인응답을 기다리는 동안에 여러 개의 패킷을 전송할 수 있어야 한다. 해당 프로토콜이 이를 달성할 수 있다. 

 

여기서 순서 번호는 modulo 2^n이다. 여기서 n은 순서 번호 필드의 비트 수이다.

확인응답 번호는 누적 값이며 수신하기를 기대한는 다음 패킷의 순서 번호이다. 확인응답 번호가 7이면 6번까지는 안전하게 도착했고 7의 패킷을 기다리고 있다는 의미이다.

 

송신창은 전송 중이거나 전송될 데이터 패킷의 순서 번호를 포함하는 가상의 상자를 나타낸다. 창의 최대 크기는 2^n -1 이다. 이 창은 가변일 수 있다. 총 4 부분으로 나뉘는데 보냈고 확인응답을 받음 · 대기(보냈지만 확인응답을 못받음) · 프로세스로부터 수신되면 보냄 · 프로세스로부터 데이터를 수신하더라도 전송 불가가 그 구성이다. 여기서의 특징을 살펴보자면 첫번째 부분은 사본을 보관하지 않는다. 두 번째 패킷은 미해결 패킷이라 한다. 

창은 미해결 패킷, 전송할 다음 패킷, 창 크기인 세 개의 변수가 창의 크기와 위치를 정의한다.

ackNO은 sf와 sn 사이의 값을 갖는수 이다.(보냈고 보낼 가장 처음것 사이)

 

수신창은 올바른 데이터 패킷을 수신하고 또한 올바른 확인응답이 전송될 수 있도록 해준다. N-프레임-후퇴에서 수신창은 항상 1이다. 순서에 어긋나게 도착한 패킷은 폐기되며 재전송된다. 창은 항상 (R+1)modulo2^n으로 이동한다. 

 

타이머에서 중요한 것은 첫 번째 미해결 패킷을 위한 것은 늘 먼저 만료된다. 해당 패캣의 타이머가 만료되면 모든 미해결 패킷은 재전송된다. 즉 재전송 될때 겹치는 부분이 생길 수 있다. 이것이 N-프레임-후퇴 프로토콜이라 불리는 이유이다.

 

즉 n-프레임-후퇴에서 n = 1 인 것이 정지-후-대기 이다.

 

선택적 반복 프로토콜

N-프레임-후퇴 프로토콜은 순서에 어긋나게 들어온 패킷을 버퍼에 저장할 필요 없이 폐기하면 되는 수신 측 프로세스를 간단히 할 수 있지만, 버리는 패킷이 많다. 선택적 반복 프로토콜은 손실된 패킷만 선택적으로 재전송된다. 

 

여기서 송신창과 수신창은 2^(n-1) 크기이다. 순서 번호는 0~15일 수 있지만 송신창은 최대 8이라는 것이다.

수신 창에 순서에 어긋나게 도착하면 버퍼에 저장된다. 순서에 맞는 것만 응용층에 전달한다.

 

타이머는 각각의 미해결 패킷마다 하나씩 타이머를 사용한다. (N-프레임-후퇴 프로토콜에선 미해결 패킷들을 하나의 그룹으로 처리한다.) 하지만 현실에선 하나의 단일 타이머만 사용한다.

 

확인 응답 또한 의미가 다른다. N-프레임-후퇴에선 ackNo는 누적이고 이전의 모든 패킷이 잘 도착했다는 의미이다. 선택적 반복에선 하나의 단일 패킷의 순서 번호를 나타낼 뿐 다른 패킷들에 대한 피드백을 제공하지 않는다.

 

양방향 프로토콜 : 피기백킹

위에 있는 모든 프로토콜은 데이터 패킷이 단방향이였다. 실제론 양방향 모두 전송이 되는 것이 일반적이다. 피기백킹이 이 역할을 할 수 있는데, 쉽게 설명하면 패킷을 보낼 때 왔던 정보의 피드백과  확인응답을 같이 보내는 것이다. 

 

 

본 문제

Q1. 전송층의 주요 임무 중 하나는 ---통신이다.

프로세스-대-프로세스

 

Q2. 일반적으로 클라이언트 프로그램은 --- 포트 번호를 이용한다.

임시

 

Q3. 일반적으로 서버 프로그램은 ---포트 번호를 이용한다.

잘 알려진

 

Q4. 소켓 주소는 ---이 결합된 것이다.

정답 없음(IP+Port)

 

Q5. ---는 하나 이상의 발신지로부터 정보를 수신하는 것을 의미한다.

다중화

 

Q6. ---는 하나 이상의 발신지로 정보를 전달하는 것을 의미한다.

역다중화

 

Q7. ---는 소비자로부터 요청을 기다리지 않고 생산자가 생산한 정보를 전달하는 것을 의미한다.

밀기

 

Q8. ---는 소비자가 받을 준비가 된 경우에 정보를 수신하는 것이다.

끌기

 

Q9. 정지-후-대기 프로토콜에서, 송신 창의 크기는 --- 이고 수신창의 크기는 ---이다. 여기에서 n은 순서 번호에 사용되는 비트의 수이다.

1,1

 

Q10. N-프레임-후퇴 프로토콜에서 송신 창의 크기는 ---이고 수신 윈도우 크기는 ---이다. 여기에서 n은 순서 번호에 사용되는 비트의 수이다.

1, 2^n - 1

 

Q11. 선택적 반복 프로토콜에서 송신 창의 크기는 ---이고 수신 윈도우 크기는 ---이다. 여기에서 n은 순서 번호에 사용되는 비트의 수이다.

2^(n-1), 2^(n-1)