[네트워크] Ch 22

은개·2025년 5월 31일

[CS] 네트워크

목록 보기
5/8
post-thumbnail

Position of transport layer

  • 혼잡이 발생하면 end system(4계층)에서 제어 ⇒ TCP가 함

22.1 Process to Precess Delivery

  • Socket의 구성
    • Client의 IP
    • Server의 IP
    • Server의 Port
    • Protocol
    • 이 5가지 중 하나라도 다르면 다른 소켓임
  • Client의 Port
  • Port 번호는 0 ~ 65535(21612^{16}-1)
  • 이미 바인딩된 Port는 다른 process와 바인딩 불가능

  • IP header(3계층)의 IP 주소와 Transport layer header (4계층)의 Port 번호를 통해 어느 프로세스와 통신할지 결정

IANA Internet Assigned Numbers Authority

: 전 세계 인터넷에서 사용하는 번호 체계(숫자 자원)를 공식적으로 관리하는 조직

  • Port 번호 (0 ~ 65535) 관리
  • 공통적으로 사용되는 포트를 미리 약속해서 결정해줌
구분범위설명
Well-known Port0 ~ 1023전 세계적으로 표준화된 서비스 포트(IANA가 엄격히 관리)
Registered Port1024 ~ 49151일반적인 응용 프로그램, 상용 소프트웨어가 등록하여 사용
Dynamic/Private Port49152 ~ 65535클라이언트가 임의로 사용하는 포트 (자동 할당)

포트 번호의 충돌 문제

  • 모든 프로세스는 (IP, Port) 쌍으로 소켓을 식별
  • 같은 컴퓨터에서 동일한 IP + 동일한 포트 번호두 개 이상의 프로세스가 동시에 사용할 수 없음 ex)
    • 서버 A와 서버 B가 둘 다 8080 포트를 사용하려 하면,
    • 클라이언트가 두 서버에 동시에 연결할 수 없음 (포트 충돌 발생)
      • 서로 다른 Process가 같은 Port와 바인딩될 수 없기 때문에 한 프로세스는 문제가 발생함

즉, 서버는 반드시 고유한 포트 번호를 사용해야 함

  • 클라이언트는 그냥 Dynamic range에서 아무거나 할당 받으면 됨

포트 번호 충돌을 방지하기 위해 Registered Port가 존재하는 것

  • 미리 IANA에 신청해서 포트를 등록
  • 다만 이 포트는 독점권을 주는 것이 아니라, 단순한 충돌 방지용 등록

Socket Address

인터페이스에 맞춰서 꽂기만 하면 Socket

  • BSD OS
    • 버클리 대학에서 만든 운영체제
    • Socket Library를 탑재 ⇒ 많은 사람들이 이 라이브러리를 사용하여 네트워크 프로그래밍
    • C언어 기반
  • 객체지향 언어 등 다른 소켓 프로그래밍 라이어브리도 많이 등장

Connectionless vs Connection-oriented service

  • Transport Layer는 Connectionless일수도 있고, Connection-oriented일 수도 있음
  • TCP는 Connection-oriented UDP는 Connectionless

Connectionless

  • 연결 없음
  • 패킷 순서 보장 X
  • 패킷 손실 가능
  • Ack 없음 (잘 받았다는 신호 없음, 그냥 냅다 패킷 보내면 끝)
  • 지연될 수 있음
  • 과거 멀티미디어에서 UDP로 많이 사용
    • TCP로 전송
      • 요즘에는 화질을 중시하기
      • 버퍼링
  • UDP 위에 직접 프로그래밍 해서 TCP처럼 동작하게 할 수도 있음
    • 즉, 응용프로그램 계층에서 처리

Connection-oriented

  • 연결 먼저 하고 통신, 통신 끝나면 연결 끊음
  • 파일 전송은 파일 데이터가 깨지면 안 되기 때문에 TCP로 전송

Connection Establishment

단계방향설명SYNACKFIN
1A → BA가 연결 요청 (SYN 전송)100
2B → AA의 SYN에 대한 응답 + B도 요청110
3A → BB의 SYN에 대한 응답 (ACK 전송)010

Connection Termination

단계방향설명SYNACKFIN
1A → BA가 종료 요청 (FIN 전송)001
2B → AA의 FIN에 대한 ACK 전송010
3B → AB도 종료 요청 (FIN 전송)001
4A → BB의 FIN에 대한 ACK 전송010
  • 연결 끊기는 Host A, Host B 각각 끊어줘야 함
    • 한쪽만 끊으면 단방향 연결이 됨

