[Network] Transport Layer
- [Network] Data and Signals
- [Network] Digital Transmission
- [Network] Analog Transmission
- [Network] Error Detection and Correction
- [Network] Framing / Error Control
- [Network] Medium Access Control
- [Network] Case Study: Wi-Fi
- [Network] Internet Addressing
- [Network] Internet Protocol (IP)
- [Network] Routing
- [Network] Other Network-Layer Related Protocols
- [Network] Scheduling and Traffic Shaping
- [Network] Transport Layer
✦ Transport Layer

- layer 4 : End-to-end (process-to-process) communication
- layer 1, 2 : hop-to-hop, single hop communication
- layer 3 : host-to-host communication

- TCP / UDP
◆ Layers: Function
- Layer 1 (Physical) : 신호 만들기
- Layer 2 (Data link) : framing, ARQ, Error detect / correct
- Layer 3 (Network) : addressing, routing, host 에게 전달
- Layer 4 (Transport) : packet 세밀하게 조절 & 전달
- flow control
- congestion control
◆ Port
- 같은 host 안의 process 들 구분해주는 번호
- 16 bit : 0 ~ 65,535
- process-to-process communication
- local host
- local process (port number)
- remote host
- remote process (port number) → 다음과 같은 4 가지 필요


- IP 주소 → host 설정 (우리 집)
- in Network Layer (IP)
- port → process 설정 (집 구성원 중 누구의 우편?)
- in Transport Layer (TCP, UDP)
- 종류
- well-known port
- 0 ~ 1023
- 유명한 / 공식적 서비스
- 22 (SSH), 25 (SMTP), 53 (DNS), 80 (HTTP), 443 (HTTPS)
- registered ports
- 1024 ~ 49151
- 어떤 비즈니스에서 사용하는 포트
- 등록해야 사용 가능
- dynamic ports
- 49152 - 65535
- 등록하지 않는 port
- 관리 주체 X, 자유롭게 사용
- OS 가 port 자동 생성할 때 이 범위 사용 (NAT)
- well-known port
◆ Terms
-
Socket : IP address + port number

-
Multiplexing & Demultiplexing
- Transport layer 의 역할
- Port 생성 / 제거

✦ UDP (User Datagram Protocol)
- 매우 간단한 protocol
- connection-less : 연결 설정 X
- unreliable : error, 순서 신경 X
- 하는 일
- port 번호 받고 process 에게 보내기
- checksum 으로 error detection 하기
- 특징
- datagram : packet 의 다른 이름
- sequence number X : 순서 X 중복 detection X
- 장점 : 쉬움, 가벼움, 빠름
◆ Header

- Port number (Source / Destination) : 각 16 bit
- Total length : UDP header + data 길이
- Checksum : Header 의 checksum
◆ Application using UDP
- 현재 : TCP 65 ~ 70% / UDP 35% ~ 30%
- 멀티 미디어 스트리밍 서비스 (유튜브)
- QUIC (layer 4) : HTTP/3 에서 새로 만든 protocol. TCP 와 유사하지만 조금 더 가벼움. UDP 에 붙여서 사용
- Multicast application : 여러 사람에게 동시 전송
- DNS, SNMP 등
✦ TCP (Transmission Control Protocol)
- connection-oriented : 연결 설정 O
- reliable : 순서 대로, error 없이 전달
◆ Terms
- Segment : packet 의 다른 이름. 잘라서 보내는 기준
- bi-directional : 연결 되면 쌍방으로 데이터 전송
-
Buffer : sender / receiver 에 존재하는 데이터 전송 대기 공간. 운영체제 (OS) 관리

- Number
- Byte number
- TCP 는 각 byte 마다 numbering 해서 stream
- 첫 번째 byte 에 0 ~ 2^{32}-1 중 random number 부여
- TCP sequence number
-
각 segment 의 첫 번째 byte number

-
segment number + length 통해 빠진 byte 있나 파악
-
- Acknowledgement number
- ACK 에 들어가는 순서
- 내가 다음 받아야 할 byte number (그 이전까지는 다 받았다는 의미)
- Byte number
◆ Functions
- Flow control (흐름 제어)
- 속도 조절
- recevier 한테 무리를 주지 않게 전송
- Congestion control (혼잡 제어)
- 속도 조절
- 중간 router 에서 drop 이 발생하지 않도록 전송
- Error control (오류 제어)
- ACK 이용 재전송
- ◆ Error Control
-
Layer 2 에도 error control 존재 → Router 에서 발생한 오류 검출 불가능

