[데이터 통신과 네트워킹] Transport Layer Protocol

YJ·2024년 6월 1일
0

Introduction

  • Three Protocols in the TCP/IP

Services

User Datagram Protocol (UDP)

  • UDP는 simple protocol이면서 connectionless service protocol이다.
  • UDP는 transprot-layer에서 필요한 많은 서비스들이 부족하다.
  • Simplicity는 몇몇의 application은 매우 유용하다.

Transmission Control Protocol (TCP)

  • TCP는 connection-oriented service를 제공한다.
  • Abstract window, flow와 error control를 수행한다.
  • Congestion control

Port Numbers

Port Number

  • process-to-process communcication을 만들기 위해 사용된다.
  • end-to-end 주소를 제공한다.
  • multiplexing과 demultiplexing가 가능하다.

UDP와 TCP와 함꼐 사용되는 몇몇의 well-known port

UDP(User Datagram Protcol)

User Datagram Protocol (UDP)

  • connectionless, unreliable transprot protocol이다.
    • connectionless : 연결 설정 X, 목적지를 알아서 감
    • unreliable : 에러 체크 X, 패킷이 잘왔는지 못왔는지 확인 X
  • 최소 overhead를 사용하는 매우 간단한 protocol이다.
  • 단점이 있으면서 몇 가지 이점이 있다.

UDP packet는 user datagram이라고 불린다.

  • UDP packet은 65,535 bytes의 total lenght와 함께 IP datagram애 저장되어야 한다.
  • header size는 8 bytes로 구성된다.
  • 65,507 bytes보다 작은 메세지의 UDP를 사용할 수 있다.
    • 65,507 byte = 65,535 byte - 20 byte(IP Header) - 8 byte(UDP Header)

Example

  • 다음은 16진수 형식의 UDP header에 내용이다.

Solution
a. 수신측 port number는 처음 4개이다. 16진수 CB84 or 52100
b. 수신측 port number는 두 번째 4개이다. 16진수 000D or 13
c. 세 번째 4개인 16진수 001C는 28bytes의 전체 UDP packet 길이를 정의한다.
d. data에 길이는 전체 packet 길이에서 header에 길이를 뺀 것이다. 즉 28 - 8 = 20 bytes
e. 수신측 port number는 13(well-known port)이다. packet은 client로부터 server로 가는 것이다.
f. client process는 Daytime이다.

Process-to-Process Communication

  • socket address(IP address + port number)에 의해 제공된다.

Connection-less Service

  • User Datagram은 독립적이고 번호가 없다.

Flow Control

  • flow control과 window mechanism이 없다.

Error Control

  • checkusum을 제외하고는 error control mechanisum이 없다.

Congestion Control

  • congestion control mechanism이 없다.

Encapsulation and Decapsulation

  • UDP는 message를 encapsulate하고 decapsulate한다.

Checksum(16 bits)

  • checksum은 UDP에서는 Optional이다.
  • Checksum은 pseudo header와 UDP Header와 application layer로 부터 온 data를 포함해서 계산한다.
    • pseudo header는 IP header에 part이다.
  • UDP는 손상된 패킷을 폐기한다. (error가 있으면 폐기)

Queuing

  • Queue는 port와 연결되어 있다.
  • incoming queue와 outgoing queue가 생성된다.

Multiplexing and Demultiplexing

  • 오직 하나의 UDP process가 동작된다.
  • UDP를 사용하는 process는 많다.

UDP와 Simple Protocol 비교

  • UDP는 connectionlesss simple protocol의 예시이다.
  • checksum은 error detection을 위해 packet이 추가된다.

UDP Applications

UDP에 특징

  • connectionless Service
    • 각 UDP packet은 독립적이다.
    • 연결을 위한 overhead가 없다.
      -> 유용한 짧은 request와 response
  • Error Control의 부족
    • UDP는 unreliable service를 제공한다.
      -> 몇몇의 application은 손실되고 손상되는 packet을 인정한다.
  • Congestion Control의 부족
    • error control의 부족은 congestion이 큰 이슈일때 유리할 수 있다.

