[네트워크] 전송계층 복습 및 정리

2023. 4. 18. 23:44CS/네트워크

728x90

//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎

 

1. Reliable Networking

  • 이상적인 네트워크: bit, byte의 흐름이 고스란히 그대로 전달되는 네트워크
  • 현실 네트워크: 많은 양의 데이터를 한꺼번에 보낼 수 있는 네트워크는 없기 때문에 
    • 무한한 bit, byte의 흐름 제공 Xbit, byte의 흐름을 패킷화
    • 패킷 유실 타임아웃을 발생시켜 패킷을 재전송
      • 패킷 유실 되는 경우: 전송 유실, ack 유실, ack가 타임아웃 후에 도착하는 경우
      • ack: 서명하거나, 응답을 보내기 위한 프로토콜의 일부
    • 순서 역전sequence number(순서가 바뀌지 않으면 1bit or 순서가 바뀌면 딜레이 때문에 무한대의 bit가 필요)
    • 내용 변조checksum, crc, error correction code, error staction code 사용

 

2. 성능 향상: pipelining

  • 앞의 일이 종료하지 않고도 다음 일을 시작할 수 있는 병렬성을 가진 경우에 성능향상기법

2-1. Go-back-N

  1. 송신측에만 N개의 패킷을 buffering 함: 재전송하기 위해서
    • buffering: 수신이 확실하지 않은 패킷에 대해 재전송을 위해 보관하는 것
  2. 수신 측에서 순차적으로 잘 수신된 패킷에 대해 ACK를 송신하고, 패킷의 payload를 순차적으로 응용계층으로 올려 보냄
    • 2번 패킷의 ACK은 받지 못해도 1번과 3번의 packet의 ACK를 수신받으면 = 3번 패킷까지는 순차적으로 잘 받았다는 의미
    • 송신 측에서 순서에 맞지 않는 패킷이 온다면 → 조용히 있거나, 잘 받은 마지막 패킷의 ACK 전송
  3. 송신측에서 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