[네트워크] 전송계층 복습 및 정리
2023. 4. 18. 23:44ㆍCS/네트워크
728x90
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎
1. Reliable Networking
- 이상적인 네트워크: bit, byte의 흐름이 고스란히 그대로 전달되는 네트워크
- 현실 네트워크: 많은 양의 데이터를 한꺼번에 보낼 수 있는 네트워크는 없기 때문에
- 무한한 bit, byte의 흐름 제공 X → bit, byte의 흐름을 패킷화
- 패킷 유실 → 타임아웃을 발생시켜 패킷을 재전송
- 패킷 유실 되는 경우: 전송 유실, ack 유실, ack가 타임아웃 후에 도착하는 경우
- ack: 서명하거나, 응답을 보내기 위한 프로토콜의 일부
- 순서 역전 → sequence number(순서가 바뀌지 않으면 1bit or 순서가 바뀌면 딜레이 때문에 무한대의 bit가 필요)
- 내용 변조 → checksum, crc, error correction code, error staction code 사용
2. 성능 향상: pipelining
- 앞의 일이 종료하지 않고도 다음 일을 시작할 수 있는 병렬성을 가진 경우에 성능향상기법
2-1. Go-back-N
- 송신측에만 N개의 패킷을 buffering 함: 재전송하기 위해서
- buffering: 수신이 확실하지 않은 패킷에 대해 재전송을 위해 보관하는 것
- 수신 측에서 순차적으로 잘 수신된 패킷에 대해 ACK를 송신하고, 패킷의 payload를 순차적으로 응용계층으로 올려 보냄
- 2번 패킷의 ACK은 받지 못해도 1번과 3번의 packet의 ACK를 수신받으면 = 3번 패킷까지는 순차적으로 잘 받았다는 의미
- 송신 측에서 순서에 맞지 않는 패킷이 온다면 → 조용히 있거나, 잘 받은 마지막 패킷의 ACK 전송
- 송신측에서 ACK를 잘 받아서 버퍼에서 패킷을 버리고 버퍼에 여유가 생기면 추가로 pipeling 한다.
- Go-back-N의 재전송 정책
- 각 패킷 전송 시 패킷을 위한 타이머 설정 → ACK를 잘 받으면 해당 패킷을 포함한 앞쪽 패킷에 대한 타이머 소멸 → 타이머 이벤트 발생 시 해당 패킷부터 재전송
- k번째 패킷에 대한 ACK가 반복적으로 올 경우 k+1번째 packet을 재전송
- 장점: 수신 측에 buffer가 없어 단순하고 간명하게 시스템의 상태를 추상화시킬 수 있다.
- 단점: 패킷 유실에 대한 복구 비용이 많이 든다.
2-2. Selective Repeat
- 수신 측에도 buffer를 둬서 빠진 패킷이 있을 경우 해당 패킷 뒤쪽의 잘 도착한 패킷들은 수신 측의 버퍼에 보관하고, 빠진 패킷이 추후 도착하면 버퍼에 저장한 이후의 패킷들까지 순차적으로 응용에 전달하는 방법
- 장점: 실패한 패킷만 재전송해서 성능을 향상할 수 있다.
- 단점: 시스템 추상화가 복잡하고, 수신 측에도 버퍼가 필요하다.
2-3. 비교
- Go-back-N: k번째 패킷까지 잘 도착
- Selective Repeat: k번째 패킷은 잘 도착
3. TCP 헤더
3-1. Source Port Number(16bit), Destination Port Number(16bit)
- 소켓 여러 개가 하나의 포트 번호에 연결될 수 있는 다대일 관계
- 클라이언트는 동일한 서버의 동일한 포트에 접근하지만, 응용 프로그램 안에 있는 소켓 객체는 서로 다른 소켓 객체를 담당한다.
→ 웹서버 안에서는 동일한 80번 포트로 들어오는 각각의 클라이언트를 구분할 방법 필요- TCP 헤더 안에 있는 Source Port Number, Destination Port Number와 TCP헤더를 감싸고 있는 IP 헤더 안에 있는 Source IP, Destination IP 네 가지로 어느 소켓에 해당하는 패킷인지 판단해서 각각의 소켓으로 넘겨줄 수 있음
3-2. Sequence Number(Byte)와 Ack Number(Byte)
- TCP에서는 Sequence Number를 Byte 단위로 주고받고 있음 : 세그먼트(단위로서의 가치 X)
- 패킷: 그 자체로 의미 있는 내용 덩어리, 단위로서의 가치를 가짐
- 패킷에서는 Sequence Number를 붙여서 보내면 Ack Number를 보내주지만
- TCP에서는 Sequence Number와 Ack Number가 같은 패킷에 적힘
- 패킷에서는 Sequence Number와 Ack Number는 패킷의 번호였지만
- TCP에서는 몇 번째 Byte인지에 해당하는 Byte 번호이고, Byte마다 번호를 붙여 통신한다.
- Ack 지연시간을 둬서 네트워크 통신량을 아낄 수 있다.
- TCP는 Go-back-N 기법을 사용한다. TCP는 몇 번째 byte를 받을 차례이다에 대해 얘기하는데 Selective Repeat은 몇 번을 받았고, 몇 번을 받지 못했다에 대해서 얘기하기 때문
3-3. receive window, checksum
- receive window: 수신 가능한 버퍼 크기, 크기가 0이면 송신 쪽에 더 이상 받을 수 없음을 알림(흐름제어)
- 전송 계층의 버퍼가 꽉 차서 송신 측의 패킷을 더 이상 받을 수 없어 네트워크를 낭비하는 문제 발생
- receive window field가 줄어들면 송신 측에서는 window가 넘치지 않을 정도만 수신 측에 데이터를 보내고, receive window가 0이 되면 송신 측의 응용 계층에게 에러를 반환해서 응용 계층에서 더 이상 데이터를 보내지 않도록 조치를 취한다.
- checksum: 노이즈나 잡음으로 내용이 변조되는 것을 막아줌, TCP와 UDP 모두 존재
4. 혼잡 제어
4-1. 혼잡 인지
- 패킷 유실이 발생 → 혼잡 상황 인지 → 패킷 전송률 낮춤(현재 전송률의 절반으로 줄임)
- 패킷 전송 원할(비유실) → 비혼잡 상황 판단 → 패킷 전송률 증가(현재 전송률 + c(상수))
- TCP에서 AIMD(Additive Increase Multicative Decrease) 방법을 사용
- 증가할 때는 선형적으로 줄일 때는 기하급수적으로
- 패킷 유실 발생: Ack 신호가 Timeout 내에 오지 않음
- 패킷 유실을 결정하는 Timeout = 재전송을 결정하는 Timeout = RTO(Retransmission Timeout)
- RTT(Round Trip Time): 보내고 받을 때까지 걸리는 시간
- RTO = max (RTT의 평균값 + 4 x RTT의 표준편차, 1초)
- RTT의 평균값: weighted moving average: 현재에 가까울수록 가중치를 높게 두는 방법
- (n = 1) RTT(1) 평균값 = RTT(1)
- (n ≥ 1) RTT(n) 평균값 = (1 - α) * RTT(n-1) 평균값 + α * RTT(n)
4-2. 혼잡 제어
- Additive Increase
- increase의 단위: MSS(Maximum Segment Size)
- 하나의 RTT가 성공하면 Conjection window를 1 증가시켜서 보낼 수 있는 패킷의 수를 증가시킨다.
- 동시에 전송되는 추가적인 패킷들에 대해서는 Conjection window를 판단에 가산하지 않는다.
- Multicative Decrease
- 패킷 유실이 네트워크 이상(= 모든 전송 세그먼트가 동시에 유실되어 모든 Ack이 도착 X)을 반영할 때는 CW = 1 MSS로 대폭 줄임
- 단순 패킷 유실(= 유실 세그먼트 이후의 다른 세그먼트의 Ack 도착) 시CW의 크기를 절반으로 줄임(Fast Recovery)
- 동일한 sequence number에 대한 ACK이 3번 오면 해당 sequence number에 해당하는 세그먼트가 사라졌다는 것을 알 수 있기 때문에 Fast Retransmission이라 함
- Slow Start: 네트워크 이상시 CW를 1 MSS로 줄이면 CW 증가가 매우 느린 문제가 생기기 때문에 Slow Start Mode에서는 동시 전송되는 추가적인 패킷들이 성공하면 conjection window를 중가 시킴
한국항공대학교 김철기 교수님의 [컴퓨터 네트워크] 강의 정리입니다. 감사합니다.
728x90
'CS > 네트워크' 카테고리의 다른 글
[네트워크] 12차시 - 네트워크계층(2) (0) | 2023.04.27 |
---|---|
[네트워크] 11차시 - 네트워크계층(1) (0) | 2023.04.25 |
[네트워크] 9차시 - 전송계층(2) (1) | 2023.04.18 |
[네트워크] 8차시 - 전송계층(1) (0) | 2023.04.18 |
[네트워크] 응용계층 복습 및 정리 (0) | 2023.04.18 |