DNS(Domain Name Service)는 UDP service를 사용한다.

  • client는 서버에 짧은 요청을 보내고 서버로부터 빠른 응답을 받는다.
  • 단 하나의 메시지만 교환된다.

SMTP(E-mail Service)는 UDP service를 사용하지 않는다.

  • 사용자는 multimedia(images, audio, or video)를 포함해서 긴 emial message를 보낼 수 있다.
    • 메시지는 single user datagram에는 맞지 않다. (packet 하나로 처리가 안됨)
    • 메세지는 서로 다른 user datagram으로 나누어져야 한다.
  • connectionless service는 문제가 있을지도 모른다.
    • 수신측에 순서가 맞지 않는 패킷이 도착할 수 있다.
    • 수신측은 순서를 맞춰야 할 수 있다. (순서 중요)
  • connectionless service는 긴 message를 위해서는 단점이 있다.

Internet으로 부터 긴 text file을 다운로드 하는 것

  • 우리는 분명히 reliable service를 사용할 필요가 있다.
    • 우리는 파일의 일부가 누락되거나 손상되는 것을 원하지 않는다.
  • UDP는 transport layer에 맞지 않을 수 있다.

skype와 같은 실시간 대화형 application

  • Audio와 Video는 frame으로 나뉘어져서 연이어 보낸다.
  • 만약 손상되거나 손실된 frame이 재전송된다면,
    • 동기화를 잃을지도 모른다.
    • 시청자는 빈 화면을 본다.
    • 그리고 lost frame을 기다린다.
    • 이러한 것들은 견딜 수 없다.
  • 만약 screen에 각 작은 부분이 single user datagram 전송되면,
    • 수신측은 손상되고 손실된 packet을 무시할 수 있다.
    • screen의 일부가 매우 짧은 기간 동안 비어있을 수 있다.
    • 대부분의 시청자들은 눈치채지 못한다.

UDP를 사용하는 더 유용한 application

  • 간단한 request-response 통신에 적합할 수 있다.
    • SNMP(Simple Network Management) or RIP(Routing Information Protocol)에 적합하다.
    • FTP(File Transfer Protocol)에는 적합하지 않다. -> TCP에 적합
  • internal flow & Error control mechnism에 적합하다.
    • TFTP(Trivil File Transfer Protocol)은 flow & error control을 포함한다.
  • delay을 견딜 수 있는 Interative real-time application
  • UDP는 Multicasting에 내장되어 있다.

TCP(Transimission Control Protocol)

  • TCP는 GBN과 SR protocol의 조합으로 reliablity를 제공한다.
    • 몇몇의 packet들은 ACK를 받기전에 보내 질 수 있다. -> GBN
    • Acknowledgement Numbers는 누적될 수 있다. -> GBN
    • 실제로 손상된 packet만 재전송될 수 있다. -> SR

TCP Services

1. Process-to-Process Communication

  • port 번호로 제공된다.

2. Stream Delivery Service

  • TCP는 stream-oriented protocol이다.
  • sending/receiving TCP process는 바이트 단위로 데이터를 delivers/obtain한다.

Sending and Receiving Buffer

  • 송신, 수신 프로세스는 속도가 다르게 동작한다.
  • Buffer는 TCP에 대한 flow & error control을 위해 필요하다.

TCP Segment

  • TCP는 수많은 bytes를 segment로 불리는 packet으로 그룹화한다.
    • Segment는 반드시 동일할 필요가 없다.
  • TCP는 각 segment에 header가 추가되고 network layer로 그것을 배달한다.
  • Segment는 IP datagram으로 encapsulated된다.

3. Full-duplex Communication

  • TCP는 양방향 통신을 제공한다.

