2023. 02.04 10:00 정리
Transport Layer
- 트랜스포트 계층 프로토콜은 서로 다른 호스트에서 동작하는 애플리케이션 프로세스들 간의 논리적 통신을 제공한다.
- 트랜스포트 계층 프로토콜은 네트워크 라우터가 아닌 종단 시스템에서 구현된다.
- 송식 측의 트랜스포트 계층은 송신 애플리케이션 프로세스로부터 수신한 메시지를, 인터넷 용어로는 트랜스포트 계층 세그먼트인 트랜스포트 계층 패킷으로 변환한다.
TCP와 UDP
UDP는 애플리케이션에게 비신뢰적이고 비연결형인 서비스를 제공한다. 에러 복구는 애플리케이션 계층에서 이뤄진다.
TCP는 애플리케이션에게 신뢰적이고 연결지향형 서비스를 제공한다.
다중화와 역다중화
트랜스포트 계층 세그먼트의 데이터를 올바른 소켓으로 전달하는 작업을 역다중화라고한다.
출발지 호스트에서 소켓으로부터 데이터를 모으고 이에 대한 세그먼트를 생성하기 위해서 각 데이터에 헤더 정보로 캡슐화하고, 그 세그먼트들을 네트워크 계층으로 전달하는 작업을 다중화라고 한다.
트랜스포트계층 다중화에는 2가지 요구 사항이 있다.
첫째, 소켓은 유일한 식별자를 가진다.
둘째, 각 세그먼트는 세그먼트가 전달될 적절한 소켓을 가리키는 특별한 필드를 가진다.
이 특별한 필드라는 것은 출발지 포트 번호 필드와 목적지 포트 번호 필드다.
UDP 체크섬
UDP 체크섬은 오류 검출을 제공한다.
즉, 체크섬은 세그먼트가 출발지로부터 목적지로 이동 했을 때, UDP 세그먼트 안의 비트에 대한 변경사항이 있는지 검사하는 것이다.
예시를 통해 살펴보자.
아래와 같은 2개 16비트 워드가 존재한다.
1110011001100110
1101010101010101
이 두 16비트를 더하면
11011101110111011이 나온다. 1이 자리가 넘치므로 윤회식 자리올림을 한다.
그러면 값은 1011101110111100 값이 나온다. 그러면 이 값에서 체크섬을 구할 수 있다.
이 값을 모두 1로 만드는 16비트 워드가 체크섬이다.
만약 체크섬과 위 값을 이용해 값을 계산했는데 0 이나오면 오류가 있는 것이다. 0100010001000011이 체크섬이다.
통신을 주고 받으면 노이즈가 존재할수 밖에 없다. 노이즈는 flip bits(에러)를 발생시킨다.
ACK
중요한 정보를 주고 받을 때 신뢰적인 데이터 전송이 꼭 필요하다. 혹은 에러를 고칠 신뢰적인 데이터 전송이 필요하다.
채널에서 신뢰적인 통신을 위한 프로토콜을 생각해보자.
메시지 수신자는 문장을 받고 정상적이면 정상적으로 잘 왔다라는 답변을 보낼 것이고,
메시지가 올바르지 못하면 반복하라고 요청할 것이다.
이러한 메시지 받아쓰기 프로토콜은 긍정 확인 응답(positive acknowledgment)와 부정 확인 응답(negative acknowledgment)를 사용한다. 줄여서 ACKs와 NACKs라고 한다. 0이나 1로 표시할 수 있다.
만약 보낸이가 NACKs를 받으면 재전송한다. 정상적이면 보낸이는 ACKs를 수신한다.
그러나 만약 0과 1로 저장한 ACKs와 NACKs가 flipped 하면 어떡해야 할까?
그럼 송신자는 수신자가 전송된 데이터의 마지막 부분을 올바르게 수신했는지를 알 방법이 없다.
이러한 새로운 문제에 대한 간단한 해결책은 데이터 패킷에 새로운 필드를 추가하고 이 필드 안에 순서번호를 삽입하는 방식으로 데이터 패킷에 송신자가 번호를 붙이는 것이다. 수신자는 수신된 패킷이 재전송 인지를 결정할 때는 이 순서번호만 확인하면 된다.
그러나 ACKs 든 NACKs든 잘 받았다, 못 받았다 이런 경우에 1번만 보내는 걸로 약속하면 되므로 0, 1로 값을 안정해서 보내줘도 된다.
그래서 잘 받았을때만 보내기로 약속을 했다. ACKs만 보낸다.
못 받았다 이런 경우에는 카운트 다운 타이머를 세팅. 일정 시간 동안 ACKs가 안오면 재전송한다.
파이프라이닝
- 전송 후 대기 방법으로 동작하는 대신에 송신자에게 확인 응답을 기다리지 않고 여러 패킷을 전송하도록 허용하는 것이다.
- 그럼 만약 확인 응답들을 기다리기 전에 송신자가 3개의 패킷을 전송하도록 허용한다면, 송신자의 이용률은 3배가 될 것이다.
- 많은 전송 중인 송신자-수신자 패킷을 파이프라인에 채워 넣음으로써 나타낼 수 있다. 이 기술을 파이프라이닝 이라고 한다.
파이프라인 오류 회복의 두 가지 기본적인 접근방법은 GO-Back-N, GBN 과 Selective Repeat , SR이 있다.
- GBN 은 쉽게 말해 버퍼내에 패킷을 모두 전달한다.
- SR은 버퍼내에 ACKs를 못 받은 패킷만 전달한다.이 방식이 좋지만 GBN을 많이 사용한다.
- 사실 transport 계층에서 에러는 많이 발생하지 않는다.
2023. 02.04 11:15 정리
참고자료
컴퓨터 네트워킹 하향식 접근 제 7판
댓글