Error control

  • End to End(양쪽 끝)에서 차리

22.2 UDP

  • connectionless - 연결 없음
  • unreliable protocol
    • 데이터 깨지는지 안 깨지는지 체크 안 함
    • flow control 없음
    • error control 없음
  • 필요 시 응용 프로그램이 직접 처리해야 함

User datagram format

NFS (Network File System)

  • UDP로 구현됨 왜?
    • LAN 환경에서는 전송 오류나 혼잡 발생이 거의 없기 때문에 TCP 안 써도 패킷 오류가 거의 없기 때문
  • 옛날에는 하드디스크 용량이 부족했음
  • 한 WorkStation(컴퓨터)에서 작업하다가 용량이 다 차면 다른 Workstation으로 옮겨서 작업했는데 호환성 문제가 발생
  • NFS가 프로토콜을 통해 Data를 마운트 해줌 ⇒ 유저는 로컬에서 Data에 접근하는 것처럼 동작

장점

  • 서로 다른 파일 시스템에 있는 것들을 하나의 가상의 폴더에 있는 것처럼 만들어줌

단점

  • 한 개라도 문제 생기면 전체가 안 돌아감

Multimedia

  • 과거의 멀티미디어 응용은 거의 UDP를 사용했으나 최근에는 TCP도 많이 사용함

왜?

  1. 사용자가 고품질 재생을 원하기 때문
  2. 네트워크 대역폭과 품질이 대폭 향상됐기 때문

버퍼링

: 재생 지연을 방지하기 위해 데이터를 일정량 먼저 받아 두는 것

  • 클라이언트 버퍼링을 이용하면 패킷 소실에 대한 재전송 시간이 있음


22.3 TCP

  • 순서 보장 O
  • Reliable Transmission

연속된 byte 단위 (Stream of Bytes)를 받는 것처럼 동작

  • 중간에 순서가 바뀌면 receiver가 재조정
  • 중간에 data가 손실되면 재전송 해줌

→ TCP의 Sequence number을 통해 실현됨


Sending and Receiving Buffers


TCP segment

  • 각 TCP Segment(Packet)의 사이즈는 동일하지 않아도 됨

Sequence number

: Segement의 첫 번째 byte의 위치를 나타냄

  • Data Stream에 대한 위치를 이 Sequence number로 표현
  • Header 안에 Sequence number가 있음
  • 32bit - 모두 1이 되면 다시 0부터 시작하기 때문에 계속 data 전송 가능
  • 시작 number는 랜덤

다음 sequence number = 이전 segment의 sequnce number와 전송 크기를 더한 것

예제 1

TCP가 6000byte 데이터를 전송하고, 첫 번째 byte의 sequence number가 10010인 경우,

1000 byte를 전송하는 4개의 segments와 2000byte를 전송하는 마지막 segment의 sequence number는?

정답

  • sequence 01: 10010
  • sequence 02: 11010
  • sequence 03: 12010
  • sequence 04: 13010
  • sequence 05: 14010

예제 2

예제 1에서 TCP가 7000byte 데이터를 전송하고, sequence가 6번까지 있다면?

정답

  • sequence 01: 10010
  • sequence 02: 11010
  • sequence 03: 12010
  • sequence 04: 13010
  • sequence 05: 14010
  • sequence 06: 16010
    ⇒ 14010 + 2000: sequence 05 number + sequence 05가 전송한 data의 크기

TCP Segment Format

flag field

  • ACK: Ack 보냄
  • SYN: Sequence number 동기화
  • FIN: 연결 종료
  • flag field에서 flag가 1인 필드만 의미 있는 필드

ACK

  • Host A가 Seq 42를 보내면, Host B는 Seq 43을 받을 차례니까 ACK 43을 보냄
  • Host A가 ACK 79를 보내면, Host B는 79를 보낼 차례니까 Seq 79를 보냄
  • 즉, Seq는 전송한 Data 번호, ACK는 받은 Data의 다음 번호 (받아야 할 Data 번호)

Flow Control

: Receiver의 buffer가 넘치지 않도록 Sender데이터 전송 속도를 조절하는 통신 기법

방법