4. Multiplexing and Demultiplexing

  • 송신측에 Multiplexing : Many to One
  • 수신측에 Demultiplexing : One to Many

5. Connection-oriented Service

  • TCP connection은 logical이고, physical이 아니다.
    • Logical Connection between two processes
    • Exchange of the data
    • The close of connection
  • 각 segment는 수신측까지 서로 다른 경로를 통해 라우팅될 수 있다.
    • segment가 손실되거나 손상된 후, 다시 보내진다.
  • TCP는 byte를 순서대로 전달할 책임이 있다.

6. Reliable Service

  • IP는 connectionless, unreliable service를 제공한다.
  • TCP는 data에 안전한 도착을 확인하기 위해 ACK mechanism을 사용한다.

TCP Features

Numbering System

  • TCP header에 segment number를 위한 field가 없다.
  • sequence number와 acknowledgement number가 있다.

Byte number

  • TCP는 연결의 모든 data bytes 수를 지정한다.
  • TCP는 첫 번째 bytes 수는 대해 0~2^32 - 1 사이의 임의의 숫자를 선택한다.
    -> intial sequencec number(ISN)

Sequnece Number

  • segment의 sequnece number는 해당 segment에 포함된 첫 번째 data byte에 할당된 번호를 정의한다.
  • TCP는 각 segment에 sequence number를 할당한다.
  • next segment에 sequence number : (다음 segment 번호)
    -> 이러한 segment의 sequence number + 이러한 segment가 전송된 bytes의 수
    • 만약 number가 1057이고 전체 데이터가 6000 bytes면, bytes는 1057에서 7056까지 번호가 매겨진다.

Acknowledgement Number

  • 받기로 예상된 next byte의 number
  • 마지막 received byte에 number에 1이 더해진다.
  • Acknowledgement Number는 누적된다.

Example

  • TCP 연결이 5000 bytes에 file을 전송하는 중을 가정한다.
  • 첫번쨰 바이트는 10,001이다.
  • 데이터를 각각 1,000바이트씩 5개의 세그먼트로 보낸 경우 각 세그먼트의 시퀀스 번호는 무엇인가?

Solution

Segment

TCP의 packet은 segment로 불린다.

  • Header : 20 ~ 60 bytes
  • Data : application으로 부터 온

TCP Segment Format

Source Port Address(16 bits)

Destination Port Address(16 bits)

Sequence Number(32 bits)

  • number는 data에 첫 번째 byte에 할당된 번호이다.
  • 만약 SYN flag가 1이면, inital Random Sequnce number를 의미한다.
  • 만약 SYN flag가 0이면, segment에 sequence number를 의미한다.

Acknowledgement Number(32 bits)

  • 다음 받을 것으로 예상되는 byte number
  • 만약 마지막에 받은 byte number가 x이면, ACK number는 x+1이다.

Header length(4 bits)

  • 4 bytes 단위의 수로 나타낸다.
  • header에 수는 20에서 60bytes 사이일 수 있다.
  • 이 field에 값은 0101(2)에서 1111(2) bytes 사이이다.
    • 5 * 4 Byte = 20 Byte
    • 15 * 4 Byte = 60 Byte

Reserved(6 bits)

Control(6 bits)

  • Flow Control
  • Connection setup, termination, abortion
  • 데이터 전송 방식

Window Size(16 bits)

  • window에 최대 size는 65,535Bytes이다.
  • window size는 수신측에 의해 결정된다.

Urgent Pointer(16 bits)

  • segment가 urgent data를 포함할때 사용된다.

Option(variable)

  • 최대 40 Bytes까지의 옵션 정보

Checksum(16 bits)

  • checksum은 UDP에서는 옵션이지만, 반면 TCP에서는 의무적이다.
  • Checksum 계산 : UDP에서와 같다. (Pseudo header + TCP Header + Data)
    • Pseudo header는 계산을 위해 사용된다. 그러나 전송되지는 않는다.

TCP Connection

