[네트워크] 8차시 - 전송계층(1)
2023. 4. 18. 17:50ㆍCS/네트워크
728x90
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎
전송계층 신뢰성 확보 방법론을 배운다. 어떻게 End-to-End 통신에서 신뢰성 있는 커뮤니케이션을 제공할지에 대해서 학습한다.
1. Reliable Networking(End-to-End)
1-1. 신뢰 있는 네트워크와 현실 네트워크
- 이상적인 네트워크는 bit, byte의 흐름이 고스란히 그대로 전달되는 네트워크
- 현실 네트워크는 bit, byte가 패킷화 되어 전달되기 때문에
- 무한한 bit, byte의 흐름을 제공할 수 없고
- 패킷이 유실될 수 있고
- 패킷의 순서가 바뀔 수 있고
- 패킷이 변조될 수 있다.
1-2. 신뢰 있는 네트워크를 만들기 위해서는
- 무한한 흐름을 제공하기 위해 bit, byte의 흐름을 패킷화 한다.
- 많은 양의 데이터(ex. 1GB)를 한꺼번에 보낼 수 있는 네트워크는 없다.
- 슬금슬금 몇 byte씩 보내는 데이터를 일정 수준까지 모아서 보내는 네트워크는 바람직하지 않을 수 있다.
- 패킷이 유실되는 것을 막기 위해 타임아웃을 발생시켜 패킷을 재전송한다.
- 패킷이 유실되는 경우는 전송 유실, ACK 유실, ACK는 성공적으로 보내졌는데 딜레이가 오래 걸려 타임아웃 되는 경우
- ACK(Acknowledgement code): 승인을 서명하거나, 응답을 보내기 위해, 통신 프로토콜의 일부로서 통신 프로세서나 컴퓨터 사이를 지나는 신호
- 패킷의 순서를 보장하기 위해 패킷에 번호(sequence number)를 붙인다.
- 무한히 큰 자연수를 패킷 번호에 붙이기 어렵다.
- 패킷의 순서가 바뀌지 않으면 1byte로 재사용이 가능하지만
- 패킷의 순서가 바뀐다면 충분하지 않다. (딜레이 때문)
- 무한히 큰 자연수를 패킷 번호에 붙이기 어렵다.
- 패킷의 변조를 막기 위해 CheckSum, Error correction code, Error staction code를 사용한다.
2. 성능 향상: Pipelining
- 성능이 좋지 않은 이유: 전송률은 높지만 딜레이가 커짐: 패킷을 보내고 ACK를 받아야 패킷을 보내기 때문 → pipelining
- 연속된 대량의 작업이 순차성을 갖고 있으나 앞의 일이 종료하지 않고도 다음 일을 시작할 수 있는 병렬성을 가진 경우 성능향상기법
2-1. Go-back-N
- 최대 N개의 packet을 병렬적으로 처리
- 송신 측에서는 N개의 packet을 buffering - 재전송을 하기 위해서
- buffering: 수신이 확실하지 않은 packet에 대해 재전송을 위해 보관하는 것
- 패킷이 확인되지 않았다 해도 pipelining을 하는 것이기 때문에 그다음 패킷을 보낸다.
- 수신 측에서는 순차적으로 잘 수신된 packet에 대하여 Ack를 송신하고 packet의 payload를 순차적으로 응용계층으로 올려 보낸다.
- payload: packet은 packet의 내용을 담기 위한 짐차, payload는 실제 짐(전송하고자 하는 내용)
- 순차적으로 잘 수신된 packet에 대해 Ack를 송신한다
- 2번 packet의 Ack는 받지 못했지만 1번, 3번 packet의 Ack를 수신받음
- = 3번 packet 까지는 순차적으로 잘 받았다 = 2번 packet에 대한 Ack을 받지는 못했지만 3번 packet까지는 잘 받았다는 뜻을 내포하기 때문에 자동적으로 2번 packet도 잘 받았다. ⇒ (Ack) 패킷이 유실되었지만 그 효용은 살아있다.
- 송신 측에서는 buffer에 여유가 생기면(Ack를 받아 패킷을 버림) 추가로 pipeling을 한다.
- 수신 측에서 순서에 맞지 않는(이빨이 빠진) 패킷이 온 경우 반응 (예. 4번 packet을 받지 못하고 5번 packet을 받은 경우)
- 조용히 있는다. - 아무것도 못 받은 것처럼
- 잘 받은 마지막 packet에 대한 Ack를 전송 - 3번까지는 잘 받았기 때문에 다른 패킷을 수신받더라도 3번 Ack를 보냄(보내도 되고, 보내지 않아도 되고)
- Go-back-N에서의 재전송 정책
- 각 packet 전송 시에 packet을 위한 timer 설정 → Ack를 받으면 Ack 해당 packet과 앞쪽 packet에 대한 timer 소멸 → Timer 이벤트 발생 시 해당 패킷부터 재전송
- packet에 번호를 붙인다.
- Ack packet
- timeout - ack이 오는지 안 오는지를 판독하는 타이머, Ack가 오면 타이머가 사라짐, ack가 오지 않으면 타임아웃
- 추가 전송 정책: k번째 packet에 대한 Ack이 반복적으로 올 경우 k+1번째 packet에 유실을 함축
~ 3번 정도 k패킷에 대한 Ack이 오면 timer와 무관하게 k+1번째 packet을 재전송
- 각 packet 전송 시에 packet을 위한 timer 설정 → Ack를 받으면 Ack 해당 packet과 앞쪽 packet에 대한 timer 소멸 → Timer 이벤트 발생 시 해당 패킷부터 재전송
- 장점: 단순하다(특히 수신 측, 수신 측은 buffer가 없다), 간명하게 시스템의 상태가 추상화
- 단점: 패킷 유실에 대한 복구 비용이 많이 든다.
2-2. Selective Repeat
- Go-back-N의 단점을 보완(단순함의 장점은 포기)
- 수신 측에 buffer를 둬서
- 빠진 packet이 있을 경우 그 뒤쪽의 잘 도착한 packet들은 buffer에 보관하고, 빠진 packet이 추후 도착하면 buffer에 저장한 이후의 packet들까지 순차적으로 응용에 전달
- Go-back-N: k번째 packet까지 잘 도착
- Selective Repeat: k번째 packet은 잘 도착
- 송신 버퍼의 크기는 연속적인 개념을 유지
- N = 4, 2번 packet 유실, 3, 4 모두 도착 O, 5번 packet의 ack 유실
- 송신 버퍼에는 {2, 3, 4, 5} - 2번에 대한 ack를 받지 못했기 때문에 && 순차적 응용 전달
- 수신 버퍼에는 {?, 3, 4, 5} - 2번을 받지 못함 && 5번은 잘 받았지만 ack가 유실
- 송수신 모두 버퍼 크기 4 유지
- 추후에 2번 버퍼를 재전송해서 수신 측에서 수신받으면 수신 버퍼는 {2, 3, 4, 5}가 되고, 응용계층으로 올려 보내서 수신 버퍼를 지울 수 있다.
- 2번 packet의 ack를 송신 측에서 받으면 송신 버퍼는 {5, 6, 7, 8}이 되고
- 6, 7, 8 packet을 보내면
- 송신 측은 6, 7, 8을 응용계층으로 올려 보내고 버퍼는 비었다.
- 수신 버퍼에는 5번에 대한 ack를 받지 못했기 때문에 {5, 6, 7, 8}, 9를 넣지 못함
- 5번 packet의 timer가 timeout을 발생시켜 5를 재전송
- 수신 버퍼에 5는 없지만 8번까지 완료했기 때문에 5번을 받았다는 것을 유추할 수 있다.
- 5번 ack를 보냄
- 송신 버퍼에는 {9, 10, 11, 12}
- N = 4, 2번 packet 유실, 3, 4 모두 도착 O, 5번 packet의 ack 유실
- 장점: 실패한 packet만 재전송해서 성능 향상
- 단점: 시스템 추상화 복잡, 수신 측에도 버퍼가 필요하다.
[복습]
- end-to-end 네트워크가 이상적이려면
- 무한한 bit, byte의 흐름을 제공해야 하고 - bit, byte의 흐름을 패킷화
- 패킷이 유실되지 않고 - Ack를 받지 못하면 타임아웃을 발생시켜 패킷을 재전송
- 순서가 보장되며 - 패킷에 번호를 붙임
- 변조되지 않아야 한다. - error correction code, error staction code
- pipelining: 연속된 대량의 작업이 순차성을 갖고 있으나 앞의 일이 종료하지 않고도 다음 일을 시작할 수 있는 병렬성을 가진 경우 성능향상기법
- go-back-n: 최대 n개의 packet을 병렬적으로 처리한다.
- 송신 측에서 n개의 packet을 buffering
- 수신 측에서 순차적으로 잘 수신된 packet에 대해 ack를 송신하고 packet의 payload를 순차적으로 응용계층에 올려 보냄
- 송신 측에서는 ack를 받으면 패킷을 buffer에서 버려 여유를 만들고 추가로 pipelining 한다.
- ack를 송신받지 못하면 타임아웃을 발생시켜 해당 패킷부터 재전송한다.
- 단순하지만 패킷 유실에 대한 복구 비용이 많이 든다.
- selective repeat: 수신 측에 buffer를 둬서 go-back-n의 단점을 보안한 방법
- 수신 측에 버퍼를 두어서 빠진 packet이 있을 경우 그 뒤쪽의 잘 도착한 packet들을 buffer에 보관하고
- 빠진 packet이 추후에 도착하면 buffer에 저장
- 이후 저장된 패킷들을 순차적으로 응용에 전달한다.
- 송신 버퍼의 크기는 연속적인 개념을 유지한다.
- 실패한 packet만 재전송해서 성능을 향상하지만 시스템 추상화가 복잡하고 수신 측에도 버퍼가 필요하다.
한국항공대학교 김철기 교수님의 [컴퓨터 네트워크] 강의 정리입니다. 감사합니다.
http://www.kocw.net/home/cview.do?lid=22ef970c4243a747
728x90
'CS > 네트워크' 카테고리의 다른 글
[네트워크] 전송계층 복습 및 정리 (1) | 2023.04.18 |
---|---|
[네트워크] 9차시 - 전송계층(2) (1) | 2023.04.18 |
[네트워크] 응용계층 복습 및 정리 (0) | 2023.04.18 |
[네트워크] 7차시 - 응용계층(4) (0) | 2023.03.15 |
[네트워크] 6차시 - 응용계층(3)-3 (0) | 2023.03.09 |