Sliding Window Protocol을 통해 구현됨

  • Window Size
    • Sender 입장: ACK를 안 받고 data를 보낼 수 있는 크기
    • Receiver 입장: 내가 지금 받을 수 있는 양
  1. Receiver가 Window size를 계속 알려줌

  2. Sender가 Window size만큼만 데이터를 전송

  3. ACK과 함께 윈도우 크기를 갱신하면서 흐름 제어 수행

    ex) ACK 203을 받으면 Sender buffer에서 이미 보낸 202 201 200은 밀어버리고 이 3칸만큼의 공간을 확보

    • 창문을 미는 것처럼! 그래서 window sliding!

Sliding windows

  • window size를 다 채워서 보낼 필요 없음
  • window size는 receiver에 의해 결정 및 조절 가능
    • Sender의 window size ≤ Receiver의 window size
  • ACK 바로 안 보내도 됨

Error control

  • Checksum을 통해
    1. 깨진 데이터 확인
  • Sequence number을 통해
    1. lost segments 검출
    2. 순서가 바뀐 segment 검출
    3. 중복된 segments 검출

Lost Segment

문제

  • 패킷을 보냈는데 이전 Packet에 대한 ACK가 오는 경우 → 해당 Segment가 전달이 안 된 것
    • 각 Segment 당 timer 할당됨

해결

  • Sender: 해당 패킷에 대한 ACK가 올 때까지 패킷을 재전송

Lost Acknoledgment

문제

  • 패킷을 보냈는데 해당 패킷에 대한 ACK가 안 오는 경우 (Segment time out)

해결

  • Sender: ACK를 못 받았으니까 data를 못 받은 것으로 간주하고 다시 패킷을 재전송
  • Receiver: Sequence number을 확인 해서 이미 받았던 건 버림

TCP Timers

RTT (Round trip time)

RTT=α(previousRTT)+(1α)(currentRTT)RTT = α (previous RTT) + (1 - α)(current RTT)

  • α: 신뢰도
  • 과거 data를 기반으로 현재 data의 평균을 예측함 ⇒ 평균 값이 일정
  • Exponential averaging 기법
    • 지수평균: 최근 측정값에 더 많은 가중치를 주고, 과거 값은 점점 덜 반영하는 방식의 평균 계산

Retransmission time

RTO=2RTTRTO = 2 * RTT


⭐ flow control과 congestion control의 차이

📌 Flow Control

receiver의 buffer가 넘치지 않도록 제어하는 것

제어 방법

  • TCP의 Sliding window Protocol을 통해서 flow를 제어함
  • receiver의 window size 크기에 맞춰 데이터를 전송함
  • sender’s window size ≤ receiver’s window size

Sliding window Protocol

: 수신자가 알려준 수신 가능 범위(window size) 내에서만 송신자가 데이터를 전송

  • 수신자가 ACK을 보내면서 윈도우 크기를 조정함

📌 Congestion Control 혼잡 제어

router의 buffer가 넘치지 않도록 제어하는 것

  • Burst: 데이터가 순식간에 많이 들어와서 Rate가 확 튀는 것

단계

  1. 먼저 혼잡을 인식 (네트워크 용량이 초과될 때)
  2. 네트워크 처리 용량 한계 이하로 낮춤
  • 라우터 버퍼는 Bursty한 (일시적으로 많은 양이 들어오는) 데이터를 처리
    • 즉, 일시적이며 혼잡을 완전히 해결하지 못 함

혼잡 인식

  • loss event를 통해 혼잡을 인식
    • timeout : timer가 expire할 때까지 ACK가 안 오면 loss event 발생
    • 3 duplicate acks : 3개의 중복된 ACK가 오면 loss event 발생

제어 방법

  1. AIMD

    혼잡 발생 시 Rate를 1로, 혹은 최소 절반 이하로 떨어트림

    • Additive Increase: 혼잡이 없으면 전송률을 선형적으로 조금씩 증가
    • Multiplicative Decrease: 혼잡이 감지되면 전송률을 절반 이하로 급격히 감소
  2. Slow Start

    Rate의 시작점을 낮춤

    ‼️ 주의 ‼️

    • Rate를 천천히 증가시키는 것 ❌
    • Rate는 exponential하게 (지수적으로) 증가함
  3. Conservative after timeout events

    패킷 손실로 Timeout이 발생했을 경우, 가장 보수적으로 전송률을 낮춤

  • 재전송 한다고 혼잡이 해결되는 것은 아님

0개의 댓글