- If layer 4 에서만 오류 검출? → layer 4 은 end point 에만 존재. 중간 router 오류 control 불가능
- Layer 2 & 4 둘다 Error Control 에 사용
◆ TCP header

- 각 줄 당 32bit
- Port number (Source / Destination) : 각 16 bit
- Sequence number : 내가 보낼 데이터의 sequence number
- Acknowledgement number : 상대 데이터의 acknowledgement number
- bi-directional → Sequence & Acknowledgement number 둘다 필요. 서로 다른 byte number 시작
- HLEN (4 bit) : header length (unit : 4 byte)
- option 없으면 기본 5
- TCP option 은 자주 사용 → 유동적으로 변경
- reserved (6 bit → 4 bit) : 사용 X 예약 bit
-
Flag (6 bit → 8 bit) : 0 or 1

- URG (Urgent) : 1 이면 중요한 data 있음 (Ctrl + C / Esc 등)
-
urgent pointer (16 bit) 사용

- data : urgent + normal 로 구성
- normal data 시작 위치 표시 (이전까진 urgent data)
-
- ACK : Acknowledgement 있음 → 맨 처음 빼곤 보통 1
- PSH (Push) : 1 이면 OS 에게 buffer 에서 바로 올려달라는 의미
- buffer 에 있는 내용 모두 전송
- RST (Reset) : 문제 있어서 연결 종료 시 1 (Client & Server 둘 다 전송 가능)
- SYN (Synchronize) : 처음 연결 설정 시 1 (Client 만)
- FIN (Finish) : 장상적 연결 해제 시 1 (Client 만)
- URG (Urgent) : 1 이면 중요한 data 있음 (Ctrl + C / Esc 등)
- 추가된 flag
- ECE (ECN-Echo)
- IP-header 의 ECN 2 bit
- ECT (ECN-Capable) : ECN 사용 가능?
- sender 결정
- 중간에 congestion 있으면 marking 가능
- CE (Congestion Experience) : 지금 Congestion 있음?
- router 결정
- packet drop 대신 CE 1 로 marking
- receiver 입장에선 여러 CE 가 계속 옴
- ECT (ECN-Capable) : ECN 사용 가능?
- CE marking 된 packet receive → receiver가 ECE 1 로 설정해서 보내기
- IP-header 의 ECN 2 bit
- CWR : ECE 1 받은 sender 가 CWR 전송
- sender : congestion 있다는 거 파악하고 CWND 줄이기
- receiver 가 CWR = 1 인 packet 받으면 다시 ECE = 0 전송

- ECE (ECN-Echo)
- Window size (16 bit)
- advertised window 의 크기
- receiver 가 자신 window 얼마 남았는지 전송
- sender 는 이 size 이상 전송 X
- flow control
✦ TCP : connection setup/teardown
◆ TCP connection setup
- bi-directional : client & server 모두 정보 send & receive
- 3-way handshake
- Client :
SYN안녕하세요? - Server :
ACK반갑습니다 +SYN안녕하세요? - Client :
ACK반갑습니다 → connetion 완료
- Client :

- connection 설정 시 data 전송 X → sequence number 그대로 사용
- SYN flooding attack
- DoS (Denial-of-Service) attacks
- Server :
SYN요청 → state 만들고ACK+SYN보내고 wait - Attacker :
SYN요청 후 → 다른 IP 로 또다시SYN요청 - state 만 늘어남 → 다른 유저 못 받음
- Server :
- 방어
- initial sequence number 로 계속 오는 애들 정보 찾기
- memory 에 state 남기지 않고 최종 연결 때만 남기기
- DoS (Denial-of-Service) attacks
◆ TCP connection teardown
- 3-way handshake
- Client :
FIN - Server :
ACK+FIN - Client :
ACK→ connection 끝
- Client :

- half-close : Client 가
FIN요청 보냈는데 Server 가 아직 data 전송중- Server : Client 의
FIN에 대한ACK전송 - data 전송 완료 후
FIN전송 - 이 동안에는 Server 의 단방향 데이터 전송

