[네트워크] 트랜스포트 계층 1

.·2021년 7월 22일
0

네트워크

목록 보기
3/4
post-thumbnail

트랜스포트계층 서비스

개요

  • 다른 호스트사이에서 동자하고 있는 어플사이에 논리적 통신을 제공
  • 트랜스포트 프로토콜은 종단 시스템에서 작동
  • 송신 : 메세지를 세그먼트로 만들어 네트워크 계층으로 보냄
  • 수신 : 세그먼트를 메시지로 만들어 어플리케이션 계층으로 보냄
  • 예시 : TCP, UDP

트랜스포트 계층과 네트워크 계층의 관계

  • 네트워크 계층 : 호스트간의 논리적 통신 제공
  • 트랜스포트 계층 : 프로세스간의 논리적 통신 제공
  • 트랜스포트 계층이 제공하는 서비스는 네트워크 계층이 제공하는 서비스에 영향을 받음
  • 지연 보장, 대역폭 보장

인터넷 트랜스포트 계층

  • 세그먼트 : 트랜스포트 계층 패킷
  • TCP : 신뢰적, 연결형 서비스, 혼잡 제어, 흐름 제어
  • UDP : 비신뢰적, 비연결형
  • TCP, UDP의 기능은 종단 시스템 사이의 IP 전달 서비스를 두 프로세스 간의 전달 서비스로 확장 시키는것
  • UDP와 TCP는 헤더에 오류 검출 필드를 포함해 무결성 검사 제공

다중화와 역다중화

  • 역다중화(demultiplexing) : 트랜스포트 계층 세그먼트의 데이터를 올바른 소켓으로 전달하는 작업
  • 다중화(multiplexing) : 출발지 호스트에서 소켓으로부터 데이터를 모아 각 데이터에 헤더 정보로 캡슐화 한 후 해당 세그먼트를 네트워크 계층으로 전달하는 작업

  • 소켓은 유일한 식별자를 지님(포트번호)
  • 각 세그먼트는 세그먼트가 전달될 적절한 소켓을 가리키는 식별자를 지님
  • 출발지 포트 번호 필드와 목적지 포트 필드 번호를 통해 이를 구분
  • 호스트의 각 소켓은 포트 번호를 할당 받고 세그먼트가 호스트에 도착하면 포트 번호를 검사해 해당하는 소켓으로 세그먼트를 보냄

비연결형 다중화와 역다중화

  • UDP 소켓으로 데이터를 전송할 때 도착지 아이피 주소와 포트 넘버를 명시해야 함
  • 출발지 아이피 주소와 포트 넘버가 다르더라도 도착지가 같으면 동일한 소켓으로 전달

  • TCP 소켓으로 데이터를 전송하면 출발지 IP 주소, 포트 넘버, 도착지 IP 주소, 포트 넘버를 명시해야 함

  • 다른 아이피 주소와 포트 넘버를 지닌 데이터 그램은 동일한 도착지 아이피 주소와 포트 넘버를 지니면 다른 소켓으로 전달 됨

UDP

개요

  • 트랜스포트 계층 프로토콜이 할 수 있는 최소 기능으로 작동
  • 다중화/역다중화 기능 , 오류 검사 기능
  • 비연결형 프로토콜로 핸드셰이킹 과정이 없으며 각 UDP 세그먼트는 독립적으로 작동
  • 중간에 데이터가 손실 될 수 있으며 순서를 보장하지 않음
  • 스트리밍, DNS에서 주로 사용
  • 무슨 데이터를 언제 보낼지 어플리케이션 레벨에서 더 정교한 제어가 필요

UDP 세그먼트 구조

  • 출발지 포트 번호, 목적지 포트 번호
  • 길이 : UDP 세그먼트의 길이
  • 체크섬 : 오류가 발생했는지 검사

체크섬

  • 오류 검출을 제공
  • 세그먼트가 출발지로부터 목적지로 이동 해쓸 때 UDP 세그먼트 안의 비트에 대한 변경사항이 있는가를 검사
  • 송신 측은 세그먼트 안에 있는 모든 16비트 워드 단위로 더하고 이에 대하여 1의 보수를 수행
  • 덧셈 과정에서 발생하는 오버플로는 윤회식 자리올림
  • 1의 보수는 0을 1로 1를 0으로 전부 바꾸는 것
  • 수신 측은 세그먼트 안에 있는 비트들을 모두 16비트 워드 단위로 더하고 체크섬 필드값을 더하면 오류가 없으면 전부 1이 됨

신뢰성 있는 데이터 전송

