Located between the application layer and the network layer.
Provides a process-to-process communication between two application layers
transport layer는 layer 1,2,3 와는 달리 통신망 상에 존재하는 것이 아니라 end system(host computer)에만 존재한다.
Process-to-Process Communications
Network layer versus. transport layer
Network layer: host-to-host(집에서 집)
computer level
Transport layer: computer level이 아니라 process level (특정 사람: 엄마 or 아들 or ...)
Client-Server Paradigm
Most common process-to-process communication is the client-server paradigm
client의 request -> server의 response
Operating systems support multiuser and multiprogramming environments.
Local host, local process, remote host, remote process must be defined
Addressing
Address required for delivery
Transport layer address: port number
특정 process를 identify 가능
Addressing: Port Numbers
16 bits
between 0 and 65535: ephemeral(일시적인) port number
ICANN (Internet Corporation for Assigned Names and Numbers) range: well-known ports, registered ports, dynamic ports
0~1023: well-knwon port(자주 쓰이는)
http, ftp, ...
1024~49151: registered(등록해 놓고 쓸 수 있는)
중복을 막기 위해 통보하고 쓴다.
나머지: 동적으로(임의로) 할당하고 회수하여 자유롭게 사용하는
일반 컴퓨터들이 사용
IP Addresses vs. Port Numbers
녹색: destination address
이를 보고 packet을 보냄
주소가 맞으면 편지봉투(network layer header)는 벗겨지고 그 안에 있는 것을 transport layer에서 확인
transport layer header에는 13이라는 port number가 있다.
특정인: 예를 들어 홍길동
그러면 13번 port에 해당하는 프로세스에게 데이터를 전달한다.
Socket addresses
Process-to-process delivery needs two identifiers -> IP address and the port number
Socket address is the combination of an IP address and a port number
A transport-layer protocol needs a pair of socket addresses; the client and server socket address
pair가 딱 있으면 socket programming 가능!!
Encapsulation and Decapsulation
The packets at the transport layer are called user datagram, segments, or packets
original message를 transport layer에서 받아서 header를 붙여서 보냄
port number를 붙임
udp에서는 user datagram이라 부르고
tcp에서는 segments라고 부른다.
Multiplexing and Demultiplexing 기능
Addressing mechanism allows multiplexing and demultiplexing by the transport layer
mux의 default 그림은 여러 메세지를 받아서 하나로 내보내는 느낌이다.
mux: 여러개의 source로부터 나온 process들을 하나로 묶어주는 것
many to one
demux
Flow Control
producer가 생산해 내는 data를 consumer가 소비하는 data를 압도하는 경우 -> unbalanced
pushing: 데이터가 만들어지면 consumer의 의지 없이 그냥 보내는데 consumer가 자기가 handling하기 너무 빡세다 싶으면 stop 하라고 flow control 요청!
pulling: consumer가 request하여 데이터를 받는
consumer가 request를 할 때만 데이터를 받음, 말 그대로 pulling 방식
Flow control at transport layer: two buffers at sending and receiving transport layer
sender - transport layer 와 trasport layer - transport layer 간 flow control이 필요함.
sender는 편지를 보내려는 사람이고 transport layer는 우체국인데 우체국이 편지하나 보내주세요 라고 하지 않기 때문에 message를 sender 입장에서 그냥 push 한다.
push 형태의 message 전송이 일어나는 곳에서는 지나치게 빠른 속도로 오면 flow control이 필요 할 수 있다.
그러나 pull 형태의 구간에서는 flow control이 필요하지 않음
Error Control(중요)
The underlying network layer, IP, is unstable
IP protocol은 주소는 잘 찾아가지만 error control이나 flow control이 없음
내가 보내는 과정에서 error가 생길 수 있음
Error control at the transport layer is responsible for
Detecting and discarding corrupted packets(손상된 것을 detect하고 버림)
checksum or error check
Keeping track of lost and discarded packets and resending them(추적해서 재전송)
Recognizing duplicate packets and discarding them(중복 제거)
Buffering out-of-order packets until the missing packets arrive(늦게 온 packet을 위한 buffering 과정으로 순서 맞추기)
For error control, the sequence number are module 2m, where m is the size of the sequence number field in bits
sequence number 반드시 필요 - 4bit면 0~15 인데 modular 됨.
만약 친구한테 편지가 100통 왔는데 그 중 하나가 도착하지 않았다면 다시 100통을 보내달라 할 수 없음 -> 그 중 몇 번째 편지가 오지 않았는데 판단하고 만약 13번째라면 13번째 편지만 다시 보내줘! 요청
If m is 4, the sequence numbers are 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2,3,4, ….
이를 통해 packet이 corrupted, out-of-order, duplicated 되었는지를 파악하고 처리 가능
receiver는 잘 받았다는 ACK를 보낸다.(sequence number와 상응하는)
만약 손상을 입었다면 버리고 ACK를 보내지 않음.
sender 입장에서 timer를 구동시켜 일정 시간 내에 ACK가 오지 않으면 retransmission 요구
traffic 문제나 등등의 상황에서는 답장이 늦기 때문에 ACK가 도착하기 전에 timer out되는 경우 sender는 그 사실을 모르고 또 보내버릴 것이기 때문에 receiver는 두 개의 duplicate data를 받게되는 상황.
sequence number로 판정하여 discard
out of order
프로토콜에 따라 문제가 발생했다 판단하여 버리는 경우도 있고,
올 때까지 기다렸다가 순서대로 주는 프로토콜도 존재
Combination of Flow and Error Control
Sliding window in circular format
m=4 -> 0~15 = mod 16
window size = 7
sender가 receiver 쪽으로부터 잘 받았다는 ack를 받지 않아도 보낼 수 있는 양
저쪽에서 응답이 오지 않아도 계속 보내는데 그 양이 정해져 있음(꽉차면 더 이상 못 보냄)
window size를 채울 정도로 packet을 보냈음에도 receiver로부터 잘 받았다는 ack가 오지 않으면 지우지 못하고 계속 보관하고 있어야 함.(copy)
ACK가 오지 않아서 time-out 시에 재전송을 위한 copy를 가지고 있어야 함
outstanding - 미해결된
편지를 보내 놓긴 했는데 그 편지에 대한 답장이 아직 오지 않아 기다리고 있는 상태
c에서 window가 다 채워졌고 그 후 receiver로부터 0번을 잘 받았다는 ack가 오게 되면 window는 이제 더 이상 0번 window를 보관할 필요가 없기 때문에 sliding 한다.
그제서야 이제 7번 sequence No에 해당하는 packet을 보낼 수 있게 된다.
window size = 1 -> stop and wait
Sliding window in linear format
modular 16
window size = 7
window size가 꽉 차있는 경우(아무런 ack 없이 7개의 packet을 보낸 경우)에서 ack가 와야 sliding
대부분의 경우 꽉차기 전에 ack가 오기 때문에 smoothly sliding 한다.
Congestion Control(혼잡 제어)
Mechanisms and techniques that control the congestion and keep the load below the capacity
capacity(처리 능력) 이하로 부하를 control
Congestion in networks occurs because routers and switches have queues-buffers that hold the packets before and after processing(실시간으로 처리할 수 없기 때문에)
queue가 너무 많이 차 있으면 혼잡
A router, for example, has an input queue and an output queue for each interface
Congestion at the transport layer is actually the results of congestion at the network layer
Very important issues in Internet
Connectionless vs. Connection-oriented
Connection-oriented: TCP, SCTP
connection establishment(connection 설정), data exchange, connection tear down: TCP and SCTP
Connectionless: UDP
하나하나가 독립적으로 datagram 형식으로 전달
unreliable 하지만 연결을 맺고 끊는 과정이 없이 단순하기 때문에 실시간 통신에 유리
Reliable vs. Unreliable
data-link layer에서 CRC와 같이 이미 error check를 하는데 왜 transport layer에서 또 error control을 하는가?
data link를 거쳐서 error control을 했다고 해도 말단에서 error가 없을 것이라는 보장이 없음
내가 편지를 보내면 우체국 끼리 어떠한 오류가 없도록 잘 보내는데 다른 사람한테 잘못 갈 수도 있음
Connectionless (CL) Service
reordering, numbering 등의 과정 없이
packet을 0,1,2 보내게 되면 물론 순서대로 갈 수 있지만 때로는 순서가 뒤 바뀔 수도 있을 것이다.
그러나 이것을 그냥 받아들임
그러나 굉장히 빠르고 단순함.
실시간성이 중요한 것에서 잘 사용
unreliable 함.
Connection-Oriented (CO) Service
client가 connection을 open 해달라는 요청
Connection establishment(연결 설정 단계)
메세지 전송
sequence number로 ordering 및 number을 하기 때문에 순서가 섞이지 않음.
connection closes request
connection teardown
CL and CO Service as FSMs
양방향으로 각자 연결 맺거나 끊자고 요청
나 -> 서버
OK
서버 -> 나
OK
4-way handshake
Transport-Layer: Simple Protocol
A simple connectionless protocol with neither flow nor error control
sender는 그냥 header 붙여서 보내기만 하고
receiver는 그냥 받기만 함.
delay되어 도착
Stop-and-Wait Protocol
A connection-oriented protocol which uses both flow and error control.
connection을 맺고 끊는 과정은 없어 connection less에 가깝긴 함.
sequence number를 썼다는 이유로 교재에서는 connection-oriented로 분류하는 것 같음.
Both the sender and the receiver use a sliding window of size 1.
하나 보내고 ack 기다렸다가 ack 오면 sliding 후 다시 또 하나 보내고
하나 보내면 저쪽에서 그거에 대한 ACK가 와야 다른 걸 보낼 수 있음.
The sender sends one packet at a time and waits for an acknowledgment before sending the next one.
To detect corrupted packets, we need to add a checksum to each data packet.
To prevent duplicate packets, the protocol uses sequence numbers and acknowledgement (ACK) number.
The ACK number always announces, in modulo-2(0,1,0,1....) arithmetic, the sequence number of the next packet expected
아래 그림 오류
Error-free packet with seqNo ≠ R arrived
ACK 1: 0번을 잘 받았고 1번을 기대한다.
receiver의 window에는 1번이 올것으로 되어 있었는데 0번 packet이 옴 -> 다시 보내!(ACK 1)
중복된 pakcet은 discard
Efficiency: Stop-and-Wait Protocol
Very inefficient if our channel is thick (large bandwidth or high data rate) and long (long round-trip delay).
서울에서 부산까지 버스로 한명 보내고 한명 돌아오는 게 ...
Bandwidth-delay product: the volume of the pipe in bits when we think of the channel as a pipe
A measure of the number of bits a sender can transmit through the system while waiting for an acknowledgement from the receiver
(Pipelining: a task is begun before the previous task has ended)
No pipelining in Stop-and-Wait protocol
공부한다는 측면에서 stop-and-wait을 배운 것이지 사실상 매우매우 비효율적임
channel이 매우 길다면 packet을 보내고 다시 받기 까지 굉장히 오래걸릴 것이기 때문에 ack를 받는 것과 상관없이(window size > 1) 보낼 수 있는 다른 프로토콜에 비해 사용성이 매우 떨어진다.
GBN, SR
Go-Back-N (GBN) Protocol
To improve the efficiency of transmission (to fill the pipe), multiple packets must be in transition while the sender is waiting for acknowledgment.
In other words, we need to let more than one packet be outstanding(시중에 나가 있는 packet) to keep the channel busy while the sender is waiting for acknowledgment
seqNo, checksum(error detection) for packet
ackNo, checksum for ACK
channel을 좀 더 busy하게 만들 수 있음 -> 더 효율적
GBN은 send window가 여러 개가 될 수 있음
window size 내에서는 여러개의 packet을 보낼 수 있음
receiver 쪽에서는 window size가 1 !!!!!!
받는 거는 하나만 받겠다는 의미
1, 2 ,3 ,4 .... 쭉쭉 보내다가 중간에 3번 packet이 lost되거나 corrupted되면 go-back-3 , 즉 3으로 다시 돌아가서 3번부터 다 다시 보내라고 하는 방식
그 뒤의 4, 5,... 는 3번이 안 왔기 때문에 다 버리고 다시 보내야 함.
SR은 error 없이 잘 오면 일단 받아놓고 순서대로 다 오면 한 번에 다 보내버림
Go-Back-N (GBN) Protocol
Sequence number: modulo 2m
m=3 이면 0~7까지 쓸 수 있음 -> modulo 8
The ACK number is cumulative(누적되는) and define the sequence number of the next packet expected to arrive
ACK 3 -> 3번을 잘받았다는 것이 아니라 2번까지 잘 받았다는 것임
만약에 ACK 3 후에 ACK 6이 오면 그 전의 4,5,6 전부 잘 받았다는 뜻
The send window is an abstract concept defining an imaginary box of the maximum size = 2m – 1 with three variables: Sf, Sn, and Ssize.
m=8이면 window size의 최대 크기는 7 -> 나중에 설명
Sf: First outstanding
Sn: Next to send
Ssize: Send window size
purged: 지워진
Sliding Window: GBN Protocol
The send window can slide one or more slots /when an error-free ACK with ackNo greater than Sf and less or equal to Sn (in modular arithmetic) arrives
만약 a. 상황에서 ackNo=4가 왔다면 3번까지 잘 받았단 뜻이므로 4번에 대한 ACK는 오지 않은 셈이다
그렇기 때문에 sliding 할 수 없고 ackNo는 Sf와 같으면 sliding 할 수 없다!(equal이 들어가면 안됨)
반대로 Sn과는 같아도 되는 이유가 바로 이것 때문임.
Sliding Window: GBN Protocol
The receive window is an abstract concept defining an imaginary box of size 1 with s single variable Rn. The window slides when a correct packet has arrived; sliding occurs one slot at a time
window가 5번을 보이고 있으므로 만약 5번 packet이 잘 도착하면 receiver는 ACK 6을 보냄으로써 6을 받을 준비를 하고 window를 6이 보이게 sliding한다.
근데 만약 6번을 받을 준비를 하고 있는데 7번이나 8번이 오게 되면 이는 받을 수 없으므로 버려진다.
Timer for Sf
Resending packets
FSMs for GBN Protocol
process로부터 packet을 만들라는 요청이 옴
packet을 만들고
Window Size: GBN
The size of the send window must be less than 2m; the size of the receive window size is always 1.
왜 maximum window size가 2m이 아니라2m - 1일까?
만약 mod 4를 사용하고 있다면 (m=2)
ACK 1, 2, 3, 0이 모두 lost되면 receiver는 새로운 0을 기다리고 있는데 sender에서는 이것이 헷갈릴 것이다.
receiver는 새로운 0을 기다리고 있는데 sender에서는 맨처음 packet 0에 대한 timer가 time-out되어 다시 보내게 되는데 receiver는 잘 온 것으로 착각하여 그대로 진행 되어 버린다.
Example 23.7: GBN
ACK2가 lost된 상황에서 ACK3가 제대로 도착하여 culmulative 방식이기 때문에 ACK2도 잘 온 것으로 받아들여 그대로 문제없이 진행되버린다.
Example 23.8: GBN
수신측에서 1번이 아직 안 왔기 때문에 2, 3번이 오면 버려버림.
그러고 나서는 ACK1을 계속 보내는 것
그러다 time-out되면 packet1부터 resent
Selective-Repeat (SR) Protocol
GBN보다 성능이 좋은 점이 있음.
The GBN is inefficient if the underlying network protocol loses a lot of packets.
Each time a single packet is lost or corrupted, the sender resends all outstanding packets
Window in SR Protocol
Send window and receive window for Selective-Repeat protocol
BN과 가장 큰 차이는 multiple receive window!
근데 최대 크기가 2m-1임!
ACK number defines the sequence number of the error-free packet received
SR에서는 ACK6이면 6번 잘받았다는 뜻!(GBN과 다름!)
순서대로 안 와도 일단 버리거나 application layer에 보내는 것이 아니라 일단 채워넣고 순서대로 오면 한 번에 sliding
FSMs for SR Protocol
Example 23.10: SR Protocol
SR에서는 ACK 0이 0번을 잘 받았다는 뜻이다.
1번을 다시 보낼 때 그 이후의 packet까지 다시 보내지 않는다.
Window Size: SR
The size of the send and receive window can be at most one-half of 2m
m의 절반 정도를 window size로 해야 duplicated packet에 대한 처리가 가능함
Bidirectional Protocols: Piggybacking
Data packets are normally flowing in both directions. This means that acknowledgments also need to flow in both directions.
ACK를 받으면서 내 packet도 같이 보낼 수 있음
packet+ACK
Piggybacking is used to improve the efficiency of the bidirectional protocols. When a packet is carrying data from A to B, it can also carry acknowledgment feedback about arrived packets from B