1. Connection using Three-Way Handshaking

Connection 1단계

  • client는 SYN Segment를 보낸다. : 오직 SYN flag만 설정된다.
    • random number를 inital Sequnece Number로 선택한다.
    • SYN segment는 데이터를 실을 수 없다.
    • sequnce number를 하나 소비한다.

Connection 2단계

  • Server는 SYN + ACK segment를 보낸다.
    • 다른 방향의 SYN와 1 단계에 SYN에 대한 ACK
    • receive window size, rwnd를 포함한다.
    • SYN + ACK segment는 data를 실을 수 없다.
    • sequnce number를 하나 소비한다.

Connection 3단계

  • Client가 ACK segment를 보낸다.
    • 2단계 SYN에 대한 segment이다.
    • send window size, swnd를 정의한다.
    • data를 실지 않으면, sequnece number를 소비하지 않는다.

SYN Flooding Attack

  • 공격자는 송신측 IP 주소를 위조하여 많은 수의 SYN 세그먼트를 서버로 전송한다.
  • SYN가 오면 메모리 할당을 해놓는다.
  • 잘못된 주소를 보내서 ACK가 오지 않고 메모리 공간만 늘리게 된다. -> 여러 컴퓨터에서 공격하면 DDOS

2. Data Transfer : Piggyback

  • ACK는 data와 함께 piggyback된다.

Data Transfer : Pushing Data

  • 수신측의 application program은 interactive application을 위한 push operation을 요청한다.
    • push를 설정해서 보내면 밀어낸다. (빨리 보내기 위해)
  • TCP는 segment를 만들고 즉시 push bit를 설정해서 보낸다. (PSH)
    • 송신측에서는 기본적으로 push로 동작한다.
  • 수신측 TCP는 application program에 가능한 빨리 segment를 전송하고 더 많은 데이터가 올때까지 기다리지 않는다. -> pull로동작

3. Connection termination

1단계 Termination

  • client TCP는 FIN segment : FIN flag를 설정한다.
    • FIN segment는 수신측에 data에 ACK를 포함 할 수 있다.

2단계 Termination

  • server TCP는 FIN + ACK segment를 보낸다.
    • 이러한 segment는 서버의 마지막 data chunck도 포함 할 수 있다.

3딘계 Termination

  • client TCP는 ACK segment를 보낸다.
    • 이러한 segment는 data를 서버로 전달할 수 없다.

State Transition Diagram

State Transition Diagram over the Time-line

SYN-SENT : 클라이언트 SYN 보냄
LISTENED : 서버는 연결을 기다리는 중
SYN-RCVD : SYN를 받음
ESTABLISED : 연결 설정된 상태
FIN-WAIT-1, FIN-WAIT-2 : 연결 끝낼때 finish 대기
Closed-Wait : close 기다림 (Data Transfer : 보내지 못한 데이터 보냄
TIME-WAIT : Timer를 두고 시간이 지나면 close (MSL : maximum segment liftetime)
LAST-ACK : 마지막 ACK

States for TCP

Windows in TCP

TCP는 두개의 window를 사용한다 :

  • send window, receive window
  • 양방향 통신을 위한 4 windows

Send Window in TCP

TCP와 SR간에 send window 차이
1) TCP에서 window size는 bytes의 수이다.

  • SR에서 window size는 packet의 수이다.

2) TCP는 한 timer이다.

  • SR은 보내지는 각 packet을 위해 몇개의 timer를 사용한다.

Receive Window in TCP

TCP와 SR간에 receive window의 차이
1) 수신측 window size는 결정될 수 있다. :

  • rwnd = buffer size - number of waiting bytes to be pulled (응용계층으로 가기 위해서 기다리고 있는 것)

2) TCP에서 ACK mechanism은 누적하는 Acknowledgement이다.

  • TCP에서 ACK number는 다음 받기 위해 에상되는 byte를 나타낸다.
    -> GBN과 같다.
  • SR에서 ACK number는 손상되지 않은 packet의 선택적인 acknowledgement이다.