- Server : Client 의
✦ TCP : sliding window
◆ Send Window
- sender 에 window 존재
- window 안에 있는 data 전송
-
ACK받으면 그만큼 window slide
- Last Byte ACKed : 가장 최근에 ACK 받은 byte (window 왼쪽)
- Last Byte Sent : 가장 최근에 보낸 byte (window 안쪽 / 아직 ACK X)
- Last Byte Written : 가장 최근에 준비된 byte (window 오른쪽 / Application)
- LastByteAcked ≤ LastByteSent ≤ LastByteWritten
◆ Receive Window
-
receive window

- LastByteRead : 가장 최근에 ACK 보낸 byte
- NextByteExpected : 다음으로 받아야 할 byte (그 전까진 모두 받았다 가정)
- LastByteRcvd : 가장 최근에 받은 byte (중간에 구멍 포함)
- LastByteRead ≤ NextByteExpected ≤ LastByteRcvd
◆ Window
- Linked layer 와 차이 → window size
- linked layer : 조건에 따라 고정
- TCP : 상황 따라 window size 변경
- Window size : min (rwnd, cwnd)
- rwnd (receiver window) : receiver 가 advertise 해주는 window → buffer 에 남은 공간
- cwnd (congestion window) : network 상태 window (중간 router)
✦ TCP : Sliding Window Control
- TCP → congestion & flow control
- Reliable delivery
- Fast delivert
- Sliding Window Size
- Size ↑ → 속도 ↑, drop ↑
- drop → bandwidth 낭비
- Size ↓ → 속도 ↓, bandwidth 낭비 ⇒ 적당한 size 찾기!
- Size ↑ → 속도 ↑, drop ↑
◆ Flow control
- receiver 의 Window size 칸 보고 남은 크기 추정
- 16 bit → 0 ~ 65535 byte
- TCP option (Window scale) 로 배수 넣을 수 있음
- n → 2^n 만큼 곱하기

- n → 2^n 만큼 곱하기
- MSS (Maximum Segment Size)
- MTU - IP header (20) - TCP header (20 + α)
- 보통 1460 인 경우 多
- 1500 안 넘도록 자르기
✦ Congestion Control
-
Congestion? → router 에서 packet loss 발생! (
ACK가 오지 않음)
- data 전송 ↑ → capacity ↑, delay ↑
- throughput : pipe 를 꽉 채워서 보냄 → 노란색 영역이 best!
◆ Slow Start Phase
- 변수 : CWND
- 단위 : MSS
- Initial CWND : 1 MSS
- 한 번 전송 →
ACK받으면 CWND++ ACK받을 때마다 CWND++ → 지수승 만큼 증가!
- 한 번 전송 →

- 각 RTT 마다 2배 → exponential increase
- 결국 packet drop → congestion 발생
- Time out : Packet loss 판단 방법
- Segment 전송 후 일정 시간 동안 안옴 → TIMEOUT ⇒ LOST
- Timeout 발생 시
- CWND = 1 로 초기화
- SSThresh = \frac{\text{CWND}}{2} 로 설정
- drop 당시 CWND 의 절반!
- end-to-end 간 packet 이동 → 어느 정도의 시간을 두어야 하는가?
- margin 을 크게 두어야 함
◆ Congestion Avoidance Phase
- 다시 Slow Start 시작
- SSThresh 지점 도달 → 천천히 올라감
- CWND += MSS * \frac{\text{MSS}}{\text{CWND}}
-
선형적 증가 : Additive Increase

- drop 발생 시 같은 방법으로 CWND = 1 초기화 & SSThresh 설정 후 처음부터
✦ Fast Retransmission and Fast Recovery
◆ Fast Retranssmission
- Timeout → end-to-end 라 오랜 시간 기다려야 함
- packet loss 결정 느림
- 대안 : Three duplicate ACK
- 같은 번호에 대한 ACK 가 3번 반복 → drop 판단
- 바로 Segment 다시 보내기
◆ Fast Recovery
- Three duplicate ACK 로 인해 재전송 할 때
- Timeout : 아예 대부분 Packet 이 제대로 전송 X
- Three duplicate ACK : 중간에 한 Packet 빼고는 대부분 잘 전송
- CWND = SSThresh
- SSThresh = \frac{\text{CWND}}{2}
- slow start skip 하고 바로 congestion avoidance 단계로 이동

- slow start skip 하고 바로 congestion avoidance 단계로 이동

공유하기
Twitter Facebook LinkedIn글 이동
시리즈 이동
Comments