개요

  • 신뢰적인 데이터 채널 안에서는 전송된 데이터가 손상되지 않으며 전달된 순서가 보장됨
  • 신뢰적인 데이터 전송 프로토콜(Reliable Data Transfer Protocol)

RDT의 구축

  • rdt.1.0 - 완벽하게 신뢰적인 채널 상에서의 신뢰적인 데이터 전송

  • 하위 채널이 완전히 신뢰적인 경우
  • 송신 : 상위 계층으로부터 데이터를 받아 들이고 이를 포함한 패킷을 생성한 후에 채널로 패킷 송신
  • 수신 : 하위 계층으로부터 패킷을 수신하고 데이터를 검출하여 상위 계층으로 전달
  • 완전히 신뢰적인 채널에서는 오류가 발생하지 않기 때문에 피드백 과정이 불필요
  • rdt2.0 - 비트 오류가 있는 채널 상에서의 신뢰적 데이터 전송
  • 오류검출, 수신자 피드백, 재전송 기능 사용
  • 오류 검출 : 체크섬 필드 사용
  • 수신자 피드백 : 긍정 확인 응답(ACK) , 부정 확인 응답(NAK)

  • ACK, NAK 패킷이 손상될 수 있는 가능성을 고려하지 않음
  • rdt2.1 - 순서 번호를 이용한 신뢰적 데이터 전송
  • 송신자는 수신자가 메세지를 제대로 수신했는지 알 수 없음
  • 송신자가 왜곡된 ACK 또는 NAK 패킷을 수신할 때 현재 데이터 패킷을 다시 송신
  • 이는 수신자 측에서 도착하는 데이터 패킷이 새로운 데이터인지 재전송인지 알 수 없다는 문제가 존재
  • 중복 패킷을 전송하는 문제는 데이터 패킷에 순서 번호를 삽입하여 해결

  • rdt2.2 - NAK-free 프로토콜
  • NAK를 송신하는 대신 가장 최근에 정확하게 수신된 패킷에 대해 ACK 송신
  • 같은 패킷에 대해 2개의 ACK를 수신한 송신자는 수신자가 두 번 ACK한 패킷의 다음 패킷을 정확하게 수신하지 못했다는 점을 알 수 있음

  • rdt3.0 - 비트오류와 손실 있는 채널 상에서의 신뢰적 데이터 전송
  • 컴퓨터 네트워크처럼 하위 채널이 패킷을 손실하는 경우를 가정
  • 송신자는 ACK 시간을 기다릴 책임을 지님
  • ACK 패킷이 지정한 시간내로 오지 않는다면 데이터를 재전송
  • 패킷 전송이 늦어서 (데이터 손실 X) 데이터를 중복 전송하는 경우 순서 번호를 통해 이를 해결
  • 전송 후 대기 프로토콜

파이프라인된 신뢰적 데이터 전송 프로토콜

  • rdt 프로토콜은 전송 후 대기 프로토콜이기 때문에 호스트 간의 길이가 멀다면 대기 시간이 길어지는 단점이 있음
  • 이를 해결하기 위해 확인 응답을 기다리기 전에 송신자가 여러개의 패킷을 전송하도록 허용
  • 순서 번호가 지켜져야 하고 프로토콜의 송신자와 수신자는 확인응답 되지 않은 패킷을 버퍼링 해야 함
  • Go-Back-N과 Selective Repeat SR 프로토콜이 존재

Go-Back-N : sender

  • GBN 프로토콜에서 송신자는 확인응답을 기다리지 않고 여러 패킷을 전송 가능
  • 파이프라인에서 확인응답이 안 된 패킷의 허용 수 N보다 크지 않아야 함
  • N을 윈도우 크기라 부르며 허용 가능한 순서 범위를 나타냄
  • GBN 프로토콜에서 순서번호 n을 가진 패킷에 대한 확인 응답은 누적확인응답으로 인식
  • 타임아웃이 발생하면 송신자는 이전에 전송했지만 아직 확인응답이 되지 않은 패킷을 모두 다시 송신

선택적 반복(Selective Repeat - SR)

  • GBN은 패킷 하나의 오류 때문에 모든 패킷을 재전송하므로 불필요하게 많은 패킷은 재전송하는 단점이 존재
  • SR 프로토콜은 수신자에세 오류가 발생한 패킷을 수신했다고 의심되는 패킷만을 송신자가 재전송
  • 패킷에 대한 개별적인 확인응답 요구

  • 수신자와 송신자의 윈도우 사이의 동기화 부족은 오류를 발생 시킬 수 있음

  • 0이 재전송 되는 0 인지 새로운 데이터인 0 인지 구분 할 수 없음
profile
지금부터 공부하고 개발한것들을 꾸준하게 기록하자.

0개의 댓글