Flow Control

Flow control producer와 consumer에 속도를 조절한다.

  • producer는 consumer가 data를 사용할 수 있는 속도로 data를 만든다.

TCP flow control와 error control를 분리한다.

Data flow and flow control feedbacks in TCP

Flow Control

수신측은 send window의 shirinking 방지하기 위해 다음과 같은 관계를 유지한다.

Shirink of Windows
Fig b. send window의 shirinking 상황을 보여준다

  • 송신측이 206에서 214 bytes를 보냈다.
  • 206에서 209 bytes를 acknowledged되고 purged된다.
  • 새로운 rwnd에 advertisement value는 4이다. -> 210+4 < 206+12

send window가 shrink될 때, 문제가 발생한다.

  • byte 214가 이미 전달되어졌다.
  • 그러나 그것은 window 밖이다. -> 다시 재전송될 것이다.
  • 수신측은 send window의 오른쪽 벽을 유지한다.

Error Control

TCP는 reliable transport-layer protocol이다.

  • TCP는 순서 보장과 에러 없이 그리고 손실과 중복 없이 stream of data를 배달한다.

TCP에서 error controld은 세가지 간단한 방법과 함께 이루어진다.
1) checksum
2) Acknowledgement
3) Retransimission after Time-out (RTO)

1. Checksum
각 segment는 checksum field를 가진다.
만약 segment가 손상되면, 그것을 버리고 손실된 것으로 간주한다.

2. Acknowledgement

  • TCP segment를 누적해서 acknowledge한다. (ACK)
    • 폐기, 손실 또는 중복 segment에 대해 feedback이 제공되지 않는다.
      • 송신자에게 알려주지 않는다.
  • Selectivce Acknowledgement (SACK)
    • SACK는 TCP header에 end에서 option으로 구현된다.
      • 사용되지는 않고 있음

3. Timeout : Retransimission

  • Retransmission after Time-out (RTO)
    • 수신측은 각 연결에 하나의 timer를 유지한다.
    • timer가 만료되면, TCp는 queue 맨 앞에 segment를 다시 보낸다.
    • RTO에 값은 동적이고 round-trip-time (RTT)에 의해 업데이트된다.
      • round-trip-time : 송신측-수신측 갔다가 되돌아오는 시간
  • Retransimission after Three Duplicate ACKS
    • 만약 3-duplicate ACKs가 segment에 도착하면, segment는 time-out을 기다리는 것 없이 재전송한다.

순서가 잘못된 segments

  • 요즘은 TCP는 순서가 잘못된 segment를 버리지 않는다.
  • segment는 순서가 잘못되게 도착하고 일시적으로 저장된다.
  • TCP는 순서가 잘못된 segment가 순서대로 application process에 전달되는 것을 보장한다.

Simplified FSM for the TCP sender side

Simplified FSM for the TCP receiver side

Normal Operation

Lost Segment

Fast Retransimission - Three Duplicates (Four ACK)

Lost Acknowledgement - Corrected automatically

Lost Acknowledgment –corrected by resending

TCP Congestion Control

  • 반대쪽 끝은 congestion이 없지만, middle에는 congestion이 있을 수 있다.

    • router는 하나 이상의 송신자로 부터 수신할 수 있다.
    • TCP는 전송받는 segment에 수를 조절하기 위해 cognestion window(cwnd)를 사용한다.
  • Congestion Detection : ACks

    • congestion을 감지하기 위해, 송신측은 한 feedback만을 사용한다 : ACKs
  • 세 개의 congestion polices:
    1) Slow Start
    2) Congestion Avoidnece
    3) Fast Recovery

Congestion window

  • end에는 congestion이 없다
    • receive window (rwnd)는 receive byte로 절대 overflow되지 않는다.
      • 중간에 있는 router는 congestion에 경우에 segment를 버릴지도 모른다.
  • TCP는 congestion window(cwnd)를 전송되는 segment 수를 조절하기 위해 사용한다.
    • IP는 congestion control service를 제공하지 않는다.
  • send window의 size는 cwnd와 rwnd 중에 최소값으로 결정된다.
    • cwnd는 network 중간에 있는 congestion과 관련된다.
    • rwnd가 cwnd보다 훨씬 크다고 가정한다. 즉 send window size는 항상 cwnd와 같다.

Congestion Detection

  • TCP 송신측은 두 개의 events가 발생하는 경우 network에 congestion의 표시로 사용된다.

1) Time-out

  • TCP 송신측은 time-out이 발생하기 전에 segment에 대한 ACK를 받지 못했다.

2) Receiving of three duplicate ACKs

  • three duplicate ACKs가 network congestion 때문에 누락된 segment에 표시이다.
  • time-out보다 덜 심각하다.

Congestion Policies

1. Slow Start : Exponention Increase

  • cwnd에 size는 1(one segment)부터 시작해서 threshold에 도달할때까지 지수적으로 증가한다.

2. Congestion Avoidance : Additive Increase

  • congestion을 피하기 위해, TCP는 지수적인 증가 속도를 늦춘다.
  • cwnd에 size가 threashold에 도달할때, congestion 발견될 떄까지 1씩 증가한다.

3. Fast Recovery

  • 세 duplicate ACKs가 도착할때, 가벼운 congestion으로 해석된다.
    • cwnd에 사이즈를 반으로 감소시키고, fast recovery policy가 1씩 증가로 적용된다.
  • time-out이 발생하면, TCP는 real congestion이고, slow start 상태로 바꾼다.

Policy Transition

  • MSS : Maximum Segement Size
  • ssthresh : Slow Start Threashold

1. Tahoe TCP

Tahoe TCP 예시

2. Reno TCP

Reno TCP 예시

TCP Timers

Four timers:

  • Retransimission Timers
  • Persistence Timers
  • Keepalive Timers
  • TIME-WAIT Timers

Retransmission Timers

  • lost segments를 재전송하기 위해, TCP는 하나의 retransimission timer를 사용한다.
  • retransimission time-out(RTO)를 계산하기 위해서는 round trip time(RTT)를 계산할 필요가 있다.

Persistence Timers

  • Receive window size가 0일때 Deadlock을 방지하기 위한 timer
  • 만약 송신측 TCP가 rwnd=0이라고 알리면, 수신측 TCP는 전송을 멈춘다.
  • 수신측 TCP가 ACK segment를 rwnd > 0이라고 알리고 ACK가 손실될지도 모른다. -> Deadlock
    • 송신측 TCP는 수신측으로부터 segment가 더 오는 것을 기다린다.
    • 수신측 TCP는 rwnd > 0이라고알리는 ACK를 기다린다.
  • 이러한 deadlock을 막기 위해, TCP는 각 연결의 persistence timer를 사용한다.
    • 송신측 TCP는 rwnd = 0이라는 ACK를 받으면, persistnece timer를 시작한다.
    • timer가 울리면, 송신측 TCP는 probe라는 특별한 segment를 보낸다.

Keepalive Timers

  • 두 TCP 사이에 long idle connection을 막기 위해 사용한다.
    • server가 client로부터 연락을 들을때마다, timer를 재설정한다.
  • server가 2시간이 지나도 client로부터 연락이 없으면 probe segment를 전송한다.
    • 만약 10 probe 후에 응답이 없으면, connection을 종료한다.

Time wait Timers

  • TCP는 active close(FIN)과 최종 ACK로 연결을 종료한다
  • 최종 ACK를 잃어버리면, Time-Wait Timer가 이러한 상황에 사용된다.

profile
제 글이 유익하셨다면 ♡와 팔로우로 응원 부탁드립니다.

0개의 댓글

관련 채용 정보