chapter 3 transport layer - burapha university
TRANSCRIPT
Transport Layer 3-1
Chapter 3 Transport Layer
Computer Networking A Top Down Approach
6th edition Jim Kurose Keith Ross
Addison-Wesley March 2012
การใชสไลด
เนอหาในสไลดเหลานถกแปลมาจากสไลดตนฉบบประกอบหนงสอของผแตงชอ Kurose และ Ross
ผแปลอนญาตใหทกทานสามารถใชสไลดทงหมดได ดงนนทานสามารถดภาพเคลอนไหว สามารถเพม
แกไข และ ลบสไลด (นบรวมขอความน) และเนอหาของสไลดเพอใหเหมาะกบความตองการของทาน
ส าหรบการแลกเปลยน เราตองการสงตอไปนเทานน
bull ถาทานใชสไลดเหลาน (เปนตวอยาง ในหองเรยน) อยาลมกลาวถงทมาของสไลด (หลงจากน
เราตองการใหทกคนอดหนนและใชหนงสอของผแตงดานขาง)
bull ถาคณโพสตสไลดใด ๆ ในเวป อยาลมกลาวถงวา คณแกไขจากสไลดตนฉบบของเรา และ ระบ
ถงลขสทธของเราดวย
ขอขอบคณและขอใหสนก
ณฐนนท ลลาตระกล ผเรยบเรยง สงวนลขสทธ 2013 เนอหาทงหมดเปนลขสทธของคณะวทยการสารสนเทศ
Transport Layer 3-2
Chapter 3 Transport Layer
เปาหมาย เขาใจหลกการเบองหลงของการ
ใหบรการชน Transport การรวมการแยกขอมล
(multiplexing demultiplexing)
การสงขอมลทไวใจได (reliable data transfer)
การควบคมการไหลของขอมล (flow control)
การควบคมความคบคงในเครอขาย (congestion control)
เรยนรเกยวกบโปรโตคอลในชน
Transport ของ Internet UDP การสงขอมลไมตองมการเชอมตอ
(connectionless transport) TCP การสงขอมลทไวใจได แตตองมการ
เชอมตอกอน (connection-oriented reliable transport)
การควบคมความคบคงของ TCP
Transport Layer 3-3
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-4
Transport services and protocols
ใหบรการการสอสารทเชอม (เชง logic) ระหวางโพรเซสของแอพพลเคชนทท างานอยบนเครองตางๆ
transport protocols ท างานอยบนเครองปลายทาง เครองปลายทางตวสง ท าการแยก
ขอมลออกเปน segments แลวสงตอไปยงชน network layer
เครองปลายทางตวรบ รวบรวม segments และประกอบใหเปนขอความแลวสงตอไปยงชน app
มโปรโตคอลทใหบรการในการสงขอมลมากกวาหนงโปรโตคอล Internet TCP and UDP
application transport network data link physical
application transport network data link physical
Transport Layer 3-5
ชน Transport vs ชน Network
ชน network การสอสาร (เชงตรรกะ) ระหวางเครอง
ชน transport การสอสาร (เชงตรรกะ) ระหวางโพรโซส ใชบรการดวย และ ชวยเสรม
บรการของชน network
เดก 12 คนในบาน Ann สงจดหมาย 12 ฉบบไปหาเดก 12 คนในบานของ Bill
เครอง = บาน โพรเซส = เดก ขอความของโปรแกรม = จดหมายใน
ซอง โพรโตคอลชน transport = Ann
และ Bill ทตองแยกจดหมายใหลก ๆ โพรโตคอลชน network = บรการ
ของไปรษณย
อปมาเหมอนกบบาน
Transport Layer 3-6
โปรโตคอลชนทรานสปอรตของอนเตอรเนต สงขอมลแบบเรยงล าดบและนาไวใจ
หรอนาเชอถอได (TCP) การควบคมความคบคงของขอมลใน
เครอขาย การควบคมการไหลของขอมล ตองมการเชอมตอกอนการสงขอมล
สงขอมลแบบไมเรยงล าดบและไมนาเชอถอ UDP ไมมอะไรเพมเตมจากชน IP ทเปน
ldquobest-effortrdquo
ไมใหบรการเหลาน การรบประกนความลาชา การรบประกนแบนดวดธ
application transport network data link physical
application transport network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
Transport Layer 3-7
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-8
การรวมและแยกขอมล (Multiplexingdemultiplexing)
socket
ใชขอมลสวน header เพอสง segment ทไดมาไปยง socket ทถกตอง
demultiplexing ทผรบ จดการกบขอมลจากหลาย ๆ socket ใส header ของชน transport เขาไป (header จะถกใชเพอท าการ demultiplexing ภายหลง)
multiplexing ทผสง
transport
application
physical
link
network
P2 P1
transport
application
physical
link
network
P4
transport
application
physical
link
network
P3 process
Transport Layer 3-9
ท า demultiplexing อยางไร
source port dest port
32 bits
application data
(payload)
other header fields
TCPUDP segment format
host รบดาตาแกรมจากชน IP แตละดาตาแกรมจะมหมายเลขไอพตนทาง
ไอพปลายทาง แตละดาตาแกรมจะม segment ของชน
transportอย แตละ segment จะมหมายเลข port ตน
ทางและปลายทาง (source and destination port number)
host ใชขอมลหมายเลขไอพและหมายเลขพอรต เพอน าเซกเมนตไปยง socket ทถกตอง
Transport Layer 3-10
demultiplexing กรณทไมมการเชอมตอ (Connectionless)
datagrams ของ IP ทม เลข port ปลายทางตวเดยวกน แมจะมทอย IP และหรอ เลข port ของเครองตนทางตางกน (process ทสง datagram เปนคนละ process แตสงมาท process ผรบตวเดยวกน) จะถกน าไปยง socket เดยวกน ทเครองปลายทาง
จากบททแลว socket ทถกสรางจะมหมายเลข port ก ากบ
DatagramSocket mySocket1 = new DatagramSocket(12534)
เมอ host รบ segment ของ UDP ตรวจสอบหมายเลข port ใน
segment น า segment ของ UDP ไปยง
socket ทผกกบ port นน
เมอจะสรางดาตาแกรมเพอสงไปยง
socket ทเปน UDP ตองท าการระบ หมายเลขไอพปลายทาง หมายเลข port ปลายทาง
Transport Layer 3-11
Connectionless demux example
DatagramSocket serverSocket = new DatagramSocket
(6428)
transport
application
physical
link
network
P3 transport
application
physical
link
network
P1
transport
application
physical
link
network
P4
DatagramSocket mySocket1 = new DatagramSocket (5775)
DatagramSocket mySocket2 = new DatagramSocket
(9157)
source port 9157 dest port 6428
source port 6428 dest port 9157
source port dest port
source port dest port
Transport Layer 3-12
socket แบบ TCP ถกระบดวย 4 สวน ซงมองคประกอบดงน source IP address
(หมายเลขไอพตนทาง)
source port number (หมายเลขพอรตตนทาง )
dest IP address (หมายเลขไอพปลายทาง)
dest port number (หมายเลขพอรตปลายทาง )
demux จะดคาทงสสวนเพอน า packet ไปยง sockets ทเหมาะสม
เครองเซรฟเวอรอาจเปด sockets แบบ TCP จ านวนมากพรอมกน ซง แตละ socket ถกระบดวย 4 สวน
(แตจะมสวนท 3 คอหมายเลข IP ปลายทางเหมอน ๆ กน)
web servers จะม socket หลาย ๆ socket ไวส าหรบเชอมตอกบแตละ client HTTP แบบ non-persistent จะใช
socket ทแตกตางกนส าหรบแตละ request
demux กรณทมการเชอมตอ (Connection-oriented)
Transport Layer 3-13
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
P4
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
network
P6 P5 P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
ทง 3 segment มทอย IP ปลายทาง คอ B และ เลขพอรต ปลายทางคอ 80 แตถกแยกสงไปยง socket ทตางกน
server IP address B
Transport Layer 3-14
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
server IP address B
network
P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
P4
threaded server
Transport Layer 3-15
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
เปน protocol ของ Internet ทไมไดมสวนเพมเตมอะไร
บรการแบบ ldquoจะพยายามใหดทสดrdquo (best effort) ดงนน segment แบบ UDP อาจ สญหาย ไปถง app ของผรบแตไมเรยงล าดบ
ไมมการเชอมตอ ไมมการท า handshake ระหวางผสง
และผรบ แตละ segment ทเปน UDP จะถก
จดการเปนอสระจาก segment อน ๆ
UDP ใชใน app ทสง multimedia อยางตอเนอง
(ซงทนตอการสญเสย แต sensitive กบอตราการสง)
DNS SNMP
ถาจะให การถายโอนขอมลบน UDP มความนาเชอถอกวาน เพมความนาเชอถอทชน application มการกคนขอผดพลาด (ขนอยกบ แตละ
application)
Transport Layer 3-17
UDP สวนหวของ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
ควายาวของ segment ของ UDP (หนวยเปน byte) รวมความยาว
ของ header ดวย
ไมตองสรางการเชอมตอ (ซงเปนสวนทเพมความลาชา)
งาย ไมซบซอน ไมตองมสถานะของการเชอมตอทผสงและผรบ
สวนหว (header) มขนาดเลก ไมมการควบคมความคบคง UDP
สามารถสงขอมลไดรวดเรวตามทตองการ
ท าไมถงตองม UDP
Transport Layer 3-18
checksum ของ UDP
ผสง จดการขอมลทงหมดทจะไปอยใน
segment รวมทงขอมลสวนหวตาง ๆ ทเปนล าดบของจ านวนเตม 16 บตหลายจ านวน
checksum ผลรวมของขอมลตาง ๆ ใน segment
ผสงใส checksum เขาไปใน field checksum ใน header ของ UDP
ผรบ ค านวณหา checksum ของ segment ทได
รบมาใหม ตรวจสอบคา checksum ใน field ของ
header กบ คาทเพงไดจากการค านวณ วาเทากนหรอไม ถาไม แสดงวาพบขอผดพลาด ถาใช แสดงวา ไมพบขอผดพลาด แต
จรง ๆ แลว กอาจจะมขอผดพลาดไดอยด (รายละเอยดจะกลาวภายหลง)
จดมงหมาย ตรวจสอบขอผดพลาด เชน bits ทคาโดนกลบใน segment
Transport Layer 3-19
Internet checksum ตวอยาง
ตวอยาง การบวก 16-bit integers สองจ านวน
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note ขณะทบวกตวเลข เมอ bitท 16 (bit ซายสด) มการทดเลข ใหน าเลขนนไปบวกกบ bit ท 1 แลวจง flip bit ทก bit เพอใหได checksum
Transport Layer 3-20
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-21
Principles of reliable data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
หลกการของความนาเชอถอ data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
หลกการของความนาเชอถอ data transfer
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
ส าคญในชน application transport link ตด top-10 ของหวขอทางดานเครอขาย
Transport Layer 3-24
Reliable data transfer เรมตน
ดานผสง ดานผรบ
rdt_send() ถกเรยกจากชนดานบน (เชน โดย app) ท าหนาทผานขอมลเพอใหขอมลถกสงไป
ยงชนดานบนของผรบ
udt_send() ถกเรยกโดย rdt เพอทจะโอนถาย packet ผานชองการ
สอสารท unreliable ไปยงผรบ
rdt_rcv() ถกเรยกโดย OS เมอ OS ไดรบ packet ทมาถงชองการสอสารดานผรบ
deliver_data() ถกเรยกโดย rdt เพอใหสงขอมลไปยงชนดานบน
Transport Layer 3-25
เราจะ คอย ๆ พฒนา protocol ส าหรบการโอนถายขอมลแบบ reliable หรอ reliable
data transfer protocol (rdt) ตอนน พจารณาเฉพาะการโอนถายขอมลแบบทางเดยวกอน
แตขอมลส าหรบการควบคม (control info) จะถกสงไปกลบทงสองทาง
ใช finite state machines (FSM) เพอก าหนดการกระท าของผสงและผรบ
state 1
state 2
เหตการณทท าใหเกดการเปลยนผานของ State การกระท าขณะเปลยนผาน State
สถานะ (state) เมออยใน state ปจจบน state ถดไปจะขนอยกบเหตการณทจะ
เกดขน ณ state ปจจบน
เหตการณ การกระท า
Reliable data transfer เรมตน
Transport Layer 3-26
rdt10 การโอนถายขอมลแบบ reliable ผานชองสญญาณแบบ reliable
สมมตให ชองทางทอยขางใตเปนชองทางทเชอถอได ไมมการผดพลาดของบต ไมมขอมลสญหาย
FSMs ส าหรบผสง และ ส าหรบผ รบ ผสงสงขอมลไปยงชนดานลาง ผรบรบขอมลจากชนดานลาง
รอรบการเรยกจากชน
ดานบน packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
รอรบการเรยกจากชน
ดานลาง
rdt_rcv(packet)
ผสง ผรบ
Transport Layer 3-27
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร
acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK
negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors
sender retransmits pkt on receipt of NAK
new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 ชองทางการสอสารทม bit errors
ปกตแลว มนษยใชวธการใดในการแกไข ldquoerrorsrdquo ระหวางการสนทนา
Transport Layer 3-28
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร การตอบรบ (acknowledgements (ACKs)) ผรบแจงผสงวาไดรบ packet แลว การตอบปฏเสธ (negative acknowledgements (NAKs)) ผรบแจงผสงวา packet ม
errors sender สงขอมลซ าอกครง เมอไดรบ NAK
กลไกทเพมขน in rdt20 (เพมจาก rdt10) การตรวจจบความผดพลาด การแจงกลบ (feedback) ขอมลส าหรบการควบคม (ACKNAK) จากผรบไปยงผสง
rdt20 ชองทางการสอสารทม bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 ขอก าหนดของ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
จะเกดอะไรขนถา ACKNAK เกดเสยหาย ผสงไมรวาผรบรบ pkt ครบถวน
หรอไม ไมควรสง pkt ซ าอกครง เพราะ
pkt ซ ากน
การจดการกบขอมลทซ าซอน ผสงจะสง packet อกครงถา
ACKNAK เกดเสยหาย เตมหมายเลข sequence ใหแตละ
packet ผรบตองทง packet ทซ ากน
stop and wait ผสงท าการสงpacketและรอใหผรบตอบกลบดวย ACKNAK กอนทจะสง packet ตอไป
Transport Layer 3-33
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Transport Layer 3-35
rdt21 อภปราย
ผสง ใสหมายเลข seq ในpacket หมายเลข seq (01) กพอ
นกสท าไม ตองตรวจสอบวา ACKNAK ท
ไดรบเสยไปหรอไม จ านวนหมายเลข seq ตองเปนสอง
เทาของจ านวนสถานะ เพราะผสงตองเกบสถานะเพอldquoจ าrdquo
วา pkt ถดไปจะตองมเลข seq 0 หรอ 1
ผรบ ตองตรวจสอบวา pkt ทไดรบซ ากบ
pkt ทไดรบกอนหนาหรอไม ผรบจะเกบสถานะทระบวา 0 หรอ 1
คอหมายเลข seq ทคาดวาจะได
ขอสงเกต ผรบไมสามารถรวา ACKNAK สดทายทผสงไดรบถกตองหรอไม
Transport Layer 3-36
rdt22 protocol ทไมตองใช NAK
ท างานเหมอนกบ rdt21 แตใชแค ACKs แทนทจะสง NAK ผรบสง ACK ส าหรบ pkt สดทายทไดรบถกตอง
ฝงรบจะตองรวมหมายเลข seq ของ pkt ทก าลงถก ACK ไปดวย
จะสง ACK ซ าไปทผสงถาไมไดรบ pkt ทมหมายเลข seq ทคาดหวง ผลลพธจะออกมาเหมอนกรณทสง NAK ผสงตองสง pkt ตวลาสดไปใหมอกครง
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 ชองสญญาณทมความผดพลาดและ pkt สญหาย
เพมขอสนนษฐาน ชองสญญาณสามารถสญเสยแพคเกจ (ไมวาจะเปนขอมลหรอ ACKs) ได กลไก checksum หมายเลข seq
ACKs และ การสงซ า สามารถชวย แตมนกยงไมใชทางออก
วธ ผสงรอ ACK กลบมาในชวงเวลาท ldquoสมเหตสมผลrdquo
สง pkt เดมไปใหมอกครงถาไมไดรบ ACK ภายในชวงเวลาน
ถา pkt (หรอ ACK) มาถงลาชา (ไมใชหายไป) การสงใหมกจะเปนการสงซ า ซง seq
ไดจดการเรองเกยวกบขอมลซ าได ผรบตองระบเลข seq ของ pkt ทก าลง
ถก ACKed
ตองใชการนบเวลาถอยหลง (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
ขณะ rdt30 ด าเนนการ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
ขณะ rdt30 ด าเนนการ
Transport Layer 3-42
ประสทธภาพของ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
บตแรกของแพคเกจกถกสง t = 0
ผสง ผรบ
RTT
บตสดทายของแพคเกจถกสง t = L R
บตแรกของแพคเกจมาถง บตสดทายของแพคเกจมาถง สง ACK
ไดรบ ACK สงแพคเกจตอไป t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols แบบ pipelined
pipelining ผสงสงหลาย packet ไปยงผรบทง ๆ ท pkt เหลานนยงไมไดรบการยนยนตอบรบ (not yet acked) ชวงของหมายเลข sequence จะตองเพมขน ตองพกขอมล (buffer) ทผสงและผรบ
protocols แบบ pipelined แบบทวไปมสองแบบ go-Back-N selective repeat
Transport Layer 3-45
Pipelining ชวยเพม utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols แบบ pipeline ภาพรวม
Go-back-N ผสงสามารถสงแพคเกจทไมยงถก
ack ไดไมเกน N แพคเกจใน pipeline
ผรบแคสง cumulative ack ไม ack packet ถามนกอใหเกด gap
ผสงจบเวลาส าหรบแพคเกจทสงไป
นานทสดทยงไมได ack เมอเวลาหมด ผสงจะสงแพคเกจ
ทงหมดทยงไมไดรบ ack อกครง
Selective Repeat ผสงสามารถสงแพคเกจทไมยงถก ack ได
ไมเกน N แพคเกจใน pipeline
ผรบจะตองสง ack กลบใหแตละแพคเกจ
ผสงจะจบเวลาส าหรบแตละแพคเกจท
ไมได ack เมอเวลาส าหรบแพคเกจใดหมด ผสงจะสง
เฉพาะแพคเกจนนเทานน
Transport Layer 3-47
Go-Back-N ผสง
หมายเลข seq (k bit) จะอยใน header ของ packet อนญาตใหขนาด ldquowindowrdquo (ของ pkt ทตดกนและยงไมถก ack) ไมเกน N
ACK(n) จะ ack แพคเกจทงหมดไปจนถงทมหมายเลข seq เทากบ n - ldquoการ ACK แบบรวม (cumulative ACK)rdquo อาจมการไดรบ ACKs หมายเลข seq เดมซ า (ดรายละเอยดดาน receiver)
มการจบเวลาส าหรบแพคเกจทเดนทางอย ซงเดนทางนานทสดและยงไมได ACK (pkt ทมหมายเลข seq นอยทสดใน window)
timeout(n) เวลาหมดท pkt n ผสงจะสง pkt n และ pkt ทงหมดใน window (ซงมหมายเลข seq สงกวา n) อกครง
Transport Layer 3-48
GBN FSM ดานผสงทเพมจากของเดม
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum
out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM ดานผรบทเพมจากของเดม
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
ผ รบ Ack แตละแพคเกจทไดรบมาถกตอง เกบ (buffer) แพคเกจ เทาทจ าเปน เพอทจะสงขอมลทเรยงล าดบแลว ไปยง layer
บนไดในทายทสด
ผสงแคสงแพคเกจซ าเฉพาะแพคเกจทไมไดรบ Ack เทานน ตวจบเวลา (ทางฝงผสง) จะจบเวลาของแตละแพคเกจทไมไดรบ Ack
Window ของผสง มหมายเลข seq อย N หมายเลขตดกน จ ากดหมายเลข seq ของแพตเกจทสงไปแลว และไมไดรบ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
ขอมลมาจาก layer ดานบน ถามหมายเลข seq วางใน window ให
สง pkt ได
timeout(n) สง pkt n ซ า จบเวลาใหม
ACK(n) in [sendbase sendbase+N] รวา ผรบไดรบ pkt n แลว ถา n เกดเปนหมายเลขแรกสดในหนาตาง
(n เทากบ sendbase) ทไมได ถก ack เลอน window ไปทางดานขวา โดยเลอนไปยงหมายเลขทไมไดถก ack
ผสง pkt n in [rcvbase rcvbase+N-1] สง ACK(n) ถาไมเรยงตามล าดบ buffer ถาตามล าดบ สง (รวมถงใหสง pkt ท
เรยงตามล าดบและอยในบฟเฟอร) เลอน window ไปทหมายเลข seq ถดไปของ pkt ทยงไมไดรบจากผสง
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise ทงไปไมตองสนใจ
ผรบ
Transport Layer 3-54
ขณะ Selective repeat ด าเนนการ
สง pkt0
sender receiver
รบ pkt0 สง ack0
รบ pkt1 สง ack1
รบ pkt3 buffer สง ack3 รบ ack0 สง pkt4
รบ ack1 สง pkt5
pkt 2 timeout send pkt2
X loss
รบ pkt4 buffer สง ack4
รบ pkt5 buffer สง ack5
รบ pkt2 deliver pkt2
pkt3 pkt4 pkt5 สง ack2
บนทก ack3 มาถงแลว
sender window (N=4)
บนทก ack4 มาถงแลว บนทก ack4 มาถงแลว
Q เกดอะไรขนเมอ ack2 มาถง
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
สง pkt1 สง pkt2
สง pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
ตวอยาง หมายเลข seq 0 1 2 3 ขนาดของ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
ผรบไมสามารถเหนดานผสงได พฤตกรรมผรบจะเหมอนกนทง 2 สถานการณ
มบางอยางทผด (มาก)
ผรบไมเหนถงความแตกตางของทง 2 เหตการณจ าลองน
ในเหตการณจ าลอง (b) ขอมลเกาทถกสงซ า เมอผรบรบมา จะนกวาเปนขอมลใหม
Q ขนาดของ seq กบขนาดของ
window เกยวของกนยงไงเพอทจะหลกเลยงปญหาในตวอยาง (b)
Transport Layer 3-56
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-57
TCP ภาพรวม RFCs 79311221323 2018 2581
ขอมลแบบสองทศทาง มการสงขอมลทงไปและกลบในการ
เชอมตอ (connection) เดยวกน MSS ขนาด segment ทใหญสดท
TCP จะรบได (Max Segment Size)
connection-oriented handshaking (การแลกเปลยนของ
ขอความควบคม) ตงคาสถานะตงตนใหผสงและผรบ กอนการแลกเปลยนขอความ
flow controlled ผสงจะไมสงขอมลเกนกวาทผรบจะรบ
ได
point-to-point (สถานทนง-ไป-สถานทนง) ผสงหนงคน ผรบหนงคน
สายขอมลเปนไบตทเรยงล าดบและขอมลไมสญหาย (reliable in-order byte steam) ไมม ldquoขอบเขตrdquo ของขอความ
(ขอความจะมาถงผรบตอเนองกน)
pipelined การควบคมความคบคงและการควบคม
อตราการไหลของ TCP จะก าหนดขนาดของ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG ขอมลเรงดวน (โดยทว ๆ ไป ไมถกใช)
ACK ACK valid
PSH ผลกขอมลใหชน app (โดยทว ๆ ไป ไมถกใช)
RST SYN FIN สรางการเชอตอ
(ค าสง setup teardown)
จ านวน bytes ท ผรบเตมใจจะรบ
นบโดยใช byte ของขอมล (ไมใช segment)
Internet checksum
(เหมอนใน UDP)
Transport Layer 3-59
TCP seq numbers ACKs
หมายเลข sequence เลขของ byte stream จะเปน byte
แรกของขอมลของ segment น acknowledgements เลข seq ของ byte ถดไปทอกดานหนง
คาดหวงวาจะได cumulative ACK (ACK แบบรวม)
Q ผรบจดการกบ segment ทมาถงไมเรยงล าดบอยางไร A TCP ไมมรายละเอยดสวนน ndash ขนอย
กบคนทจะมาเขยนโปรแกรม TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาเขามาถงผสง
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาออกจากผสง
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
เหตการณจ าลอง telnet อยางงาย
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q เราควรจะก าหนด time out ไวทเทาใด
มากกวาเวลาของ RTT แตเวลาของ RTT นนแปรปรวน
ก าหนดไวนอยเกนไป timeout กอนก าหนด ท าใหมการ retransmissions โดยไมจ าเปน
ก าหนดไวมากเกนไป ระบบตอบสนองตอการสญหายของ segment ชาเกนไป
Q จะประมาณเวลาของ RTT อยางไร
SampleRTT วดจากระยะเวลาตงแตเรมสง sengment จนกระทงไดรบACK ไมสนใจการ retransmissions
SampleRTT มคาแปรปรวน เราตองการประมาณเวลาของ RTT ให smooth กวา ใชคาเฉลยของคาหลาย ๆ คา ไมใชแค
เวลาของ SampleRTT ปจจบน
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
คาเฉลยของการเคลอนทถวงน าหนกแบบ exponential คา SampleRTT ทในอดตจะมผลตอ EstimatedRTT ลดลงแบบ exponentially โดยทวไปจะก าหนดคา = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
ชวงเวลาของ timeout EstimatedRTT บวกกบระยะเวลาทเผอเอาไว ยงคาของ EstimatedRTT ทแปรปรวนมากเทาไร -gt ระยะเวลาทเผอความมากขนตาม
มประเมนคาการเปลยนแปลงของ SampleRTT จาก EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoชวงเวลาทเผอrdquo
Transport Layer 3-64
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP สรางบรการแบบ reliable อยบนบรการของ IP ทเปนแบบ unreliable segments ถกสงแบบ pipeline cumulative acks ม timer ส าหรบสงใหมคาตวเดยว
TCP สง segment ใหมเมอ เหตการณ timeout ไดรบ acks ซ า ๆ กน
เรามาเรมตนพจารณาทางดานผสงของ TCP อยางงายกอน ยงไมตองสนใจ acks ซ า ยงไมตองสนใจการควบคม flow และ
ความคบคง
Transport Layer 3-66
เหตการณของ TCP sender
เมอไดขอมลจาก app สราง segment ดวยหมายเลข seq เลข seq คอหมายเลขของไบตแรก
ของขอมลในแตละ segment หาก timer ยงไมเคยถกตง จะเรม
ตงเวลา การตงเวลาเพอจบเวลาส าหรบ
segment เกาทสดยงไมไดรบ ack ชวงเวลาทหมดอาย
TimeOutInterval
timeout สงใหมเฉพาะ segment ทเกด
timeout ตงเวลานบใหม เมอไดรบ ack ถา ack เปน ack ของ segment
กอนหนายงไมไดรบ ack Update สงทรวา ถก ACK แลว เรมตงเวลานบ ถายงคงม segment
ทยงไมไดรบ acked
Transport Layer 3-67
ดานผสงของ TCP (อยางงาย)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
การสราง ACK ของ TCP [RFC 1122 RFC 2581]
เหตการณทผรบ เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ) โดยขอมลทงหมดจนถงเลข seq ทคาดหวงไว ถก ACK หมดแลว
เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ ท าให ไมม gap ใน segment ทไดมา) แตมบาง segment ยงไมได ACK
Segment มาถงแบบไมเรยงตามล าดบ โดยมเลข seq สงกวาทตองการ ท าใหม gap (ชองโหว) เกดขน Segment ท ามาถง ทจะเตมบางสวนหรอเตมเตมชองโหว
TCP receiver action อยาเพงสง ACK รออก segment นง โดยรอสก 500ms หากยงไมม segment มา กสง ACK สง ACK แบบรวม (cumulative) ไปทนทในครงเดยว ซงจะเปนการ Ack segment ทมาแบบเรยงตามล าดบทงสอง segments สง ACK ซ า ไปทนท โดยใสเลข seq ของ byte ทตองการ สง ACK แบบรวมทนท โดย segment ทจะ Ack เรมจากดานทนอยกวาของ gap
Transport Layer 3-71
TCP fast retransmit
ระยะเวลาในการ time-out มกจะคอนขางยาว (โดยเปรยบเทยบ) ท าใหใชเวลาคอนขางนานกอนทจะ
สง packet อกครง
แกโดย ตรวจสอบการสญเสย pack โดยดท ACKs ทซ า ๆ กน ผสงมกสง segment ตด ๆ กน ดงนน ถา segment หนงหายไป จง
เปนไปไดทจะม ACKs ซ า ๆ กนจ านวนมาก
ถาผสงไดรบ ACKs ส าหรบขอมลเดยวกน 3 ACKS (ACKs ทซ ากนสามครง) ผสงตองสง seq ทยงไมถก acked (ระบเลข seq ทเลกทสด) มแนวโนมวา segment ทยงไมถก
ack จะหายไปเลย ดงนน จงไมตองรอใหหมดเวลา
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-74
TCP flow control application
process
buffer ดานผรบ ของ TCP socket
TCP code
IP code
application
OS
protocol stack ดานผรบ
application ลบขอมลจาก buffer ของ TCP socket hellip
hellip ชากวา TCP สงขอมล ขนไป (ขณะทผสงก าลงจะสง)
from sender
ผรบสามารถควบคมผสงได ดงนน ผสงจะไมสงขอมลเรวไป หรอ มากเกนไปจนลน (Overflow) buffer ของผรบ
flow control
Transport Layer 3-75
การควบคมการไหลขอมลของ TCP
ขอมลทอย buffer
buffer สวนทยงวาง rwnd
RcvBuffer
สวนของขอมล (payload) ใน segment ของ TCP
ไปยง process ของ application
ผรบระบขนาดของ buffer ทวางไวใน field rwnd ทอยในสวนหวของ TCP ทจะสงไปยงผสง ผเขยนโปรแกรมระบขนาดของ RcvBuffer ได
โดยใช API ตงคา option ของ socket (คาเรมตนทวไปคอ 4096 ไบต)
ทกระบบปฏบตการจะปรบขนาด RcvBuffer อตโนมต
ผสงจ ากดจ านวนของขอมลทยงไมถก acked (ldquoอยในระหวางการเดนทางrdquo) ใหเทากบคา rwnd ของขอมลผรบ
เปนการรบประกนวา buffer ของผรบจะไมลน
การbuffer ในดานของผรบ
Transport Layer 3-76
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-77
การจดการกบการเชอมตอ กอนทจะมการแลกเปลยนขอมลกน ผสงและผรบตองตกลงกนกอน ตกลงรวมในการสรางการเชอมตอ (แตละคนจะรวาอกฝายอยากจะเชอมตอหรอไม) ตกลงคาพารามเตอรส าหรบการเชอมตอ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake จะท างานไดเสมอไปหรอไมบน network
ความลาชาอาจเปลยนไป ขอความอาจถกสงซ าตวอยาง (เชน
req_conn(x)) เนองจากการสญหายของขอมล
ขอมลอาจสลบกน ไมสามารถรไดวาอกฝงไดรบหรอไม
ไดรบขอมลอะไร
2-way handshake
มาคยกนเถอะ
ตกลง ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-79
เหตการณผดพลาดของ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-80
3-way handshake ของ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM ของ 3-way handshake ของ TCP
Transport Layer 3-82
TCP การหยดการเชอมตอ
client server เลกเชอมตอทแตละดานของการเชอมตอ โดยแตละดานจะสง TCP segment ดวย FIN bit = 1
ตอบกลบ FIN ดวย ACK ในขณะทรบ FIN ACK กสามารถรวมอยในแพคเกจทสง FIN มาไดดวย
แตละดานสามารถสง FIN ไดพรอม ๆ กน
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP การหยดการเชอมตอ
Transport Layer 3-84
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-85
ความคบคง ความหมายไมเปนทางการ ldquoเมอจ านวนคนสงมากเกนไป ก าลงสงขอมลมาก
เกนไปดวยอตราการสงเรวเกนกวาท Network จะรบไหวrdquo แตกตางจาก flow control ผลทอาจทเกดขนจากความคบคง
packets หาย (buffer ลนท routers) ลาชามาก (เขาควใน buffers ของ router)
เปนปญหาทคนสนใจตด 10 อนดบตนๆ
หลกการของการควบคมความคบคงของเครอขาย
Transport Layer 3-86
ตนเหตและผลของความคบคง เหตการณ 1
มผสงและผรบอยางละสองคน Router 1 ตว ไมจ ากด buffers ความจของ link R ไมมการสงขอมลซ า
อตราขอมลทสงส าเรจตอหนงการเชอมตอ R2
buffer ท link ขาออกม buffer ไมจกด
Host A
อตราการสงขอมลตนฉบบ lin
Host B
อตราขอมลทสงส าเรจ lout
R2
R2
lou
t
lin R2 de
lay
lin
ดเลยจะมากขนเมออตราสงขอมลตนฉบบเขาใกลความจของ link
Transport Layer 3-87
Router 1 ตว Buffer แตมขนาด buffer จ ากด ตองสง pkt ไปซ าถา pkt นน timeout
ขอมลเขาของชน application = ขอมลออกจากชน application lin = lout
ขอมลเขาของชน transport จะรวมทตองสงซ าดวย lin lin
Buffer ของ link ทใชรวมกนซงมขนาดจ ากด
Host A
lin ขอมลตนฉบบ
Host B
lout lin ขอมลตนฉบบบวกกบ ขอมลทตองสงซ า
lsquo
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-88
ในอดมคต สมมตผสงรความเปนไปในเครอขาย ผสงสงเฉพาะตอนทเราเตอรม buffer เหลออย
Buffer ของ link ทแชรอยางจ ากด
lout copy
ม buffer วาง
R2
R2
lou
t
lin
Host B
A
ตนเหตและผลของความคบคง เหตการณ 2
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-89
lout copy
no buffer space
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
A
Host B
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
เมอสงขอมลท R2 บาง packets ถกสงซ า แต goodput ยงคงมคาลเขาหา R2 (ท าไม)
A
Host B
ตนเหตและผลของความคบคง เหตการณ 2
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Host B
ในความเปนจรง มการสงซ า packets หายหรอตกหลนระหวาง
เสนทางเนองจาก buffers เตม แตบางครง Timer ของผสงหมดเวลาลง
กอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-92
R2
lou
t
ldquoผลrdquo ของความคบคง เพอใหไดขอมลในอตราทตองการ (goodput) ตองท างานมากขน (สงซ า) เมอตองสง packets ซ าโดยทไมจ าเปน link จะตองล าเลยงหลาย copy ของ
ขอมลเดยวกน ท าให goodput ลดลง
R2 lin
ตนเหตและผลของความคบคง เหตการณ 2
ในความเปนจรง มการสงซ า 1 packets หายหรอตกหลนระหวางเสนทางเนองจาก buffers เตม 2 แตบางครง Timer ของผสงหมดเวลาลงกอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Transport Layer 3-93
มผสงขอมลทง 4 โฮสต เสนทางตองผานหลายจด หมดเวลาสงไปขอมลซ า
Q เกดอะไรขนเมอ λin และ λinrsquo เพมขน
Buffer ของเสนทางการสงขอมลทใชรวมกนมขนาดจ ากด
Host A lout
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
Host B
Host C Host D
A เมอ λinrsquo ของขอมลเสนสแดงมขนาดเพมขน ขอมลใน
เสนสน าเงนกจะถก drop ท าให throughput ของ connection สน าเงนเหลอ 0
lin ขอมลตนฉบบ lin ขอมลตนฉบบ บวกกบ
ขอมลทตองสงซ า
Transport Layer 3-94
อกหนง ldquoผลเสยrdquo ของความคบคง เมอแพกเกจถกทงไป นนกเทากบวา ทรยากรเครอขาย (ทใชสงขอมลกอน
หนาทขอมลนจะถกทง) ถกใชไปอยางไรคา
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
แนวทางในการควบคมความคบคงของขอมล
2 แนวทางในการควบคมความคบคง
การควบคมความคบคงโดยใชแคเครองปลายทาง (end-end)
ไมมการแจงกลบ (feedback) จากเครอขาย
ความคบคงของเครอขายจะถกเดาโดยเครองทอยปลายทางทคอยสงเกต loss delay
เปนวธของ TCP
การควบคมความคบคงโดยใหอปกรณเครอขายชวย
routers จะท าการแจง feedback ไปทระบบปลายทาง ใช bit 1 bit เพอระบถงความ
แออด (SNA DECbit TCPIP ECN ATM) หรอ ระบอตราการสงทชดเจน
ส าหรบผสง
Transport Layer 3-96
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
ABR available bit rate ldquoบรการทมความยดหยนrdquo ถาเสนทางของผสง ldquoมขอมลนอยกวา
ความจะมากrdquo ผสงจะใชประโยชนจาก
bandwidth ทเหลออย ถา path ของผสงแออด
ผสงจะคอย ๆ ลดอตราสงใหเหลอเทาอตราการสงขนต าทรบประกนไว
RM (resource management) cells สงโดยผสง แทรก ๆ ไปกบ cell ทเปนขอมล bits ใน RM cell ถกตงคาโดย switches
(ldquoเครอขายคอยชวยrdquo) NI bit ไมเพมอตราการสง (ความแออด
ระดบกลาง) CI bit การบงบอกถงความแออด
ผรบไมแกคาใน bit นของ RM cells และสงไปใหผสง
Transport Layer 3-97
field ขอมล ER (explicit rate) ขนาด 2 byte ใน cell RM switch ทแออดอาจลดคา ER ใน cell ดงนน อตราทผสงจะสงขอมลจะเปนอตราการสงมากทสดท link ในเสนทางจะรองรบได
bit EFCI ใน cell ขอมล ถกตงคาไวท 1 ใน switch ทมขอมลแออด ถา cell ขอมลกอนหนา RM cell ถกตงคา EFCI ผรบจะตงคา bit CI ใน cell RM ท
สงกลบใหผสง
RM cell data cell
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
Transport Layer 3-98
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-99
การควบคมความคบคงของ TCP additive increase (เพมแบบบวก) multiplicative decrease (ลดแบบเทาตว)
วธ ผสงเพมอตราสง (window size) ควานหา bandwidth ทมใหใชได จนกวาการสญหายจะเกดขน additive increase เพม cwnd ทละ 1 MSS ทก ๆ RTT จนกวาจะ pkt จะหาย multiplicative decrease ตดลด cwnd เหลอครงเดยวหลงจากการสญหาย
cwnd
ขนา
ดของ co
nges
tion
wind
ow ของผส
งแบบ
TCP
พฤตกรรมของ AIMD เปน ลกษณะฟนเลอย หา bandwidth
ขนาด window เพมแบบบวก hellip hellip จนกวาจะเกดการสญหาย (จากนน ตดลงเหลอครงนง)
time
Transport Layer 3-100
ผสงจ ากดการสง
ขนาด cwnd จะเปลยนแปลงไปมา ขนกบความคบคงของเครอขายทผสงไดรมา
อตราการสง TCP อยางคราว ๆ สงขอมลจ านวน
cwnd bytes รอ ACKS เพอประมาณคา RTT จากนนสงไบตขอมลเพม
byte สดทายท ถก ACKed สง แตยงไมถก
ACK (ldquoอยระหวางการเดนทางrdquo)
byte สดทายทสงไป
cwnd
LastByteSent-
LastByteAcked lt cwnd
ชวงเลข sequence number ของผสง
rate ~ ~ cwnd
RTT bytessec
การควบคมความคบคงของ TCP รายละเอยด
Transport Layer 3-101
TCP Slow Start
เมอเรมการเชอมตอ เพมอตราการสงแบบยกก าลง (exponentially) จนกวาจะเจอกบ loss ครงแรก เรมตนขนาด cwnd = 1 MSS เพมขนาด cwnd หนงเทาตวทก ๆ RTT นนคอ โดยเพมขนาด cwnd ไป 1 MSS
ส าหรบทก ๆ ACK ทไดรบ
สรป อตราสงเรมแรกจะชาแตคาจะเพมแบบกระโดดขนอยางรวดเรว
Host A
RTT
Host B
time
Transport Layer 3-102
TCP การหา loss และการตอบสนอง
ถา loss ถกระบโดย timeout cwnd ถกตงไวท 1 MSS จากนนหนาตางจะเพมขนเปนเลขยกก าลง (exponential เหมอนใน slow start)
จนไปถงคา threshold จากนนจะเพมขนเปนเชงเสน
ถา loss ถกระบโดยไดรบ ACK ซ า 3 ACKs (3 duplicate acks) TCP RENO
ACKs ซ า ระบถงความสามารถการสง segments ของเครอขาย
cwnd ถกตดเหลอครงนงจากนนเพมขนแบบเชงเสน
TCP Tahoe จะตงคา cwnd เปน 1 เสมอ (ไมวาจะ timeout หรอ 3 dup acks)
Transport Layer 3-103
Q เมอไร TCP ควรจะเปลยนจากการเพมขนแบบ exponential เปนแบบเชงเสน
A เมอ cwnd ถกเพมเปน 12 ของ ldquoคาทมากทสดrdquo ของมนกอนจะเกด timeout
การด าเนนการ ตวแปร ssthresh ขณะเกด Loss ssthresh จะถก
ตงคาท 12 ของคา cwnd กอนเกดเหตแปปเดยว (คา cwnd ทมากทสดกอนเกดเหตการณ)
TCP จาก slow start เปน CA (Congestion Avoidance)
Transport Layer 3-104
สรป TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput ของ TCP
คาเฉลย throughput ของ TCP เปน function ของขนาดของ window และ RTT ไมสนใจ slow start สมมตวาขอมลถกสงตลอด
W ขนาดของ window (หนวยเปน bytes) การสญเสยทเกดขน คาเฉลยขนาดของ window (จ านวน byte ทเดนทางอย) คอ frac34 W คาเฉลยของ throughput คอ 34W ตอ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP ในอนาคต TCP ใน ldquopipes ทยาวและมความจสงrdquo
ตวอยาง 1500 byte segments 100ms RTT ตองการชองทางการสงขนาด 10 Gbps
requires W = 83333 in-flight segments ความเปนไปไดของการสญหายของในชองทางการสงขอมล L [Mathis 1997]
เพอทจะมชองทางการสงขนาด 10Gbps ตองมการสญหายของขอมลเพยงแค =
210-10 ndash นอยมาก ดงนน ตองม TCP รนใหมส าหรบการสงแบบความเรวสง
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
เปาหมายของ fairness ถาม TCP session จ านวน K session ใชทรพยากร bandwidth R รวมกน แตละ session ควรจะเฉลยทรพยากรเหมอนกนท RK
TCP connection 1
router คอขวด มความจ R
ความเสมอภาค (Fairness) ของ TCP
TCP connection 2
Transport Layer 3-108
ความเสมอภาคของ TCP คออะไร session 2 session แขงกนใชทรพยากร additive increase ใหความชนเสนเทากบ 1 (session ทง 2 คอย ๆ ได throughput เพมทละ
นด) multiplicative decrease ลด throughput ไปครงหนง
R
R
เสนระบแบนดวธทใชรวมเทากน
Throuput ของ การเชอมตอท 1
congestion avoidance (CA) additive increase สญเสย ลดขนาดของ window ลงไปครงนง
congestion avoidance (CA) additive increase
สญเสย ลดขนาดของ window ลงไปครงนง
Transport Layer 3-109
ความเสมอภาค (ตอ)
ความเสมอภาค และ UDP มลตมเดยแอพพลเคชนบอยครงไม
ใช TCP ไมตองการใหอตราการสงลดลงเพราะ
การควบคมความคบคง
มลตมเดยแอพพลเคชนจงใช UDP แทน สงเสยงวดโอดวยความเรวคงท ทน
ตอการสญเสยขอมล
ความเสมอภาค การเชอมตอ TCP แบบขนาน แอพพลเคชนสามารถทจะเปดหลายการ
เชอมตอระหวางเครอง 2 เครองแบบขนานได
เวบบราวเซอรท าแบบน ตวอยางเชน link ทมความจ R ซงม 9 การ
เชอมตอ ถาแอพใหมตองการ 1 TCP จะไดรบท rate
R10 ถาแอพใหมตองการ 11 TCPs จะไดรบท R2
Transport Layer 3-110
Chapter 3 บทสรป
หลกการเบองหลงการใหบรการชนtransport multiplexing demultiplexing การสงขอมลแบบไวใจได การควบคมการไหลของขอมล การควบคมความคบคงของขอมล
กรณศกษาและการปฏบตบน internet UDP TCP
ถดไป ออกจากปลายทางของระบบ
เครอขาย (application transport layers)
เขาไปยงสแกนของเครอขาย
Transport Layer 3-2
Chapter 3 Transport Layer
เปาหมาย เขาใจหลกการเบองหลงของการ
ใหบรการชน Transport การรวมการแยกขอมล
(multiplexing demultiplexing)
การสงขอมลทไวใจได (reliable data transfer)
การควบคมการไหลของขอมล (flow control)
การควบคมความคบคงในเครอขาย (congestion control)
เรยนรเกยวกบโปรโตคอลในชน
Transport ของ Internet UDP การสงขอมลไมตองมการเชอมตอ
(connectionless transport) TCP การสงขอมลทไวใจได แตตองมการ
เชอมตอกอน (connection-oriented reliable transport)
การควบคมความคบคงของ TCP
Transport Layer 3-3
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-4
Transport services and protocols
ใหบรการการสอสารทเชอม (เชง logic) ระหวางโพรเซสของแอพพลเคชนทท างานอยบนเครองตางๆ
transport protocols ท างานอยบนเครองปลายทาง เครองปลายทางตวสง ท าการแยก
ขอมลออกเปน segments แลวสงตอไปยงชน network layer
เครองปลายทางตวรบ รวบรวม segments และประกอบใหเปนขอความแลวสงตอไปยงชน app
มโปรโตคอลทใหบรการในการสงขอมลมากกวาหนงโปรโตคอล Internet TCP and UDP
application transport network data link physical
application transport network data link physical
Transport Layer 3-5
ชน Transport vs ชน Network
ชน network การสอสาร (เชงตรรกะ) ระหวางเครอง
ชน transport การสอสาร (เชงตรรกะ) ระหวางโพรโซส ใชบรการดวย และ ชวยเสรม
บรการของชน network
เดก 12 คนในบาน Ann สงจดหมาย 12 ฉบบไปหาเดก 12 คนในบานของ Bill
เครอง = บาน โพรเซส = เดก ขอความของโปรแกรม = จดหมายใน
ซอง โพรโตคอลชน transport = Ann
และ Bill ทตองแยกจดหมายใหลก ๆ โพรโตคอลชน network = บรการ
ของไปรษณย
อปมาเหมอนกบบาน
Transport Layer 3-6
โปรโตคอลชนทรานสปอรตของอนเตอรเนต สงขอมลแบบเรยงล าดบและนาไวใจ
หรอนาเชอถอได (TCP) การควบคมความคบคงของขอมลใน
เครอขาย การควบคมการไหลของขอมล ตองมการเชอมตอกอนการสงขอมล
สงขอมลแบบไมเรยงล าดบและไมนาเชอถอ UDP ไมมอะไรเพมเตมจากชน IP ทเปน
ldquobest-effortrdquo
ไมใหบรการเหลาน การรบประกนความลาชา การรบประกนแบนดวดธ
application transport network data link physical
application transport network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
Transport Layer 3-7
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-8
การรวมและแยกขอมล (Multiplexingdemultiplexing)
socket
ใชขอมลสวน header เพอสง segment ทไดมาไปยง socket ทถกตอง
demultiplexing ทผรบ จดการกบขอมลจากหลาย ๆ socket ใส header ของชน transport เขาไป (header จะถกใชเพอท าการ demultiplexing ภายหลง)
multiplexing ทผสง
transport
application
physical
link
network
P2 P1
transport
application
physical
link
network
P4
transport
application
physical
link
network
P3 process
Transport Layer 3-9
ท า demultiplexing อยางไร
source port dest port
32 bits
application data
(payload)
other header fields
TCPUDP segment format
host รบดาตาแกรมจากชน IP แตละดาตาแกรมจะมหมายเลขไอพตนทาง
ไอพปลายทาง แตละดาตาแกรมจะม segment ของชน
transportอย แตละ segment จะมหมายเลข port ตน
ทางและปลายทาง (source and destination port number)
host ใชขอมลหมายเลขไอพและหมายเลขพอรต เพอน าเซกเมนตไปยง socket ทถกตอง
Transport Layer 3-10
demultiplexing กรณทไมมการเชอมตอ (Connectionless)
datagrams ของ IP ทม เลข port ปลายทางตวเดยวกน แมจะมทอย IP และหรอ เลข port ของเครองตนทางตางกน (process ทสง datagram เปนคนละ process แตสงมาท process ผรบตวเดยวกน) จะถกน าไปยง socket เดยวกน ทเครองปลายทาง
จากบททแลว socket ทถกสรางจะมหมายเลข port ก ากบ
DatagramSocket mySocket1 = new DatagramSocket(12534)
เมอ host รบ segment ของ UDP ตรวจสอบหมายเลข port ใน
segment น า segment ของ UDP ไปยง
socket ทผกกบ port นน
เมอจะสรางดาตาแกรมเพอสงไปยง
socket ทเปน UDP ตองท าการระบ หมายเลขไอพปลายทาง หมายเลข port ปลายทาง
Transport Layer 3-11
Connectionless demux example
DatagramSocket serverSocket = new DatagramSocket
(6428)
transport
application
physical
link
network
P3 transport
application
physical
link
network
P1
transport
application
physical
link
network
P4
DatagramSocket mySocket1 = new DatagramSocket (5775)
DatagramSocket mySocket2 = new DatagramSocket
(9157)
source port 9157 dest port 6428
source port 6428 dest port 9157
source port dest port
source port dest port
Transport Layer 3-12
socket แบบ TCP ถกระบดวย 4 สวน ซงมองคประกอบดงน source IP address
(หมายเลขไอพตนทาง)
source port number (หมายเลขพอรตตนทาง )
dest IP address (หมายเลขไอพปลายทาง)
dest port number (หมายเลขพอรตปลายทาง )
demux จะดคาทงสสวนเพอน า packet ไปยง sockets ทเหมาะสม
เครองเซรฟเวอรอาจเปด sockets แบบ TCP จ านวนมากพรอมกน ซง แตละ socket ถกระบดวย 4 สวน
(แตจะมสวนท 3 คอหมายเลข IP ปลายทางเหมอน ๆ กน)
web servers จะม socket หลาย ๆ socket ไวส าหรบเชอมตอกบแตละ client HTTP แบบ non-persistent จะใช
socket ทแตกตางกนส าหรบแตละ request
demux กรณทมการเชอมตอ (Connection-oriented)
Transport Layer 3-13
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
P4
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
network
P6 P5 P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
ทง 3 segment มทอย IP ปลายทาง คอ B และ เลขพอรต ปลายทางคอ 80 แตถกแยกสงไปยง socket ทตางกน
server IP address B
Transport Layer 3-14
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
server IP address B
network
P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
P4
threaded server
Transport Layer 3-15
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
เปน protocol ของ Internet ทไมไดมสวนเพมเตมอะไร
บรการแบบ ldquoจะพยายามใหดทสดrdquo (best effort) ดงนน segment แบบ UDP อาจ สญหาย ไปถง app ของผรบแตไมเรยงล าดบ
ไมมการเชอมตอ ไมมการท า handshake ระหวางผสง
และผรบ แตละ segment ทเปน UDP จะถก
จดการเปนอสระจาก segment อน ๆ
UDP ใชใน app ทสง multimedia อยางตอเนอง
(ซงทนตอการสญเสย แต sensitive กบอตราการสง)
DNS SNMP
ถาจะให การถายโอนขอมลบน UDP มความนาเชอถอกวาน เพมความนาเชอถอทชน application มการกคนขอผดพลาด (ขนอยกบ แตละ
application)
Transport Layer 3-17
UDP สวนหวของ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
ควายาวของ segment ของ UDP (หนวยเปน byte) รวมความยาว
ของ header ดวย
ไมตองสรางการเชอมตอ (ซงเปนสวนทเพมความลาชา)
งาย ไมซบซอน ไมตองมสถานะของการเชอมตอทผสงและผรบ
สวนหว (header) มขนาดเลก ไมมการควบคมความคบคง UDP
สามารถสงขอมลไดรวดเรวตามทตองการ
ท าไมถงตองม UDP
Transport Layer 3-18
checksum ของ UDP
ผสง จดการขอมลทงหมดทจะไปอยใน
segment รวมทงขอมลสวนหวตาง ๆ ทเปนล าดบของจ านวนเตม 16 บตหลายจ านวน
checksum ผลรวมของขอมลตาง ๆ ใน segment
ผสงใส checksum เขาไปใน field checksum ใน header ของ UDP
ผรบ ค านวณหา checksum ของ segment ทได
รบมาใหม ตรวจสอบคา checksum ใน field ของ
header กบ คาทเพงไดจากการค านวณ วาเทากนหรอไม ถาไม แสดงวาพบขอผดพลาด ถาใช แสดงวา ไมพบขอผดพลาด แต
จรง ๆ แลว กอาจจะมขอผดพลาดไดอยด (รายละเอยดจะกลาวภายหลง)
จดมงหมาย ตรวจสอบขอผดพลาด เชน bits ทคาโดนกลบใน segment
Transport Layer 3-19
Internet checksum ตวอยาง
ตวอยาง การบวก 16-bit integers สองจ านวน
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note ขณะทบวกตวเลข เมอ bitท 16 (bit ซายสด) มการทดเลข ใหน าเลขนนไปบวกกบ bit ท 1 แลวจง flip bit ทก bit เพอใหได checksum
Transport Layer 3-20
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-21
Principles of reliable data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
หลกการของความนาเชอถอ data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
หลกการของความนาเชอถอ data transfer
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
ส าคญในชน application transport link ตด top-10 ของหวขอทางดานเครอขาย
Transport Layer 3-24
Reliable data transfer เรมตน
ดานผสง ดานผรบ
rdt_send() ถกเรยกจากชนดานบน (เชน โดย app) ท าหนาทผานขอมลเพอใหขอมลถกสงไป
ยงชนดานบนของผรบ
udt_send() ถกเรยกโดย rdt เพอทจะโอนถาย packet ผานชองการ
สอสารท unreliable ไปยงผรบ
rdt_rcv() ถกเรยกโดย OS เมอ OS ไดรบ packet ทมาถงชองการสอสารดานผรบ
deliver_data() ถกเรยกโดย rdt เพอใหสงขอมลไปยงชนดานบน
Transport Layer 3-25
เราจะ คอย ๆ พฒนา protocol ส าหรบการโอนถายขอมลแบบ reliable หรอ reliable
data transfer protocol (rdt) ตอนน พจารณาเฉพาะการโอนถายขอมลแบบทางเดยวกอน
แตขอมลส าหรบการควบคม (control info) จะถกสงไปกลบทงสองทาง
ใช finite state machines (FSM) เพอก าหนดการกระท าของผสงและผรบ
state 1
state 2
เหตการณทท าใหเกดการเปลยนผานของ State การกระท าขณะเปลยนผาน State
สถานะ (state) เมออยใน state ปจจบน state ถดไปจะขนอยกบเหตการณทจะ
เกดขน ณ state ปจจบน
เหตการณ การกระท า
Reliable data transfer เรมตน
Transport Layer 3-26
rdt10 การโอนถายขอมลแบบ reliable ผานชองสญญาณแบบ reliable
สมมตให ชองทางทอยขางใตเปนชองทางทเชอถอได ไมมการผดพลาดของบต ไมมขอมลสญหาย
FSMs ส าหรบผสง และ ส าหรบผ รบ ผสงสงขอมลไปยงชนดานลาง ผรบรบขอมลจากชนดานลาง
รอรบการเรยกจากชน
ดานบน packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
รอรบการเรยกจากชน
ดานลาง
rdt_rcv(packet)
ผสง ผรบ
Transport Layer 3-27
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร
acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK
negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors
sender retransmits pkt on receipt of NAK
new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 ชองทางการสอสารทม bit errors
ปกตแลว มนษยใชวธการใดในการแกไข ldquoerrorsrdquo ระหวางการสนทนา
Transport Layer 3-28
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร การตอบรบ (acknowledgements (ACKs)) ผรบแจงผสงวาไดรบ packet แลว การตอบปฏเสธ (negative acknowledgements (NAKs)) ผรบแจงผสงวา packet ม
errors sender สงขอมลซ าอกครง เมอไดรบ NAK
กลไกทเพมขน in rdt20 (เพมจาก rdt10) การตรวจจบความผดพลาด การแจงกลบ (feedback) ขอมลส าหรบการควบคม (ACKNAK) จากผรบไปยงผสง
rdt20 ชองทางการสอสารทม bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 ขอก าหนดของ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
จะเกดอะไรขนถา ACKNAK เกดเสยหาย ผสงไมรวาผรบรบ pkt ครบถวน
หรอไม ไมควรสง pkt ซ าอกครง เพราะ
pkt ซ ากน
การจดการกบขอมลทซ าซอน ผสงจะสง packet อกครงถา
ACKNAK เกดเสยหาย เตมหมายเลข sequence ใหแตละ
packet ผรบตองทง packet ทซ ากน
stop and wait ผสงท าการสงpacketและรอใหผรบตอบกลบดวย ACKNAK กอนทจะสง packet ตอไป
Transport Layer 3-33
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Transport Layer 3-35
rdt21 อภปราย
ผสง ใสหมายเลข seq ในpacket หมายเลข seq (01) กพอ
นกสท าไม ตองตรวจสอบวา ACKNAK ท
ไดรบเสยไปหรอไม จ านวนหมายเลข seq ตองเปนสอง
เทาของจ านวนสถานะ เพราะผสงตองเกบสถานะเพอldquoจ าrdquo
วา pkt ถดไปจะตองมเลข seq 0 หรอ 1
ผรบ ตองตรวจสอบวา pkt ทไดรบซ ากบ
pkt ทไดรบกอนหนาหรอไม ผรบจะเกบสถานะทระบวา 0 หรอ 1
คอหมายเลข seq ทคาดวาจะได
ขอสงเกต ผรบไมสามารถรวา ACKNAK สดทายทผสงไดรบถกตองหรอไม
Transport Layer 3-36
rdt22 protocol ทไมตองใช NAK
ท างานเหมอนกบ rdt21 แตใชแค ACKs แทนทจะสง NAK ผรบสง ACK ส าหรบ pkt สดทายทไดรบถกตอง
ฝงรบจะตองรวมหมายเลข seq ของ pkt ทก าลงถก ACK ไปดวย
จะสง ACK ซ าไปทผสงถาไมไดรบ pkt ทมหมายเลข seq ทคาดหวง ผลลพธจะออกมาเหมอนกรณทสง NAK ผสงตองสง pkt ตวลาสดไปใหมอกครง
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 ชองสญญาณทมความผดพลาดและ pkt สญหาย
เพมขอสนนษฐาน ชองสญญาณสามารถสญเสยแพคเกจ (ไมวาจะเปนขอมลหรอ ACKs) ได กลไก checksum หมายเลข seq
ACKs และ การสงซ า สามารถชวย แตมนกยงไมใชทางออก
วธ ผสงรอ ACK กลบมาในชวงเวลาท ldquoสมเหตสมผลrdquo
สง pkt เดมไปใหมอกครงถาไมไดรบ ACK ภายในชวงเวลาน
ถา pkt (หรอ ACK) มาถงลาชา (ไมใชหายไป) การสงใหมกจะเปนการสงซ า ซง seq
ไดจดการเรองเกยวกบขอมลซ าได ผรบตองระบเลข seq ของ pkt ทก าลง
ถก ACKed
ตองใชการนบเวลาถอยหลง (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
ขณะ rdt30 ด าเนนการ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
ขณะ rdt30 ด าเนนการ
Transport Layer 3-42
ประสทธภาพของ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
บตแรกของแพคเกจกถกสง t = 0
ผสง ผรบ
RTT
บตสดทายของแพคเกจถกสง t = L R
บตแรกของแพคเกจมาถง บตสดทายของแพคเกจมาถง สง ACK
ไดรบ ACK สงแพคเกจตอไป t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols แบบ pipelined
pipelining ผสงสงหลาย packet ไปยงผรบทง ๆ ท pkt เหลานนยงไมไดรบการยนยนตอบรบ (not yet acked) ชวงของหมายเลข sequence จะตองเพมขน ตองพกขอมล (buffer) ทผสงและผรบ
protocols แบบ pipelined แบบทวไปมสองแบบ go-Back-N selective repeat
Transport Layer 3-45
Pipelining ชวยเพม utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols แบบ pipeline ภาพรวม
Go-back-N ผสงสามารถสงแพคเกจทไมยงถก
ack ไดไมเกน N แพคเกจใน pipeline
ผรบแคสง cumulative ack ไม ack packet ถามนกอใหเกด gap
ผสงจบเวลาส าหรบแพคเกจทสงไป
นานทสดทยงไมได ack เมอเวลาหมด ผสงจะสงแพคเกจ
ทงหมดทยงไมไดรบ ack อกครง
Selective Repeat ผสงสามารถสงแพคเกจทไมยงถก ack ได
ไมเกน N แพคเกจใน pipeline
ผรบจะตองสง ack กลบใหแตละแพคเกจ
ผสงจะจบเวลาส าหรบแตละแพคเกจท
ไมได ack เมอเวลาส าหรบแพคเกจใดหมด ผสงจะสง
เฉพาะแพคเกจนนเทานน
Transport Layer 3-47
Go-Back-N ผสง
หมายเลข seq (k bit) จะอยใน header ของ packet อนญาตใหขนาด ldquowindowrdquo (ของ pkt ทตดกนและยงไมถก ack) ไมเกน N
ACK(n) จะ ack แพคเกจทงหมดไปจนถงทมหมายเลข seq เทากบ n - ldquoการ ACK แบบรวม (cumulative ACK)rdquo อาจมการไดรบ ACKs หมายเลข seq เดมซ า (ดรายละเอยดดาน receiver)
มการจบเวลาส าหรบแพคเกจทเดนทางอย ซงเดนทางนานทสดและยงไมได ACK (pkt ทมหมายเลข seq นอยทสดใน window)
timeout(n) เวลาหมดท pkt n ผสงจะสง pkt n และ pkt ทงหมดใน window (ซงมหมายเลข seq สงกวา n) อกครง
Transport Layer 3-48
GBN FSM ดานผสงทเพมจากของเดม
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum
out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM ดานผรบทเพมจากของเดม
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
ผ รบ Ack แตละแพคเกจทไดรบมาถกตอง เกบ (buffer) แพคเกจ เทาทจ าเปน เพอทจะสงขอมลทเรยงล าดบแลว ไปยง layer
บนไดในทายทสด
ผสงแคสงแพคเกจซ าเฉพาะแพคเกจทไมไดรบ Ack เทานน ตวจบเวลา (ทางฝงผสง) จะจบเวลาของแตละแพคเกจทไมไดรบ Ack
Window ของผสง มหมายเลข seq อย N หมายเลขตดกน จ ากดหมายเลข seq ของแพตเกจทสงไปแลว และไมไดรบ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
ขอมลมาจาก layer ดานบน ถามหมายเลข seq วางใน window ให
สง pkt ได
timeout(n) สง pkt n ซ า จบเวลาใหม
ACK(n) in [sendbase sendbase+N] รวา ผรบไดรบ pkt n แลว ถา n เกดเปนหมายเลขแรกสดในหนาตาง
(n เทากบ sendbase) ทไมได ถก ack เลอน window ไปทางดานขวา โดยเลอนไปยงหมายเลขทไมไดถก ack
ผสง pkt n in [rcvbase rcvbase+N-1] สง ACK(n) ถาไมเรยงตามล าดบ buffer ถาตามล าดบ สง (รวมถงใหสง pkt ท
เรยงตามล าดบและอยในบฟเฟอร) เลอน window ไปทหมายเลข seq ถดไปของ pkt ทยงไมไดรบจากผสง
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise ทงไปไมตองสนใจ
ผรบ
Transport Layer 3-54
ขณะ Selective repeat ด าเนนการ
สง pkt0
sender receiver
รบ pkt0 สง ack0
รบ pkt1 สง ack1
รบ pkt3 buffer สง ack3 รบ ack0 สง pkt4
รบ ack1 สง pkt5
pkt 2 timeout send pkt2
X loss
รบ pkt4 buffer สง ack4
รบ pkt5 buffer สง ack5
รบ pkt2 deliver pkt2
pkt3 pkt4 pkt5 สง ack2
บนทก ack3 มาถงแลว
sender window (N=4)
บนทก ack4 มาถงแลว บนทก ack4 มาถงแลว
Q เกดอะไรขนเมอ ack2 มาถง
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
สง pkt1 สง pkt2
สง pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
ตวอยาง หมายเลข seq 0 1 2 3 ขนาดของ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
ผรบไมสามารถเหนดานผสงได พฤตกรรมผรบจะเหมอนกนทง 2 สถานการณ
มบางอยางทผด (มาก)
ผรบไมเหนถงความแตกตางของทง 2 เหตการณจ าลองน
ในเหตการณจ าลอง (b) ขอมลเกาทถกสงซ า เมอผรบรบมา จะนกวาเปนขอมลใหม
Q ขนาดของ seq กบขนาดของ
window เกยวของกนยงไงเพอทจะหลกเลยงปญหาในตวอยาง (b)
Transport Layer 3-56
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-57
TCP ภาพรวม RFCs 79311221323 2018 2581
ขอมลแบบสองทศทาง มการสงขอมลทงไปและกลบในการ
เชอมตอ (connection) เดยวกน MSS ขนาด segment ทใหญสดท
TCP จะรบได (Max Segment Size)
connection-oriented handshaking (การแลกเปลยนของ
ขอความควบคม) ตงคาสถานะตงตนใหผสงและผรบ กอนการแลกเปลยนขอความ
flow controlled ผสงจะไมสงขอมลเกนกวาทผรบจะรบ
ได
point-to-point (สถานทนง-ไป-สถานทนง) ผสงหนงคน ผรบหนงคน
สายขอมลเปนไบตทเรยงล าดบและขอมลไมสญหาย (reliable in-order byte steam) ไมม ldquoขอบเขตrdquo ของขอความ
(ขอความจะมาถงผรบตอเนองกน)
pipelined การควบคมความคบคงและการควบคม
อตราการไหลของ TCP จะก าหนดขนาดของ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG ขอมลเรงดวน (โดยทว ๆ ไป ไมถกใช)
ACK ACK valid
PSH ผลกขอมลใหชน app (โดยทว ๆ ไป ไมถกใช)
RST SYN FIN สรางการเชอตอ
(ค าสง setup teardown)
จ านวน bytes ท ผรบเตมใจจะรบ
นบโดยใช byte ของขอมล (ไมใช segment)
Internet checksum
(เหมอนใน UDP)
Transport Layer 3-59
TCP seq numbers ACKs
หมายเลข sequence เลขของ byte stream จะเปน byte
แรกของขอมลของ segment น acknowledgements เลข seq ของ byte ถดไปทอกดานหนง
คาดหวงวาจะได cumulative ACK (ACK แบบรวม)
Q ผรบจดการกบ segment ทมาถงไมเรยงล าดบอยางไร A TCP ไมมรายละเอยดสวนน ndash ขนอย
กบคนทจะมาเขยนโปรแกรม TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาเขามาถงผสง
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาออกจากผสง
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
เหตการณจ าลอง telnet อยางงาย
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q เราควรจะก าหนด time out ไวทเทาใด
มากกวาเวลาของ RTT แตเวลาของ RTT นนแปรปรวน
ก าหนดไวนอยเกนไป timeout กอนก าหนด ท าใหมการ retransmissions โดยไมจ าเปน
ก าหนดไวมากเกนไป ระบบตอบสนองตอการสญหายของ segment ชาเกนไป
Q จะประมาณเวลาของ RTT อยางไร
SampleRTT วดจากระยะเวลาตงแตเรมสง sengment จนกระทงไดรบACK ไมสนใจการ retransmissions
SampleRTT มคาแปรปรวน เราตองการประมาณเวลาของ RTT ให smooth กวา ใชคาเฉลยของคาหลาย ๆ คา ไมใชแค
เวลาของ SampleRTT ปจจบน
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
คาเฉลยของการเคลอนทถวงน าหนกแบบ exponential คา SampleRTT ทในอดตจะมผลตอ EstimatedRTT ลดลงแบบ exponentially โดยทวไปจะก าหนดคา = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
ชวงเวลาของ timeout EstimatedRTT บวกกบระยะเวลาทเผอเอาไว ยงคาของ EstimatedRTT ทแปรปรวนมากเทาไร -gt ระยะเวลาทเผอความมากขนตาม
มประเมนคาการเปลยนแปลงของ SampleRTT จาก EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoชวงเวลาทเผอrdquo
Transport Layer 3-64
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP สรางบรการแบบ reliable อยบนบรการของ IP ทเปนแบบ unreliable segments ถกสงแบบ pipeline cumulative acks ม timer ส าหรบสงใหมคาตวเดยว
TCP สง segment ใหมเมอ เหตการณ timeout ไดรบ acks ซ า ๆ กน
เรามาเรมตนพจารณาทางดานผสงของ TCP อยางงายกอน ยงไมตองสนใจ acks ซ า ยงไมตองสนใจการควบคม flow และ
ความคบคง
Transport Layer 3-66
เหตการณของ TCP sender
เมอไดขอมลจาก app สราง segment ดวยหมายเลข seq เลข seq คอหมายเลขของไบตแรก
ของขอมลในแตละ segment หาก timer ยงไมเคยถกตง จะเรม
ตงเวลา การตงเวลาเพอจบเวลาส าหรบ
segment เกาทสดยงไมไดรบ ack ชวงเวลาทหมดอาย
TimeOutInterval
timeout สงใหมเฉพาะ segment ทเกด
timeout ตงเวลานบใหม เมอไดรบ ack ถา ack เปน ack ของ segment
กอนหนายงไมไดรบ ack Update สงทรวา ถก ACK แลว เรมตงเวลานบ ถายงคงม segment
ทยงไมไดรบ acked
Transport Layer 3-67
ดานผสงของ TCP (อยางงาย)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
การสราง ACK ของ TCP [RFC 1122 RFC 2581]
เหตการณทผรบ เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ) โดยขอมลทงหมดจนถงเลข seq ทคาดหวงไว ถก ACK หมดแลว
เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ ท าให ไมม gap ใน segment ทไดมา) แตมบาง segment ยงไมได ACK
Segment มาถงแบบไมเรยงตามล าดบ โดยมเลข seq สงกวาทตองการ ท าใหม gap (ชองโหว) เกดขน Segment ท ามาถง ทจะเตมบางสวนหรอเตมเตมชองโหว
TCP receiver action อยาเพงสง ACK รออก segment นง โดยรอสก 500ms หากยงไมม segment มา กสง ACK สง ACK แบบรวม (cumulative) ไปทนทในครงเดยว ซงจะเปนการ Ack segment ทมาแบบเรยงตามล าดบทงสอง segments สง ACK ซ า ไปทนท โดยใสเลข seq ของ byte ทตองการ สง ACK แบบรวมทนท โดย segment ทจะ Ack เรมจากดานทนอยกวาของ gap
Transport Layer 3-71
TCP fast retransmit
ระยะเวลาในการ time-out มกจะคอนขางยาว (โดยเปรยบเทยบ) ท าใหใชเวลาคอนขางนานกอนทจะ
สง packet อกครง
แกโดย ตรวจสอบการสญเสย pack โดยดท ACKs ทซ า ๆ กน ผสงมกสง segment ตด ๆ กน ดงนน ถา segment หนงหายไป จง
เปนไปไดทจะม ACKs ซ า ๆ กนจ านวนมาก
ถาผสงไดรบ ACKs ส าหรบขอมลเดยวกน 3 ACKS (ACKs ทซ ากนสามครง) ผสงตองสง seq ทยงไมถก acked (ระบเลข seq ทเลกทสด) มแนวโนมวา segment ทยงไมถก
ack จะหายไปเลย ดงนน จงไมตองรอใหหมดเวลา
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-74
TCP flow control application
process
buffer ดานผรบ ของ TCP socket
TCP code
IP code
application
OS
protocol stack ดานผรบ
application ลบขอมลจาก buffer ของ TCP socket hellip
hellip ชากวา TCP สงขอมล ขนไป (ขณะทผสงก าลงจะสง)
from sender
ผรบสามารถควบคมผสงได ดงนน ผสงจะไมสงขอมลเรวไป หรอ มากเกนไปจนลน (Overflow) buffer ของผรบ
flow control
Transport Layer 3-75
การควบคมการไหลขอมลของ TCP
ขอมลทอย buffer
buffer สวนทยงวาง rwnd
RcvBuffer
สวนของขอมล (payload) ใน segment ของ TCP
ไปยง process ของ application
ผรบระบขนาดของ buffer ทวางไวใน field rwnd ทอยในสวนหวของ TCP ทจะสงไปยงผสง ผเขยนโปรแกรมระบขนาดของ RcvBuffer ได
โดยใช API ตงคา option ของ socket (คาเรมตนทวไปคอ 4096 ไบต)
ทกระบบปฏบตการจะปรบขนาด RcvBuffer อตโนมต
ผสงจ ากดจ านวนของขอมลทยงไมถก acked (ldquoอยในระหวางการเดนทางrdquo) ใหเทากบคา rwnd ของขอมลผรบ
เปนการรบประกนวา buffer ของผรบจะไมลน
การbuffer ในดานของผรบ
Transport Layer 3-76
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-77
การจดการกบการเชอมตอ กอนทจะมการแลกเปลยนขอมลกน ผสงและผรบตองตกลงกนกอน ตกลงรวมในการสรางการเชอมตอ (แตละคนจะรวาอกฝายอยากจะเชอมตอหรอไม) ตกลงคาพารามเตอรส าหรบการเชอมตอ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake จะท างานไดเสมอไปหรอไมบน network
ความลาชาอาจเปลยนไป ขอความอาจถกสงซ าตวอยาง (เชน
req_conn(x)) เนองจากการสญหายของขอมล
ขอมลอาจสลบกน ไมสามารถรไดวาอกฝงไดรบหรอไม
ไดรบขอมลอะไร
2-way handshake
มาคยกนเถอะ
ตกลง ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-79
เหตการณผดพลาดของ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-80
3-way handshake ของ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM ของ 3-way handshake ของ TCP
Transport Layer 3-82
TCP การหยดการเชอมตอ
client server เลกเชอมตอทแตละดานของการเชอมตอ โดยแตละดานจะสง TCP segment ดวย FIN bit = 1
ตอบกลบ FIN ดวย ACK ในขณะทรบ FIN ACK กสามารถรวมอยในแพคเกจทสง FIN มาไดดวย
แตละดานสามารถสง FIN ไดพรอม ๆ กน
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP การหยดการเชอมตอ
Transport Layer 3-84
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-85
ความคบคง ความหมายไมเปนทางการ ldquoเมอจ านวนคนสงมากเกนไป ก าลงสงขอมลมาก
เกนไปดวยอตราการสงเรวเกนกวาท Network จะรบไหวrdquo แตกตางจาก flow control ผลทอาจทเกดขนจากความคบคง
packets หาย (buffer ลนท routers) ลาชามาก (เขาควใน buffers ของ router)
เปนปญหาทคนสนใจตด 10 อนดบตนๆ
หลกการของการควบคมความคบคงของเครอขาย
Transport Layer 3-86
ตนเหตและผลของความคบคง เหตการณ 1
มผสงและผรบอยางละสองคน Router 1 ตว ไมจ ากด buffers ความจของ link R ไมมการสงขอมลซ า
อตราขอมลทสงส าเรจตอหนงการเชอมตอ R2
buffer ท link ขาออกม buffer ไมจกด
Host A
อตราการสงขอมลตนฉบบ lin
Host B
อตราขอมลทสงส าเรจ lout
R2
R2
lou
t
lin R2 de
lay
lin
ดเลยจะมากขนเมออตราสงขอมลตนฉบบเขาใกลความจของ link
Transport Layer 3-87
Router 1 ตว Buffer แตมขนาด buffer จ ากด ตองสง pkt ไปซ าถา pkt นน timeout
ขอมลเขาของชน application = ขอมลออกจากชน application lin = lout
ขอมลเขาของชน transport จะรวมทตองสงซ าดวย lin lin
Buffer ของ link ทใชรวมกนซงมขนาดจ ากด
Host A
lin ขอมลตนฉบบ
Host B
lout lin ขอมลตนฉบบบวกกบ ขอมลทตองสงซ า
lsquo
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-88
ในอดมคต สมมตผสงรความเปนไปในเครอขาย ผสงสงเฉพาะตอนทเราเตอรม buffer เหลออย
Buffer ของ link ทแชรอยางจ ากด
lout copy
ม buffer วาง
R2
R2
lou
t
lin
Host B
A
ตนเหตและผลของความคบคง เหตการณ 2
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-89
lout copy
no buffer space
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
A
Host B
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
เมอสงขอมลท R2 บาง packets ถกสงซ า แต goodput ยงคงมคาลเขาหา R2 (ท าไม)
A
Host B
ตนเหตและผลของความคบคง เหตการณ 2
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Host B
ในความเปนจรง มการสงซ า packets หายหรอตกหลนระหวาง
เสนทางเนองจาก buffers เตม แตบางครง Timer ของผสงหมดเวลาลง
กอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-92
R2
lou
t
ldquoผลrdquo ของความคบคง เพอใหไดขอมลในอตราทตองการ (goodput) ตองท างานมากขน (สงซ า) เมอตองสง packets ซ าโดยทไมจ าเปน link จะตองล าเลยงหลาย copy ของ
ขอมลเดยวกน ท าให goodput ลดลง
R2 lin
ตนเหตและผลของความคบคง เหตการณ 2
ในความเปนจรง มการสงซ า 1 packets หายหรอตกหลนระหวางเสนทางเนองจาก buffers เตม 2 แตบางครง Timer ของผสงหมดเวลาลงกอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Transport Layer 3-93
มผสงขอมลทง 4 โฮสต เสนทางตองผานหลายจด หมดเวลาสงไปขอมลซ า
Q เกดอะไรขนเมอ λin และ λinrsquo เพมขน
Buffer ของเสนทางการสงขอมลทใชรวมกนมขนาดจ ากด
Host A lout
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
Host B
Host C Host D
A เมอ λinrsquo ของขอมลเสนสแดงมขนาดเพมขน ขอมลใน
เสนสน าเงนกจะถก drop ท าให throughput ของ connection สน าเงนเหลอ 0
lin ขอมลตนฉบบ lin ขอมลตนฉบบ บวกกบ
ขอมลทตองสงซ า
Transport Layer 3-94
อกหนง ldquoผลเสยrdquo ของความคบคง เมอแพกเกจถกทงไป นนกเทากบวา ทรยากรเครอขาย (ทใชสงขอมลกอน
หนาทขอมลนจะถกทง) ถกใชไปอยางไรคา
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
แนวทางในการควบคมความคบคงของขอมล
2 แนวทางในการควบคมความคบคง
การควบคมความคบคงโดยใชแคเครองปลายทาง (end-end)
ไมมการแจงกลบ (feedback) จากเครอขาย
ความคบคงของเครอขายจะถกเดาโดยเครองทอยปลายทางทคอยสงเกต loss delay
เปนวธของ TCP
การควบคมความคบคงโดยใหอปกรณเครอขายชวย
routers จะท าการแจง feedback ไปทระบบปลายทาง ใช bit 1 bit เพอระบถงความ
แออด (SNA DECbit TCPIP ECN ATM) หรอ ระบอตราการสงทชดเจน
ส าหรบผสง
Transport Layer 3-96
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
ABR available bit rate ldquoบรการทมความยดหยนrdquo ถาเสนทางของผสง ldquoมขอมลนอยกวา
ความจะมากrdquo ผสงจะใชประโยชนจาก
bandwidth ทเหลออย ถา path ของผสงแออด
ผสงจะคอย ๆ ลดอตราสงใหเหลอเทาอตราการสงขนต าทรบประกนไว
RM (resource management) cells สงโดยผสง แทรก ๆ ไปกบ cell ทเปนขอมล bits ใน RM cell ถกตงคาโดย switches
(ldquoเครอขายคอยชวยrdquo) NI bit ไมเพมอตราการสง (ความแออด
ระดบกลาง) CI bit การบงบอกถงความแออด
ผรบไมแกคาใน bit นของ RM cells และสงไปใหผสง
Transport Layer 3-97
field ขอมล ER (explicit rate) ขนาด 2 byte ใน cell RM switch ทแออดอาจลดคา ER ใน cell ดงนน อตราทผสงจะสงขอมลจะเปนอตราการสงมากทสดท link ในเสนทางจะรองรบได
bit EFCI ใน cell ขอมล ถกตงคาไวท 1 ใน switch ทมขอมลแออด ถา cell ขอมลกอนหนา RM cell ถกตงคา EFCI ผรบจะตงคา bit CI ใน cell RM ท
สงกลบใหผสง
RM cell data cell
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
Transport Layer 3-98
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-99
การควบคมความคบคงของ TCP additive increase (เพมแบบบวก) multiplicative decrease (ลดแบบเทาตว)
วธ ผสงเพมอตราสง (window size) ควานหา bandwidth ทมใหใชได จนกวาการสญหายจะเกดขน additive increase เพม cwnd ทละ 1 MSS ทก ๆ RTT จนกวาจะ pkt จะหาย multiplicative decrease ตดลด cwnd เหลอครงเดยวหลงจากการสญหาย
cwnd
ขนา
ดของ co
nges
tion
wind
ow ของผส
งแบบ
TCP
พฤตกรรมของ AIMD เปน ลกษณะฟนเลอย หา bandwidth
ขนาด window เพมแบบบวก hellip hellip จนกวาจะเกดการสญหาย (จากนน ตดลงเหลอครงนง)
time
Transport Layer 3-100
ผสงจ ากดการสง
ขนาด cwnd จะเปลยนแปลงไปมา ขนกบความคบคงของเครอขายทผสงไดรมา
อตราการสง TCP อยางคราว ๆ สงขอมลจ านวน
cwnd bytes รอ ACKS เพอประมาณคา RTT จากนนสงไบตขอมลเพม
byte สดทายท ถก ACKed สง แตยงไมถก
ACK (ldquoอยระหวางการเดนทางrdquo)
byte สดทายทสงไป
cwnd
LastByteSent-
LastByteAcked lt cwnd
ชวงเลข sequence number ของผสง
rate ~ ~ cwnd
RTT bytessec
การควบคมความคบคงของ TCP รายละเอยด
Transport Layer 3-101
TCP Slow Start
เมอเรมการเชอมตอ เพมอตราการสงแบบยกก าลง (exponentially) จนกวาจะเจอกบ loss ครงแรก เรมตนขนาด cwnd = 1 MSS เพมขนาด cwnd หนงเทาตวทก ๆ RTT นนคอ โดยเพมขนาด cwnd ไป 1 MSS
ส าหรบทก ๆ ACK ทไดรบ
สรป อตราสงเรมแรกจะชาแตคาจะเพมแบบกระโดดขนอยางรวดเรว
Host A
RTT
Host B
time
Transport Layer 3-102
TCP การหา loss และการตอบสนอง
ถา loss ถกระบโดย timeout cwnd ถกตงไวท 1 MSS จากนนหนาตางจะเพมขนเปนเลขยกก าลง (exponential เหมอนใน slow start)
จนไปถงคา threshold จากนนจะเพมขนเปนเชงเสน
ถา loss ถกระบโดยไดรบ ACK ซ า 3 ACKs (3 duplicate acks) TCP RENO
ACKs ซ า ระบถงความสามารถการสง segments ของเครอขาย
cwnd ถกตดเหลอครงนงจากนนเพมขนแบบเชงเสน
TCP Tahoe จะตงคา cwnd เปน 1 เสมอ (ไมวาจะ timeout หรอ 3 dup acks)
Transport Layer 3-103
Q เมอไร TCP ควรจะเปลยนจากการเพมขนแบบ exponential เปนแบบเชงเสน
A เมอ cwnd ถกเพมเปน 12 ของ ldquoคาทมากทสดrdquo ของมนกอนจะเกด timeout
การด าเนนการ ตวแปร ssthresh ขณะเกด Loss ssthresh จะถก
ตงคาท 12 ของคา cwnd กอนเกดเหตแปปเดยว (คา cwnd ทมากทสดกอนเกดเหตการณ)
TCP จาก slow start เปน CA (Congestion Avoidance)
Transport Layer 3-104
สรป TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput ของ TCP
คาเฉลย throughput ของ TCP เปน function ของขนาดของ window และ RTT ไมสนใจ slow start สมมตวาขอมลถกสงตลอด
W ขนาดของ window (หนวยเปน bytes) การสญเสยทเกดขน คาเฉลยขนาดของ window (จ านวน byte ทเดนทางอย) คอ frac34 W คาเฉลยของ throughput คอ 34W ตอ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP ในอนาคต TCP ใน ldquopipes ทยาวและมความจสงrdquo
ตวอยาง 1500 byte segments 100ms RTT ตองการชองทางการสงขนาด 10 Gbps
requires W = 83333 in-flight segments ความเปนไปไดของการสญหายของในชองทางการสงขอมล L [Mathis 1997]
เพอทจะมชองทางการสงขนาด 10Gbps ตองมการสญหายของขอมลเพยงแค =
210-10 ndash นอยมาก ดงนน ตองม TCP รนใหมส าหรบการสงแบบความเรวสง
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
เปาหมายของ fairness ถาม TCP session จ านวน K session ใชทรพยากร bandwidth R รวมกน แตละ session ควรจะเฉลยทรพยากรเหมอนกนท RK
TCP connection 1
router คอขวด มความจ R
ความเสมอภาค (Fairness) ของ TCP
TCP connection 2
Transport Layer 3-108
ความเสมอภาคของ TCP คออะไร session 2 session แขงกนใชทรพยากร additive increase ใหความชนเสนเทากบ 1 (session ทง 2 คอย ๆ ได throughput เพมทละ
นด) multiplicative decrease ลด throughput ไปครงหนง
R
R
เสนระบแบนดวธทใชรวมเทากน
Throuput ของ การเชอมตอท 1
congestion avoidance (CA) additive increase สญเสย ลดขนาดของ window ลงไปครงนง
congestion avoidance (CA) additive increase
สญเสย ลดขนาดของ window ลงไปครงนง
Transport Layer 3-109
ความเสมอภาค (ตอ)
ความเสมอภาค และ UDP มลตมเดยแอพพลเคชนบอยครงไม
ใช TCP ไมตองการใหอตราการสงลดลงเพราะ
การควบคมความคบคง
มลตมเดยแอพพลเคชนจงใช UDP แทน สงเสยงวดโอดวยความเรวคงท ทน
ตอการสญเสยขอมล
ความเสมอภาค การเชอมตอ TCP แบบขนาน แอพพลเคชนสามารถทจะเปดหลายการ
เชอมตอระหวางเครอง 2 เครองแบบขนานได
เวบบราวเซอรท าแบบน ตวอยางเชน link ทมความจ R ซงม 9 การ
เชอมตอ ถาแอพใหมตองการ 1 TCP จะไดรบท rate
R10 ถาแอพใหมตองการ 11 TCPs จะไดรบท R2
Transport Layer 3-110
Chapter 3 บทสรป
หลกการเบองหลงการใหบรการชนtransport multiplexing demultiplexing การสงขอมลแบบไวใจได การควบคมการไหลของขอมล การควบคมความคบคงของขอมล
กรณศกษาและการปฏบตบน internet UDP TCP
ถดไป ออกจากปลายทางของระบบ
เครอขาย (application transport layers)
เขาไปยงสแกนของเครอขาย
Transport Layer 3-3
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-4
Transport services and protocols
ใหบรการการสอสารทเชอม (เชง logic) ระหวางโพรเซสของแอพพลเคชนทท างานอยบนเครองตางๆ
transport protocols ท างานอยบนเครองปลายทาง เครองปลายทางตวสง ท าการแยก
ขอมลออกเปน segments แลวสงตอไปยงชน network layer
เครองปลายทางตวรบ รวบรวม segments และประกอบใหเปนขอความแลวสงตอไปยงชน app
มโปรโตคอลทใหบรการในการสงขอมลมากกวาหนงโปรโตคอล Internet TCP and UDP
application transport network data link physical
application transport network data link physical
Transport Layer 3-5
ชน Transport vs ชน Network
ชน network การสอสาร (เชงตรรกะ) ระหวางเครอง
ชน transport การสอสาร (เชงตรรกะ) ระหวางโพรโซส ใชบรการดวย และ ชวยเสรม
บรการของชน network
เดก 12 คนในบาน Ann สงจดหมาย 12 ฉบบไปหาเดก 12 คนในบานของ Bill
เครอง = บาน โพรเซส = เดก ขอความของโปรแกรม = จดหมายใน
ซอง โพรโตคอลชน transport = Ann
และ Bill ทตองแยกจดหมายใหลก ๆ โพรโตคอลชน network = บรการ
ของไปรษณย
อปมาเหมอนกบบาน
Transport Layer 3-6
โปรโตคอลชนทรานสปอรตของอนเตอรเนต สงขอมลแบบเรยงล าดบและนาไวใจ
หรอนาเชอถอได (TCP) การควบคมความคบคงของขอมลใน
เครอขาย การควบคมการไหลของขอมล ตองมการเชอมตอกอนการสงขอมล
สงขอมลแบบไมเรยงล าดบและไมนาเชอถอ UDP ไมมอะไรเพมเตมจากชน IP ทเปน
ldquobest-effortrdquo
ไมใหบรการเหลาน การรบประกนความลาชา การรบประกนแบนดวดธ
application transport network data link physical
application transport network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
Transport Layer 3-7
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-8
การรวมและแยกขอมล (Multiplexingdemultiplexing)
socket
ใชขอมลสวน header เพอสง segment ทไดมาไปยง socket ทถกตอง
demultiplexing ทผรบ จดการกบขอมลจากหลาย ๆ socket ใส header ของชน transport เขาไป (header จะถกใชเพอท าการ demultiplexing ภายหลง)
multiplexing ทผสง
transport
application
physical
link
network
P2 P1
transport
application
physical
link
network
P4
transport
application
physical
link
network
P3 process
Transport Layer 3-9
ท า demultiplexing อยางไร
source port dest port
32 bits
application data
(payload)
other header fields
TCPUDP segment format
host รบดาตาแกรมจากชน IP แตละดาตาแกรมจะมหมายเลขไอพตนทาง
ไอพปลายทาง แตละดาตาแกรมจะม segment ของชน
transportอย แตละ segment จะมหมายเลข port ตน
ทางและปลายทาง (source and destination port number)
host ใชขอมลหมายเลขไอพและหมายเลขพอรต เพอน าเซกเมนตไปยง socket ทถกตอง
Transport Layer 3-10
demultiplexing กรณทไมมการเชอมตอ (Connectionless)
datagrams ของ IP ทม เลข port ปลายทางตวเดยวกน แมจะมทอย IP และหรอ เลข port ของเครองตนทางตางกน (process ทสง datagram เปนคนละ process แตสงมาท process ผรบตวเดยวกน) จะถกน าไปยง socket เดยวกน ทเครองปลายทาง
จากบททแลว socket ทถกสรางจะมหมายเลข port ก ากบ
DatagramSocket mySocket1 = new DatagramSocket(12534)
เมอ host รบ segment ของ UDP ตรวจสอบหมายเลข port ใน
segment น า segment ของ UDP ไปยง
socket ทผกกบ port นน
เมอจะสรางดาตาแกรมเพอสงไปยง
socket ทเปน UDP ตองท าการระบ หมายเลขไอพปลายทาง หมายเลข port ปลายทาง
Transport Layer 3-11
Connectionless demux example
DatagramSocket serverSocket = new DatagramSocket
(6428)
transport
application
physical
link
network
P3 transport
application
physical
link
network
P1
transport
application
physical
link
network
P4
DatagramSocket mySocket1 = new DatagramSocket (5775)
DatagramSocket mySocket2 = new DatagramSocket
(9157)
source port 9157 dest port 6428
source port 6428 dest port 9157
source port dest port
source port dest port
Transport Layer 3-12
socket แบบ TCP ถกระบดวย 4 สวน ซงมองคประกอบดงน source IP address
(หมายเลขไอพตนทาง)
source port number (หมายเลขพอรตตนทาง )
dest IP address (หมายเลขไอพปลายทาง)
dest port number (หมายเลขพอรตปลายทาง )
demux จะดคาทงสสวนเพอน า packet ไปยง sockets ทเหมาะสม
เครองเซรฟเวอรอาจเปด sockets แบบ TCP จ านวนมากพรอมกน ซง แตละ socket ถกระบดวย 4 สวน
(แตจะมสวนท 3 คอหมายเลข IP ปลายทางเหมอน ๆ กน)
web servers จะม socket หลาย ๆ socket ไวส าหรบเชอมตอกบแตละ client HTTP แบบ non-persistent จะใช
socket ทแตกตางกนส าหรบแตละ request
demux กรณทมการเชอมตอ (Connection-oriented)
Transport Layer 3-13
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
P4
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
network
P6 P5 P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
ทง 3 segment มทอย IP ปลายทาง คอ B และ เลขพอรต ปลายทางคอ 80 แตถกแยกสงไปยง socket ทตางกน
server IP address B
Transport Layer 3-14
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
server IP address B
network
P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
P4
threaded server
Transport Layer 3-15
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
เปน protocol ของ Internet ทไมไดมสวนเพมเตมอะไร
บรการแบบ ldquoจะพยายามใหดทสดrdquo (best effort) ดงนน segment แบบ UDP อาจ สญหาย ไปถง app ของผรบแตไมเรยงล าดบ
ไมมการเชอมตอ ไมมการท า handshake ระหวางผสง
และผรบ แตละ segment ทเปน UDP จะถก
จดการเปนอสระจาก segment อน ๆ
UDP ใชใน app ทสง multimedia อยางตอเนอง
(ซงทนตอการสญเสย แต sensitive กบอตราการสง)
DNS SNMP
ถาจะให การถายโอนขอมลบน UDP มความนาเชอถอกวาน เพมความนาเชอถอทชน application มการกคนขอผดพลาด (ขนอยกบ แตละ
application)
Transport Layer 3-17
UDP สวนหวของ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
ควายาวของ segment ของ UDP (หนวยเปน byte) รวมความยาว
ของ header ดวย
ไมตองสรางการเชอมตอ (ซงเปนสวนทเพมความลาชา)
งาย ไมซบซอน ไมตองมสถานะของการเชอมตอทผสงและผรบ
สวนหว (header) มขนาดเลก ไมมการควบคมความคบคง UDP
สามารถสงขอมลไดรวดเรวตามทตองการ
ท าไมถงตองม UDP
Transport Layer 3-18
checksum ของ UDP
ผสง จดการขอมลทงหมดทจะไปอยใน
segment รวมทงขอมลสวนหวตาง ๆ ทเปนล าดบของจ านวนเตม 16 บตหลายจ านวน
checksum ผลรวมของขอมลตาง ๆ ใน segment
ผสงใส checksum เขาไปใน field checksum ใน header ของ UDP
ผรบ ค านวณหา checksum ของ segment ทได
รบมาใหม ตรวจสอบคา checksum ใน field ของ
header กบ คาทเพงไดจากการค านวณ วาเทากนหรอไม ถาไม แสดงวาพบขอผดพลาด ถาใช แสดงวา ไมพบขอผดพลาด แต
จรง ๆ แลว กอาจจะมขอผดพลาดไดอยด (รายละเอยดจะกลาวภายหลง)
จดมงหมาย ตรวจสอบขอผดพลาด เชน bits ทคาโดนกลบใน segment
Transport Layer 3-19
Internet checksum ตวอยาง
ตวอยาง การบวก 16-bit integers สองจ านวน
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note ขณะทบวกตวเลข เมอ bitท 16 (bit ซายสด) มการทดเลข ใหน าเลขนนไปบวกกบ bit ท 1 แลวจง flip bit ทก bit เพอใหได checksum
Transport Layer 3-20
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-21
Principles of reliable data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
หลกการของความนาเชอถอ data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
หลกการของความนาเชอถอ data transfer
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
ส าคญในชน application transport link ตด top-10 ของหวขอทางดานเครอขาย
Transport Layer 3-24
Reliable data transfer เรมตน
ดานผสง ดานผรบ
rdt_send() ถกเรยกจากชนดานบน (เชน โดย app) ท าหนาทผานขอมลเพอใหขอมลถกสงไป
ยงชนดานบนของผรบ
udt_send() ถกเรยกโดย rdt เพอทจะโอนถาย packet ผานชองการ
สอสารท unreliable ไปยงผรบ
rdt_rcv() ถกเรยกโดย OS เมอ OS ไดรบ packet ทมาถงชองการสอสารดานผรบ
deliver_data() ถกเรยกโดย rdt เพอใหสงขอมลไปยงชนดานบน
Transport Layer 3-25
เราจะ คอย ๆ พฒนา protocol ส าหรบการโอนถายขอมลแบบ reliable หรอ reliable
data transfer protocol (rdt) ตอนน พจารณาเฉพาะการโอนถายขอมลแบบทางเดยวกอน
แตขอมลส าหรบการควบคม (control info) จะถกสงไปกลบทงสองทาง
ใช finite state machines (FSM) เพอก าหนดการกระท าของผสงและผรบ
state 1
state 2
เหตการณทท าใหเกดการเปลยนผานของ State การกระท าขณะเปลยนผาน State
สถานะ (state) เมออยใน state ปจจบน state ถดไปจะขนอยกบเหตการณทจะ
เกดขน ณ state ปจจบน
เหตการณ การกระท า
Reliable data transfer เรมตน
Transport Layer 3-26
rdt10 การโอนถายขอมลแบบ reliable ผานชองสญญาณแบบ reliable
สมมตให ชองทางทอยขางใตเปนชองทางทเชอถอได ไมมการผดพลาดของบต ไมมขอมลสญหาย
FSMs ส าหรบผสง และ ส าหรบผ รบ ผสงสงขอมลไปยงชนดานลาง ผรบรบขอมลจากชนดานลาง
รอรบการเรยกจากชน
ดานบน packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
รอรบการเรยกจากชน
ดานลาง
rdt_rcv(packet)
ผสง ผรบ
Transport Layer 3-27
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร
acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK
negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors
sender retransmits pkt on receipt of NAK
new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 ชองทางการสอสารทม bit errors
ปกตแลว มนษยใชวธการใดในการแกไข ldquoerrorsrdquo ระหวางการสนทนา
Transport Layer 3-28
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร การตอบรบ (acknowledgements (ACKs)) ผรบแจงผสงวาไดรบ packet แลว การตอบปฏเสธ (negative acknowledgements (NAKs)) ผรบแจงผสงวา packet ม
errors sender สงขอมลซ าอกครง เมอไดรบ NAK
กลไกทเพมขน in rdt20 (เพมจาก rdt10) การตรวจจบความผดพลาด การแจงกลบ (feedback) ขอมลส าหรบการควบคม (ACKNAK) จากผรบไปยงผสง
rdt20 ชองทางการสอสารทม bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 ขอก าหนดของ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
จะเกดอะไรขนถา ACKNAK เกดเสยหาย ผสงไมรวาผรบรบ pkt ครบถวน
หรอไม ไมควรสง pkt ซ าอกครง เพราะ
pkt ซ ากน
การจดการกบขอมลทซ าซอน ผสงจะสง packet อกครงถา
ACKNAK เกดเสยหาย เตมหมายเลข sequence ใหแตละ
packet ผรบตองทง packet ทซ ากน
stop and wait ผสงท าการสงpacketและรอใหผรบตอบกลบดวย ACKNAK กอนทจะสง packet ตอไป
Transport Layer 3-33
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Transport Layer 3-35
rdt21 อภปราย
ผสง ใสหมายเลข seq ในpacket หมายเลข seq (01) กพอ
นกสท าไม ตองตรวจสอบวา ACKNAK ท
ไดรบเสยไปหรอไม จ านวนหมายเลข seq ตองเปนสอง
เทาของจ านวนสถานะ เพราะผสงตองเกบสถานะเพอldquoจ าrdquo
วา pkt ถดไปจะตองมเลข seq 0 หรอ 1
ผรบ ตองตรวจสอบวา pkt ทไดรบซ ากบ
pkt ทไดรบกอนหนาหรอไม ผรบจะเกบสถานะทระบวา 0 หรอ 1
คอหมายเลข seq ทคาดวาจะได
ขอสงเกต ผรบไมสามารถรวา ACKNAK สดทายทผสงไดรบถกตองหรอไม
Transport Layer 3-36
rdt22 protocol ทไมตองใช NAK
ท างานเหมอนกบ rdt21 แตใชแค ACKs แทนทจะสง NAK ผรบสง ACK ส าหรบ pkt สดทายทไดรบถกตอง
ฝงรบจะตองรวมหมายเลข seq ของ pkt ทก าลงถก ACK ไปดวย
จะสง ACK ซ าไปทผสงถาไมไดรบ pkt ทมหมายเลข seq ทคาดหวง ผลลพธจะออกมาเหมอนกรณทสง NAK ผสงตองสง pkt ตวลาสดไปใหมอกครง
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 ชองสญญาณทมความผดพลาดและ pkt สญหาย
เพมขอสนนษฐาน ชองสญญาณสามารถสญเสยแพคเกจ (ไมวาจะเปนขอมลหรอ ACKs) ได กลไก checksum หมายเลข seq
ACKs และ การสงซ า สามารถชวย แตมนกยงไมใชทางออก
วธ ผสงรอ ACK กลบมาในชวงเวลาท ldquoสมเหตสมผลrdquo
สง pkt เดมไปใหมอกครงถาไมไดรบ ACK ภายในชวงเวลาน
ถา pkt (หรอ ACK) มาถงลาชา (ไมใชหายไป) การสงใหมกจะเปนการสงซ า ซง seq
ไดจดการเรองเกยวกบขอมลซ าได ผรบตองระบเลข seq ของ pkt ทก าลง
ถก ACKed
ตองใชการนบเวลาถอยหลง (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
ขณะ rdt30 ด าเนนการ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
ขณะ rdt30 ด าเนนการ
Transport Layer 3-42
ประสทธภาพของ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
บตแรกของแพคเกจกถกสง t = 0
ผสง ผรบ
RTT
บตสดทายของแพคเกจถกสง t = L R
บตแรกของแพคเกจมาถง บตสดทายของแพคเกจมาถง สง ACK
ไดรบ ACK สงแพคเกจตอไป t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols แบบ pipelined
pipelining ผสงสงหลาย packet ไปยงผรบทง ๆ ท pkt เหลานนยงไมไดรบการยนยนตอบรบ (not yet acked) ชวงของหมายเลข sequence จะตองเพมขน ตองพกขอมล (buffer) ทผสงและผรบ
protocols แบบ pipelined แบบทวไปมสองแบบ go-Back-N selective repeat
Transport Layer 3-45
Pipelining ชวยเพม utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols แบบ pipeline ภาพรวม
Go-back-N ผสงสามารถสงแพคเกจทไมยงถก
ack ไดไมเกน N แพคเกจใน pipeline
ผรบแคสง cumulative ack ไม ack packet ถามนกอใหเกด gap
ผสงจบเวลาส าหรบแพคเกจทสงไป
นานทสดทยงไมได ack เมอเวลาหมด ผสงจะสงแพคเกจ
ทงหมดทยงไมไดรบ ack อกครง
Selective Repeat ผสงสามารถสงแพคเกจทไมยงถก ack ได
ไมเกน N แพคเกจใน pipeline
ผรบจะตองสง ack กลบใหแตละแพคเกจ
ผสงจะจบเวลาส าหรบแตละแพคเกจท
ไมได ack เมอเวลาส าหรบแพคเกจใดหมด ผสงจะสง
เฉพาะแพคเกจนนเทานน
Transport Layer 3-47
Go-Back-N ผสง
หมายเลข seq (k bit) จะอยใน header ของ packet อนญาตใหขนาด ldquowindowrdquo (ของ pkt ทตดกนและยงไมถก ack) ไมเกน N
ACK(n) จะ ack แพคเกจทงหมดไปจนถงทมหมายเลข seq เทากบ n - ldquoการ ACK แบบรวม (cumulative ACK)rdquo อาจมการไดรบ ACKs หมายเลข seq เดมซ า (ดรายละเอยดดาน receiver)
มการจบเวลาส าหรบแพคเกจทเดนทางอย ซงเดนทางนานทสดและยงไมได ACK (pkt ทมหมายเลข seq นอยทสดใน window)
timeout(n) เวลาหมดท pkt n ผสงจะสง pkt n และ pkt ทงหมดใน window (ซงมหมายเลข seq สงกวา n) อกครง
Transport Layer 3-48
GBN FSM ดานผสงทเพมจากของเดม
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum
out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM ดานผรบทเพมจากของเดม
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
ผ รบ Ack แตละแพคเกจทไดรบมาถกตอง เกบ (buffer) แพคเกจ เทาทจ าเปน เพอทจะสงขอมลทเรยงล าดบแลว ไปยง layer
บนไดในทายทสด
ผสงแคสงแพคเกจซ าเฉพาะแพคเกจทไมไดรบ Ack เทานน ตวจบเวลา (ทางฝงผสง) จะจบเวลาของแตละแพคเกจทไมไดรบ Ack
Window ของผสง มหมายเลข seq อย N หมายเลขตดกน จ ากดหมายเลข seq ของแพตเกจทสงไปแลว และไมไดรบ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
ขอมลมาจาก layer ดานบน ถามหมายเลข seq วางใน window ให
สง pkt ได
timeout(n) สง pkt n ซ า จบเวลาใหม
ACK(n) in [sendbase sendbase+N] รวา ผรบไดรบ pkt n แลว ถา n เกดเปนหมายเลขแรกสดในหนาตาง
(n เทากบ sendbase) ทไมได ถก ack เลอน window ไปทางดานขวา โดยเลอนไปยงหมายเลขทไมไดถก ack
ผสง pkt n in [rcvbase rcvbase+N-1] สง ACK(n) ถาไมเรยงตามล าดบ buffer ถาตามล าดบ สง (รวมถงใหสง pkt ท
เรยงตามล าดบและอยในบฟเฟอร) เลอน window ไปทหมายเลข seq ถดไปของ pkt ทยงไมไดรบจากผสง
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise ทงไปไมตองสนใจ
ผรบ
Transport Layer 3-54
ขณะ Selective repeat ด าเนนการ
สง pkt0
sender receiver
รบ pkt0 สง ack0
รบ pkt1 สง ack1
รบ pkt3 buffer สง ack3 รบ ack0 สง pkt4
รบ ack1 สง pkt5
pkt 2 timeout send pkt2
X loss
รบ pkt4 buffer สง ack4
รบ pkt5 buffer สง ack5
รบ pkt2 deliver pkt2
pkt3 pkt4 pkt5 สง ack2
บนทก ack3 มาถงแลว
sender window (N=4)
บนทก ack4 มาถงแลว บนทก ack4 มาถงแลว
Q เกดอะไรขนเมอ ack2 มาถง
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
สง pkt1 สง pkt2
สง pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
ตวอยาง หมายเลข seq 0 1 2 3 ขนาดของ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
ผรบไมสามารถเหนดานผสงได พฤตกรรมผรบจะเหมอนกนทง 2 สถานการณ
มบางอยางทผด (มาก)
ผรบไมเหนถงความแตกตางของทง 2 เหตการณจ าลองน
ในเหตการณจ าลอง (b) ขอมลเกาทถกสงซ า เมอผรบรบมา จะนกวาเปนขอมลใหม
Q ขนาดของ seq กบขนาดของ
window เกยวของกนยงไงเพอทจะหลกเลยงปญหาในตวอยาง (b)
Transport Layer 3-56
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-57
TCP ภาพรวม RFCs 79311221323 2018 2581
ขอมลแบบสองทศทาง มการสงขอมลทงไปและกลบในการ
เชอมตอ (connection) เดยวกน MSS ขนาด segment ทใหญสดท
TCP จะรบได (Max Segment Size)
connection-oriented handshaking (การแลกเปลยนของ
ขอความควบคม) ตงคาสถานะตงตนใหผสงและผรบ กอนการแลกเปลยนขอความ
flow controlled ผสงจะไมสงขอมลเกนกวาทผรบจะรบ
ได
point-to-point (สถานทนง-ไป-สถานทนง) ผสงหนงคน ผรบหนงคน
สายขอมลเปนไบตทเรยงล าดบและขอมลไมสญหาย (reliable in-order byte steam) ไมม ldquoขอบเขตrdquo ของขอความ
(ขอความจะมาถงผรบตอเนองกน)
pipelined การควบคมความคบคงและการควบคม
อตราการไหลของ TCP จะก าหนดขนาดของ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG ขอมลเรงดวน (โดยทว ๆ ไป ไมถกใช)
ACK ACK valid
PSH ผลกขอมลใหชน app (โดยทว ๆ ไป ไมถกใช)
RST SYN FIN สรางการเชอตอ
(ค าสง setup teardown)
จ านวน bytes ท ผรบเตมใจจะรบ
นบโดยใช byte ของขอมล (ไมใช segment)
Internet checksum
(เหมอนใน UDP)
Transport Layer 3-59
TCP seq numbers ACKs
หมายเลข sequence เลขของ byte stream จะเปน byte
แรกของขอมลของ segment น acknowledgements เลข seq ของ byte ถดไปทอกดานหนง
คาดหวงวาจะได cumulative ACK (ACK แบบรวม)
Q ผรบจดการกบ segment ทมาถงไมเรยงล าดบอยางไร A TCP ไมมรายละเอยดสวนน ndash ขนอย
กบคนทจะมาเขยนโปรแกรม TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาเขามาถงผสง
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาออกจากผสง
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
เหตการณจ าลอง telnet อยางงาย
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q เราควรจะก าหนด time out ไวทเทาใด
มากกวาเวลาของ RTT แตเวลาของ RTT นนแปรปรวน
ก าหนดไวนอยเกนไป timeout กอนก าหนด ท าใหมการ retransmissions โดยไมจ าเปน
ก าหนดไวมากเกนไป ระบบตอบสนองตอการสญหายของ segment ชาเกนไป
Q จะประมาณเวลาของ RTT อยางไร
SampleRTT วดจากระยะเวลาตงแตเรมสง sengment จนกระทงไดรบACK ไมสนใจการ retransmissions
SampleRTT มคาแปรปรวน เราตองการประมาณเวลาของ RTT ให smooth กวา ใชคาเฉลยของคาหลาย ๆ คา ไมใชแค
เวลาของ SampleRTT ปจจบน
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
คาเฉลยของการเคลอนทถวงน าหนกแบบ exponential คา SampleRTT ทในอดตจะมผลตอ EstimatedRTT ลดลงแบบ exponentially โดยทวไปจะก าหนดคา = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
ชวงเวลาของ timeout EstimatedRTT บวกกบระยะเวลาทเผอเอาไว ยงคาของ EstimatedRTT ทแปรปรวนมากเทาไร -gt ระยะเวลาทเผอความมากขนตาม
มประเมนคาการเปลยนแปลงของ SampleRTT จาก EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoชวงเวลาทเผอrdquo
Transport Layer 3-64
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP สรางบรการแบบ reliable อยบนบรการของ IP ทเปนแบบ unreliable segments ถกสงแบบ pipeline cumulative acks ม timer ส าหรบสงใหมคาตวเดยว
TCP สง segment ใหมเมอ เหตการณ timeout ไดรบ acks ซ า ๆ กน
เรามาเรมตนพจารณาทางดานผสงของ TCP อยางงายกอน ยงไมตองสนใจ acks ซ า ยงไมตองสนใจการควบคม flow และ
ความคบคง
Transport Layer 3-66
เหตการณของ TCP sender
เมอไดขอมลจาก app สราง segment ดวยหมายเลข seq เลข seq คอหมายเลขของไบตแรก
ของขอมลในแตละ segment หาก timer ยงไมเคยถกตง จะเรม
ตงเวลา การตงเวลาเพอจบเวลาส าหรบ
segment เกาทสดยงไมไดรบ ack ชวงเวลาทหมดอาย
TimeOutInterval
timeout สงใหมเฉพาะ segment ทเกด
timeout ตงเวลานบใหม เมอไดรบ ack ถา ack เปน ack ของ segment
กอนหนายงไมไดรบ ack Update สงทรวา ถก ACK แลว เรมตงเวลานบ ถายงคงม segment
ทยงไมไดรบ acked
Transport Layer 3-67
ดานผสงของ TCP (อยางงาย)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
การสราง ACK ของ TCP [RFC 1122 RFC 2581]
เหตการณทผรบ เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ) โดยขอมลทงหมดจนถงเลข seq ทคาดหวงไว ถก ACK หมดแลว
เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ ท าให ไมม gap ใน segment ทไดมา) แตมบาง segment ยงไมได ACK
Segment มาถงแบบไมเรยงตามล าดบ โดยมเลข seq สงกวาทตองการ ท าใหม gap (ชองโหว) เกดขน Segment ท ามาถง ทจะเตมบางสวนหรอเตมเตมชองโหว
TCP receiver action อยาเพงสง ACK รออก segment นง โดยรอสก 500ms หากยงไมม segment มา กสง ACK สง ACK แบบรวม (cumulative) ไปทนทในครงเดยว ซงจะเปนการ Ack segment ทมาแบบเรยงตามล าดบทงสอง segments สง ACK ซ า ไปทนท โดยใสเลข seq ของ byte ทตองการ สง ACK แบบรวมทนท โดย segment ทจะ Ack เรมจากดานทนอยกวาของ gap
Transport Layer 3-71
TCP fast retransmit
ระยะเวลาในการ time-out มกจะคอนขางยาว (โดยเปรยบเทยบ) ท าใหใชเวลาคอนขางนานกอนทจะ
สง packet อกครง
แกโดย ตรวจสอบการสญเสย pack โดยดท ACKs ทซ า ๆ กน ผสงมกสง segment ตด ๆ กน ดงนน ถา segment หนงหายไป จง
เปนไปไดทจะม ACKs ซ า ๆ กนจ านวนมาก
ถาผสงไดรบ ACKs ส าหรบขอมลเดยวกน 3 ACKS (ACKs ทซ ากนสามครง) ผสงตองสง seq ทยงไมถก acked (ระบเลข seq ทเลกทสด) มแนวโนมวา segment ทยงไมถก
ack จะหายไปเลย ดงนน จงไมตองรอใหหมดเวลา
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-74
TCP flow control application
process
buffer ดานผรบ ของ TCP socket
TCP code
IP code
application
OS
protocol stack ดานผรบ
application ลบขอมลจาก buffer ของ TCP socket hellip
hellip ชากวา TCP สงขอมล ขนไป (ขณะทผสงก าลงจะสง)
from sender
ผรบสามารถควบคมผสงได ดงนน ผสงจะไมสงขอมลเรวไป หรอ มากเกนไปจนลน (Overflow) buffer ของผรบ
flow control
Transport Layer 3-75
การควบคมการไหลขอมลของ TCP
ขอมลทอย buffer
buffer สวนทยงวาง rwnd
RcvBuffer
สวนของขอมล (payload) ใน segment ของ TCP
ไปยง process ของ application
ผรบระบขนาดของ buffer ทวางไวใน field rwnd ทอยในสวนหวของ TCP ทจะสงไปยงผสง ผเขยนโปรแกรมระบขนาดของ RcvBuffer ได
โดยใช API ตงคา option ของ socket (คาเรมตนทวไปคอ 4096 ไบต)
ทกระบบปฏบตการจะปรบขนาด RcvBuffer อตโนมต
ผสงจ ากดจ านวนของขอมลทยงไมถก acked (ldquoอยในระหวางการเดนทางrdquo) ใหเทากบคา rwnd ของขอมลผรบ
เปนการรบประกนวา buffer ของผรบจะไมลน
การbuffer ในดานของผรบ
Transport Layer 3-76
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-77
การจดการกบการเชอมตอ กอนทจะมการแลกเปลยนขอมลกน ผสงและผรบตองตกลงกนกอน ตกลงรวมในการสรางการเชอมตอ (แตละคนจะรวาอกฝายอยากจะเชอมตอหรอไม) ตกลงคาพารามเตอรส าหรบการเชอมตอ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake จะท างานไดเสมอไปหรอไมบน network
ความลาชาอาจเปลยนไป ขอความอาจถกสงซ าตวอยาง (เชน
req_conn(x)) เนองจากการสญหายของขอมล
ขอมลอาจสลบกน ไมสามารถรไดวาอกฝงไดรบหรอไม
ไดรบขอมลอะไร
2-way handshake
มาคยกนเถอะ
ตกลง ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-79
เหตการณผดพลาดของ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-80
3-way handshake ของ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM ของ 3-way handshake ของ TCP
Transport Layer 3-82
TCP การหยดการเชอมตอ
client server เลกเชอมตอทแตละดานของการเชอมตอ โดยแตละดานจะสง TCP segment ดวย FIN bit = 1
ตอบกลบ FIN ดวย ACK ในขณะทรบ FIN ACK กสามารถรวมอยในแพคเกจทสง FIN มาไดดวย
แตละดานสามารถสง FIN ไดพรอม ๆ กน
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP การหยดการเชอมตอ
Transport Layer 3-84
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-85
ความคบคง ความหมายไมเปนทางการ ldquoเมอจ านวนคนสงมากเกนไป ก าลงสงขอมลมาก
เกนไปดวยอตราการสงเรวเกนกวาท Network จะรบไหวrdquo แตกตางจาก flow control ผลทอาจทเกดขนจากความคบคง
packets หาย (buffer ลนท routers) ลาชามาก (เขาควใน buffers ของ router)
เปนปญหาทคนสนใจตด 10 อนดบตนๆ
หลกการของการควบคมความคบคงของเครอขาย
Transport Layer 3-86
ตนเหตและผลของความคบคง เหตการณ 1
มผสงและผรบอยางละสองคน Router 1 ตว ไมจ ากด buffers ความจของ link R ไมมการสงขอมลซ า
อตราขอมลทสงส าเรจตอหนงการเชอมตอ R2
buffer ท link ขาออกม buffer ไมจกด
Host A
อตราการสงขอมลตนฉบบ lin
Host B
อตราขอมลทสงส าเรจ lout
R2
R2
lou
t
lin R2 de
lay
lin
ดเลยจะมากขนเมออตราสงขอมลตนฉบบเขาใกลความจของ link
Transport Layer 3-87
Router 1 ตว Buffer แตมขนาด buffer จ ากด ตองสง pkt ไปซ าถา pkt นน timeout
ขอมลเขาของชน application = ขอมลออกจากชน application lin = lout
ขอมลเขาของชน transport จะรวมทตองสงซ าดวย lin lin
Buffer ของ link ทใชรวมกนซงมขนาดจ ากด
Host A
lin ขอมลตนฉบบ
Host B
lout lin ขอมลตนฉบบบวกกบ ขอมลทตองสงซ า
lsquo
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-88
ในอดมคต สมมตผสงรความเปนไปในเครอขาย ผสงสงเฉพาะตอนทเราเตอรม buffer เหลออย
Buffer ของ link ทแชรอยางจ ากด
lout copy
ม buffer วาง
R2
R2
lou
t
lin
Host B
A
ตนเหตและผลของความคบคง เหตการณ 2
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-89
lout copy
no buffer space
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
A
Host B
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
เมอสงขอมลท R2 บาง packets ถกสงซ า แต goodput ยงคงมคาลเขาหา R2 (ท าไม)
A
Host B
ตนเหตและผลของความคบคง เหตการณ 2
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Host B
ในความเปนจรง มการสงซ า packets หายหรอตกหลนระหวาง
เสนทางเนองจาก buffers เตม แตบางครง Timer ของผสงหมดเวลาลง
กอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-92
R2
lou
t
ldquoผลrdquo ของความคบคง เพอใหไดขอมลในอตราทตองการ (goodput) ตองท างานมากขน (สงซ า) เมอตองสง packets ซ าโดยทไมจ าเปน link จะตองล าเลยงหลาย copy ของ
ขอมลเดยวกน ท าให goodput ลดลง
R2 lin
ตนเหตและผลของความคบคง เหตการณ 2
ในความเปนจรง มการสงซ า 1 packets หายหรอตกหลนระหวางเสนทางเนองจาก buffers เตม 2 แตบางครง Timer ของผสงหมดเวลาลงกอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Transport Layer 3-93
มผสงขอมลทง 4 โฮสต เสนทางตองผานหลายจด หมดเวลาสงไปขอมลซ า
Q เกดอะไรขนเมอ λin และ λinrsquo เพมขน
Buffer ของเสนทางการสงขอมลทใชรวมกนมขนาดจ ากด
Host A lout
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
Host B
Host C Host D
A เมอ λinrsquo ของขอมลเสนสแดงมขนาดเพมขน ขอมลใน
เสนสน าเงนกจะถก drop ท าให throughput ของ connection สน าเงนเหลอ 0
lin ขอมลตนฉบบ lin ขอมลตนฉบบ บวกกบ
ขอมลทตองสงซ า
Transport Layer 3-94
อกหนง ldquoผลเสยrdquo ของความคบคง เมอแพกเกจถกทงไป นนกเทากบวา ทรยากรเครอขาย (ทใชสงขอมลกอน
หนาทขอมลนจะถกทง) ถกใชไปอยางไรคา
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
แนวทางในการควบคมความคบคงของขอมล
2 แนวทางในการควบคมความคบคง
การควบคมความคบคงโดยใชแคเครองปลายทาง (end-end)
ไมมการแจงกลบ (feedback) จากเครอขาย
ความคบคงของเครอขายจะถกเดาโดยเครองทอยปลายทางทคอยสงเกต loss delay
เปนวธของ TCP
การควบคมความคบคงโดยใหอปกรณเครอขายชวย
routers จะท าการแจง feedback ไปทระบบปลายทาง ใช bit 1 bit เพอระบถงความ
แออด (SNA DECbit TCPIP ECN ATM) หรอ ระบอตราการสงทชดเจน
ส าหรบผสง
Transport Layer 3-96
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
ABR available bit rate ldquoบรการทมความยดหยนrdquo ถาเสนทางของผสง ldquoมขอมลนอยกวา
ความจะมากrdquo ผสงจะใชประโยชนจาก
bandwidth ทเหลออย ถา path ของผสงแออด
ผสงจะคอย ๆ ลดอตราสงใหเหลอเทาอตราการสงขนต าทรบประกนไว
RM (resource management) cells สงโดยผสง แทรก ๆ ไปกบ cell ทเปนขอมล bits ใน RM cell ถกตงคาโดย switches
(ldquoเครอขายคอยชวยrdquo) NI bit ไมเพมอตราการสง (ความแออด
ระดบกลาง) CI bit การบงบอกถงความแออด
ผรบไมแกคาใน bit นของ RM cells และสงไปใหผสง
Transport Layer 3-97
field ขอมล ER (explicit rate) ขนาด 2 byte ใน cell RM switch ทแออดอาจลดคา ER ใน cell ดงนน อตราทผสงจะสงขอมลจะเปนอตราการสงมากทสดท link ในเสนทางจะรองรบได
bit EFCI ใน cell ขอมล ถกตงคาไวท 1 ใน switch ทมขอมลแออด ถา cell ขอมลกอนหนา RM cell ถกตงคา EFCI ผรบจะตงคา bit CI ใน cell RM ท
สงกลบใหผสง
RM cell data cell
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
Transport Layer 3-98
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-99
การควบคมความคบคงของ TCP additive increase (เพมแบบบวก) multiplicative decrease (ลดแบบเทาตว)
วธ ผสงเพมอตราสง (window size) ควานหา bandwidth ทมใหใชได จนกวาการสญหายจะเกดขน additive increase เพม cwnd ทละ 1 MSS ทก ๆ RTT จนกวาจะ pkt จะหาย multiplicative decrease ตดลด cwnd เหลอครงเดยวหลงจากการสญหาย
cwnd
ขนา
ดของ co
nges
tion
wind
ow ของผส
งแบบ
TCP
พฤตกรรมของ AIMD เปน ลกษณะฟนเลอย หา bandwidth
ขนาด window เพมแบบบวก hellip hellip จนกวาจะเกดการสญหาย (จากนน ตดลงเหลอครงนง)
time
Transport Layer 3-100
ผสงจ ากดการสง
ขนาด cwnd จะเปลยนแปลงไปมา ขนกบความคบคงของเครอขายทผสงไดรมา
อตราการสง TCP อยางคราว ๆ สงขอมลจ านวน
cwnd bytes รอ ACKS เพอประมาณคา RTT จากนนสงไบตขอมลเพม
byte สดทายท ถก ACKed สง แตยงไมถก
ACK (ldquoอยระหวางการเดนทางrdquo)
byte สดทายทสงไป
cwnd
LastByteSent-
LastByteAcked lt cwnd
ชวงเลข sequence number ของผสง
rate ~ ~ cwnd
RTT bytessec
การควบคมความคบคงของ TCP รายละเอยด
Transport Layer 3-101
TCP Slow Start
เมอเรมการเชอมตอ เพมอตราการสงแบบยกก าลง (exponentially) จนกวาจะเจอกบ loss ครงแรก เรมตนขนาด cwnd = 1 MSS เพมขนาด cwnd หนงเทาตวทก ๆ RTT นนคอ โดยเพมขนาด cwnd ไป 1 MSS
ส าหรบทก ๆ ACK ทไดรบ
สรป อตราสงเรมแรกจะชาแตคาจะเพมแบบกระโดดขนอยางรวดเรว
Host A
RTT
Host B
time
Transport Layer 3-102
TCP การหา loss และการตอบสนอง
ถา loss ถกระบโดย timeout cwnd ถกตงไวท 1 MSS จากนนหนาตางจะเพมขนเปนเลขยกก าลง (exponential เหมอนใน slow start)
จนไปถงคา threshold จากนนจะเพมขนเปนเชงเสน
ถา loss ถกระบโดยไดรบ ACK ซ า 3 ACKs (3 duplicate acks) TCP RENO
ACKs ซ า ระบถงความสามารถการสง segments ของเครอขาย
cwnd ถกตดเหลอครงนงจากนนเพมขนแบบเชงเสน
TCP Tahoe จะตงคา cwnd เปน 1 เสมอ (ไมวาจะ timeout หรอ 3 dup acks)
Transport Layer 3-103
Q เมอไร TCP ควรจะเปลยนจากการเพมขนแบบ exponential เปนแบบเชงเสน
A เมอ cwnd ถกเพมเปน 12 ของ ldquoคาทมากทสดrdquo ของมนกอนจะเกด timeout
การด าเนนการ ตวแปร ssthresh ขณะเกด Loss ssthresh จะถก
ตงคาท 12 ของคา cwnd กอนเกดเหตแปปเดยว (คา cwnd ทมากทสดกอนเกดเหตการณ)
TCP จาก slow start เปน CA (Congestion Avoidance)
Transport Layer 3-104
สรป TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput ของ TCP
คาเฉลย throughput ของ TCP เปน function ของขนาดของ window และ RTT ไมสนใจ slow start สมมตวาขอมลถกสงตลอด
W ขนาดของ window (หนวยเปน bytes) การสญเสยทเกดขน คาเฉลยขนาดของ window (จ านวน byte ทเดนทางอย) คอ frac34 W คาเฉลยของ throughput คอ 34W ตอ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP ในอนาคต TCP ใน ldquopipes ทยาวและมความจสงrdquo
ตวอยาง 1500 byte segments 100ms RTT ตองการชองทางการสงขนาด 10 Gbps
requires W = 83333 in-flight segments ความเปนไปไดของการสญหายของในชองทางการสงขอมล L [Mathis 1997]
เพอทจะมชองทางการสงขนาด 10Gbps ตองมการสญหายของขอมลเพยงแค =
210-10 ndash นอยมาก ดงนน ตองม TCP รนใหมส าหรบการสงแบบความเรวสง
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
เปาหมายของ fairness ถาม TCP session จ านวน K session ใชทรพยากร bandwidth R รวมกน แตละ session ควรจะเฉลยทรพยากรเหมอนกนท RK
TCP connection 1
router คอขวด มความจ R
ความเสมอภาค (Fairness) ของ TCP
TCP connection 2
Transport Layer 3-108
ความเสมอภาคของ TCP คออะไร session 2 session แขงกนใชทรพยากร additive increase ใหความชนเสนเทากบ 1 (session ทง 2 คอย ๆ ได throughput เพมทละ
นด) multiplicative decrease ลด throughput ไปครงหนง
R
R
เสนระบแบนดวธทใชรวมเทากน
Throuput ของ การเชอมตอท 1
congestion avoidance (CA) additive increase สญเสย ลดขนาดของ window ลงไปครงนง
congestion avoidance (CA) additive increase
สญเสย ลดขนาดของ window ลงไปครงนง
Transport Layer 3-109
ความเสมอภาค (ตอ)
ความเสมอภาค และ UDP มลตมเดยแอพพลเคชนบอยครงไม
ใช TCP ไมตองการใหอตราการสงลดลงเพราะ
การควบคมความคบคง
มลตมเดยแอพพลเคชนจงใช UDP แทน สงเสยงวดโอดวยความเรวคงท ทน
ตอการสญเสยขอมล
ความเสมอภาค การเชอมตอ TCP แบบขนาน แอพพลเคชนสามารถทจะเปดหลายการ
เชอมตอระหวางเครอง 2 เครองแบบขนานได
เวบบราวเซอรท าแบบน ตวอยางเชน link ทมความจ R ซงม 9 การ
เชอมตอ ถาแอพใหมตองการ 1 TCP จะไดรบท rate
R10 ถาแอพใหมตองการ 11 TCPs จะไดรบท R2
Transport Layer 3-110
Chapter 3 บทสรป
หลกการเบองหลงการใหบรการชนtransport multiplexing demultiplexing การสงขอมลแบบไวใจได การควบคมการไหลของขอมล การควบคมความคบคงของขอมล
กรณศกษาและการปฏบตบน internet UDP TCP
ถดไป ออกจากปลายทางของระบบ
เครอขาย (application transport layers)
เขาไปยงสแกนของเครอขาย
Transport Layer 3-4
Transport services and protocols
ใหบรการการสอสารทเชอม (เชง logic) ระหวางโพรเซสของแอพพลเคชนทท างานอยบนเครองตางๆ
transport protocols ท างานอยบนเครองปลายทาง เครองปลายทางตวสง ท าการแยก
ขอมลออกเปน segments แลวสงตอไปยงชน network layer
เครองปลายทางตวรบ รวบรวม segments และประกอบใหเปนขอความแลวสงตอไปยงชน app
มโปรโตคอลทใหบรการในการสงขอมลมากกวาหนงโปรโตคอล Internet TCP and UDP
application transport network data link physical
application transport network data link physical
Transport Layer 3-5
ชน Transport vs ชน Network
ชน network การสอสาร (เชงตรรกะ) ระหวางเครอง
ชน transport การสอสาร (เชงตรรกะ) ระหวางโพรโซส ใชบรการดวย และ ชวยเสรม
บรการของชน network
เดก 12 คนในบาน Ann สงจดหมาย 12 ฉบบไปหาเดก 12 คนในบานของ Bill
เครอง = บาน โพรเซส = เดก ขอความของโปรแกรม = จดหมายใน
ซอง โพรโตคอลชน transport = Ann
และ Bill ทตองแยกจดหมายใหลก ๆ โพรโตคอลชน network = บรการ
ของไปรษณย
อปมาเหมอนกบบาน
Transport Layer 3-6
โปรโตคอลชนทรานสปอรตของอนเตอรเนต สงขอมลแบบเรยงล าดบและนาไวใจ
หรอนาเชอถอได (TCP) การควบคมความคบคงของขอมลใน
เครอขาย การควบคมการไหลของขอมล ตองมการเชอมตอกอนการสงขอมล
สงขอมลแบบไมเรยงล าดบและไมนาเชอถอ UDP ไมมอะไรเพมเตมจากชน IP ทเปน
ldquobest-effortrdquo
ไมใหบรการเหลาน การรบประกนความลาชา การรบประกนแบนดวดธ
application transport network data link physical
application transport network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
Transport Layer 3-7
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-8
การรวมและแยกขอมล (Multiplexingdemultiplexing)
socket
ใชขอมลสวน header เพอสง segment ทไดมาไปยง socket ทถกตอง
demultiplexing ทผรบ จดการกบขอมลจากหลาย ๆ socket ใส header ของชน transport เขาไป (header จะถกใชเพอท าการ demultiplexing ภายหลง)
multiplexing ทผสง
transport
application
physical
link
network
P2 P1
transport
application
physical
link
network
P4
transport
application
physical
link
network
P3 process
Transport Layer 3-9
ท า demultiplexing อยางไร
source port dest port
32 bits
application data
(payload)
other header fields
TCPUDP segment format
host รบดาตาแกรมจากชน IP แตละดาตาแกรมจะมหมายเลขไอพตนทาง
ไอพปลายทาง แตละดาตาแกรมจะม segment ของชน
transportอย แตละ segment จะมหมายเลข port ตน
ทางและปลายทาง (source and destination port number)
host ใชขอมลหมายเลขไอพและหมายเลขพอรต เพอน าเซกเมนตไปยง socket ทถกตอง
Transport Layer 3-10
demultiplexing กรณทไมมการเชอมตอ (Connectionless)
datagrams ของ IP ทม เลข port ปลายทางตวเดยวกน แมจะมทอย IP และหรอ เลข port ของเครองตนทางตางกน (process ทสง datagram เปนคนละ process แตสงมาท process ผรบตวเดยวกน) จะถกน าไปยง socket เดยวกน ทเครองปลายทาง
จากบททแลว socket ทถกสรางจะมหมายเลข port ก ากบ
DatagramSocket mySocket1 = new DatagramSocket(12534)
เมอ host รบ segment ของ UDP ตรวจสอบหมายเลข port ใน
segment น า segment ของ UDP ไปยง
socket ทผกกบ port นน
เมอจะสรางดาตาแกรมเพอสงไปยง
socket ทเปน UDP ตองท าการระบ หมายเลขไอพปลายทาง หมายเลข port ปลายทาง
Transport Layer 3-11
Connectionless demux example
DatagramSocket serverSocket = new DatagramSocket
(6428)
transport
application
physical
link
network
P3 transport
application
physical
link
network
P1
transport
application
physical
link
network
P4
DatagramSocket mySocket1 = new DatagramSocket (5775)
DatagramSocket mySocket2 = new DatagramSocket
(9157)
source port 9157 dest port 6428
source port 6428 dest port 9157
source port dest port
source port dest port
Transport Layer 3-12
socket แบบ TCP ถกระบดวย 4 สวน ซงมองคประกอบดงน source IP address
(หมายเลขไอพตนทาง)
source port number (หมายเลขพอรตตนทาง )
dest IP address (หมายเลขไอพปลายทาง)
dest port number (หมายเลขพอรตปลายทาง )
demux จะดคาทงสสวนเพอน า packet ไปยง sockets ทเหมาะสม
เครองเซรฟเวอรอาจเปด sockets แบบ TCP จ านวนมากพรอมกน ซง แตละ socket ถกระบดวย 4 สวน
(แตจะมสวนท 3 คอหมายเลข IP ปลายทางเหมอน ๆ กน)
web servers จะม socket หลาย ๆ socket ไวส าหรบเชอมตอกบแตละ client HTTP แบบ non-persistent จะใช
socket ทแตกตางกนส าหรบแตละ request
demux กรณทมการเชอมตอ (Connection-oriented)
Transport Layer 3-13
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
P4
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
network
P6 P5 P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
ทง 3 segment มทอย IP ปลายทาง คอ B และ เลขพอรต ปลายทางคอ 80 แตถกแยกสงไปยง socket ทตางกน
server IP address B
Transport Layer 3-14
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
server IP address B
network
P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
P4
threaded server
Transport Layer 3-15
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
เปน protocol ของ Internet ทไมไดมสวนเพมเตมอะไร
บรการแบบ ldquoจะพยายามใหดทสดrdquo (best effort) ดงนน segment แบบ UDP อาจ สญหาย ไปถง app ของผรบแตไมเรยงล าดบ
ไมมการเชอมตอ ไมมการท า handshake ระหวางผสง
และผรบ แตละ segment ทเปน UDP จะถก
จดการเปนอสระจาก segment อน ๆ
UDP ใชใน app ทสง multimedia อยางตอเนอง
(ซงทนตอการสญเสย แต sensitive กบอตราการสง)
DNS SNMP
ถาจะให การถายโอนขอมลบน UDP มความนาเชอถอกวาน เพมความนาเชอถอทชน application มการกคนขอผดพลาด (ขนอยกบ แตละ
application)
Transport Layer 3-17
UDP สวนหวของ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
ควายาวของ segment ของ UDP (หนวยเปน byte) รวมความยาว
ของ header ดวย
ไมตองสรางการเชอมตอ (ซงเปนสวนทเพมความลาชา)
งาย ไมซบซอน ไมตองมสถานะของการเชอมตอทผสงและผรบ
สวนหว (header) มขนาดเลก ไมมการควบคมความคบคง UDP
สามารถสงขอมลไดรวดเรวตามทตองการ
ท าไมถงตองม UDP
Transport Layer 3-18
checksum ของ UDP
ผสง จดการขอมลทงหมดทจะไปอยใน
segment รวมทงขอมลสวนหวตาง ๆ ทเปนล าดบของจ านวนเตม 16 บตหลายจ านวน
checksum ผลรวมของขอมลตาง ๆ ใน segment
ผสงใส checksum เขาไปใน field checksum ใน header ของ UDP
ผรบ ค านวณหา checksum ของ segment ทได
รบมาใหม ตรวจสอบคา checksum ใน field ของ
header กบ คาทเพงไดจากการค านวณ วาเทากนหรอไม ถาไม แสดงวาพบขอผดพลาด ถาใช แสดงวา ไมพบขอผดพลาด แต
จรง ๆ แลว กอาจจะมขอผดพลาดไดอยด (รายละเอยดจะกลาวภายหลง)
จดมงหมาย ตรวจสอบขอผดพลาด เชน bits ทคาโดนกลบใน segment
Transport Layer 3-19
Internet checksum ตวอยาง
ตวอยาง การบวก 16-bit integers สองจ านวน
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note ขณะทบวกตวเลข เมอ bitท 16 (bit ซายสด) มการทดเลข ใหน าเลขนนไปบวกกบ bit ท 1 แลวจง flip bit ทก bit เพอใหได checksum
Transport Layer 3-20
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-21
Principles of reliable data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
หลกการของความนาเชอถอ data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
หลกการของความนาเชอถอ data transfer
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
ส าคญในชน application transport link ตด top-10 ของหวขอทางดานเครอขาย
Transport Layer 3-24
Reliable data transfer เรมตน
ดานผสง ดานผรบ
rdt_send() ถกเรยกจากชนดานบน (เชน โดย app) ท าหนาทผานขอมลเพอใหขอมลถกสงไป
ยงชนดานบนของผรบ
udt_send() ถกเรยกโดย rdt เพอทจะโอนถาย packet ผานชองการ
สอสารท unreliable ไปยงผรบ
rdt_rcv() ถกเรยกโดย OS เมอ OS ไดรบ packet ทมาถงชองการสอสารดานผรบ
deliver_data() ถกเรยกโดย rdt เพอใหสงขอมลไปยงชนดานบน
Transport Layer 3-25
เราจะ คอย ๆ พฒนา protocol ส าหรบการโอนถายขอมลแบบ reliable หรอ reliable
data transfer protocol (rdt) ตอนน พจารณาเฉพาะการโอนถายขอมลแบบทางเดยวกอน
แตขอมลส าหรบการควบคม (control info) จะถกสงไปกลบทงสองทาง
ใช finite state machines (FSM) เพอก าหนดการกระท าของผสงและผรบ
state 1
state 2
เหตการณทท าใหเกดการเปลยนผานของ State การกระท าขณะเปลยนผาน State
สถานะ (state) เมออยใน state ปจจบน state ถดไปจะขนอยกบเหตการณทจะ
เกดขน ณ state ปจจบน
เหตการณ การกระท า
Reliable data transfer เรมตน
Transport Layer 3-26
rdt10 การโอนถายขอมลแบบ reliable ผานชองสญญาณแบบ reliable
สมมตให ชองทางทอยขางใตเปนชองทางทเชอถอได ไมมการผดพลาดของบต ไมมขอมลสญหาย
FSMs ส าหรบผสง และ ส าหรบผ รบ ผสงสงขอมลไปยงชนดานลาง ผรบรบขอมลจากชนดานลาง
รอรบการเรยกจากชน
ดานบน packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
รอรบการเรยกจากชน
ดานลาง
rdt_rcv(packet)
ผสง ผรบ
Transport Layer 3-27
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร
acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK
negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors
sender retransmits pkt on receipt of NAK
new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 ชองทางการสอสารทม bit errors
ปกตแลว มนษยใชวธการใดในการแกไข ldquoerrorsrdquo ระหวางการสนทนา
Transport Layer 3-28
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร การตอบรบ (acknowledgements (ACKs)) ผรบแจงผสงวาไดรบ packet แลว การตอบปฏเสธ (negative acknowledgements (NAKs)) ผรบแจงผสงวา packet ม
errors sender สงขอมลซ าอกครง เมอไดรบ NAK
กลไกทเพมขน in rdt20 (เพมจาก rdt10) การตรวจจบความผดพลาด การแจงกลบ (feedback) ขอมลส าหรบการควบคม (ACKNAK) จากผรบไปยงผสง
rdt20 ชองทางการสอสารทม bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 ขอก าหนดของ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
จะเกดอะไรขนถา ACKNAK เกดเสยหาย ผสงไมรวาผรบรบ pkt ครบถวน
หรอไม ไมควรสง pkt ซ าอกครง เพราะ
pkt ซ ากน
การจดการกบขอมลทซ าซอน ผสงจะสง packet อกครงถา
ACKNAK เกดเสยหาย เตมหมายเลข sequence ใหแตละ
packet ผรบตองทง packet ทซ ากน
stop and wait ผสงท าการสงpacketและรอใหผรบตอบกลบดวย ACKNAK กอนทจะสง packet ตอไป
Transport Layer 3-33
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Transport Layer 3-35
rdt21 อภปราย
ผสง ใสหมายเลข seq ในpacket หมายเลข seq (01) กพอ
นกสท าไม ตองตรวจสอบวา ACKNAK ท
ไดรบเสยไปหรอไม จ านวนหมายเลข seq ตองเปนสอง
เทาของจ านวนสถานะ เพราะผสงตองเกบสถานะเพอldquoจ าrdquo
วา pkt ถดไปจะตองมเลข seq 0 หรอ 1
ผรบ ตองตรวจสอบวา pkt ทไดรบซ ากบ
pkt ทไดรบกอนหนาหรอไม ผรบจะเกบสถานะทระบวา 0 หรอ 1
คอหมายเลข seq ทคาดวาจะได
ขอสงเกต ผรบไมสามารถรวา ACKNAK สดทายทผสงไดรบถกตองหรอไม
Transport Layer 3-36
rdt22 protocol ทไมตองใช NAK
ท างานเหมอนกบ rdt21 แตใชแค ACKs แทนทจะสง NAK ผรบสง ACK ส าหรบ pkt สดทายทไดรบถกตอง
ฝงรบจะตองรวมหมายเลข seq ของ pkt ทก าลงถก ACK ไปดวย
จะสง ACK ซ าไปทผสงถาไมไดรบ pkt ทมหมายเลข seq ทคาดหวง ผลลพธจะออกมาเหมอนกรณทสง NAK ผสงตองสง pkt ตวลาสดไปใหมอกครง
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 ชองสญญาณทมความผดพลาดและ pkt สญหาย
เพมขอสนนษฐาน ชองสญญาณสามารถสญเสยแพคเกจ (ไมวาจะเปนขอมลหรอ ACKs) ได กลไก checksum หมายเลข seq
ACKs และ การสงซ า สามารถชวย แตมนกยงไมใชทางออก
วธ ผสงรอ ACK กลบมาในชวงเวลาท ldquoสมเหตสมผลrdquo
สง pkt เดมไปใหมอกครงถาไมไดรบ ACK ภายในชวงเวลาน
ถา pkt (หรอ ACK) มาถงลาชา (ไมใชหายไป) การสงใหมกจะเปนการสงซ า ซง seq
ไดจดการเรองเกยวกบขอมลซ าได ผรบตองระบเลข seq ของ pkt ทก าลง
ถก ACKed
ตองใชการนบเวลาถอยหลง (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
ขณะ rdt30 ด าเนนการ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
ขณะ rdt30 ด าเนนการ
Transport Layer 3-42
ประสทธภาพของ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
บตแรกของแพคเกจกถกสง t = 0
ผสง ผรบ
RTT
บตสดทายของแพคเกจถกสง t = L R
บตแรกของแพคเกจมาถง บตสดทายของแพคเกจมาถง สง ACK
ไดรบ ACK สงแพคเกจตอไป t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols แบบ pipelined
pipelining ผสงสงหลาย packet ไปยงผรบทง ๆ ท pkt เหลานนยงไมไดรบการยนยนตอบรบ (not yet acked) ชวงของหมายเลข sequence จะตองเพมขน ตองพกขอมล (buffer) ทผสงและผรบ
protocols แบบ pipelined แบบทวไปมสองแบบ go-Back-N selective repeat
Transport Layer 3-45
Pipelining ชวยเพม utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols แบบ pipeline ภาพรวม
Go-back-N ผสงสามารถสงแพคเกจทไมยงถก
ack ไดไมเกน N แพคเกจใน pipeline
ผรบแคสง cumulative ack ไม ack packet ถามนกอใหเกด gap
ผสงจบเวลาส าหรบแพคเกจทสงไป
นานทสดทยงไมได ack เมอเวลาหมด ผสงจะสงแพคเกจ
ทงหมดทยงไมไดรบ ack อกครง
Selective Repeat ผสงสามารถสงแพคเกจทไมยงถก ack ได
ไมเกน N แพคเกจใน pipeline
ผรบจะตองสง ack กลบใหแตละแพคเกจ
ผสงจะจบเวลาส าหรบแตละแพคเกจท
ไมได ack เมอเวลาส าหรบแพคเกจใดหมด ผสงจะสง
เฉพาะแพคเกจนนเทานน
Transport Layer 3-47
Go-Back-N ผสง
หมายเลข seq (k bit) จะอยใน header ของ packet อนญาตใหขนาด ldquowindowrdquo (ของ pkt ทตดกนและยงไมถก ack) ไมเกน N
ACK(n) จะ ack แพคเกจทงหมดไปจนถงทมหมายเลข seq เทากบ n - ldquoการ ACK แบบรวม (cumulative ACK)rdquo อาจมการไดรบ ACKs หมายเลข seq เดมซ า (ดรายละเอยดดาน receiver)
มการจบเวลาส าหรบแพคเกจทเดนทางอย ซงเดนทางนานทสดและยงไมได ACK (pkt ทมหมายเลข seq นอยทสดใน window)
timeout(n) เวลาหมดท pkt n ผสงจะสง pkt n และ pkt ทงหมดใน window (ซงมหมายเลข seq สงกวา n) อกครง
Transport Layer 3-48
GBN FSM ดานผสงทเพมจากของเดม
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum
out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM ดานผรบทเพมจากของเดม
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
ผ รบ Ack แตละแพคเกจทไดรบมาถกตอง เกบ (buffer) แพคเกจ เทาทจ าเปน เพอทจะสงขอมลทเรยงล าดบแลว ไปยง layer
บนไดในทายทสด
ผสงแคสงแพคเกจซ าเฉพาะแพคเกจทไมไดรบ Ack เทานน ตวจบเวลา (ทางฝงผสง) จะจบเวลาของแตละแพคเกจทไมไดรบ Ack
Window ของผสง มหมายเลข seq อย N หมายเลขตดกน จ ากดหมายเลข seq ของแพตเกจทสงไปแลว และไมไดรบ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
ขอมลมาจาก layer ดานบน ถามหมายเลข seq วางใน window ให
สง pkt ได
timeout(n) สง pkt n ซ า จบเวลาใหม
ACK(n) in [sendbase sendbase+N] รวา ผรบไดรบ pkt n แลว ถา n เกดเปนหมายเลขแรกสดในหนาตาง
(n เทากบ sendbase) ทไมได ถก ack เลอน window ไปทางดานขวา โดยเลอนไปยงหมายเลขทไมไดถก ack
ผสง pkt n in [rcvbase rcvbase+N-1] สง ACK(n) ถาไมเรยงตามล าดบ buffer ถาตามล าดบ สง (รวมถงใหสง pkt ท
เรยงตามล าดบและอยในบฟเฟอร) เลอน window ไปทหมายเลข seq ถดไปของ pkt ทยงไมไดรบจากผสง
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise ทงไปไมตองสนใจ
ผรบ
Transport Layer 3-54
ขณะ Selective repeat ด าเนนการ
สง pkt0
sender receiver
รบ pkt0 สง ack0
รบ pkt1 สง ack1
รบ pkt3 buffer สง ack3 รบ ack0 สง pkt4
รบ ack1 สง pkt5
pkt 2 timeout send pkt2
X loss
รบ pkt4 buffer สง ack4
รบ pkt5 buffer สง ack5
รบ pkt2 deliver pkt2
pkt3 pkt4 pkt5 สง ack2
บนทก ack3 มาถงแลว
sender window (N=4)
บนทก ack4 มาถงแลว บนทก ack4 มาถงแลว
Q เกดอะไรขนเมอ ack2 มาถง
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
สง pkt1 สง pkt2
สง pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
ตวอยาง หมายเลข seq 0 1 2 3 ขนาดของ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
ผรบไมสามารถเหนดานผสงได พฤตกรรมผรบจะเหมอนกนทง 2 สถานการณ
มบางอยางทผด (มาก)
ผรบไมเหนถงความแตกตางของทง 2 เหตการณจ าลองน
ในเหตการณจ าลอง (b) ขอมลเกาทถกสงซ า เมอผรบรบมา จะนกวาเปนขอมลใหม
Q ขนาดของ seq กบขนาดของ
window เกยวของกนยงไงเพอทจะหลกเลยงปญหาในตวอยาง (b)
Transport Layer 3-56
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-57
TCP ภาพรวม RFCs 79311221323 2018 2581
ขอมลแบบสองทศทาง มการสงขอมลทงไปและกลบในการ
เชอมตอ (connection) เดยวกน MSS ขนาด segment ทใหญสดท
TCP จะรบได (Max Segment Size)
connection-oriented handshaking (การแลกเปลยนของ
ขอความควบคม) ตงคาสถานะตงตนใหผสงและผรบ กอนการแลกเปลยนขอความ
flow controlled ผสงจะไมสงขอมลเกนกวาทผรบจะรบ
ได
point-to-point (สถานทนง-ไป-สถานทนง) ผสงหนงคน ผรบหนงคน
สายขอมลเปนไบตทเรยงล าดบและขอมลไมสญหาย (reliable in-order byte steam) ไมม ldquoขอบเขตrdquo ของขอความ
(ขอความจะมาถงผรบตอเนองกน)
pipelined การควบคมความคบคงและการควบคม
อตราการไหลของ TCP จะก าหนดขนาดของ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG ขอมลเรงดวน (โดยทว ๆ ไป ไมถกใช)
ACK ACK valid
PSH ผลกขอมลใหชน app (โดยทว ๆ ไป ไมถกใช)
RST SYN FIN สรางการเชอตอ
(ค าสง setup teardown)
จ านวน bytes ท ผรบเตมใจจะรบ
นบโดยใช byte ของขอมล (ไมใช segment)
Internet checksum
(เหมอนใน UDP)
Transport Layer 3-59
TCP seq numbers ACKs
หมายเลข sequence เลขของ byte stream จะเปน byte
แรกของขอมลของ segment น acknowledgements เลข seq ของ byte ถดไปทอกดานหนง
คาดหวงวาจะได cumulative ACK (ACK แบบรวม)
Q ผรบจดการกบ segment ทมาถงไมเรยงล าดบอยางไร A TCP ไมมรายละเอยดสวนน ndash ขนอย
กบคนทจะมาเขยนโปรแกรม TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาเขามาถงผสง
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาออกจากผสง
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
เหตการณจ าลอง telnet อยางงาย
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q เราควรจะก าหนด time out ไวทเทาใด
มากกวาเวลาของ RTT แตเวลาของ RTT นนแปรปรวน
ก าหนดไวนอยเกนไป timeout กอนก าหนด ท าใหมการ retransmissions โดยไมจ าเปน
ก าหนดไวมากเกนไป ระบบตอบสนองตอการสญหายของ segment ชาเกนไป
Q จะประมาณเวลาของ RTT อยางไร
SampleRTT วดจากระยะเวลาตงแตเรมสง sengment จนกระทงไดรบACK ไมสนใจการ retransmissions
SampleRTT มคาแปรปรวน เราตองการประมาณเวลาของ RTT ให smooth กวา ใชคาเฉลยของคาหลาย ๆ คา ไมใชแค
เวลาของ SampleRTT ปจจบน
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
คาเฉลยของการเคลอนทถวงน าหนกแบบ exponential คา SampleRTT ทในอดตจะมผลตอ EstimatedRTT ลดลงแบบ exponentially โดยทวไปจะก าหนดคา = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
ชวงเวลาของ timeout EstimatedRTT บวกกบระยะเวลาทเผอเอาไว ยงคาของ EstimatedRTT ทแปรปรวนมากเทาไร -gt ระยะเวลาทเผอความมากขนตาม
มประเมนคาการเปลยนแปลงของ SampleRTT จาก EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoชวงเวลาทเผอrdquo
Transport Layer 3-64
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP สรางบรการแบบ reliable อยบนบรการของ IP ทเปนแบบ unreliable segments ถกสงแบบ pipeline cumulative acks ม timer ส าหรบสงใหมคาตวเดยว
TCP สง segment ใหมเมอ เหตการณ timeout ไดรบ acks ซ า ๆ กน
เรามาเรมตนพจารณาทางดานผสงของ TCP อยางงายกอน ยงไมตองสนใจ acks ซ า ยงไมตองสนใจการควบคม flow และ
ความคบคง
Transport Layer 3-66
เหตการณของ TCP sender
เมอไดขอมลจาก app สราง segment ดวยหมายเลข seq เลข seq คอหมายเลขของไบตแรก
ของขอมลในแตละ segment หาก timer ยงไมเคยถกตง จะเรม
ตงเวลา การตงเวลาเพอจบเวลาส าหรบ
segment เกาทสดยงไมไดรบ ack ชวงเวลาทหมดอาย
TimeOutInterval
timeout สงใหมเฉพาะ segment ทเกด
timeout ตงเวลานบใหม เมอไดรบ ack ถา ack เปน ack ของ segment
กอนหนายงไมไดรบ ack Update สงทรวา ถก ACK แลว เรมตงเวลานบ ถายงคงม segment
ทยงไมไดรบ acked
Transport Layer 3-67
ดานผสงของ TCP (อยางงาย)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
การสราง ACK ของ TCP [RFC 1122 RFC 2581]
เหตการณทผรบ เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ) โดยขอมลทงหมดจนถงเลข seq ทคาดหวงไว ถก ACK หมดแลว
เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ ท าให ไมม gap ใน segment ทไดมา) แตมบาง segment ยงไมได ACK
Segment มาถงแบบไมเรยงตามล าดบ โดยมเลข seq สงกวาทตองการ ท าใหม gap (ชองโหว) เกดขน Segment ท ามาถง ทจะเตมบางสวนหรอเตมเตมชองโหว
TCP receiver action อยาเพงสง ACK รออก segment นง โดยรอสก 500ms หากยงไมม segment มา กสง ACK สง ACK แบบรวม (cumulative) ไปทนทในครงเดยว ซงจะเปนการ Ack segment ทมาแบบเรยงตามล าดบทงสอง segments สง ACK ซ า ไปทนท โดยใสเลข seq ของ byte ทตองการ สง ACK แบบรวมทนท โดย segment ทจะ Ack เรมจากดานทนอยกวาของ gap
Transport Layer 3-71
TCP fast retransmit
ระยะเวลาในการ time-out มกจะคอนขางยาว (โดยเปรยบเทยบ) ท าใหใชเวลาคอนขางนานกอนทจะ
สง packet อกครง
แกโดย ตรวจสอบการสญเสย pack โดยดท ACKs ทซ า ๆ กน ผสงมกสง segment ตด ๆ กน ดงนน ถา segment หนงหายไป จง
เปนไปไดทจะม ACKs ซ า ๆ กนจ านวนมาก
ถาผสงไดรบ ACKs ส าหรบขอมลเดยวกน 3 ACKS (ACKs ทซ ากนสามครง) ผสงตองสง seq ทยงไมถก acked (ระบเลข seq ทเลกทสด) มแนวโนมวา segment ทยงไมถก
ack จะหายไปเลย ดงนน จงไมตองรอใหหมดเวลา
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-74
TCP flow control application
process
buffer ดานผรบ ของ TCP socket
TCP code
IP code
application
OS
protocol stack ดานผรบ
application ลบขอมลจาก buffer ของ TCP socket hellip
hellip ชากวา TCP สงขอมล ขนไป (ขณะทผสงก าลงจะสง)
from sender
ผรบสามารถควบคมผสงได ดงนน ผสงจะไมสงขอมลเรวไป หรอ มากเกนไปจนลน (Overflow) buffer ของผรบ
flow control
Transport Layer 3-75
การควบคมการไหลขอมลของ TCP
ขอมลทอย buffer
buffer สวนทยงวาง rwnd
RcvBuffer
สวนของขอมล (payload) ใน segment ของ TCP
ไปยง process ของ application
ผรบระบขนาดของ buffer ทวางไวใน field rwnd ทอยในสวนหวของ TCP ทจะสงไปยงผสง ผเขยนโปรแกรมระบขนาดของ RcvBuffer ได
โดยใช API ตงคา option ของ socket (คาเรมตนทวไปคอ 4096 ไบต)
ทกระบบปฏบตการจะปรบขนาด RcvBuffer อตโนมต
ผสงจ ากดจ านวนของขอมลทยงไมถก acked (ldquoอยในระหวางการเดนทางrdquo) ใหเทากบคา rwnd ของขอมลผรบ
เปนการรบประกนวา buffer ของผรบจะไมลน
การbuffer ในดานของผรบ
Transport Layer 3-76
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-77
การจดการกบการเชอมตอ กอนทจะมการแลกเปลยนขอมลกน ผสงและผรบตองตกลงกนกอน ตกลงรวมในการสรางการเชอมตอ (แตละคนจะรวาอกฝายอยากจะเชอมตอหรอไม) ตกลงคาพารามเตอรส าหรบการเชอมตอ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake จะท างานไดเสมอไปหรอไมบน network
ความลาชาอาจเปลยนไป ขอความอาจถกสงซ าตวอยาง (เชน
req_conn(x)) เนองจากการสญหายของขอมล
ขอมลอาจสลบกน ไมสามารถรไดวาอกฝงไดรบหรอไม
ไดรบขอมลอะไร
2-way handshake
มาคยกนเถอะ
ตกลง ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-79
เหตการณผดพลาดของ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-80
3-way handshake ของ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM ของ 3-way handshake ของ TCP
Transport Layer 3-82
TCP การหยดการเชอมตอ
client server เลกเชอมตอทแตละดานของการเชอมตอ โดยแตละดานจะสง TCP segment ดวย FIN bit = 1
ตอบกลบ FIN ดวย ACK ในขณะทรบ FIN ACK กสามารถรวมอยในแพคเกจทสง FIN มาไดดวย
แตละดานสามารถสง FIN ไดพรอม ๆ กน
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP การหยดการเชอมตอ
Transport Layer 3-84
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-85
ความคบคง ความหมายไมเปนทางการ ldquoเมอจ านวนคนสงมากเกนไป ก าลงสงขอมลมาก
เกนไปดวยอตราการสงเรวเกนกวาท Network จะรบไหวrdquo แตกตางจาก flow control ผลทอาจทเกดขนจากความคบคง
packets หาย (buffer ลนท routers) ลาชามาก (เขาควใน buffers ของ router)
เปนปญหาทคนสนใจตด 10 อนดบตนๆ
หลกการของการควบคมความคบคงของเครอขาย
Transport Layer 3-86
ตนเหตและผลของความคบคง เหตการณ 1
มผสงและผรบอยางละสองคน Router 1 ตว ไมจ ากด buffers ความจของ link R ไมมการสงขอมลซ า
อตราขอมลทสงส าเรจตอหนงการเชอมตอ R2
buffer ท link ขาออกม buffer ไมจกด
Host A
อตราการสงขอมลตนฉบบ lin
Host B
อตราขอมลทสงส าเรจ lout
R2
R2
lou
t
lin R2 de
lay
lin
ดเลยจะมากขนเมออตราสงขอมลตนฉบบเขาใกลความจของ link
Transport Layer 3-87
Router 1 ตว Buffer แตมขนาด buffer จ ากด ตองสง pkt ไปซ าถา pkt นน timeout
ขอมลเขาของชน application = ขอมลออกจากชน application lin = lout
ขอมลเขาของชน transport จะรวมทตองสงซ าดวย lin lin
Buffer ของ link ทใชรวมกนซงมขนาดจ ากด
Host A
lin ขอมลตนฉบบ
Host B
lout lin ขอมลตนฉบบบวกกบ ขอมลทตองสงซ า
lsquo
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-88
ในอดมคต สมมตผสงรความเปนไปในเครอขาย ผสงสงเฉพาะตอนทเราเตอรม buffer เหลออย
Buffer ของ link ทแชรอยางจ ากด
lout copy
ม buffer วาง
R2
R2
lou
t
lin
Host B
A
ตนเหตและผลของความคบคง เหตการณ 2
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-89
lout copy
no buffer space
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
A
Host B
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
เมอสงขอมลท R2 บาง packets ถกสงซ า แต goodput ยงคงมคาลเขาหา R2 (ท าไม)
A
Host B
ตนเหตและผลของความคบคง เหตการณ 2
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Host B
ในความเปนจรง มการสงซ า packets หายหรอตกหลนระหวาง
เสนทางเนองจาก buffers เตม แตบางครง Timer ของผสงหมดเวลาลง
กอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-92
R2
lou
t
ldquoผลrdquo ของความคบคง เพอใหไดขอมลในอตราทตองการ (goodput) ตองท างานมากขน (สงซ า) เมอตองสง packets ซ าโดยทไมจ าเปน link จะตองล าเลยงหลาย copy ของ
ขอมลเดยวกน ท าให goodput ลดลง
R2 lin
ตนเหตและผลของความคบคง เหตการณ 2
ในความเปนจรง มการสงซ า 1 packets หายหรอตกหลนระหวางเสนทางเนองจาก buffers เตม 2 แตบางครง Timer ของผสงหมดเวลาลงกอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Transport Layer 3-93
มผสงขอมลทง 4 โฮสต เสนทางตองผานหลายจด หมดเวลาสงไปขอมลซ า
Q เกดอะไรขนเมอ λin และ λinrsquo เพมขน
Buffer ของเสนทางการสงขอมลทใชรวมกนมขนาดจ ากด
Host A lout
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
Host B
Host C Host D
A เมอ λinrsquo ของขอมลเสนสแดงมขนาดเพมขน ขอมลใน
เสนสน าเงนกจะถก drop ท าให throughput ของ connection สน าเงนเหลอ 0
lin ขอมลตนฉบบ lin ขอมลตนฉบบ บวกกบ
ขอมลทตองสงซ า
Transport Layer 3-94
อกหนง ldquoผลเสยrdquo ของความคบคง เมอแพกเกจถกทงไป นนกเทากบวา ทรยากรเครอขาย (ทใชสงขอมลกอน
หนาทขอมลนจะถกทง) ถกใชไปอยางไรคา
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
แนวทางในการควบคมความคบคงของขอมล
2 แนวทางในการควบคมความคบคง
การควบคมความคบคงโดยใชแคเครองปลายทาง (end-end)
ไมมการแจงกลบ (feedback) จากเครอขาย
ความคบคงของเครอขายจะถกเดาโดยเครองทอยปลายทางทคอยสงเกต loss delay
เปนวธของ TCP
การควบคมความคบคงโดยใหอปกรณเครอขายชวย
routers จะท าการแจง feedback ไปทระบบปลายทาง ใช bit 1 bit เพอระบถงความ
แออด (SNA DECbit TCPIP ECN ATM) หรอ ระบอตราการสงทชดเจน
ส าหรบผสง
Transport Layer 3-96
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
ABR available bit rate ldquoบรการทมความยดหยนrdquo ถาเสนทางของผสง ldquoมขอมลนอยกวา
ความจะมากrdquo ผสงจะใชประโยชนจาก
bandwidth ทเหลออย ถา path ของผสงแออด
ผสงจะคอย ๆ ลดอตราสงใหเหลอเทาอตราการสงขนต าทรบประกนไว
RM (resource management) cells สงโดยผสง แทรก ๆ ไปกบ cell ทเปนขอมล bits ใน RM cell ถกตงคาโดย switches
(ldquoเครอขายคอยชวยrdquo) NI bit ไมเพมอตราการสง (ความแออด
ระดบกลาง) CI bit การบงบอกถงความแออด
ผรบไมแกคาใน bit นของ RM cells และสงไปใหผสง
Transport Layer 3-97
field ขอมล ER (explicit rate) ขนาด 2 byte ใน cell RM switch ทแออดอาจลดคา ER ใน cell ดงนน อตราทผสงจะสงขอมลจะเปนอตราการสงมากทสดท link ในเสนทางจะรองรบได
bit EFCI ใน cell ขอมล ถกตงคาไวท 1 ใน switch ทมขอมลแออด ถา cell ขอมลกอนหนา RM cell ถกตงคา EFCI ผรบจะตงคา bit CI ใน cell RM ท
สงกลบใหผสง
RM cell data cell
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
Transport Layer 3-98
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-99
การควบคมความคบคงของ TCP additive increase (เพมแบบบวก) multiplicative decrease (ลดแบบเทาตว)
วธ ผสงเพมอตราสง (window size) ควานหา bandwidth ทมใหใชได จนกวาการสญหายจะเกดขน additive increase เพม cwnd ทละ 1 MSS ทก ๆ RTT จนกวาจะ pkt จะหาย multiplicative decrease ตดลด cwnd เหลอครงเดยวหลงจากการสญหาย
cwnd
ขนา
ดของ co
nges
tion
wind
ow ของผส
งแบบ
TCP
พฤตกรรมของ AIMD เปน ลกษณะฟนเลอย หา bandwidth
ขนาด window เพมแบบบวก hellip hellip จนกวาจะเกดการสญหาย (จากนน ตดลงเหลอครงนง)
time
Transport Layer 3-100
ผสงจ ากดการสง
ขนาด cwnd จะเปลยนแปลงไปมา ขนกบความคบคงของเครอขายทผสงไดรมา
อตราการสง TCP อยางคราว ๆ สงขอมลจ านวน
cwnd bytes รอ ACKS เพอประมาณคา RTT จากนนสงไบตขอมลเพม
byte สดทายท ถก ACKed สง แตยงไมถก
ACK (ldquoอยระหวางการเดนทางrdquo)
byte สดทายทสงไป
cwnd
LastByteSent-
LastByteAcked lt cwnd
ชวงเลข sequence number ของผสง
rate ~ ~ cwnd
RTT bytessec
การควบคมความคบคงของ TCP รายละเอยด
Transport Layer 3-101
TCP Slow Start
เมอเรมการเชอมตอ เพมอตราการสงแบบยกก าลง (exponentially) จนกวาจะเจอกบ loss ครงแรก เรมตนขนาด cwnd = 1 MSS เพมขนาด cwnd หนงเทาตวทก ๆ RTT นนคอ โดยเพมขนาด cwnd ไป 1 MSS
ส าหรบทก ๆ ACK ทไดรบ
สรป อตราสงเรมแรกจะชาแตคาจะเพมแบบกระโดดขนอยางรวดเรว
Host A
RTT
Host B
time
Transport Layer 3-102
TCP การหา loss และการตอบสนอง
ถา loss ถกระบโดย timeout cwnd ถกตงไวท 1 MSS จากนนหนาตางจะเพมขนเปนเลขยกก าลง (exponential เหมอนใน slow start)
จนไปถงคา threshold จากนนจะเพมขนเปนเชงเสน
ถา loss ถกระบโดยไดรบ ACK ซ า 3 ACKs (3 duplicate acks) TCP RENO
ACKs ซ า ระบถงความสามารถการสง segments ของเครอขาย
cwnd ถกตดเหลอครงนงจากนนเพมขนแบบเชงเสน
TCP Tahoe จะตงคา cwnd เปน 1 เสมอ (ไมวาจะ timeout หรอ 3 dup acks)
Transport Layer 3-103
Q เมอไร TCP ควรจะเปลยนจากการเพมขนแบบ exponential เปนแบบเชงเสน
A เมอ cwnd ถกเพมเปน 12 ของ ldquoคาทมากทสดrdquo ของมนกอนจะเกด timeout
การด าเนนการ ตวแปร ssthresh ขณะเกด Loss ssthresh จะถก
ตงคาท 12 ของคา cwnd กอนเกดเหตแปปเดยว (คา cwnd ทมากทสดกอนเกดเหตการณ)
TCP จาก slow start เปน CA (Congestion Avoidance)
Transport Layer 3-104
สรป TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput ของ TCP
คาเฉลย throughput ของ TCP เปน function ของขนาดของ window และ RTT ไมสนใจ slow start สมมตวาขอมลถกสงตลอด
W ขนาดของ window (หนวยเปน bytes) การสญเสยทเกดขน คาเฉลยขนาดของ window (จ านวน byte ทเดนทางอย) คอ frac34 W คาเฉลยของ throughput คอ 34W ตอ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP ในอนาคต TCP ใน ldquopipes ทยาวและมความจสงrdquo
ตวอยาง 1500 byte segments 100ms RTT ตองการชองทางการสงขนาด 10 Gbps
requires W = 83333 in-flight segments ความเปนไปไดของการสญหายของในชองทางการสงขอมล L [Mathis 1997]
เพอทจะมชองทางการสงขนาด 10Gbps ตองมการสญหายของขอมลเพยงแค =
210-10 ndash นอยมาก ดงนน ตองม TCP รนใหมส าหรบการสงแบบความเรวสง
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
เปาหมายของ fairness ถาม TCP session จ านวน K session ใชทรพยากร bandwidth R รวมกน แตละ session ควรจะเฉลยทรพยากรเหมอนกนท RK
TCP connection 1
router คอขวด มความจ R
ความเสมอภาค (Fairness) ของ TCP
TCP connection 2
Transport Layer 3-108
ความเสมอภาคของ TCP คออะไร session 2 session แขงกนใชทรพยากร additive increase ใหความชนเสนเทากบ 1 (session ทง 2 คอย ๆ ได throughput เพมทละ
นด) multiplicative decrease ลด throughput ไปครงหนง
R
R
เสนระบแบนดวธทใชรวมเทากน
Throuput ของ การเชอมตอท 1
congestion avoidance (CA) additive increase สญเสย ลดขนาดของ window ลงไปครงนง
congestion avoidance (CA) additive increase
สญเสย ลดขนาดของ window ลงไปครงนง
Transport Layer 3-109
ความเสมอภาค (ตอ)
ความเสมอภาค และ UDP มลตมเดยแอพพลเคชนบอยครงไม
ใช TCP ไมตองการใหอตราการสงลดลงเพราะ
การควบคมความคบคง
มลตมเดยแอพพลเคชนจงใช UDP แทน สงเสยงวดโอดวยความเรวคงท ทน
ตอการสญเสยขอมล
ความเสมอภาค การเชอมตอ TCP แบบขนาน แอพพลเคชนสามารถทจะเปดหลายการ
เชอมตอระหวางเครอง 2 เครองแบบขนานได
เวบบราวเซอรท าแบบน ตวอยางเชน link ทมความจ R ซงม 9 การ
เชอมตอ ถาแอพใหมตองการ 1 TCP จะไดรบท rate
R10 ถาแอพใหมตองการ 11 TCPs จะไดรบท R2
Transport Layer 3-110
Chapter 3 บทสรป
หลกการเบองหลงการใหบรการชนtransport multiplexing demultiplexing การสงขอมลแบบไวใจได การควบคมการไหลของขอมล การควบคมความคบคงของขอมล
กรณศกษาและการปฏบตบน internet UDP TCP
ถดไป ออกจากปลายทางของระบบ
เครอขาย (application transport layers)
เขาไปยงสแกนของเครอขาย
Transport Layer 3-5
ชน Transport vs ชน Network
ชน network การสอสาร (เชงตรรกะ) ระหวางเครอง
ชน transport การสอสาร (เชงตรรกะ) ระหวางโพรโซส ใชบรการดวย และ ชวยเสรม
บรการของชน network
เดก 12 คนในบาน Ann สงจดหมาย 12 ฉบบไปหาเดก 12 คนในบานของ Bill
เครอง = บาน โพรเซส = เดก ขอความของโปรแกรม = จดหมายใน
ซอง โพรโตคอลชน transport = Ann
และ Bill ทตองแยกจดหมายใหลก ๆ โพรโตคอลชน network = บรการ
ของไปรษณย
อปมาเหมอนกบบาน
Transport Layer 3-6
โปรโตคอลชนทรานสปอรตของอนเตอรเนต สงขอมลแบบเรยงล าดบและนาไวใจ
หรอนาเชอถอได (TCP) การควบคมความคบคงของขอมลใน
เครอขาย การควบคมการไหลของขอมล ตองมการเชอมตอกอนการสงขอมล
สงขอมลแบบไมเรยงล าดบและไมนาเชอถอ UDP ไมมอะไรเพมเตมจากชน IP ทเปน
ldquobest-effortrdquo
ไมใหบรการเหลาน การรบประกนความลาชา การรบประกนแบนดวดธ
application transport network data link physical
application transport network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
Transport Layer 3-7
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-8
การรวมและแยกขอมล (Multiplexingdemultiplexing)
socket
ใชขอมลสวน header เพอสง segment ทไดมาไปยง socket ทถกตอง
demultiplexing ทผรบ จดการกบขอมลจากหลาย ๆ socket ใส header ของชน transport เขาไป (header จะถกใชเพอท าการ demultiplexing ภายหลง)
multiplexing ทผสง
transport
application
physical
link
network
P2 P1
transport
application
physical
link
network
P4
transport
application
physical
link
network
P3 process
Transport Layer 3-9
ท า demultiplexing อยางไร
source port dest port
32 bits
application data
(payload)
other header fields
TCPUDP segment format
host รบดาตาแกรมจากชน IP แตละดาตาแกรมจะมหมายเลขไอพตนทาง
ไอพปลายทาง แตละดาตาแกรมจะม segment ของชน
transportอย แตละ segment จะมหมายเลข port ตน
ทางและปลายทาง (source and destination port number)
host ใชขอมลหมายเลขไอพและหมายเลขพอรต เพอน าเซกเมนตไปยง socket ทถกตอง
Transport Layer 3-10
demultiplexing กรณทไมมการเชอมตอ (Connectionless)
datagrams ของ IP ทม เลข port ปลายทางตวเดยวกน แมจะมทอย IP และหรอ เลข port ของเครองตนทางตางกน (process ทสง datagram เปนคนละ process แตสงมาท process ผรบตวเดยวกน) จะถกน าไปยง socket เดยวกน ทเครองปลายทาง
จากบททแลว socket ทถกสรางจะมหมายเลข port ก ากบ
DatagramSocket mySocket1 = new DatagramSocket(12534)
เมอ host รบ segment ของ UDP ตรวจสอบหมายเลข port ใน
segment น า segment ของ UDP ไปยง
socket ทผกกบ port นน
เมอจะสรางดาตาแกรมเพอสงไปยง
socket ทเปน UDP ตองท าการระบ หมายเลขไอพปลายทาง หมายเลข port ปลายทาง
Transport Layer 3-11
Connectionless demux example
DatagramSocket serverSocket = new DatagramSocket
(6428)
transport
application
physical
link
network
P3 transport
application
physical
link
network
P1
transport
application
physical
link
network
P4
DatagramSocket mySocket1 = new DatagramSocket (5775)
DatagramSocket mySocket2 = new DatagramSocket
(9157)
source port 9157 dest port 6428
source port 6428 dest port 9157
source port dest port
source port dest port
Transport Layer 3-12
socket แบบ TCP ถกระบดวย 4 สวน ซงมองคประกอบดงน source IP address
(หมายเลขไอพตนทาง)
source port number (หมายเลขพอรตตนทาง )
dest IP address (หมายเลขไอพปลายทาง)
dest port number (หมายเลขพอรตปลายทาง )
demux จะดคาทงสสวนเพอน า packet ไปยง sockets ทเหมาะสม
เครองเซรฟเวอรอาจเปด sockets แบบ TCP จ านวนมากพรอมกน ซง แตละ socket ถกระบดวย 4 สวน
(แตจะมสวนท 3 คอหมายเลข IP ปลายทางเหมอน ๆ กน)
web servers จะม socket หลาย ๆ socket ไวส าหรบเชอมตอกบแตละ client HTTP แบบ non-persistent จะใช
socket ทแตกตางกนส าหรบแตละ request
demux กรณทมการเชอมตอ (Connection-oriented)
Transport Layer 3-13
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
P4
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
network
P6 P5 P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
ทง 3 segment มทอย IP ปลายทาง คอ B และ เลขพอรต ปลายทางคอ 80 แตถกแยกสงไปยง socket ทตางกน
server IP address B
Transport Layer 3-14
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
server IP address B
network
P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
P4
threaded server
Transport Layer 3-15
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
เปน protocol ของ Internet ทไมไดมสวนเพมเตมอะไร
บรการแบบ ldquoจะพยายามใหดทสดrdquo (best effort) ดงนน segment แบบ UDP อาจ สญหาย ไปถง app ของผรบแตไมเรยงล าดบ
ไมมการเชอมตอ ไมมการท า handshake ระหวางผสง
และผรบ แตละ segment ทเปน UDP จะถก
จดการเปนอสระจาก segment อน ๆ
UDP ใชใน app ทสง multimedia อยางตอเนอง
(ซงทนตอการสญเสย แต sensitive กบอตราการสง)
DNS SNMP
ถาจะให การถายโอนขอมลบน UDP มความนาเชอถอกวาน เพมความนาเชอถอทชน application มการกคนขอผดพลาด (ขนอยกบ แตละ
application)
Transport Layer 3-17
UDP สวนหวของ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
ควายาวของ segment ของ UDP (หนวยเปน byte) รวมความยาว
ของ header ดวย
ไมตองสรางการเชอมตอ (ซงเปนสวนทเพมความลาชา)
งาย ไมซบซอน ไมตองมสถานะของการเชอมตอทผสงและผรบ
สวนหว (header) มขนาดเลก ไมมการควบคมความคบคง UDP
สามารถสงขอมลไดรวดเรวตามทตองการ
ท าไมถงตองม UDP
Transport Layer 3-18
checksum ของ UDP
ผสง จดการขอมลทงหมดทจะไปอยใน
segment รวมทงขอมลสวนหวตาง ๆ ทเปนล าดบของจ านวนเตม 16 บตหลายจ านวน
checksum ผลรวมของขอมลตาง ๆ ใน segment
ผสงใส checksum เขาไปใน field checksum ใน header ของ UDP
ผรบ ค านวณหา checksum ของ segment ทได
รบมาใหม ตรวจสอบคา checksum ใน field ของ
header กบ คาทเพงไดจากการค านวณ วาเทากนหรอไม ถาไม แสดงวาพบขอผดพลาด ถาใช แสดงวา ไมพบขอผดพลาด แต
จรง ๆ แลว กอาจจะมขอผดพลาดไดอยด (รายละเอยดจะกลาวภายหลง)
จดมงหมาย ตรวจสอบขอผดพลาด เชน bits ทคาโดนกลบใน segment
Transport Layer 3-19
Internet checksum ตวอยาง
ตวอยาง การบวก 16-bit integers สองจ านวน
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note ขณะทบวกตวเลข เมอ bitท 16 (bit ซายสด) มการทดเลข ใหน าเลขนนไปบวกกบ bit ท 1 แลวจง flip bit ทก bit เพอใหได checksum
Transport Layer 3-20
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-21
Principles of reliable data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
หลกการของความนาเชอถอ data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
หลกการของความนาเชอถอ data transfer
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
ส าคญในชน application transport link ตด top-10 ของหวขอทางดานเครอขาย
Transport Layer 3-24
Reliable data transfer เรมตน
ดานผสง ดานผรบ
rdt_send() ถกเรยกจากชนดานบน (เชน โดย app) ท าหนาทผานขอมลเพอใหขอมลถกสงไป
ยงชนดานบนของผรบ
udt_send() ถกเรยกโดย rdt เพอทจะโอนถาย packet ผานชองการ
สอสารท unreliable ไปยงผรบ
rdt_rcv() ถกเรยกโดย OS เมอ OS ไดรบ packet ทมาถงชองการสอสารดานผรบ
deliver_data() ถกเรยกโดย rdt เพอใหสงขอมลไปยงชนดานบน
Transport Layer 3-25
เราจะ คอย ๆ พฒนา protocol ส าหรบการโอนถายขอมลแบบ reliable หรอ reliable
data transfer protocol (rdt) ตอนน พจารณาเฉพาะการโอนถายขอมลแบบทางเดยวกอน
แตขอมลส าหรบการควบคม (control info) จะถกสงไปกลบทงสองทาง
ใช finite state machines (FSM) เพอก าหนดการกระท าของผสงและผรบ
state 1
state 2
เหตการณทท าใหเกดการเปลยนผานของ State การกระท าขณะเปลยนผาน State
สถานะ (state) เมออยใน state ปจจบน state ถดไปจะขนอยกบเหตการณทจะ
เกดขน ณ state ปจจบน
เหตการณ การกระท า
Reliable data transfer เรมตน
Transport Layer 3-26
rdt10 การโอนถายขอมลแบบ reliable ผานชองสญญาณแบบ reliable
สมมตให ชองทางทอยขางใตเปนชองทางทเชอถอได ไมมการผดพลาดของบต ไมมขอมลสญหาย
FSMs ส าหรบผสง และ ส าหรบผ รบ ผสงสงขอมลไปยงชนดานลาง ผรบรบขอมลจากชนดานลาง
รอรบการเรยกจากชน
ดานบน packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
รอรบการเรยกจากชน
ดานลาง
rdt_rcv(packet)
ผสง ผรบ
Transport Layer 3-27
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร
acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK
negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors
sender retransmits pkt on receipt of NAK
new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 ชองทางการสอสารทม bit errors
ปกตแลว มนษยใชวธการใดในการแกไข ldquoerrorsrdquo ระหวางการสนทนา
Transport Layer 3-28
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร การตอบรบ (acknowledgements (ACKs)) ผรบแจงผสงวาไดรบ packet แลว การตอบปฏเสธ (negative acknowledgements (NAKs)) ผรบแจงผสงวา packet ม
errors sender สงขอมลซ าอกครง เมอไดรบ NAK
กลไกทเพมขน in rdt20 (เพมจาก rdt10) การตรวจจบความผดพลาด การแจงกลบ (feedback) ขอมลส าหรบการควบคม (ACKNAK) จากผรบไปยงผสง
rdt20 ชองทางการสอสารทม bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 ขอก าหนดของ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
จะเกดอะไรขนถา ACKNAK เกดเสยหาย ผสงไมรวาผรบรบ pkt ครบถวน
หรอไม ไมควรสง pkt ซ าอกครง เพราะ
pkt ซ ากน
การจดการกบขอมลทซ าซอน ผสงจะสง packet อกครงถา
ACKNAK เกดเสยหาย เตมหมายเลข sequence ใหแตละ
packet ผรบตองทง packet ทซ ากน
stop and wait ผสงท าการสงpacketและรอใหผรบตอบกลบดวย ACKNAK กอนทจะสง packet ตอไป
Transport Layer 3-33
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Transport Layer 3-35
rdt21 อภปราย
ผสง ใสหมายเลข seq ในpacket หมายเลข seq (01) กพอ
นกสท าไม ตองตรวจสอบวา ACKNAK ท
ไดรบเสยไปหรอไม จ านวนหมายเลข seq ตองเปนสอง
เทาของจ านวนสถานะ เพราะผสงตองเกบสถานะเพอldquoจ าrdquo
วา pkt ถดไปจะตองมเลข seq 0 หรอ 1
ผรบ ตองตรวจสอบวา pkt ทไดรบซ ากบ
pkt ทไดรบกอนหนาหรอไม ผรบจะเกบสถานะทระบวา 0 หรอ 1
คอหมายเลข seq ทคาดวาจะได
ขอสงเกต ผรบไมสามารถรวา ACKNAK สดทายทผสงไดรบถกตองหรอไม
Transport Layer 3-36
rdt22 protocol ทไมตองใช NAK
ท างานเหมอนกบ rdt21 แตใชแค ACKs แทนทจะสง NAK ผรบสง ACK ส าหรบ pkt สดทายทไดรบถกตอง
ฝงรบจะตองรวมหมายเลข seq ของ pkt ทก าลงถก ACK ไปดวย
จะสง ACK ซ าไปทผสงถาไมไดรบ pkt ทมหมายเลข seq ทคาดหวง ผลลพธจะออกมาเหมอนกรณทสง NAK ผสงตองสง pkt ตวลาสดไปใหมอกครง
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 ชองสญญาณทมความผดพลาดและ pkt สญหาย
เพมขอสนนษฐาน ชองสญญาณสามารถสญเสยแพคเกจ (ไมวาจะเปนขอมลหรอ ACKs) ได กลไก checksum หมายเลข seq
ACKs และ การสงซ า สามารถชวย แตมนกยงไมใชทางออก
วธ ผสงรอ ACK กลบมาในชวงเวลาท ldquoสมเหตสมผลrdquo
สง pkt เดมไปใหมอกครงถาไมไดรบ ACK ภายในชวงเวลาน
ถา pkt (หรอ ACK) มาถงลาชา (ไมใชหายไป) การสงใหมกจะเปนการสงซ า ซง seq
ไดจดการเรองเกยวกบขอมลซ าได ผรบตองระบเลข seq ของ pkt ทก าลง
ถก ACKed
ตองใชการนบเวลาถอยหลง (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
ขณะ rdt30 ด าเนนการ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
ขณะ rdt30 ด าเนนการ
Transport Layer 3-42
ประสทธภาพของ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
บตแรกของแพคเกจกถกสง t = 0
ผสง ผรบ
RTT
บตสดทายของแพคเกจถกสง t = L R
บตแรกของแพคเกจมาถง บตสดทายของแพคเกจมาถง สง ACK
ไดรบ ACK สงแพคเกจตอไป t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols แบบ pipelined
pipelining ผสงสงหลาย packet ไปยงผรบทง ๆ ท pkt เหลานนยงไมไดรบการยนยนตอบรบ (not yet acked) ชวงของหมายเลข sequence จะตองเพมขน ตองพกขอมล (buffer) ทผสงและผรบ
protocols แบบ pipelined แบบทวไปมสองแบบ go-Back-N selective repeat
Transport Layer 3-45
Pipelining ชวยเพม utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols แบบ pipeline ภาพรวม
Go-back-N ผสงสามารถสงแพคเกจทไมยงถก
ack ไดไมเกน N แพคเกจใน pipeline
ผรบแคสง cumulative ack ไม ack packet ถามนกอใหเกด gap
ผสงจบเวลาส าหรบแพคเกจทสงไป
นานทสดทยงไมได ack เมอเวลาหมด ผสงจะสงแพคเกจ
ทงหมดทยงไมไดรบ ack อกครง
Selective Repeat ผสงสามารถสงแพคเกจทไมยงถก ack ได
ไมเกน N แพคเกจใน pipeline
ผรบจะตองสง ack กลบใหแตละแพคเกจ
ผสงจะจบเวลาส าหรบแตละแพคเกจท
ไมได ack เมอเวลาส าหรบแพคเกจใดหมด ผสงจะสง
เฉพาะแพคเกจนนเทานน
Transport Layer 3-47
Go-Back-N ผสง
หมายเลข seq (k bit) จะอยใน header ของ packet อนญาตใหขนาด ldquowindowrdquo (ของ pkt ทตดกนและยงไมถก ack) ไมเกน N
ACK(n) จะ ack แพคเกจทงหมดไปจนถงทมหมายเลข seq เทากบ n - ldquoการ ACK แบบรวม (cumulative ACK)rdquo อาจมการไดรบ ACKs หมายเลข seq เดมซ า (ดรายละเอยดดาน receiver)
มการจบเวลาส าหรบแพคเกจทเดนทางอย ซงเดนทางนานทสดและยงไมได ACK (pkt ทมหมายเลข seq นอยทสดใน window)
timeout(n) เวลาหมดท pkt n ผสงจะสง pkt n และ pkt ทงหมดใน window (ซงมหมายเลข seq สงกวา n) อกครง
Transport Layer 3-48
GBN FSM ดานผสงทเพมจากของเดม
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum
out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM ดานผรบทเพมจากของเดม
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
ผ รบ Ack แตละแพคเกจทไดรบมาถกตอง เกบ (buffer) แพคเกจ เทาทจ าเปน เพอทจะสงขอมลทเรยงล าดบแลว ไปยง layer
บนไดในทายทสด
ผสงแคสงแพคเกจซ าเฉพาะแพคเกจทไมไดรบ Ack เทานน ตวจบเวลา (ทางฝงผสง) จะจบเวลาของแตละแพคเกจทไมไดรบ Ack
Window ของผสง มหมายเลข seq อย N หมายเลขตดกน จ ากดหมายเลข seq ของแพตเกจทสงไปแลว และไมไดรบ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
ขอมลมาจาก layer ดานบน ถามหมายเลข seq วางใน window ให
สง pkt ได
timeout(n) สง pkt n ซ า จบเวลาใหม
ACK(n) in [sendbase sendbase+N] รวา ผรบไดรบ pkt n แลว ถา n เกดเปนหมายเลขแรกสดในหนาตาง
(n เทากบ sendbase) ทไมได ถก ack เลอน window ไปทางดานขวา โดยเลอนไปยงหมายเลขทไมไดถก ack
ผสง pkt n in [rcvbase rcvbase+N-1] สง ACK(n) ถาไมเรยงตามล าดบ buffer ถาตามล าดบ สง (รวมถงใหสง pkt ท
เรยงตามล าดบและอยในบฟเฟอร) เลอน window ไปทหมายเลข seq ถดไปของ pkt ทยงไมไดรบจากผสง
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise ทงไปไมตองสนใจ
ผรบ
Transport Layer 3-54
ขณะ Selective repeat ด าเนนการ
สง pkt0
sender receiver
รบ pkt0 สง ack0
รบ pkt1 สง ack1
รบ pkt3 buffer สง ack3 รบ ack0 สง pkt4
รบ ack1 สง pkt5
pkt 2 timeout send pkt2
X loss
รบ pkt4 buffer สง ack4
รบ pkt5 buffer สง ack5
รบ pkt2 deliver pkt2
pkt3 pkt4 pkt5 สง ack2
บนทก ack3 มาถงแลว
sender window (N=4)
บนทก ack4 มาถงแลว บนทก ack4 มาถงแลว
Q เกดอะไรขนเมอ ack2 มาถง
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
สง pkt1 สง pkt2
สง pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
ตวอยาง หมายเลข seq 0 1 2 3 ขนาดของ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
ผรบไมสามารถเหนดานผสงได พฤตกรรมผรบจะเหมอนกนทง 2 สถานการณ
มบางอยางทผด (มาก)
ผรบไมเหนถงความแตกตางของทง 2 เหตการณจ าลองน
ในเหตการณจ าลอง (b) ขอมลเกาทถกสงซ า เมอผรบรบมา จะนกวาเปนขอมลใหม
Q ขนาดของ seq กบขนาดของ
window เกยวของกนยงไงเพอทจะหลกเลยงปญหาในตวอยาง (b)
Transport Layer 3-56
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-57
TCP ภาพรวม RFCs 79311221323 2018 2581
ขอมลแบบสองทศทาง มการสงขอมลทงไปและกลบในการ
เชอมตอ (connection) เดยวกน MSS ขนาด segment ทใหญสดท
TCP จะรบได (Max Segment Size)
connection-oriented handshaking (การแลกเปลยนของ
ขอความควบคม) ตงคาสถานะตงตนใหผสงและผรบ กอนการแลกเปลยนขอความ
flow controlled ผสงจะไมสงขอมลเกนกวาทผรบจะรบ
ได
point-to-point (สถานทนง-ไป-สถานทนง) ผสงหนงคน ผรบหนงคน
สายขอมลเปนไบตทเรยงล าดบและขอมลไมสญหาย (reliable in-order byte steam) ไมม ldquoขอบเขตrdquo ของขอความ
(ขอความจะมาถงผรบตอเนองกน)
pipelined การควบคมความคบคงและการควบคม
อตราการไหลของ TCP จะก าหนดขนาดของ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG ขอมลเรงดวน (โดยทว ๆ ไป ไมถกใช)
ACK ACK valid
PSH ผลกขอมลใหชน app (โดยทว ๆ ไป ไมถกใช)
RST SYN FIN สรางการเชอตอ
(ค าสง setup teardown)
จ านวน bytes ท ผรบเตมใจจะรบ
นบโดยใช byte ของขอมล (ไมใช segment)
Internet checksum
(เหมอนใน UDP)
Transport Layer 3-59
TCP seq numbers ACKs
หมายเลข sequence เลขของ byte stream จะเปน byte
แรกของขอมลของ segment น acknowledgements เลข seq ของ byte ถดไปทอกดานหนง
คาดหวงวาจะได cumulative ACK (ACK แบบรวม)
Q ผรบจดการกบ segment ทมาถงไมเรยงล าดบอยางไร A TCP ไมมรายละเอยดสวนน ndash ขนอย
กบคนทจะมาเขยนโปรแกรม TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาเขามาถงผสง
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาออกจากผสง
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
เหตการณจ าลอง telnet อยางงาย
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q เราควรจะก าหนด time out ไวทเทาใด
มากกวาเวลาของ RTT แตเวลาของ RTT นนแปรปรวน
ก าหนดไวนอยเกนไป timeout กอนก าหนด ท าใหมการ retransmissions โดยไมจ าเปน
ก าหนดไวมากเกนไป ระบบตอบสนองตอการสญหายของ segment ชาเกนไป
Q จะประมาณเวลาของ RTT อยางไร
SampleRTT วดจากระยะเวลาตงแตเรมสง sengment จนกระทงไดรบACK ไมสนใจการ retransmissions
SampleRTT มคาแปรปรวน เราตองการประมาณเวลาของ RTT ให smooth กวา ใชคาเฉลยของคาหลาย ๆ คา ไมใชแค
เวลาของ SampleRTT ปจจบน
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
คาเฉลยของการเคลอนทถวงน าหนกแบบ exponential คา SampleRTT ทในอดตจะมผลตอ EstimatedRTT ลดลงแบบ exponentially โดยทวไปจะก าหนดคา = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
ชวงเวลาของ timeout EstimatedRTT บวกกบระยะเวลาทเผอเอาไว ยงคาของ EstimatedRTT ทแปรปรวนมากเทาไร -gt ระยะเวลาทเผอความมากขนตาม
มประเมนคาการเปลยนแปลงของ SampleRTT จาก EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoชวงเวลาทเผอrdquo
Transport Layer 3-64
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP สรางบรการแบบ reliable อยบนบรการของ IP ทเปนแบบ unreliable segments ถกสงแบบ pipeline cumulative acks ม timer ส าหรบสงใหมคาตวเดยว
TCP สง segment ใหมเมอ เหตการณ timeout ไดรบ acks ซ า ๆ กน
เรามาเรมตนพจารณาทางดานผสงของ TCP อยางงายกอน ยงไมตองสนใจ acks ซ า ยงไมตองสนใจการควบคม flow และ
ความคบคง
Transport Layer 3-66
เหตการณของ TCP sender
เมอไดขอมลจาก app สราง segment ดวยหมายเลข seq เลข seq คอหมายเลขของไบตแรก
ของขอมลในแตละ segment หาก timer ยงไมเคยถกตง จะเรม
ตงเวลา การตงเวลาเพอจบเวลาส าหรบ
segment เกาทสดยงไมไดรบ ack ชวงเวลาทหมดอาย
TimeOutInterval
timeout สงใหมเฉพาะ segment ทเกด
timeout ตงเวลานบใหม เมอไดรบ ack ถา ack เปน ack ของ segment
กอนหนายงไมไดรบ ack Update สงทรวา ถก ACK แลว เรมตงเวลานบ ถายงคงม segment
ทยงไมไดรบ acked
Transport Layer 3-67
ดานผสงของ TCP (อยางงาย)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
การสราง ACK ของ TCP [RFC 1122 RFC 2581]
เหตการณทผรบ เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ) โดยขอมลทงหมดจนถงเลข seq ทคาดหวงไว ถก ACK หมดแลว
เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ ท าให ไมม gap ใน segment ทไดมา) แตมบาง segment ยงไมได ACK
Segment มาถงแบบไมเรยงตามล าดบ โดยมเลข seq สงกวาทตองการ ท าใหม gap (ชองโหว) เกดขน Segment ท ามาถง ทจะเตมบางสวนหรอเตมเตมชองโหว
TCP receiver action อยาเพงสง ACK รออก segment นง โดยรอสก 500ms หากยงไมม segment มา กสง ACK สง ACK แบบรวม (cumulative) ไปทนทในครงเดยว ซงจะเปนการ Ack segment ทมาแบบเรยงตามล าดบทงสอง segments สง ACK ซ า ไปทนท โดยใสเลข seq ของ byte ทตองการ สง ACK แบบรวมทนท โดย segment ทจะ Ack เรมจากดานทนอยกวาของ gap
Transport Layer 3-71
TCP fast retransmit
ระยะเวลาในการ time-out มกจะคอนขางยาว (โดยเปรยบเทยบ) ท าใหใชเวลาคอนขางนานกอนทจะ
สง packet อกครง
แกโดย ตรวจสอบการสญเสย pack โดยดท ACKs ทซ า ๆ กน ผสงมกสง segment ตด ๆ กน ดงนน ถา segment หนงหายไป จง
เปนไปไดทจะม ACKs ซ า ๆ กนจ านวนมาก
ถาผสงไดรบ ACKs ส าหรบขอมลเดยวกน 3 ACKS (ACKs ทซ ากนสามครง) ผสงตองสง seq ทยงไมถก acked (ระบเลข seq ทเลกทสด) มแนวโนมวา segment ทยงไมถก
ack จะหายไปเลย ดงนน จงไมตองรอใหหมดเวลา
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-74
TCP flow control application
process
buffer ดานผรบ ของ TCP socket
TCP code
IP code
application
OS
protocol stack ดานผรบ
application ลบขอมลจาก buffer ของ TCP socket hellip
hellip ชากวา TCP สงขอมล ขนไป (ขณะทผสงก าลงจะสง)
from sender
ผรบสามารถควบคมผสงได ดงนน ผสงจะไมสงขอมลเรวไป หรอ มากเกนไปจนลน (Overflow) buffer ของผรบ
flow control
Transport Layer 3-75
การควบคมการไหลขอมลของ TCP
ขอมลทอย buffer
buffer สวนทยงวาง rwnd
RcvBuffer
สวนของขอมล (payload) ใน segment ของ TCP
ไปยง process ของ application
ผรบระบขนาดของ buffer ทวางไวใน field rwnd ทอยในสวนหวของ TCP ทจะสงไปยงผสง ผเขยนโปรแกรมระบขนาดของ RcvBuffer ได
โดยใช API ตงคา option ของ socket (คาเรมตนทวไปคอ 4096 ไบต)
ทกระบบปฏบตการจะปรบขนาด RcvBuffer อตโนมต
ผสงจ ากดจ านวนของขอมลทยงไมถก acked (ldquoอยในระหวางการเดนทางrdquo) ใหเทากบคา rwnd ของขอมลผรบ
เปนการรบประกนวา buffer ของผรบจะไมลน
การbuffer ในดานของผรบ
Transport Layer 3-76
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-77
การจดการกบการเชอมตอ กอนทจะมการแลกเปลยนขอมลกน ผสงและผรบตองตกลงกนกอน ตกลงรวมในการสรางการเชอมตอ (แตละคนจะรวาอกฝายอยากจะเชอมตอหรอไม) ตกลงคาพารามเตอรส าหรบการเชอมตอ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake จะท างานไดเสมอไปหรอไมบน network
ความลาชาอาจเปลยนไป ขอความอาจถกสงซ าตวอยาง (เชน
req_conn(x)) เนองจากการสญหายของขอมล
ขอมลอาจสลบกน ไมสามารถรไดวาอกฝงไดรบหรอไม
ไดรบขอมลอะไร
2-way handshake
มาคยกนเถอะ
ตกลง ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-79
เหตการณผดพลาดของ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-80
3-way handshake ของ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM ของ 3-way handshake ของ TCP
Transport Layer 3-82
TCP การหยดการเชอมตอ
client server เลกเชอมตอทแตละดานของการเชอมตอ โดยแตละดานจะสง TCP segment ดวย FIN bit = 1
ตอบกลบ FIN ดวย ACK ในขณะทรบ FIN ACK กสามารถรวมอยในแพคเกจทสง FIN มาไดดวย
แตละดานสามารถสง FIN ไดพรอม ๆ กน
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP การหยดการเชอมตอ
Transport Layer 3-84
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-85
ความคบคง ความหมายไมเปนทางการ ldquoเมอจ านวนคนสงมากเกนไป ก าลงสงขอมลมาก
เกนไปดวยอตราการสงเรวเกนกวาท Network จะรบไหวrdquo แตกตางจาก flow control ผลทอาจทเกดขนจากความคบคง
packets หาย (buffer ลนท routers) ลาชามาก (เขาควใน buffers ของ router)
เปนปญหาทคนสนใจตด 10 อนดบตนๆ
หลกการของการควบคมความคบคงของเครอขาย
Transport Layer 3-86
ตนเหตและผลของความคบคง เหตการณ 1
มผสงและผรบอยางละสองคน Router 1 ตว ไมจ ากด buffers ความจของ link R ไมมการสงขอมลซ า
อตราขอมลทสงส าเรจตอหนงการเชอมตอ R2
buffer ท link ขาออกม buffer ไมจกด
Host A
อตราการสงขอมลตนฉบบ lin
Host B
อตราขอมลทสงส าเรจ lout
R2
R2
lou
t
lin R2 de
lay
lin
ดเลยจะมากขนเมออตราสงขอมลตนฉบบเขาใกลความจของ link
Transport Layer 3-87
Router 1 ตว Buffer แตมขนาด buffer จ ากด ตองสง pkt ไปซ าถา pkt นน timeout
ขอมลเขาของชน application = ขอมลออกจากชน application lin = lout
ขอมลเขาของชน transport จะรวมทตองสงซ าดวย lin lin
Buffer ของ link ทใชรวมกนซงมขนาดจ ากด
Host A
lin ขอมลตนฉบบ
Host B
lout lin ขอมลตนฉบบบวกกบ ขอมลทตองสงซ า
lsquo
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-88
ในอดมคต สมมตผสงรความเปนไปในเครอขาย ผสงสงเฉพาะตอนทเราเตอรม buffer เหลออย
Buffer ของ link ทแชรอยางจ ากด
lout copy
ม buffer วาง
R2
R2
lou
t
lin
Host B
A
ตนเหตและผลของความคบคง เหตการณ 2
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-89
lout copy
no buffer space
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
A
Host B
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
เมอสงขอมลท R2 บาง packets ถกสงซ า แต goodput ยงคงมคาลเขาหา R2 (ท าไม)
A
Host B
ตนเหตและผลของความคบคง เหตการณ 2
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Host B
ในความเปนจรง มการสงซ า packets หายหรอตกหลนระหวาง
เสนทางเนองจาก buffers เตม แตบางครง Timer ของผสงหมดเวลาลง
กอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-92
R2
lou
t
ldquoผลrdquo ของความคบคง เพอใหไดขอมลในอตราทตองการ (goodput) ตองท างานมากขน (สงซ า) เมอตองสง packets ซ าโดยทไมจ าเปน link จะตองล าเลยงหลาย copy ของ
ขอมลเดยวกน ท าให goodput ลดลง
R2 lin
ตนเหตและผลของความคบคง เหตการณ 2
ในความเปนจรง มการสงซ า 1 packets หายหรอตกหลนระหวางเสนทางเนองจาก buffers เตม 2 แตบางครง Timer ของผสงหมดเวลาลงกอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Transport Layer 3-93
มผสงขอมลทง 4 โฮสต เสนทางตองผานหลายจด หมดเวลาสงไปขอมลซ า
Q เกดอะไรขนเมอ λin และ λinrsquo เพมขน
Buffer ของเสนทางการสงขอมลทใชรวมกนมขนาดจ ากด
Host A lout
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
Host B
Host C Host D
A เมอ λinrsquo ของขอมลเสนสแดงมขนาดเพมขน ขอมลใน
เสนสน าเงนกจะถก drop ท าให throughput ของ connection สน าเงนเหลอ 0
lin ขอมลตนฉบบ lin ขอมลตนฉบบ บวกกบ
ขอมลทตองสงซ า
Transport Layer 3-94
อกหนง ldquoผลเสยrdquo ของความคบคง เมอแพกเกจถกทงไป นนกเทากบวา ทรยากรเครอขาย (ทใชสงขอมลกอน
หนาทขอมลนจะถกทง) ถกใชไปอยางไรคา
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
แนวทางในการควบคมความคบคงของขอมล
2 แนวทางในการควบคมความคบคง
การควบคมความคบคงโดยใชแคเครองปลายทาง (end-end)
ไมมการแจงกลบ (feedback) จากเครอขาย
ความคบคงของเครอขายจะถกเดาโดยเครองทอยปลายทางทคอยสงเกต loss delay
เปนวธของ TCP
การควบคมความคบคงโดยใหอปกรณเครอขายชวย
routers จะท าการแจง feedback ไปทระบบปลายทาง ใช bit 1 bit เพอระบถงความ
แออด (SNA DECbit TCPIP ECN ATM) หรอ ระบอตราการสงทชดเจน
ส าหรบผสง
Transport Layer 3-96
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
ABR available bit rate ldquoบรการทมความยดหยนrdquo ถาเสนทางของผสง ldquoมขอมลนอยกวา
ความจะมากrdquo ผสงจะใชประโยชนจาก
bandwidth ทเหลออย ถา path ของผสงแออด
ผสงจะคอย ๆ ลดอตราสงใหเหลอเทาอตราการสงขนต าทรบประกนไว
RM (resource management) cells สงโดยผสง แทรก ๆ ไปกบ cell ทเปนขอมล bits ใน RM cell ถกตงคาโดย switches
(ldquoเครอขายคอยชวยrdquo) NI bit ไมเพมอตราการสง (ความแออด
ระดบกลาง) CI bit การบงบอกถงความแออด
ผรบไมแกคาใน bit นของ RM cells และสงไปใหผสง
Transport Layer 3-97
field ขอมล ER (explicit rate) ขนาด 2 byte ใน cell RM switch ทแออดอาจลดคา ER ใน cell ดงนน อตราทผสงจะสงขอมลจะเปนอตราการสงมากทสดท link ในเสนทางจะรองรบได
bit EFCI ใน cell ขอมล ถกตงคาไวท 1 ใน switch ทมขอมลแออด ถา cell ขอมลกอนหนา RM cell ถกตงคา EFCI ผรบจะตงคา bit CI ใน cell RM ท
สงกลบใหผสง
RM cell data cell
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
Transport Layer 3-98
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-99
การควบคมความคบคงของ TCP additive increase (เพมแบบบวก) multiplicative decrease (ลดแบบเทาตว)
วธ ผสงเพมอตราสง (window size) ควานหา bandwidth ทมใหใชได จนกวาการสญหายจะเกดขน additive increase เพม cwnd ทละ 1 MSS ทก ๆ RTT จนกวาจะ pkt จะหาย multiplicative decrease ตดลด cwnd เหลอครงเดยวหลงจากการสญหาย
cwnd
ขนา
ดของ co
nges
tion
wind
ow ของผส
งแบบ
TCP
พฤตกรรมของ AIMD เปน ลกษณะฟนเลอย หา bandwidth
ขนาด window เพมแบบบวก hellip hellip จนกวาจะเกดการสญหาย (จากนน ตดลงเหลอครงนง)
time
Transport Layer 3-100
ผสงจ ากดการสง
ขนาด cwnd จะเปลยนแปลงไปมา ขนกบความคบคงของเครอขายทผสงไดรมา
อตราการสง TCP อยางคราว ๆ สงขอมลจ านวน
cwnd bytes รอ ACKS เพอประมาณคา RTT จากนนสงไบตขอมลเพม
byte สดทายท ถก ACKed สง แตยงไมถก
ACK (ldquoอยระหวางการเดนทางrdquo)
byte สดทายทสงไป
cwnd
LastByteSent-
LastByteAcked lt cwnd
ชวงเลข sequence number ของผสง
rate ~ ~ cwnd
RTT bytessec
การควบคมความคบคงของ TCP รายละเอยด
Transport Layer 3-101
TCP Slow Start
เมอเรมการเชอมตอ เพมอตราการสงแบบยกก าลง (exponentially) จนกวาจะเจอกบ loss ครงแรก เรมตนขนาด cwnd = 1 MSS เพมขนาด cwnd หนงเทาตวทก ๆ RTT นนคอ โดยเพมขนาด cwnd ไป 1 MSS
ส าหรบทก ๆ ACK ทไดรบ
สรป อตราสงเรมแรกจะชาแตคาจะเพมแบบกระโดดขนอยางรวดเรว
Host A
RTT
Host B
time
Transport Layer 3-102
TCP การหา loss และการตอบสนอง
ถา loss ถกระบโดย timeout cwnd ถกตงไวท 1 MSS จากนนหนาตางจะเพมขนเปนเลขยกก าลง (exponential เหมอนใน slow start)
จนไปถงคา threshold จากนนจะเพมขนเปนเชงเสน
ถา loss ถกระบโดยไดรบ ACK ซ า 3 ACKs (3 duplicate acks) TCP RENO
ACKs ซ า ระบถงความสามารถการสง segments ของเครอขาย
cwnd ถกตดเหลอครงนงจากนนเพมขนแบบเชงเสน
TCP Tahoe จะตงคา cwnd เปน 1 เสมอ (ไมวาจะ timeout หรอ 3 dup acks)
Transport Layer 3-103
Q เมอไร TCP ควรจะเปลยนจากการเพมขนแบบ exponential เปนแบบเชงเสน
A เมอ cwnd ถกเพมเปน 12 ของ ldquoคาทมากทสดrdquo ของมนกอนจะเกด timeout
การด าเนนการ ตวแปร ssthresh ขณะเกด Loss ssthresh จะถก
ตงคาท 12 ของคา cwnd กอนเกดเหตแปปเดยว (คา cwnd ทมากทสดกอนเกดเหตการณ)
TCP จาก slow start เปน CA (Congestion Avoidance)
Transport Layer 3-104
สรป TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput ของ TCP
คาเฉลย throughput ของ TCP เปน function ของขนาดของ window และ RTT ไมสนใจ slow start สมมตวาขอมลถกสงตลอด
W ขนาดของ window (หนวยเปน bytes) การสญเสยทเกดขน คาเฉลยขนาดของ window (จ านวน byte ทเดนทางอย) คอ frac34 W คาเฉลยของ throughput คอ 34W ตอ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP ในอนาคต TCP ใน ldquopipes ทยาวและมความจสงrdquo
ตวอยาง 1500 byte segments 100ms RTT ตองการชองทางการสงขนาด 10 Gbps
requires W = 83333 in-flight segments ความเปนไปไดของการสญหายของในชองทางการสงขอมล L [Mathis 1997]
เพอทจะมชองทางการสงขนาด 10Gbps ตองมการสญหายของขอมลเพยงแค =
210-10 ndash นอยมาก ดงนน ตองม TCP รนใหมส าหรบการสงแบบความเรวสง
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
เปาหมายของ fairness ถาม TCP session จ านวน K session ใชทรพยากร bandwidth R รวมกน แตละ session ควรจะเฉลยทรพยากรเหมอนกนท RK
TCP connection 1
router คอขวด มความจ R
ความเสมอภาค (Fairness) ของ TCP
TCP connection 2
Transport Layer 3-108
ความเสมอภาคของ TCP คออะไร session 2 session แขงกนใชทรพยากร additive increase ใหความชนเสนเทากบ 1 (session ทง 2 คอย ๆ ได throughput เพมทละ
นด) multiplicative decrease ลด throughput ไปครงหนง
R
R
เสนระบแบนดวธทใชรวมเทากน
Throuput ของ การเชอมตอท 1
congestion avoidance (CA) additive increase สญเสย ลดขนาดของ window ลงไปครงนง
congestion avoidance (CA) additive increase
สญเสย ลดขนาดของ window ลงไปครงนง
Transport Layer 3-109
ความเสมอภาค (ตอ)
ความเสมอภาค และ UDP มลตมเดยแอพพลเคชนบอยครงไม
ใช TCP ไมตองการใหอตราการสงลดลงเพราะ
การควบคมความคบคง
มลตมเดยแอพพลเคชนจงใช UDP แทน สงเสยงวดโอดวยความเรวคงท ทน
ตอการสญเสยขอมล
ความเสมอภาค การเชอมตอ TCP แบบขนาน แอพพลเคชนสามารถทจะเปดหลายการ
เชอมตอระหวางเครอง 2 เครองแบบขนานได
เวบบราวเซอรท าแบบน ตวอยางเชน link ทมความจ R ซงม 9 การ
เชอมตอ ถาแอพใหมตองการ 1 TCP จะไดรบท rate
R10 ถาแอพใหมตองการ 11 TCPs จะไดรบท R2
Transport Layer 3-110
Chapter 3 บทสรป
หลกการเบองหลงการใหบรการชนtransport multiplexing demultiplexing การสงขอมลแบบไวใจได การควบคมการไหลของขอมล การควบคมความคบคงของขอมล
กรณศกษาและการปฏบตบน internet UDP TCP
ถดไป ออกจากปลายทางของระบบ
เครอขาย (application transport layers)
เขาไปยงสแกนของเครอขาย
Transport Layer 3-6
โปรโตคอลชนทรานสปอรตของอนเตอรเนต สงขอมลแบบเรยงล าดบและนาไวใจ
หรอนาเชอถอได (TCP) การควบคมความคบคงของขอมลใน
เครอขาย การควบคมการไหลของขอมล ตองมการเชอมตอกอนการสงขอมล
สงขอมลแบบไมเรยงล าดบและไมนาเชอถอ UDP ไมมอะไรเพมเตมจากชน IP ทเปน
ldquobest-effortrdquo
ไมใหบรการเหลาน การรบประกนความลาชา การรบประกนแบนดวดธ
application transport network data link physical
application transport network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
Transport Layer 3-7
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-8
การรวมและแยกขอมล (Multiplexingdemultiplexing)
socket
ใชขอมลสวน header เพอสง segment ทไดมาไปยง socket ทถกตอง
demultiplexing ทผรบ จดการกบขอมลจากหลาย ๆ socket ใส header ของชน transport เขาไป (header จะถกใชเพอท าการ demultiplexing ภายหลง)
multiplexing ทผสง
transport
application
physical
link
network
P2 P1
transport
application
physical
link
network
P4
transport
application
physical
link
network
P3 process
Transport Layer 3-9
ท า demultiplexing อยางไร
source port dest port
32 bits
application data
(payload)
other header fields
TCPUDP segment format
host รบดาตาแกรมจากชน IP แตละดาตาแกรมจะมหมายเลขไอพตนทาง
ไอพปลายทาง แตละดาตาแกรมจะม segment ของชน
transportอย แตละ segment จะมหมายเลข port ตน
ทางและปลายทาง (source and destination port number)
host ใชขอมลหมายเลขไอพและหมายเลขพอรต เพอน าเซกเมนตไปยง socket ทถกตอง
Transport Layer 3-10
demultiplexing กรณทไมมการเชอมตอ (Connectionless)
datagrams ของ IP ทม เลข port ปลายทางตวเดยวกน แมจะมทอย IP และหรอ เลข port ของเครองตนทางตางกน (process ทสง datagram เปนคนละ process แตสงมาท process ผรบตวเดยวกน) จะถกน าไปยง socket เดยวกน ทเครองปลายทาง
จากบททแลว socket ทถกสรางจะมหมายเลข port ก ากบ
DatagramSocket mySocket1 = new DatagramSocket(12534)
เมอ host รบ segment ของ UDP ตรวจสอบหมายเลข port ใน
segment น า segment ของ UDP ไปยง
socket ทผกกบ port นน
เมอจะสรางดาตาแกรมเพอสงไปยง
socket ทเปน UDP ตองท าการระบ หมายเลขไอพปลายทาง หมายเลข port ปลายทาง
Transport Layer 3-11
Connectionless demux example
DatagramSocket serverSocket = new DatagramSocket
(6428)
transport
application
physical
link
network
P3 transport
application
physical
link
network
P1
transport
application
physical
link
network
P4
DatagramSocket mySocket1 = new DatagramSocket (5775)
DatagramSocket mySocket2 = new DatagramSocket
(9157)
source port 9157 dest port 6428
source port 6428 dest port 9157
source port dest port
source port dest port
Transport Layer 3-12
socket แบบ TCP ถกระบดวย 4 สวน ซงมองคประกอบดงน source IP address
(หมายเลขไอพตนทาง)
source port number (หมายเลขพอรตตนทาง )
dest IP address (หมายเลขไอพปลายทาง)
dest port number (หมายเลขพอรตปลายทาง )
demux จะดคาทงสสวนเพอน า packet ไปยง sockets ทเหมาะสม
เครองเซรฟเวอรอาจเปด sockets แบบ TCP จ านวนมากพรอมกน ซง แตละ socket ถกระบดวย 4 สวน
(แตจะมสวนท 3 คอหมายเลข IP ปลายทางเหมอน ๆ กน)
web servers จะม socket หลาย ๆ socket ไวส าหรบเชอมตอกบแตละ client HTTP แบบ non-persistent จะใช
socket ทแตกตางกนส าหรบแตละ request
demux กรณทมการเชอมตอ (Connection-oriented)
Transport Layer 3-13
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
P4
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
network
P6 P5 P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
ทง 3 segment มทอย IP ปลายทาง คอ B และ เลขพอรต ปลายทางคอ 80 แตถกแยกสงไปยง socket ทตางกน
server IP address B
Transport Layer 3-14
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
server IP address B
network
P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
P4
threaded server
Transport Layer 3-15
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
เปน protocol ของ Internet ทไมไดมสวนเพมเตมอะไร
บรการแบบ ldquoจะพยายามใหดทสดrdquo (best effort) ดงนน segment แบบ UDP อาจ สญหาย ไปถง app ของผรบแตไมเรยงล าดบ
ไมมการเชอมตอ ไมมการท า handshake ระหวางผสง
และผรบ แตละ segment ทเปน UDP จะถก
จดการเปนอสระจาก segment อน ๆ
UDP ใชใน app ทสง multimedia อยางตอเนอง
(ซงทนตอการสญเสย แต sensitive กบอตราการสง)
DNS SNMP
ถาจะให การถายโอนขอมลบน UDP มความนาเชอถอกวาน เพมความนาเชอถอทชน application มการกคนขอผดพลาด (ขนอยกบ แตละ
application)
Transport Layer 3-17
UDP สวนหวของ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
ควายาวของ segment ของ UDP (หนวยเปน byte) รวมความยาว
ของ header ดวย
ไมตองสรางการเชอมตอ (ซงเปนสวนทเพมความลาชา)
งาย ไมซบซอน ไมตองมสถานะของการเชอมตอทผสงและผรบ
สวนหว (header) มขนาดเลก ไมมการควบคมความคบคง UDP
สามารถสงขอมลไดรวดเรวตามทตองการ
ท าไมถงตองม UDP
Transport Layer 3-18
checksum ของ UDP
ผสง จดการขอมลทงหมดทจะไปอยใน
segment รวมทงขอมลสวนหวตาง ๆ ทเปนล าดบของจ านวนเตม 16 บตหลายจ านวน
checksum ผลรวมของขอมลตาง ๆ ใน segment
ผสงใส checksum เขาไปใน field checksum ใน header ของ UDP
ผรบ ค านวณหา checksum ของ segment ทได
รบมาใหม ตรวจสอบคา checksum ใน field ของ
header กบ คาทเพงไดจากการค านวณ วาเทากนหรอไม ถาไม แสดงวาพบขอผดพลาด ถาใช แสดงวา ไมพบขอผดพลาด แต
จรง ๆ แลว กอาจจะมขอผดพลาดไดอยด (รายละเอยดจะกลาวภายหลง)
จดมงหมาย ตรวจสอบขอผดพลาด เชน bits ทคาโดนกลบใน segment
Transport Layer 3-19
Internet checksum ตวอยาง
ตวอยาง การบวก 16-bit integers สองจ านวน
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note ขณะทบวกตวเลข เมอ bitท 16 (bit ซายสด) มการทดเลข ใหน าเลขนนไปบวกกบ bit ท 1 แลวจง flip bit ทก bit เพอใหได checksum
Transport Layer 3-20
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-21
Principles of reliable data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
หลกการของความนาเชอถอ data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
หลกการของความนาเชอถอ data transfer
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
ส าคญในชน application transport link ตด top-10 ของหวขอทางดานเครอขาย
Transport Layer 3-24
Reliable data transfer เรมตน
ดานผสง ดานผรบ
rdt_send() ถกเรยกจากชนดานบน (เชน โดย app) ท าหนาทผานขอมลเพอใหขอมลถกสงไป
ยงชนดานบนของผรบ
udt_send() ถกเรยกโดย rdt เพอทจะโอนถาย packet ผานชองการ
สอสารท unreliable ไปยงผรบ
rdt_rcv() ถกเรยกโดย OS เมอ OS ไดรบ packet ทมาถงชองการสอสารดานผรบ
deliver_data() ถกเรยกโดย rdt เพอใหสงขอมลไปยงชนดานบน
Transport Layer 3-25
เราจะ คอย ๆ พฒนา protocol ส าหรบการโอนถายขอมลแบบ reliable หรอ reliable
data transfer protocol (rdt) ตอนน พจารณาเฉพาะการโอนถายขอมลแบบทางเดยวกอน
แตขอมลส าหรบการควบคม (control info) จะถกสงไปกลบทงสองทาง
ใช finite state machines (FSM) เพอก าหนดการกระท าของผสงและผรบ
state 1
state 2
เหตการณทท าใหเกดการเปลยนผานของ State การกระท าขณะเปลยนผาน State
สถานะ (state) เมออยใน state ปจจบน state ถดไปจะขนอยกบเหตการณทจะ
เกดขน ณ state ปจจบน
เหตการณ การกระท า
Reliable data transfer เรมตน
Transport Layer 3-26
rdt10 การโอนถายขอมลแบบ reliable ผานชองสญญาณแบบ reliable
สมมตให ชองทางทอยขางใตเปนชองทางทเชอถอได ไมมการผดพลาดของบต ไมมขอมลสญหาย
FSMs ส าหรบผสง และ ส าหรบผ รบ ผสงสงขอมลไปยงชนดานลาง ผรบรบขอมลจากชนดานลาง
รอรบการเรยกจากชน
ดานบน packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
รอรบการเรยกจากชน
ดานลาง
rdt_rcv(packet)
ผสง ผรบ
Transport Layer 3-27
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร
acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK
negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors
sender retransmits pkt on receipt of NAK
new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 ชองทางการสอสารทม bit errors
ปกตแลว มนษยใชวธการใดในการแกไข ldquoerrorsrdquo ระหวางการสนทนา
Transport Layer 3-28
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร การตอบรบ (acknowledgements (ACKs)) ผรบแจงผสงวาไดรบ packet แลว การตอบปฏเสธ (negative acknowledgements (NAKs)) ผรบแจงผสงวา packet ม
errors sender สงขอมลซ าอกครง เมอไดรบ NAK
กลไกทเพมขน in rdt20 (เพมจาก rdt10) การตรวจจบความผดพลาด การแจงกลบ (feedback) ขอมลส าหรบการควบคม (ACKNAK) จากผรบไปยงผสง
rdt20 ชองทางการสอสารทม bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 ขอก าหนดของ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
จะเกดอะไรขนถา ACKNAK เกดเสยหาย ผสงไมรวาผรบรบ pkt ครบถวน
หรอไม ไมควรสง pkt ซ าอกครง เพราะ
pkt ซ ากน
การจดการกบขอมลทซ าซอน ผสงจะสง packet อกครงถา
ACKNAK เกดเสยหาย เตมหมายเลข sequence ใหแตละ
packet ผรบตองทง packet ทซ ากน
stop and wait ผสงท าการสงpacketและรอใหผรบตอบกลบดวย ACKNAK กอนทจะสง packet ตอไป
Transport Layer 3-33
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Transport Layer 3-35
rdt21 อภปราย
ผสง ใสหมายเลข seq ในpacket หมายเลข seq (01) กพอ
นกสท าไม ตองตรวจสอบวา ACKNAK ท
ไดรบเสยไปหรอไม จ านวนหมายเลข seq ตองเปนสอง
เทาของจ านวนสถานะ เพราะผสงตองเกบสถานะเพอldquoจ าrdquo
วา pkt ถดไปจะตองมเลข seq 0 หรอ 1
ผรบ ตองตรวจสอบวา pkt ทไดรบซ ากบ
pkt ทไดรบกอนหนาหรอไม ผรบจะเกบสถานะทระบวา 0 หรอ 1
คอหมายเลข seq ทคาดวาจะได
ขอสงเกต ผรบไมสามารถรวา ACKNAK สดทายทผสงไดรบถกตองหรอไม
Transport Layer 3-36
rdt22 protocol ทไมตองใช NAK
ท างานเหมอนกบ rdt21 แตใชแค ACKs แทนทจะสง NAK ผรบสง ACK ส าหรบ pkt สดทายทไดรบถกตอง
ฝงรบจะตองรวมหมายเลข seq ของ pkt ทก าลงถก ACK ไปดวย
จะสง ACK ซ าไปทผสงถาไมไดรบ pkt ทมหมายเลข seq ทคาดหวง ผลลพธจะออกมาเหมอนกรณทสง NAK ผสงตองสง pkt ตวลาสดไปใหมอกครง
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 ชองสญญาณทมความผดพลาดและ pkt สญหาย
เพมขอสนนษฐาน ชองสญญาณสามารถสญเสยแพคเกจ (ไมวาจะเปนขอมลหรอ ACKs) ได กลไก checksum หมายเลข seq
ACKs และ การสงซ า สามารถชวย แตมนกยงไมใชทางออก
วธ ผสงรอ ACK กลบมาในชวงเวลาท ldquoสมเหตสมผลrdquo
สง pkt เดมไปใหมอกครงถาไมไดรบ ACK ภายในชวงเวลาน
ถา pkt (หรอ ACK) มาถงลาชา (ไมใชหายไป) การสงใหมกจะเปนการสงซ า ซง seq
ไดจดการเรองเกยวกบขอมลซ าได ผรบตองระบเลข seq ของ pkt ทก าลง
ถก ACKed
ตองใชการนบเวลาถอยหลง (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
ขณะ rdt30 ด าเนนการ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
ขณะ rdt30 ด าเนนการ
Transport Layer 3-42
ประสทธภาพของ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
บตแรกของแพคเกจกถกสง t = 0
ผสง ผรบ
RTT
บตสดทายของแพคเกจถกสง t = L R
บตแรกของแพคเกจมาถง บตสดทายของแพคเกจมาถง สง ACK
ไดรบ ACK สงแพคเกจตอไป t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols แบบ pipelined
pipelining ผสงสงหลาย packet ไปยงผรบทง ๆ ท pkt เหลานนยงไมไดรบการยนยนตอบรบ (not yet acked) ชวงของหมายเลข sequence จะตองเพมขน ตองพกขอมล (buffer) ทผสงและผรบ
protocols แบบ pipelined แบบทวไปมสองแบบ go-Back-N selective repeat
Transport Layer 3-45
Pipelining ชวยเพม utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols แบบ pipeline ภาพรวม
Go-back-N ผสงสามารถสงแพคเกจทไมยงถก
ack ไดไมเกน N แพคเกจใน pipeline
ผรบแคสง cumulative ack ไม ack packet ถามนกอใหเกด gap
ผสงจบเวลาส าหรบแพคเกจทสงไป
นานทสดทยงไมได ack เมอเวลาหมด ผสงจะสงแพคเกจ
ทงหมดทยงไมไดรบ ack อกครง
Selective Repeat ผสงสามารถสงแพคเกจทไมยงถก ack ได
ไมเกน N แพคเกจใน pipeline
ผรบจะตองสง ack กลบใหแตละแพคเกจ
ผสงจะจบเวลาส าหรบแตละแพคเกจท
ไมได ack เมอเวลาส าหรบแพคเกจใดหมด ผสงจะสง
เฉพาะแพคเกจนนเทานน
Transport Layer 3-47
Go-Back-N ผสง
หมายเลข seq (k bit) จะอยใน header ของ packet อนญาตใหขนาด ldquowindowrdquo (ของ pkt ทตดกนและยงไมถก ack) ไมเกน N
ACK(n) จะ ack แพคเกจทงหมดไปจนถงทมหมายเลข seq เทากบ n - ldquoการ ACK แบบรวม (cumulative ACK)rdquo อาจมการไดรบ ACKs หมายเลข seq เดมซ า (ดรายละเอยดดาน receiver)
มการจบเวลาส าหรบแพคเกจทเดนทางอย ซงเดนทางนานทสดและยงไมได ACK (pkt ทมหมายเลข seq นอยทสดใน window)
timeout(n) เวลาหมดท pkt n ผสงจะสง pkt n และ pkt ทงหมดใน window (ซงมหมายเลข seq สงกวา n) อกครง
Transport Layer 3-48
GBN FSM ดานผสงทเพมจากของเดม
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum
out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM ดานผรบทเพมจากของเดม
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
ผ รบ Ack แตละแพคเกจทไดรบมาถกตอง เกบ (buffer) แพคเกจ เทาทจ าเปน เพอทจะสงขอมลทเรยงล าดบแลว ไปยง layer
บนไดในทายทสด
ผสงแคสงแพคเกจซ าเฉพาะแพคเกจทไมไดรบ Ack เทานน ตวจบเวลา (ทางฝงผสง) จะจบเวลาของแตละแพคเกจทไมไดรบ Ack
Window ของผสง มหมายเลข seq อย N หมายเลขตดกน จ ากดหมายเลข seq ของแพตเกจทสงไปแลว และไมไดรบ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
ขอมลมาจาก layer ดานบน ถามหมายเลข seq วางใน window ให
สง pkt ได
timeout(n) สง pkt n ซ า จบเวลาใหม
ACK(n) in [sendbase sendbase+N] รวา ผรบไดรบ pkt n แลว ถา n เกดเปนหมายเลขแรกสดในหนาตาง
(n เทากบ sendbase) ทไมได ถก ack เลอน window ไปทางดานขวา โดยเลอนไปยงหมายเลขทไมไดถก ack
ผสง pkt n in [rcvbase rcvbase+N-1] สง ACK(n) ถาไมเรยงตามล าดบ buffer ถาตามล าดบ สง (รวมถงใหสง pkt ท
เรยงตามล าดบและอยในบฟเฟอร) เลอน window ไปทหมายเลข seq ถดไปของ pkt ทยงไมไดรบจากผสง
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise ทงไปไมตองสนใจ
ผรบ
Transport Layer 3-54
ขณะ Selective repeat ด าเนนการ
สง pkt0
sender receiver
รบ pkt0 สง ack0
รบ pkt1 สง ack1
รบ pkt3 buffer สง ack3 รบ ack0 สง pkt4
รบ ack1 สง pkt5
pkt 2 timeout send pkt2
X loss
รบ pkt4 buffer สง ack4
รบ pkt5 buffer สง ack5
รบ pkt2 deliver pkt2
pkt3 pkt4 pkt5 สง ack2
บนทก ack3 มาถงแลว
sender window (N=4)
บนทก ack4 มาถงแลว บนทก ack4 มาถงแลว
Q เกดอะไรขนเมอ ack2 มาถง
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
สง pkt1 สง pkt2
สง pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
ตวอยาง หมายเลข seq 0 1 2 3 ขนาดของ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
ผรบไมสามารถเหนดานผสงได พฤตกรรมผรบจะเหมอนกนทง 2 สถานการณ
มบางอยางทผด (มาก)
ผรบไมเหนถงความแตกตางของทง 2 เหตการณจ าลองน
ในเหตการณจ าลอง (b) ขอมลเกาทถกสงซ า เมอผรบรบมา จะนกวาเปนขอมลใหม
Q ขนาดของ seq กบขนาดของ
window เกยวของกนยงไงเพอทจะหลกเลยงปญหาในตวอยาง (b)
Transport Layer 3-56
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-57
TCP ภาพรวม RFCs 79311221323 2018 2581
ขอมลแบบสองทศทาง มการสงขอมลทงไปและกลบในการ
เชอมตอ (connection) เดยวกน MSS ขนาด segment ทใหญสดท
TCP จะรบได (Max Segment Size)
connection-oriented handshaking (การแลกเปลยนของ
ขอความควบคม) ตงคาสถานะตงตนใหผสงและผรบ กอนการแลกเปลยนขอความ
flow controlled ผสงจะไมสงขอมลเกนกวาทผรบจะรบ
ได
point-to-point (สถานทนง-ไป-สถานทนง) ผสงหนงคน ผรบหนงคน
สายขอมลเปนไบตทเรยงล าดบและขอมลไมสญหาย (reliable in-order byte steam) ไมม ldquoขอบเขตrdquo ของขอความ
(ขอความจะมาถงผรบตอเนองกน)
pipelined การควบคมความคบคงและการควบคม
อตราการไหลของ TCP จะก าหนดขนาดของ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG ขอมลเรงดวน (โดยทว ๆ ไป ไมถกใช)
ACK ACK valid
PSH ผลกขอมลใหชน app (โดยทว ๆ ไป ไมถกใช)
RST SYN FIN สรางการเชอตอ
(ค าสง setup teardown)
จ านวน bytes ท ผรบเตมใจจะรบ
นบโดยใช byte ของขอมล (ไมใช segment)
Internet checksum
(เหมอนใน UDP)
Transport Layer 3-59
TCP seq numbers ACKs
หมายเลข sequence เลขของ byte stream จะเปน byte
แรกของขอมลของ segment น acknowledgements เลข seq ของ byte ถดไปทอกดานหนง
คาดหวงวาจะได cumulative ACK (ACK แบบรวม)
Q ผรบจดการกบ segment ทมาถงไมเรยงล าดบอยางไร A TCP ไมมรายละเอยดสวนน ndash ขนอย
กบคนทจะมาเขยนโปรแกรม TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาเขามาถงผสง
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาออกจากผสง
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
เหตการณจ าลอง telnet อยางงาย
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q เราควรจะก าหนด time out ไวทเทาใด
มากกวาเวลาของ RTT แตเวลาของ RTT นนแปรปรวน
ก าหนดไวนอยเกนไป timeout กอนก าหนด ท าใหมการ retransmissions โดยไมจ าเปน
ก าหนดไวมากเกนไป ระบบตอบสนองตอการสญหายของ segment ชาเกนไป
Q จะประมาณเวลาของ RTT อยางไร
SampleRTT วดจากระยะเวลาตงแตเรมสง sengment จนกระทงไดรบACK ไมสนใจการ retransmissions
SampleRTT มคาแปรปรวน เราตองการประมาณเวลาของ RTT ให smooth กวา ใชคาเฉลยของคาหลาย ๆ คา ไมใชแค
เวลาของ SampleRTT ปจจบน
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
คาเฉลยของการเคลอนทถวงน าหนกแบบ exponential คา SampleRTT ทในอดตจะมผลตอ EstimatedRTT ลดลงแบบ exponentially โดยทวไปจะก าหนดคา = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
ชวงเวลาของ timeout EstimatedRTT บวกกบระยะเวลาทเผอเอาไว ยงคาของ EstimatedRTT ทแปรปรวนมากเทาไร -gt ระยะเวลาทเผอความมากขนตาม
มประเมนคาการเปลยนแปลงของ SampleRTT จาก EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoชวงเวลาทเผอrdquo
Transport Layer 3-64
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP สรางบรการแบบ reliable อยบนบรการของ IP ทเปนแบบ unreliable segments ถกสงแบบ pipeline cumulative acks ม timer ส าหรบสงใหมคาตวเดยว
TCP สง segment ใหมเมอ เหตการณ timeout ไดรบ acks ซ า ๆ กน
เรามาเรมตนพจารณาทางดานผสงของ TCP อยางงายกอน ยงไมตองสนใจ acks ซ า ยงไมตองสนใจการควบคม flow และ
ความคบคง
Transport Layer 3-66
เหตการณของ TCP sender
เมอไดขอมลจาก app สราง segment ดวยหมายเลข seq เลข seq คอหมายเลขของไบตแรก
ของขอมลในแตละ segment หาก timer ยงไมเคยถกตง จะเรม
ตงเวลา การตงเวลาเพอจบเวลาส าหรบ
segment เกาทสดยงไมไดรบ ack ชวงเวลาทหมดอาย
TimeOutInterval
timeout สงใหมเฉพาะ segment ทเกด
timeout ตงเวลานบใหม เมอไดรบ ack ถา ack เปน ack ของ segment
กอนหนายงไมไดรบ ack Update สงทรวา ถก ACK แลว เรมตงเวลานบ ถายงคงม segment
ทยงไมไดรบ acked
Transport Layer 3-67
ดานผสงของ TCP (อยางงาย)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
การสราง ACK ของ TCP [RFC 1122 RFC 2581]
เหตการณทผรบ เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ) โดยขอมลทงหมดจนถงเลข seq ทคาดหวงไว ถก ACK หมดแลว
เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ ท าให ไมม gap ใน segment ทไดมา) แตมบาง segment ยงไมได ACK
Segment มาถงแบบไมเรยงตามล าดบ โดยมเลข seq สงกวาทตองการ ท าใหม gap (ชองโหว) เกดขน Segment ท ามาถง ทจะเตมบางสวนหรอเตมเตมชองโหว
TCP receiver action อยาเพงสง ACK รออก segment นง โดยรอสก 500ms หากยงไมม segment มา กสง ACK สง ACK แบบรวม (cumulative) ไปทนทในครงเดยว ซงจะเปนการ Ack segment ทมาแบบเรยงตามล าดบทงสอง segments สง ACK ซ า ไปทนท โดยใสเลข seq ของ byte ทตองการ สง ACK แบบรวมทนท โดย segment ทจะ Ack เรมจากดานทนอยกวาของ gap
Transport Layer 3-71
TCP fast retransmit
ระยะเวลาในการ time-out มกจะคอนขางยาว (โดยเปรยบเทยบ) ท าใหใชเวลาคอนขางนานกอนทจะ
สง packet อกครง
แกโดย ตรวจสอบการสญเสย pack โดยดท ACKs ทซ า ๆ กน ผสงมกสง segment ตด ๆ กน ดงนน ถา segment หนงหายไป จง
เปนไปไดทจะม ACKs ซ า ๆ กนจ านวนมาก
ถาผสงไดรบ ACKs ส าหรบขอมลเดยวกน 3 ACKS (ACKs ทซ ากนสามครง) ผสงตองสง seq ทยงไมถก acked (ระบเลข seq ทเลกทสด) มแนวโนมวา segment ทยงไมถก
ack จะหายไปเลย ดงนน จงไมตองรอใหหมดเวลา
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-74
TCP flow control application
process
buffer ดานผรบ ของ TCP socket
TCP code
IP code
application
OS
protocol stack ดานผรบ
application ลบขอมลจาก buffer ของ TCP socket hellip
hellip ชากวา TCP สงขอมล ขนไป (ขณะทผสงก าลงจะสง)
from sender
ผรบสามารถควบคมผสงได ดงนน ผสงจะไมสงขอมลเรวไป หรอ มากเกนไปจนลน (Overflow) buffer ของผรบ
flow control
Transport Layer 3-75
การควบคมการไหลขอมลของ TCP
ขอมลทอย buffer
buffer สวนทยงวาง rwnd
RcvBuffer
สวนของขอมล (payload) ใน segment ของ TCP
ไปยง process ของ application
ผรบระบขนาดของ buffer ทวางไวใน field rwnd ทอยในสวนหวของ TCP ทจะสงไปยงผสง ผเขยนโปรแกรมระบขนาดของ RcvBuffer ได
โดยใช API ตงคา option ของ socket (คาเรมตนทวไปคอ 4096 ไบต)
ทกระบบปฏบตการจะปรบขนาด RcvBuffer อตโนมต
ผสงจ ากดจ านวนของขอมลทยงไมถก acked (ldquoอยในระหวางการเดนทางrdquo) ใหเทากบคา rwnd ของขอมลผรบ
เปนการรบประกนวา buffer ของผรบจะไมลน
การbuffer ในดานของผรบ
Transport Layer 3-76
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-77
การจดการกบการเชอมตอ กอนทจะมการแลกเปลยนขอมลกน ผสงและผรบตองตกลงกนกอน ตกลงรวมในการสรางการเชอมตอ (แตละคนจะรวาอกฝายอยากจะเชอมตอหรอไม) ตกลงคาพารามเตอรส าหรบการเชอมตอ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake จะท างานไดเสมอไปหรอไมบน network
ความลาชาอาจเปลยนไป ขอความอาจถกสงซ าตวอยาง (เชน
req_conn(x)) เนองจากการสญหายของขอมล
ขอมลอาจสลบกน ไมสามารถรไดวาอกฝงไดรบหรอไม
ไดรบขอมลอะไร
2-way handshake
มาคยกนเถอะ
ตกลง ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-79
เหตการณผดพลาดของ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-80
3-way handshake ของ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM ของ 3-way handshake ของ TCP
Transport Layer 3-82
TCP การหยดการเชอมตอ
client server เลกเชอมตอทแตละดานของการเชอมตอ โดยแตละดานจะสง TCP segment ดวย FIN bit = 1
ตอบกลบ FIN ดวย ACK ในขณะทรบ FIN ACK กสามารถรวมอยในแพคเกจทสง FIN มาไดดวย
แตละดานสามารถสง FIN ไดพรอม ๆ กน
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP การหยดการเชอมตอ
Transport Layer 3-84
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-85
ความคบคง ความหมายไมเปนทางการ ldquoเมอจ านวนคนสงมากเกนไป ก าลงสงขอมลมาก
เกนไปดวยอตราการสงเรวเกนกวาท Network จะรบไหวrdquo แตกตางจาก flow control ผลทอาจทเกดขนจากความคบคง
packets หาย (buffer ลนท routers) ลาชามาก (เขาควใน buffers ของ router)
เปนปญหาทคนสนใจตด 10 อนดบตนๆ
หลกการของการควบคมความคบคงของเครอขาย
Transport Layer 3-86
ตนเหตและผลของความคบคง เหตการณ 1
มผสงและผรบอยางละสองคน Router 1 ตว ไมจ ากด buffers ความจของ link R ไมมการสงขอมลซ า
อตราขอมลทสงส าเรจตอหนงการเชอมตอ R2
buffer ท link ขาออกม buffer ไมจกด
Host A
อตราการสงขอมลตนฉบบ lin
Host B
อตราขอมลทสงส าเรจ lout
R2
R2
lou
t
lin R2 de
lay
lin
ดเลยจะมากขนเมออตราสงขอมลตนฉบบเขาใกลความจของ link
Transport Layer 3-87
Router 1 ตว Buffer แตมขนาด buffer จ ากด ตองสง pkt ไปซ าถา pkt นน timeout
ขอมลเขาของชน application = ขอมลออกจากชน application lin = lout
ขอมลเขาของชน transport จะรวมทตองสงซ าดวย lin lin
Buffer ของ link ทใชรวมกนซงมขนาดจ ากด
Host A
lin ขอมลตนฉบบ
Host B
lout lin ขอมลตนฉบบบวกกบ ขอมลทตองสงซ า
lsquo
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-88
ในอดมคต สมมตผสงรความเปนไปในเครอขาย ผสงสงเฉพาะตอนทเราเตอรม buffer เหลออย
Buffer ของ link ทแชรอยางจ ากด
lout copy
ม buffer วาง
R2
R2
lou
t
lin
Host B
A
ตนเหตและผลของความคบคง เหตการณ 2
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-89
lout copy
no buffer space
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
A
Host B
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
เมอสงขอมลท R2 บาง packets ถกสงซ า แต goodput ยงคงมคาลเขาหา R2 (ท าไม)
A
Host B
ตนเหตและผลของความคบคง เหตการณ 2
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Host B
ในความเปนจรง มการสงซ า packets หายหรอตกหลนระหวาง
เสนทางเนองจาก buffers เตม แตบางครง Timer ของผสงหมดเวลาลง
กอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-92
R2
lou
t
ldquoผลrdquo ของความคบคง เพอใหไดขอมลในอตราทตองการ (goodput) ตองท างานมากขน (สงซ า) เมอตองสง packets ซ าโดยทไมจ าเปน link จะตองล าเลยงหลาย copy ของ
ขอมลเดยวกน ท าให goodput ลดลง
R2 lin
ตนเหตและผลของความคบคง เหตการณ 2
ในความเปนจรง มการสงซ า 1 packets หายหรอตกหลนระหวางเสนทางเนองจาก buffers เตม 2 แตบางครง Timer ของผสงหมดเวลาลงกอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Transport Layer 3-93
มผสงขอมลทง 4 โฮสต เสนทางตองผานหลายจด หมดเวลาสงไปขอมลซ า
Q เกดอะไรขนเมอ λin และ λinrsquo เพมขน
Buffer ของเสนทางการสงขอมลทใชรวมกนมขนาดจ ากด
Host A lout
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
Host B
Host C Host D
A เมอ λinrsquo ของขอมลเสนสแดงมขนาดเพมขน ขอมลใน
เสนสน าเงนกจะถก drop ท าให throughput ของ connection สน าเงนเหลอ 0
lin ขอมลตนฉบบ lin ขอมลตนฉบบ บวกกบ
ขอมลทตองสงซ า
Transport Layer 3-94
อกหนง ldquoผลเสยrdquo ของความคบคง เมอแพกเกจถกทงไป นนกเทากบวา ทรยากรเครอขาย (ทใชสงขอมลกอน
หนาทขอมลนจะถกทง) ถกใชไปอยางไรคา
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
แนวทางในการควบคมความคบคงของขอมล
2 แนวทางในการควบคมความคบคง
การควบคมความคบคงโดยใชแคเครองปลายทาง (end-end)
ไมมการแจงกลบ (feedback) จากเครอขาย
ความคบคงของเครอขายจะถกเดาโดยเครองทอยปลายทางทคอยสงเกต loss delay
เปนวธของ TCP
การควบคมความคบคงโดยใหอปกรณเครอขายชวย
routers จะท าการแจง feedback ไปทระบบปลายทาง ใช bit 1 bit เพอระบถงความ
แออด (SNA DECbit TCPIP ECN ATM) หรอ ระบอตราการสงทชดเจน
ส าหรบผสง
Transport Layer 3-96
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
ABR available bit rate ldquoบรการทมความยดหยนrdquo ถาเสนทางของผสง ldquoมขอมลนอยกวา
ความจะมากrdquo ผสงจะใชประโยชนจาก
bandwidth ทเหลออย ถา path ของผสงแออด
ผสงจะคอย ๆ ลดอตราสงใหเหลอเทาอตราการสงขนต าทรบประกนไว
RM (resource management) cells สงโดยผสง แทรก ๆ ไปกบ cell ทเปนขอมล bits ใน RM cell ถกตงคาโดย switches
(ldquoเครอขายคอยชวยrdquo) NI bit ไมเพมอตราการสง (ความแออด
ระดบกลาง) CI bit การบงบอกถงความแออด
ผรบไมแกคาใน bit นของ RM cells และสงไปใหผสง
Transport Layer 3-97
field ขอมล ER (explicit rate) ขนาด 2 byte ใน cell RM switch ทแออดอาจลดคา ER ใน cell ดงนน อตราทผสงจะสงขอมลจะเปนอตราการสงมากทสดท link ในเสนทางจะรองรบได
bit EFCI ใน cell ขอมล ถกตงคาไวท 1 ใน switch ทมขอมลแออด ถา cell ขอมลกอนหนา RM cell ถกตงคา EFCI ผรบจะตงคา bit CI ใน cell RM ท
สงกลบใหผสง
RM cell data cell
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
Transport Layer 3-98
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-99
การควบคมความคบคงของ TCP additive increase (เพมแบบบวก) multiplicative decrease (ลดแบบเทาตว)
วธ ผสงเพมอตราสง (window size) ควานหา bandwidth ทมใหใชได จนกวาการสญหายจะเกดขน additive increase เพม cwnd ทละ 1 MSS ทก ๆ RTT จนกวาจะ pkt จะหาย multiplicative decrease ตดลด cwnd เหลอครงเดยวหลงจากการสญหาย
cwnd
ขนา
ดของ co
nges
tion
wind
ow ของผส
งแบบ
TCP
พฤตกรรมของ AIMD เปน ลกษณะฟนเลอย หา bandwidth
ขนาด window เพมแบบบวก hellip hellip จนกวาจะเกดการสญหาย (จากนน ตดลงเหลอครงนง)
time
Transport Layer 3-100
ผสงจ ากดการสง
ขนาด cwnd จะเปลยนแปลงไปมา ขนกบความคบคงของเครอขายทผสงไดรมา
อตราการสง TCP อยางคราว ๆ สงขอมลจ านวน
cwnd bytes รอ ACKS เพอประมาณคา RTT จากนนสงไบตขอมลเพม
byte สดทายท ถก ACKed สง แตยงไมถก
ACK (ldquoอยระหวางการเดนทางrdquo)
byte สดทายทสงไป
cwnd
LastByteSent-
LastByteAcked lt cwnd
ชวงเลข sequence number ของผสง
rate ~ ~ cwnd
RTT bytessec
การควบคมความคบคงของ TCP รายละเอยด
Transport Layer 3-101
TCP Slow Start
เมอเรมการเชอมตอ เพมอตราการสงแบบยกก าลง (exponentially) จนกวาจะเจอกบ loss ครงแรก เรมตนขนาด cwnd = 1 MSS เพมขนาด cwnd หนงเทาตวทก ๆ RTT นนคอ โดยเพมขนาด cwnd ไป 1 MSS
ส าหรบทก ๆ ACK ทไดรบ
สรป อตราสงเรมแรกจะชาแตคาจะเพมแบบกระโดดขนอยางรวดเรว
Host A
RTT
Host B
time
Transport Layer 3-102
TCP การหา loss และการตอบสนอง
ถา loss ถกระบโดย timeout cwnd ถกตงไวท 1 MSS จากนนหนาตางจะเพมขนเปนเลขยกก าลง (exponential เหมอนใน slow start)
จนไปถงคา threshold จากนนจะเพมขนเปนเชงเสน
ถา loss ถกระบโดยไดรบ ACK ซ า 3 ACKs (3 duplicate acks) TCP RENO
ACKs ซ า ระบถงความสามารถการสง segments ของเครอขาย
cwnd ถกตดเหลอครงนงจากนนเพมขนแบบเชงเสน
TCP Tahoe จะตงคา cwnd เปน 1 เสมอ (ไมวาจะ timeout หรอ 3 dup acks)
Transport Layer 3-103
Q เมอไร TCP ควรจะเปลยนจากการเพมขนแบบ exponential เปนแบบเชงเสน
A เมอ cwnd ถกเพมเปน 12 ของ ldquoคาทมากทสดrdquo ของมนกอนจะเกด timeout
การด าเนนการ ตวแปร ssthresh ขณะเกด Loss ssthresh จะถก
ตงคาท 12 ของคา cwnd กอนเกดเหตแปปเดยว (คา cwnd ทมากทสดกอนเกดเหตการณ)
TCP จาก slow start เปน CA (Congestion Avoidance)
Transport Layer 3-104
สรป TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput ของ TCP
คาเฉลย throughput ของ TCP เปน function ของขนาดของ window และ RTT ไมสนใจ slow start สมมตวาขอมลถกสงตลอด
W ขนาดของ window (หนวยเปน bytes) การสญเสยทเกดขน คาเฉลยขนาดของ window (จ านวน byte ทเดนทางอย) คอ frac34 W คาเฉลยของ throughput คอ 34W ตอ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP ในอนาคต TCP ใน ldquopipes ทยาวและมความจสงrdquo
ตวอยาง 1500 byte segments 100ms RTT ตองการชองทางการสงขนาด 10 Gbps
requires W = 83333 in-flight segments ความเปนไปไดของการสญหายของในชองทางการสงขอมล L [Mathis 1997]
เพอทจะมชองทางการสงขนาด 10Gbps ตองมการสญหายของขอมลเพยงแค =
210-10 ndash นอยมาก ดงนน ตองม TCP รนใหมส าหรบการสงแบบความเรวสง
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
เปาหมายของ fairness ถาม TCP session จ านวน K session ใชทรพยากร bandwidth R รวมกน แตละ session ควรจะเฉลยทรพยากรเหมอนกนท RK
TCP connection 1
router คอขวด มความจ R
ความเสมอภาค (Fairness) ของ TCP
TCP connection 2
Transport Layer 3-108
ความเสมอภาคของ TCP คออะไร session 2 session แขงกนใชทรพยากร additive increase ใหความชนเสนเทากบ 1 (session ทง 2 คอย ๆ ได throughput เพมทละ
นด) multiplicative decrease ลด throughput ไปครงหนง
R
R
เสนระบแบนดวธทใชรวมเทากน
Throuput ของ การเชอมตอท 1
congestion avoidance (CA) additive increase สญเสย ลดขนาดของ window ลงไปครงนง
congestion avoidance (CA) additive increase
สญเสย ลดขนาดของ window ลงไปครงนง
Transport Layer 3-109
ความเสมอภาค (ตอ)
ความเสมอภาค และ UDP มลตมเดยแอพพลเคชนบอยครงไม
ใช TCP ไมตองการใหอตราการสงลดลงเพราะ
การควบคมความคบคง
มลตมเดยแอพพลเคชนจงใช UDP แทน สงเสยงวดโอดวยความเรวคงท ทน
ตอการสญเสยขอมล
ความเสมอภาค การเชอมตอ TCP แบบขนาน แอพพลเคชนสามารถทจะเปดหลายการ
เชอมตอระหวางเครอง 2 เครองแบบขนานได
เวบบราวเซอรท าแบบน ตวอยางเชน link ทมความจ R ซงม 9 การ
เชอมตอ ถาแอพใหมตองการ 1 TCP จะไดรบท rate
R10 ถาแอพใหมตองการ 11 TCPs จะไดรบท R2
Transport Layer 3-110
Chapter 3 บทสรป
หลกการเบองหลงการใหบรการชนtransport multiplexing demultiplexing การสงขอมลแบบไวใจได การควบคมการไหลของขอมล การควบคมความคบคงของขอมล
กรณศกษาและการปฏบตบน internet UDP TCP
ถดไป ออกจากปลายทางของระบบ
เครอขาย (application transport layers)
เขาไปยงสแกนของเครอขาย
Transport Layer 3-7
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-8
การรวมและแยกขอมล (Multiplexingdemultiplexing)
socket
ใชขอมลสวน header เพอสง segment ทไดมาไปยง socket ทถกตอง
demultiplexing ทผรบ จดการกบขอมลจากหลาย ๆ socket ใส header ของชน transport เขาไป (header จะถกใชเพอท าการ demultiplexing ภายหลง)
multiplexing ทผสง
transport
application
physical
link
network
P2 P1
transport
application
physical
link
network
P4
transport
application
physical
link
network
P3 process
Transport Layer 3-9
ท า demultiplexing อยางไร
source port dest port
32 bits
application data
(payload)
other header fields
TCPUDP segment format
host รบดาตาแกรมจากชน IP แตละดาตาแกรมจะมหมายเลขไอพตนทาง
ไอพปลายทาง แตละดาตาแกรมจะม segment ของชน
transportอย แตละ segment จะมหมายเลข port ตน
ทางและปลายทาง (source and destination port number)
host ใชขอมลหมายเลขไอพและหมายเลขพอรต เพอน าเซกเมนตไปยง socket ทถกตอง
Transport Layer 3-10
demultiplexing กรณทไมมการเชอมตอ (Connectionless)
datagrams ของ IP ทม เลข port ปลายทางตวเดยวกน แมจะมทอย IP และหรอ เลข port ของเครองตนทางตางกน (process ทสง datagram เปนคนละ process แตสงมาท process ผรบตวเดยวกน) จะถกน าไปยง socket เดยวกน ทเครองปลายทาง
จากบททแลว socket ทถกสรางจะมหมายเลข port ก ากบ
DatagramSocket mySocket1 = new DatagramSocket(12534)
เมอ host รบ segment ของ UDP ตรวจสอบหมายเลข port ใน
segment น า segment ของ UDP ไปยง
socket ทผกกบ port นน
เมอจะสรางดาตาแกรมเพอสงไปยง
socket ทเปน UDP ตองท าการระบ หมายเลขไอพปลายทาง หมายเลข port ปลายทาง
Transport Layer 3-11
Connectionless demux example
DatagramSocket serverSocket = new DatagramSocket
(6428)
transport
application
physical
link
network
P3 transport
application
physical
link
network
P1
transport
application
physical
link
network
P4
DatagramSocket mySocket1 = new DatagramSocket (5775)
DatagramSocket mySocket2 = new DatagramSocket
(9157)
source port 9157 dest port 6428
source port 6428 dest port 9157
source port dest port
source port dest port
Transport Layer 3-12
socket แบบ TCP ถกระบดวย 4 สวน ซงมองคประกอบดงน source IP address
(หมายเลขไอพตนทาง)
source port number (หมายเลขพอรตตนทาง )
dest IP address (หมายเลขไอพปลายทาง)
dest port number (หมายเลขพอรตปลายทาง )
demux จะดคาทงสสวนเพอน า packet ไปยง sockets ทเหมาะสม
เครองเซรฟเวอรอาจเปด sockets แบบ TCP จ านวนมากพรอมกน ซง แตละ socket ถกระบดวย 4 สวน
(แตจะมสวนท 3 คอหมายเลข IP ปลายทางเหมอน ๆ กน)
web servers จะม socket หลาย ๆ socket ไวส าหรบเชอมตอกบแตละ client HTTP แบบ non-persistent จะใช
socket ทแตกตางกนส าหรบแตละ request
demux กรณทมการเชอมตอ (Connection-oriented)
Transport Layer 3-13
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
P4
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
network
P6 P5 P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
ทง 3 segment มทอย IP ปลายทาง คอ B และ เลขพอรต ปลายทางคอ 80 แตถกแยกสงไปยง socket ทตางกน
server IP address B
Transport Layer 3-14
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
server IP address B
network
P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
P4
threaded server
Transport Layer 3-15
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
เปน protocol ของ Internet ทไมไดมสวนเพมเตมอะไร
บรการแบบ ldquoจะพยายามใหดทสดrdquo (best effort) ดงนน segment แบบ UDP อาจ สญหาย ไปถง app ของผรบแตไมเรยงล าดบ
ไมมการเชอมตอ ไมมการท า handshake ระหวางผสง
และผรบ แตละ segment ทเปน UDP จะถก
จดการเปนอสระจาก segment อน ๆ
UDP ใชใน app ทสง multimedia อยางตอเนอง
(ซงทนตอการสญเสย แต sensitive กบอตราการสง)
DNS SNMP
ถาจะให การถายโอนขอมลบน UDP มความนาเชอถอกวาน เพมความนาเชอถอทชน application มการกคนขอผดพลาด (ขนอยกบ แตละ
application)
Transport Layer 3-17
UDP สวนหวของ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
ควายาวของ segment ของ UDP (หนวยเปน byte) รวมความยาว
ของ header ดวย
ไมตองสรางการเชอมตอ (ซงเปนสวนทเพมความลาชา)
งาย ไมซบซอน ไมตองมสถานะของการเชอมตอทผสงและผรบ
สวนหว (header) มขนาดเลก ไมมการควบคมความคบคง UDP
สามารถสงขอมลไดรวดเรวตามทตองการ
ท าไมถงตองม UDP
Transport Layer 3-18
checksum ของ UDP
ผสง จดการขอมลทงหมดทจะไปอยใน
segment รวมทงขอมลสวนหวตาง ๆ ทเปนล าดบของจ านวนเตม 16 บตหลายจ านวน
checksum ผลรวมของขอมลตาง ๆ ใน segment
ผสงใส checksum เขาไปใน field checksum ใน header ของ UDP
ผรบ ค านวณหา checksum ของ segment ทได
รบมาใหม ตรวจสอบคา checksum ใน field ของ
header กบ คาทเพงไดจากการค านวณ วาเทากนหรอไม ถาไม แสดงวาพบขอผดพลาด ถาใช แสดงวา ไมพบขอผดพลาด แต
จรง ๆ แลว กอาจจะมขอผดพลาดไดอยด (รายละเอยดจะกลาวภายหลง)
จดมงหมาย ตรวจสอบขอผดพลาด เชน bits ทคาโดนกลบใน segment
Transport Layer 3-19
Internet checksum ตวอยาง
ตวอยาง การบวก 16-bit integers สองจ านวน
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note ขณะทบวกตวเลข เมอ bitท 16 (bit ซายสด) มการทดเลข ใหน าเลขนนไปบวกกบ bit ท 1 แลวจง flip bit ทก bit เพอใหได checksum
Transport Layer 3-20
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-21
Principles of reliable data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
หลกการของความนาเชอถอ data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
หลกการของความนาเชอถอ data transfer
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
ส าคญในชน application transport link ตด top-10 ของหวขอทางดานเครอขาย
Transport Layer 3-24
Reliable data transfer เรมตน
ดานผสง ดานผรบ
rdt_send() ถกเรยกจากชนดานบน (เชน โดย app) ท าหนาทผานขอมลเพอใหขอมลถกสงไป
ยงชนดานบนของผรบ
udt_send() ถกเรยกโดย rdt เพอทจะโอนถาย packet ผานชองการ
สอสารท unreliable ไปยงผรบ
rdt_rcv() ถกเรยกโดย OS เมอ OS ไดรบ packet ทมาถงชองการสอสารดานผรบ
deliver_data() ถกเรยกโดย rdt เพอใหสงขอมลไปยงชนดานบน
Transport Layer 3-25
เราจะ คอย ๆ พฒนา protocol ส าหรบการโอนถายขอมลแบบ reliable หรอ reliable
data transfer protocol (rdt) ตอนน พจารณาเฉพาะการโอนถายขอมลแบบทางเดยวกอน
แตขอมลส าหรบการควบคม (control info) จะถกสงไปกลบทงสองทาง
ใช finite state machines (FSM) เพอก าหนดการกระท าของผสงและผรบ
state 1
state 2
เหตการณทท าใหเกดการเปลยนผานของ State การกระท าขณะเปลยนผาน State
สถานะ (state) เมออยใน state ปจจบน state ถดไปจะขนอยกบเหตการณทจะ
เกดขน ณ state ปจจบน
เหตการณ การกระท า
Reliable data transfer เรมตน
Transport Layer 3-26
rdt10 การโอนถายขอมลแบบ reliable ผานชองสญญาณแบบ reliable
สมมตให ชองทางทอยขางใตเปนชองทางทเชอถอได ไมมการผดพลาดของบต ไมมขอมลสญหาย
FSMs ส าหรบผสง และ ส าหรบผ รบ ผสงสงขอมลไปยงชนดานลาง ผรบรบขอมลจากชนดานลาง
รอรบการเรยกจากชน
ดานบน packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
รอรบการเรยกจากชน
ดานลาง
rdt_rcv(packet)
ผสง ผรบ
Transport Layer 3-27
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร
acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK
negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors
sender retransmits pkt on receipt of NAK
new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 ชองทางการสอสารทม bit errors
ปกตแลว มนษยใชวธการใดในการแกไข ldquoerrorsrdquo ระหวางการสนทนา
Transport Layer 3-28
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร การตอบรบ (acknowledgements (ACKs)) ผรบแจงผสงวาไดรบ packet แลว การตอบปฏเสธ (negative acknowledgements (NAKs)) ผรบแจงผสงวา packet ม
errors sender สงขอมลซ าอกครง เมอไดรบ NAK
กลไกทเพมขน in rdt20 (เพมจาก rdt10) การตรวจจบความผดพลาด การแจงกลบ (feedback) ขอมลส าหรบการควบคม (ACKNAK) จากผรบไปยงผสง
rdt20 ชองทางการสอสารทม bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 ขอก าหนดของ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
จะเกดอะไรขนถา ACKNAK เกดเสยหาย ผสงไมรวาผรบรบ pkt ครบถวน
หรอไม ไมควรสง pkt ซ าอกครง เพราะ
pkt ซ ากน
การจดการกบขอมลทซ าซอน ผสงจะสง packet อกครงถา
ACKNAK เกดเสยหาย เตมหมายเลข sequence ใหแตละ
packet ผรบตองทง packet ทซ ากน
stop and wait ผสงท าการสงpacketและรอใหผรบตอบกลบดวย ACKNAK กอนทจะสง packet ตอไป
Transport Layer 3-33
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Transport Layer 3-35
rdt21 อภปราย
ผสง ใสหมายเลข seq ในpacket หมายเลข seq (01) กพอ
นกสท าไม ตองตรวจสอบวา ACKNAK ท
ไดรบเสยไปหรอไม จ านวนหมายเลข seq ตองเปนสอง
เทาของจ านวนสถานะ เพราะผสงตองเกบสถานะเพอldquoจ าrdquo
วา pkt ถดไปจะตองมเลข seq 0 หรอ 1
ผรบ ตองตรวจสอบวา pkt ทไดรบซ ากบ
pkt ทไดรบกอนหนาหรอไม ผรบจะเกบสถานะทระบวา 0 หรอ 1
คอหมายเลข seq ทคาดวาจะได
ขอสงเกต ผรบไมสามารถรวา ACKNAK สดทายทผสงไดรบถกตองหรอไม
Transport Layer 3-36
rdt22 protocol ทไมตองใช NAK
ท างานเหมอนกบ rdt21 แตใชแค ACKs แทนทจะสง NAK ผรบสง ACK ส าหรบ pkt สดทายทไดรบถกตอง
ฝงรบจะตองรวมหมายเลข seq ของ pkt ทก าลงถก ACK ไปดวย
จะสง ACK ซ าไปทผสงถาไมไดรบ pkt ทมหมายเลข seq ทคาดหวง ผลลพธจะออกมาเหมอนกรณทสง NAK ผสงตองสง pkt ตวลาสดไปใหมอกครง
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 ชองสญญาณทมความผดพลาดและ pkt สญหาย
เพมขอสนนษฐาน ชองสญญาณสามารถสญเสยแพคเกจ (ไมวาจะเปนขอมลหรอ ACKs) ได กลไก checksum หมายเลข seq
ACKs และ การสงซ า สามารถชวย แตมนกยงไมใชทางออก
วธ ผสงรอ ACK กลบมาในชวงเวลาท ldquoสมเหตสมผลrdquo
สง pkt เดมไปใหมอกครงถาไมไดรบ ACK ภายในชวงเวลาน
ถา pkt (หรอ ACK) มาถงลาชา (ไมใชหายไป) การสงใหมกจะเปนการสงซ า ซง seq
ไดจดการเรองเกยวกบขอมลซ าได ผรบตองระบเลข seq ของ pkt ทก าลง
ถก ACKed
ตองใชการนบเวลาถอยหลง (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
ขณะ rdt30 ด าเนนการ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
ขณะ rdt30 ด าเนนการ
Transport Layer 3-42
ประสทธภาพของ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
บตแรกของแพคเกจกถกสง t = 0
ผสง ผรบ
RTT
บตสดทายของแพคเกจถกสง t = L R
บตแรกของแพคเกจมาถง บตสดทายของแพคเกจมาถง สง ACK
ไดรบ ACK สงแพคเกจตอไป t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols แบบ pipelined
pipelining ผสงสงหลาย packet ไปยงผรบทง ๆ ท pkt เหลานนยงไมไดรบการยนยนตอบรบ (not yet acked) ชวงของหมายเลข sequence จะตองเพมขน ตองพกขอมล (buffer) ทผสงและผรบ
protocols แบบ pipelined แบบทวไปมสองแบบ go-Back-N selective repeat
Transport Layer 3-45
Pipelining ชวยเพม utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols แบบ pipeline ภาพรวม
Go-back-N ผสงสามารถสงแพคเกจทไมยงถก
ack ไดไมเกน N แพคเกจใน pipeline
ผรบแคสง cumulative ack ไม ack packet ถามนกอใหเกด gap
ผสงจบเวลาส าหรบแพคเกจทสงไป
นานทสดทยงไมได ack เมอเวลาหมด ผสงจะสงแพคเกจ
ทงหมดทยงไมไดรบ ack อกครง
Selective Repeat ผสงสามารถสงแพคเกจทไมยงถก ack ได
ไมเกน N แพคเกจใน pipeline
ผรบจะตองสง ack กลบใหแตละแพคเกจ
ผสงจะจบเวลาส าหรบแตละแพคเกจท
ไมได ack เมอเวลาส าหรบแพคเกจใดหมด ผสงจะสง
เฉพาะแพคเกจนนเทานน
Transport Layer 3-47
Go-Back-N ผสง
หมายเลข seq (k bit) จะอยใน header ของ packet อนญาตใหขนาด ldquowindowrdquo (ของ pkt ทตดกนและยงไมถก ack) ไมเกน N
ACK(n) จะ ack แพคเกจทงหมดไปจนถงทมหมายเลข seq เทากบ n - ldquoการ ACK แบบรวม (cumulative ACK)rdquo อาจมการไดรบ ACKs หมายเลข seq เดมซ า (ดรายละเอยดดาน receiver)
มการจบเวลาส าหรบแพคเกจทเดนทางอย ซงเดนทางนานทสดและยงไมได ACK (pkt ทมหมายเลข seq นอยทสดใน window)
timeout(n) เวลาหมดท pkt n ผสงจะสง pkt n และ pkt ทงหมดใน window (ซงมหมายเลข seq สงกวา n) อกครง
Transport Layer 3-48
GBN FSM ดานผสงทเพมจากของเดม
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum
out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM ดานผรบทเพมจากของเดม
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
ผ รบ Ack แตละแพคเกจทไดรบมาถกตอง เกบ (buffer) แพคเกจ เทาทจ าเปน เพอทจะสงขอมลทเรยงล าดบแลว ไปยง layer
บนไดในทายทสด
ผสงแคสงแพคเกจซ าเฉพาะแพคเกจทไมไดรบ Ack เทานน ตวจบเวลา (ทางฝงผสง) จะจบเวลาของแตละแพคเกจทไมไดรบ Ack
Window ของผสง มหมายเลข seq อย N หมายเลขตดกน จ ากดหมายเลข seq ของแพตเกจทสงไปแลว และไมไดรบ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
ขอมลมาจาก layer ดานบน ถามหมายเลข seq วางใน window ให
สง pkt ได
timeout(n) สง pkt n ซ า จบเวลาใหม
ACK(n) in [sendbase sendbase+N] รวา ผรบไดรบ pkt n แลว ถา n เกดเปนหมายเลขแรกสดในหนาตาง
(n เทากบ sendbase) ทไมได ถก ack เลอน window ไปทางดานขวา โดยเลอนไปยงหมายเลขทไมไดถก ack
ผสง pkt n in [rcvbase rcvbase+N-1] สง ACK(n) ถาไมเรยงตามล าดบ buffer ถาตามล าดบ สง (รวมถงใหสง pkt ท
เรยงตามล าดบและอยในบฟเฟอร) เลอน window ไปทหมายเลข seq ถดไปของ pkt ทยงไมไดรบจากผสง
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise ทงไปไมตองสนใจ
ผรบ
Transport Layer 3-54
ขณะ Selective repeat ด าเนนการ
สง pkt0
sender receiver
รบ pkt0 สง ack0
รบ pkt1 สง ack1
รบ pkt3 buffer สง ack3 รบ ack0 สง pkt4
รบ ack1 สง pkt5
pkt 2 timeout send pkt2
X loss
รบ pkt4 buffer สง ack4
รบ pkt5 buffer สง ack5
รบ pkt2 deliver pkt2
pkt3 pkt4 pkt5 สง ack2
บนทก ack3 มาถงแลว
sender window (N=4)
บนทก ack4 มาถงแลว บนทก ack4 มาถงแลว
Q เกดอะไรขนเมอ ack2 มาถง
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
สง pkt1 สง pkt2
สง pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
ตวอยาง หมายเลข seq 0 1 2 3 ขนาดของ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
ผรบไมสามารถเหนดานผสงได พฤตกรรมผรบจะเหมอนกนทง 2 สถานการณ
มบางอยางทผด (มาก)
ผรบไมเหนถงความแตกตางของทง 2 เหตการณจ าลองน
ในเหตการณจ าลอง (b) ขอมลเกาทถกสงซ า เมอผรบรบมา จะนกวาเปนขอมลใหม
Q ขนาดของ seq กบขนาดของ
window เกยวของกนยงไงเพอทจะหลกเลยงปญหาในตวอยาง (b)
Transport Layer 3-56
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-57
TCP ภาพรวม RFCs 79311221323 2018 2581
ขอมลแบบสองทศทาง มการสงขอมลทงไปและกลบในการ
เชอมตอ (connection) เดยวกน MSS ขนาด segment ทใหญสดท
TCP จะรบได (Max Segment Size)
connection-oriented handshaking (การแลกเปลยนของ
ขอความควบคม) ตงคาสถานะตงตนใหผสงและผรบ กอนการแลกเปลยนขอความ
flow controlled ผสงจะไมสงขอมลเกนกวาทผรบจะรบ
ได
point-to-point (สถานทนง-ไป-สถานทนง) ผสงหนงคน ผรบหนงคน
สายขอมลเปนไบตทเรยงล าดบและขอมลไมสญหาย (reliable in-order byte steam) ไมม ldquoขอบเขตrdquo ของขอความ
(ขอความจะมาถงผรบตอเนองกน)
pipelined การควบคมความคบคงและการควบคม
อตราการไหลของ TCP จะก าหนดขนาดของ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG ขอมลเรงดวน (โดยทว ๆ ไป ไมถกใช)
ACK ACK valid
PSH ผลกขอมลใหชน app (โดยทว ๆ ไป ไมถกใช)
RST SYN FIN สรางการเชอตอ
(ค าสง setup teardown)
จ านวน bytes ท ผรบเตมใจจะรบ
นบโดยใช byte ของขอมล (ไมใช segment)
Internet checksum
(เหมอนใน UDP)
Transport Layer 3-59
TCP seq numbers ACKs
หมายเลข sequence เลขของ byte stream จะเปน byte
แรกของขอมลของ segment น acknowledgements เลข seq ของ byte ถดไปทอกดานหนง
คาดหวงวาจะได cumulative ACK (ACK แบบรวม)
Q ผรบจดการกบ segment ทมาถงไมเรยงล าดบอยางไร A TCP ไมมรายละเอยดสวนน ndash ขนอย
กบคนทจะมาเขยนโปรแกรม TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาเขามาถงผสง
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาออกจากผสง
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
เหตการณจ าลอง telnet อยางงาย
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q เราควรจะก าหนด time out ไวทเทาใด
มากกวาเวลาของ RTT แตเวลาของ RTT นนแปรปรวน
ก าหนดไวนอยเกนไป timeout กอนก าหนด ท าใหมการ retransmissions โดยไมจ าเปน
ก าหนดไวมากเกนไป ระบบตอบสนองตอการสญหายของ segment ชาเกนไป
Q จะประมาณเวลาของ RTT อยางไร
SampleRTT วดจากระยะเวลาตงแตเรมสง sengment จนกระทงไดรบACK ไมสนใจการ retransmissions
SampleRTT มคาแปรปรวน เราตองการประมาณเวลาของ RTT ให smooth กวา ใชคาเฉลยของคาหลาย ๆ คา ไมใชแค
เวลาของ SampleRTT ปจจบน
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
คาเฉลยของการเคลอนทถวงน าหนกแบบ exponential คา SampleRTT ทในอดตจะมผลตอ EstimatedRTT ลดลงแบบ exponentially โดยทวไปจะก าหนดคา = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
ชวงเวลาของ timeout EstimatedRTT บวกกบระยะเวลาทเผอเอาไว ยงคาของ EstimatedRTT ทแปรปรวนมากเทาไร -gt ระยะเวลาทเผอความมากขนตาม
มประเมนคาการเปลยนแปลงของ SampleRTT จาก EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoชวงเวลาทเผอrdquo
Transport Layer 3-64
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP สรางบรการแบบ reliable อยบนบรการของ IP ทเปนแบบ unreliable segments ถกสงแบบ pipeline cumulative acks ม timer ส าหรบสงใหมคาตวเดยว
TCP สง segment ใหมเมอ เหตการณ timeout ไดรบ acks ซ า ๆ กน
เรามาเรมตนพจารณาทางดานผสงของ TCP อยางงายกอน ยงไมตองสนใจ acks ซ า ยงไมตองสนใจการควบคม flow และ
ความคบคง
Transport Layer 3-66
เหตการณของ TCP sender
เมอไดขอมลจาก app สราง segment ดวยหมายเลข seq เลข seq คอหมายเลขของไบตแรก
ของขอมลในแตละ segment หาก timer ยงไมเคยถกตง จะเรม
ตงเวลา การตงเวลาเพอจบเวลาส าหรบ
segment เกาทสดยงไมไดรบ ack ชวงเวลาทหมดอาย
TimeOutInterval
timeout สงใหมเฉพาะ segment ทเกด
timeout ตงเวลานบใหม เมอไดรบ ack ถา ack เปน ack ของ segment
กอนหนายงไมไดรบ ack Update สงทรวา ถก ACK แลว เรมตงเวลานบ ถายงคงม segment
ทยงไมไดรบ acked
Transport Layer 3-67
ดานผสงของ TCP (อยางงาย)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
การสราง ACK ของ TCP [RFC 1122 RFC 2581]
เหตการณทผรบ เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ) โดยขอมลทงหมดจนถงเลข seq ทคาดหวงไว ถก ACK หมดแลว
เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ ท าให ไมม gap ใน segment ทไดมา) แตมบาง segment ยงไมได ACK
Segment มาถงแบบไมเรยงตามล าดบ โดยมเลข seq สงกวาทตองการ ท าใหม gap (ชองโหว) เกดขน Segment ท ามาถง ทจะเตมบางสวนหรอเตมเตมชองโหว
TCP receiver action อยาเพงสง ACK รออก segment นง โดยรอสก 500ms หากยงไมม segment มา กสง ACK สง ACK แบบรวม (cumulative) ไปทนทในครงเดยว ซงจะเปนการ Ack segment ทมาแบบเรยงตามล าดบทงสอง segments สง ACK ซ า ไปทนท โดยใสเลข seq ของ byte ทตองการ สง ACK แบบรวมทนท โดย segment ทจะ Ack เรมจากดานทนอยกวาของ gap
Transport Layer 3-71
TCP fast retransmit
ระยะเวลาในการ time-out มกจะคอนขางยาว (โดยเปรยบเทยบ) ท าใหใชเวลาคอนขางนานกอนทจะ
สง packet อกครง
แกโดย ตรวจสอบการสญเสย pack โดยดท ACKs ทซ า ๆ กน ผสงมกสง segment ตด ๆ กน ดงนน ถา segment หนงหายไป จง
เปนไปไดทจะม ACKs ซ า ๆ กนจ านวนมาก
ถาผสงไดรบ ACKs ส าหรบขอมลเดยวกน 3 ACKS (ACKs ทซ ากนสามครง) ผสงตองสง seq ทยงไมถก acked (ระบเลข seq ทเลกทสด) มแนวโนมวา segment ทยงไมถก
ack จะหายไปเลย ดงนน จงไมตองรอใหหมดเวลา
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-74
TCP flow control application
process
buffer ดานผรบ ของ TCP socket
TCP code
IP code
application
OS
protocol stack ดานผรบ
application ลบขอมลจาก buffer ของ TCP socket hellip
hellip ชากวา TCP สงขอมล ขนไป (ขณะทผสงก าลงจะสง)
from sender
ผรบสามารถควบคมผสงได ดงนน ผสงจะไมสงขอมลเรวไป หรอ มากเกนไปจนลน (Overflow) buffer ของผรบ
flow control
Transport Layer 3-75
การควบคมการไหลขอมลของ TCP
ขอมลทอย buffer
buffer สวนทยงวาง rwnd
RcvBuffer
สวนของขอมล (payload) ใน segment ของ TCP
ไปยง process ของ application
ผรบระบขนาดของ buffer ทวางไวใน field rwnd ทอยในสวนหวของ TCP ทจะสงไปยงผสง ผเขยนโปรแกรมระบขนาดของ RcvBuffer ได
โดยใช API ตงคา option ของ socket (คาเรมตนทวไปคอ 4096 ไบต)
ทกระบบปฏบตการจะปรบขนาด RcvBuffer อตโนมต
ผสงจ ากดจ านวนของขอมลทยงไมถก acked (ldquoอยในระหวางการเดนทางrdquo) ใหเทากบคา rwnd ของขอมลผรบ
เปนการรบประกนวา buffer ของผรบจะไมลน
การbuffer ในดานของผรบ
Transport Layer 3-76
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-77
การจดการกบการเชอมตอ กอนทจะมการแลกเปลยนขอมลกน ผสงและผรบตองตกลงกนกอน ตกลงรวมในการสรางการเชอมตอ (แตละคนจะรวาอกฝายอยากจะเชอมตอหรอไม) ตกลงคาพารามเตอรส าหรบการเชอมตอ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake จะท างานไดเสมอไปหรอไมบน network
ความลาชาอาจเปลยนไป ขอความอาจถกสงซ าตวอยาง (เชน
req_conn(x)) เนองจากการสญหายของขอมล
ขอมลอาจสลบกน ไมสามารถรไดวาอกฝงไดรบหรอไม
ไดรบขอมลอะไร
2-way handshake
มาคยกนเถอะ
ตกลง ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-79
เหตการณผดพลาดของ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-80
3-way handshake ของ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM ของ 3-way handshake ของ TCP
Transport Layer 3-82
TCP การหยดการเชอมตอ
client server เลกเชอมตอทแตละดานของการเชอมตอ โดยแตละดานจะสง TCP segment ดวย FIN bit = 1
ตอบกลบ FIN ดวย ACK ในขณะทรบ FIN ACK กสามารถรวมอยในแพคเกจทสง FIN มาไดดวย
แตละดานสามารถสง FIN ไดพรอม ๆ กน
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP การหยดการเชอมตอ
Transport Layer 3-84
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-85
ความคบคง ความหมายไมเปนทางการ ldquoเมอจ านวนคนสงมากเกนไป ก าลงสงขอมลมาก
เกนไปดวยอตราการสงเรวเกนกวาท Network จะรบไหวrdquo แตกตางจาก flow control ผลทอาจทเกดขนจากความคบคง
packets หาย (buffer ลนท routers) ลาชามาก (เขาควใน buffers ของ router)
เปนปญหาทคนสนใจตด 10 อนดบตนๆ
หลกการของการควบคมความคบคงของเครอขาย
Transport Layer 3-86
ตนเหตและผลของความคบคง เหตการณ 1
มผสงและผรบอยางละสองคน Router 1 ตว ไมจ ากด buffers ความจของ link R ไมมการสงขอมลซ า
อตราขอมลทสงส าเรจตอหนงการเชอมตอ R2
buffer ท link ขาออกม buffer ไมจกด
Host A
อตราการสงขอมลตนฉบบ lin
Host B
อตราขอมลทสงส าเรจ lout
R2
R2
lou
t
lin R2 de
lay
lin
ดเลยจะมากขนเมออตราสงขอมลตนฉบบเขาใกลความจของ link
Transport Layer 3-87
Router 1 ตว Buffer แตมขนาด buffer จ ากด ตองสง pkt ไปซ าถา pkt นน timeout
ขอมลเขาของชน application = ขอมลออกจากชน application lin = lout
ขอมลเขาของชน transport จะรวมทตองสงซ าดวย lin lin
Buffer ของ link ทใชรวมกนซงมขนาดจ ากด
Host A
lin ขอมลตนฉบบ
Host B
lout lin ขอมลตนฉบบบวกกบ ขอมลทตองสงซ า
lsquo
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-88
ในอดมคต สมมตผสงรความเปนไปในเครอขาย ผสงสงเฉพาะตอนทเราเตอรม buffer เหลออย
Buffer ของ link ทแชรอยางจ ากด
lout copy
ม buffer วาง
R2
R2
lou
t
lin
Host B
A
ตนเหตและผลของความคบคง เหตการณ 2
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-89
lout copy
no buffer space
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
A
Host B
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
เมอสงขอมลท R2 บาง packets ถกสงซ า แต goodput ยงคงมคาลเขาหา R2 (ท าไม)
A
Host B
ตนเหตและผลของความคบคง เหตการณ 2
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Host B
ในความเปนจรง มการสงซ า packets หายหรอตกหลนระหวาง
เสนทางเนองจาก buffers เตม แตบางครง Timer ของผสงหมดเวลาลง
กอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-92
R2
lou
t
ldquoผลrdquo ของความคบคง เพอใหไดขอมลในอตราทตองการ (goodput) ตองท างานมากขน (สงซ า) เมอตองสง packets ซ าโดยทไมจ าเปน link จะตองล าเลยงหลาย copy ของ
ขอมลเดยวกน ท าให goodput ลดลง
R2 lin
ตนเหตและผลของความคบคง เหตการณ 2
ในความเปนจรง มการสงซ า 1 packets หายหรอตกหลนระหวางเสนทางเนองจาก buffers เตม 2 แตบางครง Timer ของผสงหมดเวลาลงกอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Transport Layer 3-93
มผสงขอมลทง 4 โฮสต เสนทางตองผานหลายจด หมดเวลาสงไปขอมลซ า
Q เกดอะไรขนเมอ λin และ λinrsquo เพมขน
Buffer ของเสนทางการสงขอมลทใชรวมกนมขนาดจ ากด
Host A lout
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
Host B
Host C Host D
A เมอ λinrsquo ของขอมลเสนสแดงมขนาดเพมขน ขอมลใน
เสนสน าเงนกจะถก drop ท าให throughput ของ connection สน าเงนเหลอ 0
lin ขอมลตนฉบบ lin ขอมลตนฉบบ บวกกบ
ขอมลทตองสงซ า
Transport Layer 3-94
อกหนง ldquoผลเสยrdquo ของความคบคง เมอแพกเกจถกทงไป นนกเทากบวา ทรยากรเครอขาย (ทใชสงขอมลกอน
หนาทขอมลนจะถกทง) ถกใชไปอยางไรคา
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
แนวทางในการควบคมความคบคงของขอมล
2 แนวทางในการควบคมความคบคง
การควบคมความคบคงโดยใชแคเครองปลายทาง (end-end)
ไมมการแจงกลบ (feedback) จากเครอขาย
ความคบคงของเครอขายจะถกเดาโดยเครองทอยปลายทางทคอยสงเกต loss delay
เปนวธของ TCP
การควบคมความคบคงโดยใหอปกรณเครอขายชวย
routers จะท าการแจง feedback ไปทระบบปลายทาง ใช bit 1 bit เพอระบถงความ
แออด (SNA DECbit TCPIP ECN ATM) หรอ ระบอตราการสงทชดเจน
ส าหรบผสง
Transport Layer 3-96
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
ABR available bit rate ldquoบรการทมความยดหยนrdquo ถาเสนทางของผสง ldquoมขอมลนอยกวา
ความจะมากrdquo ผสงจะใชประโยชนจาก
bandwidth ทเหลออย ถา path ของผสงแออด
ผสงจะคอย ๆ ลดอตราสงใหเหลอเทาอตราการสงขนต าทรบประกนไว
RM (resource management) cells สงโดยผสง แทรก ๆ ไปกบ cell ทเปนขอมล bits ใน RM cell ถกตงคาโดย switches
(ldquoเครอขายคอยชวยrdquo) NI bit ไมเพมอตราการสง (ความแออด
ระดบกลาง) CI bit การบงบอกถงความแออด
ผรบไมแกคาใน bit นของ RM cells และสงไปใหผสง
Transport Layer 3-97
field ขอมล ER (explicit rate) ขนาด 2 byte ใน cell RM switch ทแออดอาจลดคา ER ใน cell ดงนน อตราทผสงจะสงขอมลจะเปนอตราการสงมากทสดท link ในเสนทางจะรองรบได
bit EFCI ใน cell ขอมล ถกตงคาไวท 1 ใน switch ทมขอมลแออด ถา cell ขอมลกอนหนา RM cell ถกตงคา EFCI ผรบจะตงคา bit CI ใน cell RM ท
สงกลบใหผสง
RM cell data cell
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
Transport Layer 3-98
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-99
การควบคมความคบคงของ TCP additive increase (เพมแบบบวก) multiplicative decrease (ลดแบบเทาตว)
วธ ผสงเพมอตราสง (window size) ควานหา bandwidth ทมใหใชได จนกวาการสญหายจะเกดขน additive increase เพม cwnd ทละ 1 MSS ทก ๆ RTT จนกวาจะ pkt จะหาย multiplicative decrease ตดลด cwnd เหลอครงเดยวหลงจากการสญหาย
cwnd
ขนา
ดของ co
nges
tion
wind
ow ของผส
งแบบ
TCP
พฤตกรรมของ AIMD เปน ลกษณะฟนเลอย หา bandwidth
ขนาด window เพมแบบบวก hellip hellip จนกวาจะเกดการสญหาย (จากนน ตดลงเหลอครงนง)
time
Transport Layer 3-100
ผสงจ ากดการสง
ขนาด cwnd จะเปลยนแปลงไปมา ขนกบความคบคงของเครอขายทผสงไดรมา
อตราการสง TCP อยางคราว ๆ สงขอมลจ านวน
cwnd bytes รอ ACKS เพอประมาณคา RTT จากนนสงไบตขอมลเพม
byte สดทายท ถก ACKed สง แตยงไมถก
ACK (ldquoอยระหวางการเดนทางrdquo)
byte สดทายทสงไป
cwnd
LastByteSent-
LastByteAcked lt cwnd
ชวงเลข sequence number ของผสง
rate ~ ~ cwnd
RTT bytessec
การควบคมความคบคงของ TCP รายละเอยด
Transport Layer 3-101
TCP Slow Start
เมอเรมการเชอมตอ เพมอตราการสงแบบยกก าลง (exponentially) จนกวาจะเจอกบ loss ครงแรก เรมตนขนาด cwnd = 1 MSS เพมขนาด cwnd หนงเทาตวทก ๆ RTT นนคอ โดยเพมขนาด cwnd ไป 1 MSS
ส าหรบทก ๆ ACK ทไดรบ
สรป อตราสงเรมแรกจะชาแตคาจะเพมแบบกระโดดขนอยางรวดเรว
Host A
RTT
Host B
time
Transport Layer 3-102
TCP การหา loss และการตอบสนอง
ถา loss ถกระบโดย timeout cwnd ถกตงไวท 1 MSS จากนนหนาตางจะเพมขนเปนเลขยกก าลง (exponential เหมอนใน slow start)
จนไปถงคา threshold จากนนจะเพมขนเปนเชงเสน
ถา loss ถกระบโดยไดรบ ACK ซ า 3 ACKs (3 duplicate acks) TCP RENO
ACKs ซ า ระบถงความสามารถการสง segments ของเครอขาย
cwnd ถกตดเหลอครงนงจากนนเพมขนแบบเชงเสน
TCP Tahoe จะตงคา cwnd เปน 1 เสมอ (ไมวาจะ timeout หรอ 3 dup acks)
Transport Layer 3-103
Q เมอไร TCP ควรจะเปลยนจากการเพมขนแบบ exponential เปนแบบเชงเสน
A เมอ cwnd ถกเพมเปน 12 ของ ldquoคาทมากทสดrdquo ของมนกอนจะเกด timeout
การด าเนนการ ตวแปร ssthresh ขณะเกด Loss ssthresh จะถก
ตงคาท 12 ของคา cwnd กอนเกดเหตแปปเดยว (คา cwnd ทมากทสดกอนเกดเหตการณ)
TCP จาก slow start เปน CA (Congestion Avoidance)
Transport Layer 3-104
สรป TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput ของ TCP
คาเฉลย throughput ของ TCP เปน function ของขนาดของ window และ RTT ไมสนใจ slow start สมมตวาขอมลถกสงตลอด
W ขนาดของ window (หนวยเปน bytes) การสญเสยทเกดขน คาเฉลยขนาดของ window (จ านวน byte ทเดนทางอย) คอ frac34 W คาเฉลยของ throughput คอ 34W ตอ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP ในอนาคต TCP ใน ldquopipes ทยาวและมความจสงrdquo
ตวอยาง 1500 byte segments 100ms RTT ตองการชองทางการสงขนาด 10 Gbps
requires W = 83333 in-flight segments ความเปนไปไดของการสญหายของในชองทางการสงขอมล L [Mathis 1997]
เพอทจะมชองทางการสงขนาด 10Gbps ตองมการสญหายของขอมลเพยงแค =
210-10 ndash นอยมาก ดงนน ตองม TCP รนใหมส าหรบการสงแบบความเรวสง
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
เปาหมายของ fairness ถาม TCP session จ านวน K session ใชทรพยากร bandwidth R รวมกน แตละ session ควรจะเฉลยทรพยากรเหมอนกนท RK
TCP connection 1
router คอขวด มความจ R
ความเสมอภาค (Fairness) ของ TCP
TCP connection 2
Transport Layer 3-108
ความเสมอภาคของ TCP คออะไร session 2 session แขงกนใชทรพยากร additive increase ใหความชนเสนเทากบ 1 (session ทง 2 คอย ๆ ได throughput เพมทละ
นด) multiplicative decrease ลด throughput ไปครงหนง
R
R
เสนระบแบนดวธทใชรวมเทากน
Throuput ของ การเชอมตอท 1
congestion avoidance (CA) additive increase สญเสย ลดขนาดของ window ลงไปครงนง
congestion avoidance (CA) additive increase
สญเสย ลดขนาดของ window ลงไปครงนง
Transport Layer 3-109
ความเสมอภาค (ตอ)
ความเสมอภาค และ UDP มลตมเดยแอพพลเคชนบอยครงไม
ใช TCP ไมตองการใหอตราการสงลดลงเพราะ
การควบคมความคบคง
มลตมเดยแอพพลเคชนจงใช UDP แทน สงเสยงวดโอดวยความเรวคงท ทน
ตอการสญเสยขอมล
ความเสมอภาค การเชอมตอ TCP แบบขนาน แอพพลเคชนสามารถทจะเปดหลายการ
เชอมตอระหวางเครอง 2 เครองแบบขนานได
เวบบราวเซอรท าแบบน ตวอยางเชน link ทมความจ R ซงม 9 การ
เชอมตอ ถาแอพใหมตองการ 1 TCP จะไดรบท rate
R10 ถาแอพใหมตองการ 11 TCPs จะไดรบท R2
Transport Layer 3-110
Chapter 3 บทสรป
หลกการเบองหลงการใหบรการชนtransport multiplexing demultiplexing การสงขอมลแบบไวใจได การควบคมการไหลของขอมล การควบคมความคบคงของขอมล
กรณศกษาและการปฏบตบน internet UDP TCP
ถดไป ออกจากปลายทางของระบบ
เครอขาย (application transport layers)
เขาไปยงสแกนของเครอขาย
Transport Layer 3-8
การรวมและแยกขอมล (Multiplexingdemultiplexing)
socket
ใชขอมลสวน header เพอสง segment ทไดมาไปยง socket ทถกตอง
demultiplexing ทผรบ จดการกบขอมลจากหลาย ๆ socket ใส header ของชน transport เขาไป (header จะถกใชเพอท าการ demultiplexing ภายหลง)
multiplexing ทผสง
transport
application
physical
link
network
P2 P1
transport
application
physical
link
network
P4
transport
application
physical
link
network
P3 process
Transport Layer 3-9
ท า demultiplexing อยางไร
source port dest port
32 bits
application data
(payload)
other header fields
TCPUDP segment format
host รบดาตาแกรมจากชน IP แตละดาตาแกรมจะมหมายเลขไอพตนทาง
ไอพปลายทาง แตละดาตาแกรมจะม segment ของชน
transportอย แตละ segment จะมหมายเลข port ตน
ทางและปลายทาง (source and destination port number)
host ใชขอมลหมายเลขไอพและหมายเลขพอรต เพอน าเซกเมนตไปยง socket ทถกตอง
Transport Layer 3-10
demultiplexing กรณทไมมการเชอมตอ (Connectionless)
datagrams ของ IP ทม เลข port ปลายทางตวเดยวกน แมจะมทอย IP และหรอ เลข port ของเครองตนทางตางกน (process ทสง datagram เปนคนละ process แตสงมาท process ผรบตวเดยวกน) จะถกน าไปยง socket เดยวกน ทเครองปลายทาง
จากบททแลว socket ทถกสรางจะมหมายเลข port ก ากบ
DatagramSocket mySocket1 = new DatagramSocket(12534)
เมอ host รบ segment ของ UDP ตรวจสอบหมายเลข port ใน
segment น า segment ของ UDP ไปยง
socket ทผกกบ port นน
เมอจะสรางดาตาแกรมเพอสงไปยง
socket ทเปน UDP ตองท าการระบ หมายเลขไอพปลายทาง หมายเลข port ปลายทาง
Transport Layer 3-11
Connectionless demux example
DatagramSocket serverSocket = new DatagramSocket
(6428)
transport
application
physical
link
network
P3 transport
application
physical
link
network
P1
transport
application
physical
link
network
P4
DatagramSocket mySocket1 = new DatagramSocket (5775)
DatagramSocket mySocket2 = new DatagramSocket
(9157)
source port 9157 dest port 6428
source port 6428 dest port 9157
source port dest port
source port dest port
Transport Layer 3-12
socket แบบ TCP ถกระบดวย 4 สวน ซงมองคประกอบดงน source IP address
(หมายเลขไอพตนทาง)
source port number (หมายเลขพอรตตนทาง )
dest IP address (หมายเลขไอพปลายทาง)
dest port number (หมายเลขพอรตปลายทาง )
demux จะดคาทงสสวนเพอน า packet ไปยง sockets ทเหมาะสม
เครองเซรฟเวอรอาจเปด sockets แบบ TCP จ านวนมากพรอมกน ซง แตละ socket ถกระบดวย 4 สวน
(แตจะมสวนท 3 คอหมายเลข IP ปลายทางเหมอน ๆ กน)
web servers จะม socket หลาย ๆ socket ไวส าหรบเชอมตอกบแตละ client HTTP แบบ non-persistent จะใช
socket ทแตกตางกนส าหรบแตละ request
demux กรณทมการเชอมตอ (Connection-oriented)
Transport Layer 3-13
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
P4
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
network
P6 P5 P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
ทง 3 segment มทอย IP ปลายทาง คอ B และ เลขพอรต ปลายทางคอ 80 แตถกแยกสงไปยง socket ทตางกน
server IP address B
Transport Layer 3-14
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
server IP address B
network
P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
P4
threaded server
Transport Layer 3-15
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
เปน protocol ของ Internet ทไมไดมสวนเพมเตมอะไร
บรการแบบ ldquoจะพยายามใหดทสดrdquo (best effort) ดงนน segment แบบ UDP อาจ สญหาย ไปถง app ของผรบแตไมเรยงล าดบ
ไมมการเชอมตอ ไมมการท า handshake ระหวางผสง
และผรบ แตละ segment ทเปน UDP จะถก
จดการเปนอสระจาก segment อน ๆ
UDP ใชใน app ทสง multimedia อยางตอเนอง
(ซงทนตอการสญเสย แต sensitive กบอตราการสง)
DNS SNMP
ถาจะให การถายโอนขอมลบน UDP มความนาเชอถอกวาน เพมความนาเชอถอทชน application มการกคนขอผดพลาด (ขนอยกบ แตละ
application)
Transport Layer 3-17
UDP สวนหวของ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
ควายาวของ segment ของ UDP (หนวยเปน byte) รวมความยาว
ของ header ดวย
ไมตองสรางการเชอมตอ (ซงเปนสวนทเพมความลาชา)
งาย ไมซบซอน ไมตองมสถานะของการเชอมตอทผสงและผรบ
สวนหว (header) มขนาดเลก ไมมการควบคมความคบคง UDP
สามารถสงขอมลไดรวดเรวตามทตองการ
ท าไมถงตองม UDP
Transport Layer 3-18
checksum ของ UDP
ผสง จดการขอมลทงหมดทจะไปอยใน
segment รวมทงขอมลสวนหวตาง ๆ ทเปนล าดบของจ านวนเตม 16 บตหลายจ านวน
checksum ผลรวมของขอมลตาง ๆ ใน segment
ผสงใส checksum เขาไปใน field checksum ใน header ของ UDP
ผรบ ค านวณหา checksum ของ segment ทได
รบมาใหม ตรวจสอบคา checksum ใน field ของ
header กบ คาทเพงไดจากการค านวณ วาเทากนหรอไม ถาไม แสดงวาพบขอผดพลาด ถาใช แสดงวา ไมพบขอผดพลาด แต
จรง ๆ แลว กอาจจะมขอผดพลาดไดอยด (รายละเอยดจะกลาวภายหลง)
จดมงหมาย ตรวจสอบขอผดพลาด เชน bits ทคาโดนกลบใน segment
Transport Layer 3-19
Internet checksum ตวอยาง
ตวอยาง การบวก 16-bit integers สองจ านวน
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note ขณะทบวกตวเลข เมอ bitท 16 (bit ซายสด) มการทดเลข ใหน าเลขนนไปบวกกบ bit ท 1 แลวจง flip bit ทก bit เพอใหได checksum
Transport Layer 3-20
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-21
Principles of reliable data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
หลกการของความนาเชอถอ data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
หลกการของความนาเชอถอ data transfer
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
ส าคญในชน application transport link ตด top-10 ของหวขอทางดานเครอขาย
Transport Layer 3-24
Reliable data transfer เรมตน
ดานผสง ดานผรบ
rdt_send() ถกเรยกจากชนดานบน (เชน โดย app) ท าหนาทผานขอมลเพอใหขอมลถกสงไป
ยงชนดานบนของผรบ
udt_send() ถกเรยกโดย rdt เพอทจะโอนถาย packet ผานชองการ
สอสารท unreliable ไปยงผรบ
rdt_rcv() ถกเรยกโดย OS เมอ OS ไดรบ packet ทมาถงชองการสอสารดานผรบ
deliver_data() ถกเรยกโดย rdt เพอใหสงขอมลไปยงชนดานบน
Transport Layer 3-25
เราจะ คอย ๆ พฒนา protocol ส าหรบการโอนถายขอมลแบบ reliable หรอ reliable
data transfer protocol (rdt) ตอนน พจารณาเฉพาะการโอนถายขอมลแบบทางเดยวกอน
แตขอมลส าหรบการควบคม (control info) จะถกสงไปกลบทงสองทาง
ใช finite state machines (FSM) เพอก าหนดการกระท าของผสงและผรบ
state 1
state 2
เหตการณทท าใหเกดการเปลยนผานของ State การกระท าขณะเปลยนผาน State
สถานะ (state) เมออยใน state ปจจบน state ถดไปจะขนอยกบเหตการณทจะ
เกดขน ณ state ปจจบน
เหตการณ การกระท า
Reliable data transfer เรมตน
Transport Layer 3-26
rdt10 การโอนถายขอมลแบบ reliable ผานชองสญญาณแบบ reliable
สมมตให ชองทางทอยขางใตเปนชองทางทเชอถอได ไมมการผดพลาดของบต ไมมขอมลสญหาย
FSMs ส าหรบผสง และ ส าหรบผ รบ ผสงสงขอมลไปยงชนดานลาง ผรบรบขอมลจากชนดานลาง
รอรบการเรยกจากชน
ดานบน packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
รอรบการเรยกจากชน
ดานลาง
rdt_rcv(packet)
ผสง ผรบ
Transport Layer 3-27
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร
acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK
negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors
sender retransmits pkt on receipt of NAK
new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 ชองทางการสอสารทม bit errors
ปกตแลว มนษยใชวธการใดในการแกไข ldquoerrorsrdquo ระหวางการสนทนา
Transport Layer 3-28
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร การตอบรบ (acknowledgements (ACKs)) ผรบแจงผสงวาไดรบ packet แลว การตอบปฏเสธ (negative acknowledgements (NAKs)) ผรบแจงผสงวา packet ม
errors sender สงขอมลซ าอกครง เมอไดรบ NAK
กลไกทเพมขน in rdt20 (เพมจาก rdt10) การตรวจจบความผดพลาด การแจงกลบ (feedback) ขอมลส าหรบการควบคม (ACKNAK) จากผรบไปยงผสง
rdt20 ชองทางการสอสารทม bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 ขอก าหนดของ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
จะเกดอะไรขนถา ACKNAK เกดเสยหาย ผสงไมรวาผรบรบ pkt ครบถวน
หรอไม ไมควรสง pkt ซ าอกครง เพราะ
pkt ซ ากน
การจดการกบขอมลทซ าซอน ผสงจะสง packet อกครงถา
ACKNAK เกดเสยหาย เตมหมายเลข sequence ใหแตละ
packet ผรบตองทง packet ทซ ากน
stop and wait ผสงท าการสงpacketและรอใหผรบตอบกลบดวย ACKNAK กอนทจะสง packet ตอไป
Transport Layer 3-33
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Transport Layer 3-35
rdt21 อภปราย
ผสง ใสหมายเลข seq ในpacket หมายเลข seq (01) กพอ
นกสท าไม ตองตรวจสอบวา ACKNAK ท
ไดรบเสยไปหรอไม จ านวนหมายเลข seq ตองเปนสอง
เทาของจ านวนสถานะ เพราะผสงตองเกบสถานะเพอldquoจ าrdquo
วา pkt ถดไปจะตองมเลข seq 0 หรอ 1
ผรบ ตองตรวจสอบวา pkt ทไดรบซ ากบ
pkt ทไดรบกอนหนาหรอไม ผรบจะเกบสถานะทระบวา 0 หรอ 1
คอหมายเลข seq ทคาดวาจะได
ขอสงเกต ผรบไมสามารถรวา ACKNAK สดทายทผสงไดรบถกตองหรอไม
Transport Layer 3-36
rdt22 protocol ทไมตองใช NAK
ท างานเหมอนกบ rdt21 แตใชแค ACKs แทนทจะสง NAK ผรบสง ACK ส าหรบ pkt สดทายทไดรบถกตอง
ฝงรบจะตองรวมหมายเลข seq ของ pkt ทก าลงถก ACK ไปดวย
จะสง ACK ซ าไปทผสงถาไมไดรบ pkt ทมหมายเลข seq ทคาดหวง ผลลพธจะออกมาเหมอนกรณทสง NAK ผสงตองสง pkt ตวลาสดไปใหมอกครง
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 ชองสญญาณทมความผดพลาดและ pkt สญหาย
เพมขอสนนษฐาน ชองสญญาณสามารถสญเสยแพคเกจ (ไมวาจะเปนขอมลหรอ ACKs) ได กลไก checksum หมายเลข seq
ACKs และ การสงซ า สามารถชวย แตมนกยงไมใชทางออก
วธ ผสงรอ ACK กลบมาในชวงเวลาท ldquoสมเหตสมผลrdquo
สง pkt เดมไปใหมอกครงถาไมไดรบ ACK ภายในชวงเวลาน
ถา pkt (หรอ ACK) มาถงลาชา (ไมใชหายไป) การสงใหมกจะเปนการสงซ า ซง seq
ไดจดการเรองเกยวกบขอมลซ าได ผรบตองระบเลข seq ของ pkt ทก าลง
ถก ACKed
ตองใชการนบเวลาถอยหลง (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
ขณะ rdt30 ด าเนนการ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
ขณะ rdt30 ด าเนนการ
Transport Layer 3-42
ประสทธภาพของ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
บตแรกของแพคเกจกถกสง t = 0
ผสง ผรบ
RTT
บตสดทายของแพคเกจถกสง t = L R
บตแรกของแพคเกจมาถง บตสดทายของแพคเกจมาถง สง ACK
ไดรบ ACK สงแพคเกจตอไป t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols แบบ pipelined
pipelining ผสงสงหลาย packet ไปยงผรบทง ๆ ท pkt เหลานนยงไมไดรบการยนยนตอบรบ (not yet acked) ชวงของหมายเลข sequence จะตองเพมขน ตองพกขอมล (buffer) ทผสงและผรบ
protocols แบบ pipelined แบบทวไปมสองแบบ go-Back-N selective repeat
Transport Layer 3-45
Pipelining ชวยเพม utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols แบบ pipeline ภาพรวม
Go-back-N ผสงสามารถสงแพคเกจทไมยงถก
ack ไดไมเกน N แพคเกจใน pipeline
ผรบแคสง cumulative ack ไม ack packet ถามนกอใหเกด gap
ผสงจบเวลาส าหรบแพคเกจทสงไป
นานทสดทยงไมได ack เมอเวลาหมด ผสงจะสงแพคเกจ
ทงหมดทยงไมไดรบ ack อกครง
Selective Repeat ผสงสามารถสงแพคเกจทไมยงถก ack ได
ไมเกน N แพคเกจใน pipeline
ผรบจะตองสง ack กลบใหแตละแพคเกจ
ผสงจะจบเวลาส าหรบแตละแพคเกจท
ไมได ack เมอเวลาส าหรบแพคเกจใดหมด ผสงจะสง
เฉพาะแพคเกจนนเทานน
Transport Layer 3-47
Go-Back-N ผสง
หมายเลข seq (k bit) จะอยใน header ของ packet อนญาตใหขนาด ldquowindowrdquo (ของ pkt ทตดกนและยงไมถก ack) ไมเกน N
ACK(n) จะ ack แพคเกจทงหมดไปจนถงทมหมายเลข seq เทากบ n - ldquoการ ACK แบบรวม (cumulative ACK)rdquo อาจมการไดรบ ACKs หมายเลข seq เดมซ า (ดรายละเอยดดาน receiver)
มการจบเวลาส าหรบแพคเกจทเดนทางอย ซงเดนทางนานทสดและยงไมได ACK (pkt ทมหมายเลข seq นอยทสดใน window)
timeout(n) เวลาหมดท pkt n ผสงจะสง pkt n และ pkt ทงหมดใน window (ซงมหมายเลข seq สงกวา n) อกครง
Transport Layer 3-48
GBN FSM ดานผสงทเพมจากของเดม
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum
out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM ดานผรบทเพมจากของเดม
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
ผ รบ Ack แตละแพคเกจทไดรบมาถกตอง เกบ (buffer) แพคเกจ เทาทจ าเปน เพอทจะสงขอมลทเรยงล าดบแลว ไปยง layer
บนไดในทายทสด
ผสงแคสงแพคเกจซ าเฉพาะแพคเกจทไมไดรบ Ack เทานน ตวจบเวลา (ทางฝงผสง) จะจบเวลาของแตละแพคเกจทไมไดรบ Ack
Window ของผสง มหมายเลข seq อย N หมายเลขตดกน จ ากดหมายเลข seq ของแพตเกจทสงไปแลว และไมไดรบ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
ขอมลมาจาก layer ดานบน ถามหมายเลข seq วางใน window ให
สง pkt ได
timeout(n) สง pkt n ซ า จบเวลาใหม
ACK(n) in [sendbase sendbase+N] รวา ผรบไดรบ pkt n แลว ถา n เกดเปนหมายเลขแรกสดในหนาตาง
(n เทากบ sendbase) ทไมได ถก ack เลอน window ไปทางดานขวา โดยเลอนไปยงหมายเลขทไมไดถก ack
ผสง pkt n in [rcvbase rcvbase+N-1] สง ACK(n) ถาไมเรยงตามล าดบ buffer ถาตามล าดบ สง (รวมถงใหสง pkt ท
เรยงตามล าดบและอยในบฟเฟอร) เลอน window ไปทหมายเลข seq ถดไปของ pkt ทยงไมไดรบจากผสง
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise ทงไปไมตองสนใจ
ผรบ
Transport Layer 3-54
ขณะ Selective repeat ด าเนนการ
สง pkt0
sender receiver
รบ pkt0 สง ack0
รบ pkt1 สง ack1
รบ pkt3 buffer สง ack3 รบ ack0 สง pkt4
รบ ack1 สง pkt5
pkt 2 timeout send pkt2
X loss
รบ pkt4 buffer สง ack4
รบ pkt5 buffer สง ack5
รบ pkt2 deliver pkt2
pkt3 pkt4 pkt5 สง ack2
บนทก ack3 มาถงแลว
sender window (N=4)
บนทก ack4 มาถงแลว บนทก ack4 มาถงแลว
Q เกดอะไรขนเมอ ack2 มาถง
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
สง pkt1 สง pkt2
สง pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
ตวอยาง หมายเลข seq 0 1 2 3 ขนาดของ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
ผรบไมสามารถเหนดานผสงได พฤตกรรมผรบจะเหมอนกนทง 2 สถานการณ
มบางอยางทผด (มาก)
ผรบไมเหนถงความแตกตางของทง 2 เหตการณจ าลองน
ในเหตการณจ าลอง (b) ขอมลเกาทถกสงซ า เมอผรบรบมา จะนกวาเปนขอมลใหม
Q ขนาดของ seq กบขนาดของ
window เกยวของกนยงไงเพอทจะหลกเลยงปญหาในตวอยาง (b)
Transport Layer 3-56
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-57
TCP ภาพรวม RFCs 79311221323 2018 2581
ขอมลแบบสองทศทาง มการสงขอมลทงไปและกลบในการ
เชอมตอ (connection) เดยวกน MSS ขนาด segment ทใหญสดท
TCP จะรบได (Max Segment Size)
connection-oriented handshaking (การแลกเปลยนของ
ขอความควบคม) ตงคาสถานะตงตนใหผสงและผรบ กอนการแลกเปลยนขอความ
flow controlled ผสงจะไมสงขอมลเกนกวาทผรบจะรบ
ได
point-to-point (สถานทนง-ไป-สถานทนง) ผสงหนงคน ผรบหนงคน
สายขอมลเปนไบตทเรยงล าดบและขอมลไมสญหาย (reliable in-order byte steam) ไมม ldquoขอบเขตrdquo ของขอความ
(ขอความจะมาถงผรบตอเนองกน)
pipelined การควบคมความคบคงและการควบคม
อตราการไหลของ TCP จะก าหนดขนาดของ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG ขอมลเรงดวน (โดยทว ๆ ไป ไมถกใช)
ACK ACK valid
PSH ผลกขอมลใหชน app (โดยทว ๆ ไป ไมถกใช)
RST SYN FIN สรางการเชอตอ
(ค าสง setup teardown)
จ านวน bytes ท ผรบเตมใจจะรบ
นบโดยใช byte ของขอมล (ไมใช segment)
Internet checksum
(เหมอนใน UDP)
Transport Layer 3-59
TCP seq numbers ACKs
หมายเลข sequence เลขของ byte stream จะเปน byte
แรกของขอมลของ segment น acknowledgements เลข seq ของ byte ถดไปทอกดานหนง
คาดหวงวาจะได cumulative ACK (ACK แบบรวม)
Q ผรบจดการกบ segment ทมาถงไมเรยงล าดบอยางไร A TCP ไมมรายละเอยดสวนน ndash ขนอย
กบคนทจะมาเขยนโปรแกรม TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาเขามาถงผสง
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาออกจากผสง
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
เหตการณจ าลอง telnet อยางงาย
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q เราควรจะก าหนด time out ไวทเทาใด
มากกวาเวลาของ RTT แตเวลาของ RTT นนแปรปรวน
ก าหนดไวนอยเกนไป timeout กอนก าหนด ท าใหมการ retransmissions โดยไมจ าเปน
ก าหนดไวมากเกนไป ระบบตอบสนองตอการสญหายของ segment ชาเกนไป
Q จะประมาณเวลาของ RTT อยางไร
SampleRTT วดจากระยะเวลาตงแตเรมสง sengment จนกระทงไดรบACK ไมสนใจการ retransmissions
SampleRTT มคาแปรปรวน เราตองการประมาณเวลาของ RTT ให smooth กวา ใชคาเฉลยของคาหลาย ๆ คา ไมใชแค
เวลาของ SampleRTT ปจจบน
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
คาเฉลยของการเคลอนทถวงน าหนกแบบ exponential คา SampleRTT ทในอดตจะมผลตอ EstimatedRTT ลดลงแบบ exponentially โดยทวไปจะก าหนดคา = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
ชวงเวลาของ timeout EstimatedRTT บวกกบระยะเวลาทเผอเอาไว ยงคาของ EstimatedRTT ทแปรปรวนมากเทาไร -gt ระยะเวลาทเผอความมากขนตาม
มประเมนคาการเปลยนแปลงของ SampleRTT จาก EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoชวงเวลาทเผอrdquo
Transport Layer 3-64
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP สรางบรการแบบ reliable อยบนบรการของ IP ทเปนแบบ unreliable segments ถกสงแบบ pipeline cumulative acks ม timer ส าหรบสงใหมคาตวเดยว
TCP สง segment ใหมเมอ เหตการณ timeout ไดรบ acks ซ า ๆ กน
เรามาเรมตนพจารณาทางดานผสงของ TCP อยางงายกอน ยงไมตองสนใจ acks ซ า ยงไมตองสนใจการควบคม flow และ
ความคบคง
Transport Layer 3-66
เหตการณของ TCP sender
เมอไดขอมลจาก app สราง segment ดวยหมายเลข seq เลข seq คอหมายเลขของไบตแรก
ของขอมลในแตละ segment หาก timer ยงไมเคยถกตง จะเรม
ตงเวลา การตงเวลาเพอจบเวลาส าหรบ
segment เกาทสดยงไมไดรบ ack ชวงเวลาทหมดอาย
TimeOutInterval
timeout สงใหมเฉพาะ segment ทเกด
timeout ตงเวลานบใหม เมอไดรบ ack ถา ack เปน ack ของ segment
กอนหนายงไมไดรบ ack Update สงทรวา ถก ACK แลว เรมตงเวลานบ ถายงคงม segment
ทยงไมไดรบ acked
Transport Layer 3-67
ดานผสงของ TCP (อยางงาย)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
การสราง ACK ของ TCP [RFC 1122 RFC 2581]
เหตการณทผรบ เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ) โดยขอมลทงหมดจนถงเลข seq ทคาดหวงไว ถก ACK หมดแลว
เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ ท าให ไมม gap ใน segment ทไดมา) แตมบาง segment ยงไมได ACK
Segment มาถงแบบไมเรยงตามล าดบ โดยมเลข seq สงกวาทตองการ ท าใหม gap (ชองโหว) เกดขน Segment ท ามาถง ทจะเตมบางสวนหรอเตมเตมชองโหว
TCP receiver action อยาเพงสง ACK รออก segment นง โดยรอสก 500ms หากยงไมม segment มา กสง ACK สง ACK แบบรวม (cumulative) ไปทนทในครงเดยว ซงจะเปนการ Ack segment ทมาแบบเรยงตามล าดบทงสอง segments สง ACK ซ า ไปทนท โดยใสเลข seq ของ byte ทตองการ สง ACK แบบรวมทนท โดย segment ทจะ Ack เรมจากดานทนอยกวาของ gap
Transport Layer 3-71
TCP fast retransmit
ระยะเวลาในการ time-out มกจะคอนขางยาว (โดยเปรยบเทยบ) ท าใหใชเวลาคอนขางนานกอนทจะ
สง packet อกครง
แกโดย ตรวจสอบการสญเสย pack โดยดท ACKs ทซ า ๆ กน ผสงมกสง segment ตด ๆ กน ดงนน ถา segment หนงหายไป จง
เปนไปไดทจะม ACKs ซ า ๆ กนจ านวนมาก
ถาผสงไดรบ ACKs ส าหรบขอมลเดยวกน 3 ACKS (ACKs ทซ ากนสามครง) ผสงตองสง seq ทยงไมถก acked (ระบเลข seq ทเลกทสด) มแนวโนมวา segment ทยงไมถก
ack จะหายไปเลย ดงนน จงไมตองรอใหหมดเวลา
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-74
TCP flow control application
process
buffer ดานผรบ ของ TCP socket
TCP code
IP code
application
OS
protocol stack ดานผรบ
application ลบขอมลจาก buffer ของ TCP socket hellip
hellip ชากวา TCP สงขอมล ขนไป (ขณะทผสงก าลงจะสง)
from sender
ผรบสามารถควบคมผสงได ดงนน ผสงจะไมสงขอมลเรวไป หรอ มากเกนไปจนลน (Overflow) buffer ของผรบ
flow control
Transport Layer 3-75
การควบคมการไหลขอมลของ TCP
ขอมลทอย buffer
buffer สวนทยงวาง rwnd
RcvBuffer
สวนของขอมล (payload) ใน segment ของ TCP
ไปยง process ของ application
ผรบระบขนาดของ buffer ทวางไวใน field rwnd ทอยในสวนหวของ TCP ทจะสงไปยงผสง ผเขยนโปรแกรมระบขนาดของ RcvBuffer ได
โดยใช API ตงคา option ของ socket (คาเรมตนทวไปคอ 4096 ไบต)
ทกระบบปฏบตการจะปรบขนาด RcvBuffer อตโนมต
ผสงจ ากดจ านวนของขอมลทยงไมถก acked (ldquoอยในระหวางการเดนทางrdquo) ใหเทากบคา rwnd ของขอมลผรบ
เปนการรบประกนวา buffer ของผรบจะไมลน
การbuffer ในดานของผรบ
Transport Layer 3-76
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-77
การจดการกบการเชอมตอ กอนทจะมการแลกเปลยนขอมลกน ผสงและผรบตองตกลงกนกอน ตกลงรวมในการสรางการเชอมตอ (แตละคนจะรวาอกฝายอยากจะเชอมตอหรอไม) ตกลงคาพารามเตอรส าหรบการเชอมตอ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake จะท างานไดเสมอไปหรอไมบน network
ความลาชาอาจเปลยนไป ขอความอาจถกสงซ าตวอยาง (เชน
req_conn(x)) เนองจากการสญหายของขอมล
ขอมลอาจสลบกน ไมสามารถรไดวาอกฝงไดรบหรอไม
ไดรบขอมลอะไร
2-way handshake
มาคยกนเถอะ
ตกลง ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-79
เหตการณผดพลาดของ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-80
3-way handshake ของ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM ของ 3-way handshake ของ TCP
Transport Layer 3-82
TCP การหยดการเชอมตอ
client server เลกเชอมตอทแตละดานของการเชอมตอ โดยแตละดานจะสง TCP segment ดวย FIN bit = 1
ตอบกลบ FIN ดวย ACK ในขณะทรบ FIN ACK กสามารถรวมอยในแพคเกจทสง FIN มาไดดวย
แตละดานสามารถสง FIN ไดพรอม ๆ กน
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP การหยดการเชอมตอ
Transport Layer 3-84
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-85
ความคบคง ความหมายไมเปนทางการ ldquoเมอจ านวนคนสงมากเกนไป ก าลงสงขอมลมาก
เกนไปดวยอตราการสงเรวเกนกวาท Network จะรบไหวrdquo แตกตางจาก flow control ผลทอาจทเกดขนจากความคบคง
packets หาย (buffer ลนท routers) ลาชามาก (เขาควใน buffers ของ router)
เปนปญหาทคนสนใจตด 10 อนดบตนๆ
หลกการของการควบคมความคบคงของเครอขาย
Transport Layer 3-86
ตนเหตและผลของความคบคง เหตการณ 1
มผสงและผรบอยางละสองคน Router 1 ตว ไมจ ากด buffers ความจของ link R ไมมการสงขอมลซ า
อตราขอมลทสงส าเรจตอหนงการเชอมตอ R2
buffer ท link ขาออกม buffer ไมจกด
Host A
อตราการสงขอมลตนฉบบ lin
Host B
อตราขอมลทสงส าเรจ lout
R2
R2
lou
t
lin R2 de
lay
lin
ดเลยจะมากขนเมออตราสงขอมลตนฉบบเขาใกลความจของ link
Transport Layer 3-87
Router 1 ตว Buffer แตมขนาด buffer จ ากด ตองสง pkt ไปซ าถา pkt นน timeout
ขอมลเขาของชน application = ขอมลออกจากชน application lin = lout
ขอมลเขาของชน transport จะรวมทตองสงซ าดวย lin lin
Buffer ของ link ทใชรวมกนซงมขนาดจ ากด
Host A
lin ขอมลตนฉบบ
Host B
lout lin ขอมลตนฉบบบวกกบ ขอมลทตองสงซ า
lsquo
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-88
ในอดมคต สมมตผสงรความเปนไปในเครอขาย ผสงสงเฉพาะตอนทเราเตอรม buffer เหลออย
Buffer ของ link ทแชรอยางจ ากด
lout copy
ม buffer วาง
R2
R2
lou
t
lin
Host B
A
ตนเหตและผลของความคบคง เหตการณ 2
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-89
lout copy
no buffer space
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
A
Host B
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
เมอสงขอมลท R2 บาง packets ถกสงซ า แต goodput ยงคงมคาลเขาหา R2 (ท าไม)
A
Host B
ตนเหตและผลของความคบคง เหตการณ 2
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Host B
ในความเปนจรง มการสงซ า packets หายหรอตกหลนระหวาง
เสนทางเนองจาก buffers เตม แตบางครง Timer ของผสงหมดเวลาลง
กอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-92
R2
lou
t
ldquoผลrdquo ของความคบคง เพอใหไดขอมลในอตราทตองการ (goodput) ตองท างานมากขน (สงซ า) เมอตองสง packets ซ าโดยทไมจ าเปน link จะตองล าเลยงหลาย copy ของ
ขอมลเดยวกน ท าให goodput ลดลง
R2 lin
ตนเหตและผลของความคบคง เหตการณ 2
ในความเปนจรง มการสงซ า 1 packets หายหรอตกหลนระหวางเสนทางเนองจาก buffers เตม 2 แตบางครง Timer ของผสงหมดเวลาลงกอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Transport Layer 3-93
มผสงขอมลทง 4 โฮสต เสนทางตองผานหลายจด หมดเวลาสงไปขอมลซ า
Q เกดอะไรขนเมอ λin และ λinrsquo เพมขน
Buffer ของเสนทางการสงขอมลทใชรวมกนมขนาดจ ากด
Host A lout
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
Host B
Host C Host D
A เมอ λinrsquo ของขอมลเสนสแดงมขนาดเพมขน ขอมลใน
เสนสน าเงนกจะถก drop ท าให throughput ของ connection สน าเงนเหลอ 0
lin ขอมลตนฉบบ lin ขอมลตนฉบบ บวกกบ
ขอมลทตองสงซ า
Transport Layer 3-94
อกหนง ldquoผลเสยrdquo ของความคบคง เมอแพกเกจถกทงไป นนกเทากบวา ทรยากรเครอขาย (ทใชสงขอมลกอน
หนาทขอมลนจะถกทง) ถกใชไปอยางไรคา
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
แนวทางในการควบคมความคบคงของขอมล
2 แนวทางในการควบคมความคบคง
การควบคมความคบคงโดยใชแคเครองปลายทาง (end-end)
ไมมการแจงกลบ (feedback) จากเครอขาย
ความคบคงของเครอขายจะถกเดาโดยเครองทอยปลายทางทคอยสงเกต loss delay
เปนวธของ TCP
การควบคมความคบคงโดยใหอปกรณเครอขายชวย
routers จะท าการแจง feedback ไปทระบบปลายทาง ใช bit 1 bit เพอระบถงความ
แออด (SNA DECbit TCPIP ECN ATM) หรอ ระบอตราการสงทชดเจน
ส าหรบผสง
Transport Layer 3-96
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
ABR available bit rate ldquoบรการทมความยดหยนrdquo ถาเสนทางของผสง ldquoมขอมลนอยกวา
ความจะมากrdquo ผสงจะใชประโยชนจาก
bandwidth ทเหลออย ถา path ของผสงแออด
ผสงจะคอย ๆ ลดอตราสงใหเหลอเทาอตราการสงขนต าทรบประกนไว
RM (resource management) cells สงโดยผสง แทรก ๆ ไปกบ cell ทเปนขอมล bits ใน RM cell ถกตงคาโดย switches
(ldquoเครอขายคอยชวยrdquo) NI bit ไมเพมอตราการสง (ความแออด
ระดบกลาง) CI bit การบงบอกถงความแออด
ผรบไมแกคาใน bit นของ RM cells และสงไปใหผสง
Transport Layer 3-97
field ขอมล ER (explicit rate) ขนาด 2 byte ใน cell RM switch ทแออดอาจลดคา ER ใน cell ดงนน อตราทผสงจะสงขอมลจะเปนอตราการสงมากทสดท link ในเสนทางจะรองรบได
bit EFCI ใน cell ขอมล ถกตงคาไวท 1 ใน switch ทมขอมลแออด ถา cell ขอมลกอนหนา RM cell ถกตงคา EFCI ผรบจะตงคา bit CI ใน cell RM ท
สงกลบใหผสง
RM cell data cell
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
Transport Layer 3-98
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-99
การควบคมความคบคงของ TCP additive increase (เพมแบบบวก) multiplicative decrease (ลดแบบเทาตว)
วธ ผสงเพมอตราสง (window size) ควานหา bandwidth ทมใหใชได จนกวาการสญหายจะเกดขน additive increase เพม cwnd ทละ 1 MSS ทก ๆ RTT จนกวาจะ pkt จะหาย multiplicative decrease ตดลด cwnd เหลอครงเดยวหลงจากการสญหาย
cwnd
ขนา
ดของ co
nges
tion
wind
ow ของผส
งแบบ
TCP
พฤตกรรมของ AIMD เปน ลกษณะฟนเลอย หา bandwidth
ขนาด window เพมแบบบวก hellip hellip จนกวาจะเกดการสญหาย (จากนน ตดลงเหลอครงนง)
time
Transport Layer 3-100
ผสงจ ากดการสง
ขนาด cwnd จะเปลยนแปลงไปมา ขนกบความคบคงของเครอขายทผสงไดรมา
อตราการสง TCP อยางคราว ๆ สงขอมลจ านวน
cwnd bytes รอ ACKS เพอประมาณคา RTT จากนนสงไบตขอมลเพม
byte สดทายท ถก ACKed สง แตยงไมถก
ACK (ldquoอยระหวางการเดนทางrdquo)
byte สดทายทสงไป
cwnd
LastByteSent-
LastByteAcked lt cwnd
ชวงเลข sequence number ของผสง
rate ~ ~ cwnd
RTT bytessec
การควบคมความคบคงของ TCP รายละเอยด
Transport Layer 3-101
TCP Slow Start
เมอเรมการเชอมตอ เพมอตราการสงแบบยกก าลง (exponentially) จนกวาจะเจอกบ loss ครงแรก เรมตนขนาด cwnd = 1 MSS เพมขนาด cwnd หนงเทาตวทก ๆ RTT นนคอ โดยเพมขนาด cwnd ไป 1 MSS
ส าหรบทก ๆ ACK ทไดรบ
สรป อตราสงเรมแรกจะชาแตคาจะเพมแบบกระโดดขนอยางรวดเรว
Host A
RTT
Host B
time
Transport Layer 3-102
TCP การหา loss และการตอบสนอง
ถา loss ถกระบโดย timeout cwnd ถกตงไวท 1 MSS จากนนหนาตางจะเพมขนเปนเลขยกก าลง (exponential เหมอนใน slow start)
จนไปถงคา threshold จากนนจะเพมขนเปนเชงเสน
ถา loss ถกระบโดยไดรบ ACK ซ า 3 ACKs (3 duplicate acks) TCP RENO
ACKs ซ า ระบถงความสามารถการสง segments ของเครอขาย
cwnd ถกตดเหลอครงนงจากนนเพมขนแบบเชงเสน
TCP Tahoe จะตงคา cwnd เปน 1 เสมอ (ไมวาจะ timeout หรอ 3 dup acks)
Transport Layer 3-103
Q เมอไร TCP ควรจะเปลยนจากการเพมขนแบบ exponential เปนแบบเชงเสน
A เมอ cwnd ถกเพมเปน 12 ของ ldquoคาทมากทสดrdquo ของมนกอนจะเกด timeout
การด าเนนการ ตวแปร ssthresh ขณะเกด Loss ssthresh จะถก
ตงคาท 12 ของคา cwnd กอนเกดเหตแปปเดยว (คา cwnd ทมากทสดกอนเกดเหตการณ)
TCP จาก slow start เปน CA (Congestion Avoidance)
Transport Layer 3-104
สรป TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput ของ TCP
คาเฉลย throughput ของ TCP เปน function ของขนาดของ window และ RTT ไมสนใจ slow start สมมตวาขอมลถกสงตลอด
W ขนาดของ window (หนวยเปน bytes) การสญเสยทเกดขน คาเฉลยขนาดของ window (จ านวน byte ทเดนทางอย) คอ frac34 W คาเฉลยของ throughput คอ 34W ตอ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP ในอนาคต TCP ใน ldquopipes ทยาวและมความจสงrdquo
ตวอยาง 1500 byte segments 100ms RTT ตองการชองทางการสงขนาด 10 Gbps
requires W = 83333 in-flight segments ความเปนไปไดของการสญหายของในชองทางการสงขอมล L [Mathis 1997]
เพอทจะมชองทางการสงขนาด 10Gbps ตองมการสญหายของขอมลเพยงแค =
210-10 ndash นอยมาก ดงนน ตองม TCP รนใหมส าหรบการสงแบบความเรวสง
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
เปาหมายของ fairness ถาม TCP session จ านวน K session ใชทรพยากร bandwidth R รวมกน แตละ session ควรจะเฉลยทรพยากรเหมอนกนท RK
TCP connection 1
router คอขวด มความจ R
ความเสมอภาค (Fairness) ของ TCP
TCP connection 2
Transport Layer 3-108
ความเสมอภาคของ TCP คออะไร session 2 session แขงกนใชทรพยากร additive increase ใหความชนเสนเทากบ 1 (session ทง 2 คอย ๆ ได throughput เพมทละ
นด) multiplicative decrease ลด throughput ไปครงหนง
R
R
เสนระบแบนดวธทใชรวมเทากน
Throuput ของ การเชอมตอท 1
congestion avoidance (CA) additive increase สญเสย ลดขนาดของ window ลงไปครงนง
congestion avoidance (CA) additive increase
สญเสย ลดขนาดของ window ลงไปครงนง
Transport Layer 3-109
ความเสมอภาค (ตอ)
ความเสมอภาค และ UDP มลตมเดยแอพพลเคชนบอยครงไม
ใช TCP ไมตองการใหอตราการสงลดลงเพราะ
การควบคมความคบคง
มลตมเดยแอพพลเคชนจงใช UDP แทน สงเสยงวดโอดวยความเรวคงท ทน
ตอการสญเสยขอมล
ความเสมอภาค การเชอมตอ TCP แบบขนาน แอพพลเคชนสามารถทจะเปดหลายการ
เชอมตอระหวางเครอง 2 เครองแบบขนานได
เวบบราวเซอรท าแบบน ตวอยางเชน link ทมความจ R ซงม 9 การ
เชอมตอ ถาแอพใหมตองการ 1 TCP จะไดรบท rate
R10 ถาแอพใหมตองการ 11 TCPs จะไดรบท R2
Transport Layer 3-110
Chapter 3 บทสรป
หลกการเบองหลงการใหบรการชนtransport multiplexing demultiplexing การสงขอมลแบบไวใจได การควบคมการไหลของขอมล การควบคมความคบคงของขอมล
กรณศกษาและการปฏบตบน internet UDP TCP
ถดไป ออกจากปลายทางของระบบ
เครอขาย (application transport layers)
เขาไปยงสแกนของเครอขาย
Transport Layer 3-9
ท า demultiplexing อยางไร
source port dest port
32 bits
application data
(payload)
other header fields
TCPUDP segment format
host รบดาตาแกรมจากชน IP แตละดาตาแกรมจะมหมายเลขไอพตนทาง
ไอพปลายทาง แตละดาตาแกรมจะม segment ของชน
transportอย แตละ segment จะมหมายเลข port ตน
ทางและปลายทาง (source and destination port number)
host ใชขอมลหมายเลขไอพและหมายเลขพอรต เพอน าเซกเมนตไปยง socket ทถกตอง
Transport Layer 3-10
demultiplexing กรณทไมมการเชอมตอ (Connectionless)
datagrams ของ IP ทม เลข port ปลายทางตวเดยวกน แมจะมทอย IP และหรอ เลข port ของเครองตนทางตางกน (process ทสง datagram เปนคนละ process แตสงมาท process ผรบตวเดยวกน) จะถกน าไปยง socket เดยวกน ทเครองปลายทาง
จากบททแลว socket ทถกสรางจะมหมายเลข port ก ากบ
DatagramSocket mySocket1 = new DatagramSocket(12534)
เมอ host รบ segment ของ UDP ตรวจสอบหมายเลข port ใน
segment น า segment ของ UDP ไปยง
socket ทผกกบ port นน
เมอจะสรางดาตาแกรมเพอสงไปยง
socket ทเปน UDP ตองท าการระบ หมายเลขไอพปลายทาง หมายเลข port ปลายทาง
Transport Layer 3-11
Connectionless demux example
DatagramSocket serverSocket = new DatagramSocket
(6428)
transport
application
physical
link
network
P3 transport
application
physical
link
network
P1
transport
application
physical
link
network
P4
DatagramSocket mySocket1 = new DatagramSocket (5775)
DatagramSocket mySocket2 = new DatagramSocket
(9157)
source port 9157 dest port 6428
source port 6428 dest port 9157
source port dest port
source port dest port
Transport Layer 3-12
socket แบบ TCP ถกระบดวย 4 สวน ซงมองคประกอบดงน source IP address
(หมายเลขไอพตนทาง)
source port number (หมายเลขพอรตตนทาง )
dest IP address (หมายเลขไอพปลายทาง)
dest port number (หมายเลขพอรตปลายทาง )
demux จะดคาทงสสวนเพอน า packet ไปยง sockets ทเหมาะสม
เครองเซรฟเวอรอาจเปด sockets แบบ TCP จ านวนมากพรอมกน ซง แตละ socket ถกระบดวย 4 สวน
(แตจะมสวนท 3 คอหมายเลข IP ปลายทางเหมอน ๆ กน)
web servers จะม socket หลาย ๆ socket ไวส าหรบเชอมตอกบแตละ client HTTP แบบ non-persistent จะใช
socket ทแตกตางกนส าหรบแตละ request
demux กรณทมการเชอมตอ (Connection-oriented)
Transport Layer 3-13
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
P4
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
network
P6 P5 P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
ทง 3 segment มทอย IP ปลายทาง คอ B และ เลขพอรต ปลายทางคอ 80 แตถกแยกสงไปยง socket ทตางกน
server IP address B
Transport Layer 3-14
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
server IP address B
network
P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
P4
threaded server
Transport Layer 3-15
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
เปน protocol ของ Internet ทไมไดมสวนเพมเตมอะไร
บรการแบบ ldquoจะพยายามใหดทสดrdquo (best effort) ดงนน segment แบบ UDP อาจ สญหาย ไปถง app ของผรบแตไมเรยงล าดบ
ไมมการเชอมตอ ไมมการท า handshake ระหวางผสง
และผรบ แตละ segment ทเปน UDP จะถก
จดการเปนอสระจาก segment อน ๆ
UDP ใชใน app ทสง multimedia อยางตอเนอง
(ซงทนตอการสญเสย แต sensitive กบอตราการสง)
DNS SNMP
ถาจะให การถายโอนขอมลบน UDP มความนาเชอถอกวาน เพมความนาเชอถอทชน application มการกคนขอผดพลาด (ขนอยกบ แตละ
application)
Transport Layer 3-17
UDP สวนหวของ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
ควายาวของ segment ของ UDP (หนวยเปน byte) รวมความยาว
ของ header ดวย
ไมตองสรางการเชอมตอ (ซงเปนสวนทเพมความลาชา)
งาย ไมซบซอน ไมตองมสถานะของการเชอมตอทผสงและผรบ
สวนหว (header) มขนาดเลก ไมมการควบคมความคบคง UDP
สามารถสงขอมลไดรวดเรวตามทตองการ
ท าไมถงตองม UDP
Transport Layer 3-18
checksum ของ UDP
ผสง จดการขอมลทงหมดทจะไปอยใน
segment รวมทงขอมลสวนหวตาง ๆ ทเปนล าดบของจ านวนเตม 16 บตหลายจ านวน
checksum ผลรวมของขอมลตาง ๆ ใน segment
ผสงใส checksum เขาไปใน field checksum ใน header ของ UDP
ผรบ ค านวณหา checksum ของ segment ทได
รบมาใหม ตรวจสอบคา checksum ใน field ของ
header กบ คาทเพงไดจากการค านวณ วาเทากนหรอไม ถาไม แสดงวาพบขอผดพลาด ถาใช แสดงวา ไมพบขอผดพลาด แต
จรง ๆ แลว กอาจจะมขอผดพลาดไดอยด (รายละเอยดจะกลาวภายหลง)
จดมงหมาย ตรวจสอบขอผดพลาด เชน bits ทคาโดนกลบใน segment
Transport Layer 3-19
Internet checksum ตวอยาง
ตวอยาง การบวก 16-bit integers สองจ านวน
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note ขณะทบวกตวเลข เมอ bitท 16 (bit ซายสด) มการทดเลข ใหน าเลขนนไปบวกกบ bit ท 1 แลวจง flip bit ทก bit เพอใหได checksum
Transport Layer 3-20
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-21
Principles of reliable data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
หลกการของความนาเชอถอ data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
หลกการของความนาเชอถอ data transfer
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
ส าคญในชน application transport link ตด top-10 ของหวขอทางดานเครอขาย
Transport Layer 3-24
Reliable data transfer เรมตน
ดานผสง ดานผรบ
rdt_send() ถกเรยกจากชนดานบน (เชน โดย app) ท าหนาทผานขอมลเพอใหขอมลถกสงไป
ยงชนดานบนของผรบ
udt_send() ถกเรยกโดย rdt เพอทจะโอนถาย packet ผานชองการ
สอสารท unreliable ไปยงผรบ
rdt_rcv() ถกเรยกโดย OS เมอ OS ไดรบ packet ทมาถงชองการสอสารดานผรบ
deliver_data() ถกเรยกโดย rdt เพอใหสงขอมลไปยงชนดานบน
Transport Layer 3-25
เราจะ คอย ๆ พฒนา protocol ส าหรบการโอนถายขอมลแบบ reliable หรอ reliable
data transfer protocol (rdt) ตอนน พจารณาเฉพาะการโอนถายขอมลแบบทางเดยวกอน
แตขอมลส าหรบการควบคม (control info) จะถกสงไปกลบทงสองทาง
ใช finite state machines (FSM) เพอก าหนดการกระท าของผสงและผรบ
state 1
state 2
เหตการณทท าใหเกดการเปลยนผานของ State การกระท าขณะเปลยนผาน State
สถานะ (state) เมออยใน state ปจจบน state ถดไปจะขนอยกบเหตการณทจะ
เกดขน ณ state ปจจบน
เหตการณ การกระท า
Reliable data transfer เรมตน
Transport Layer 3-26
rdt10 การโอนถายขอมลแบบ reliable ผานชองสญญาณแบบ reliable
สมมตให ชองทางทอยขางใตเปนชองทางทเชอถอได ไมมการผดพลาดของบต ไมมขอมลสญหาย
FSMs ส าหรบผสง และ ส าหรบผ รบ ผสงสงขอมลไปยงชนดานลาง ผรบรบขอมลจากชนดานลาง
รอรบการเรยกจากชน
ดานบน packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
รอรบการเรยกจากชน
ดานลาง
rdt_rcv(packet)
ผสง ผรบ
Transport Layer 3-27
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร
acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK
negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors
sender retransmits pkt on receipt of NAK
new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 ชองทางการสอสารทม bit errors
ปกตแลว มนษยใชวธการใดในการแกไข ldquoerrorsrdquo ระหวางการสนทนา
Transport Layer 3-28
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร การตอบรบ (acknowledgements (ACKs)) ผรบแจงผสงวาไดรบ packet แลว การตอบปฏเสธ (negative acknowledgements (NAKs)) ผรบแจงผสงวา packet ม
errors sender สงขอมลซ าอกครง เมอไดรบ NAK
กลไกทเพมขน in rdt20 (เพมจาก rdt10) การตรวจจบความผดพลาด การแจงกลบ (feedback) ขอมลส าหรบการควบคม (ACKNAK) จากผรบไปยงผสง
rdt20 ชองทางการสอสารทม bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 ขอก าหนดของ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
จะเกดอะไรขนถา ACKNAK เกดเสยหาย ผสงไมรวาผรบรบ pkt ครบถวน
หรอไม ไมควรสง pkt ซ าอกครง เพราะ
pkt ซ ากน
การจดการกบขอมลทซ าซอน ผสงจะสง packet อกครงถา
ACKNAK เกดเสยหาย เตมหมายเลข sequence ใหแตละ
packet ผรบตองทง packet ทซ ากน
stop and wait ผสงท าการสงpacketและรอใหผรบตอบกลบดวย ACKNAK กอนทจะสง packet ตอไป
Transport Layer 3-33
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Transport Layer 3-35
rdt21 อภปราย
ผสง ใสหมายเลข seq ในpacket หมายเลข seq (01) กพอ
นกสท าไม ตองตรวจสอบวา ACKNAK ท
ไดรบเสยไปหรอไม จ านวนหมายเลข seq ตองเปนสอง
เทาของจ านวนสถานะ เพราะผสงตองเกบสถานะเพอldquoจ าrdquo
วา pkt ถดไปจะตองมเลข seq 0 หรอ 1
ผรบ ตองตรวจสอบวา pkt ทไดรบซ ากบ
pkt ทไดรบกอนหนาหรอไม ผรบจะเกบสถานะทระบวา 0 หรอ 1
คอหมายเลข seq ทคาดวาจะได
ขอสงเกต ผรบไมสามารถรวา ACKNAK สดทายทผสงไดรบถกตองหรอไม
Transport Layer 3-36
rdt22 protocol ทไมตองใช NAK
ท างานเหมอนกบ rdt21 แตใชแค ACKs แทนทจะสง NAK ผรบสง ACK ส าหรบ pkt สดทายทไดรบถกตอง
ฝงรบจะตองรวมหมายเลข seq ของ pkt ทก าลงถก ACK ไปดวย
จะสง ACK ซ าไปทผสงถาไมไดรบ pkt ทมหมายเลข seq ทคาดหวง ผลลพธจะออกมาเหมอนกรณทสง NAK ผสงตองสง pkt ตวลาสดไปใหมอกครง
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 ชองสญญาณทมความผดพลาดและ pkt สญหาย
เพมขอสนนษฐาน ชองสญญาณสามารถสญเสยแพคเกจ (ไมวาจะเปนขอมลหรอ ACKs) ได กลไก checksum หมายเลข seq
ACKs และ การสงซ า สามารถชวย แตมนกยงไมใชทางออก
วธ ผสงรอ ACK กลบมาในชวงเวลาท ldquoสมเหตสมผลrdquo
สง pkt เดมไปใหมอกครงถาไมไดรบ ACK ภายในชวงเวลาน
ถา pkt (หรอ ACK) มาถงลาชา (ไมใชหายไป) การสงใหมกจะเปนการสงซ า ซง seq
ไดจดการเรองเกยวกบขอมลซ าได ผรบตองระบเลข seq ของ pkt ทก าลง
ถก ACKed
ตองใชการนบเวลาถอยหลง (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
ขณะ rdt30 ด าเนนการ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
ขณะ rdt30 ด าเนนการ
Transport Layer 3-42
ประสทธภาพของ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
บตแรกของแพคเกจกถกสง t = 0
ผสง ผรบ
RTT
บตสดทายของแพคเกจถกสง t = L R
บตแรกของแพคเกจมาถง บตสดทายของแพคเกจมาถง สง ACK
ไดรบ ACK สงแพคเกจตอไป t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols แบบ pipelined
pipelining ผสงสงหลาย packet ไปยงผรบทง ๆ ท pkt เหลานนยงไมไดรบการยนยนตอบรบ (not yet acked) ชวงของหมายเลข sequence จะตองเพมขน ตองพกขอมล (buffer) ทผสงและผรบ
protocols แบบ pipelined แบบทวไปมสองแบบ go-Back-N selective repeat
Transport Layer 3-45
Pipelining ชวยเพม utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols แบบ pipeline ภาพรวม
Go-back-N ผสงสามารถสงแพคเกจทไมยงถก
ack ไดไมเกน N แพคเกจใน pipeline
ผรบแคสง cumulative ack ไม ack packet ถามนกอใหเกด gap
ผสงจบเวลาส าหรบแพคเกจทสงไป
นานทสดทยงไมได ack เมอเวลาหมด ผสงจะสงแพคเกจ
ทงหมดทยงไมไดรบ ack อกครง
Selective Repeat ผสงสามารถสงแพคเกจทไมยงถก ack ได
ไมเกน N แพคเกจใน pipeline
ผรบจะตองสง ack กลบใหแตละแพคเกจ
ผสงจะจบเวลาส าหรบแตละแพคเกจท
ไมได ack เมอเวลาส าหรบแพคเกจใดหมด ผสงจะสง
เฉพาะแพคเกจนนเทานน
Transport Layer 3-47
Go-Back-N ผสง
หมายเลข seq (k bit) จะอยใน header ของ packet อนญาตใหขนาด ldquowindowrdquo (ของ pkt ทตดกนและยงไมถก ack) ไมเกน N
ACK(n) จะ ack แพคเกจทงหมดไปจนถงทมหมายเลข seq เทากบ n - ldquoการ ACK แบบรวม (cumulative ACK)rdquo อาจมการไดรบ ACKs หมายเลข seq เดมซ า (ดรายละเอยดดาน receiver)
มการจบเวลาส าหรบแพคเกจทเดนทางอย ซงเดนทางนานทสดและยงไมได ACK (pkt ทมหมายเลข seq นอยทสดใน window)
timeout(n) เวลาหมดท pkt n ผสงจะสง pkt n และ pkt ทงหมดใน window (ซงมหมายเลข seq สงกวา n) อกครง
Transport Layer 3-48
GBN FSM ดานผสงทเพมจากของเดม
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum
out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM ดานผรบทเพมจากของเดม
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
ผ รบ Ack แตละแพคเกจทไดรบมาถกตอง เกบ (buffer) แพคเกจ เทาทจ าเปน เพอทจะสงขอมลทเรยงล าดบแลว ไปยง layer
บนไดในทายทสด
ผสงแคสงแพคเกจซ าเฉพาะแพคเกจทไมไดรบ Ack เทานน ตวจบเวลา (ทางฝงผสง) จะจบเวลาของแตละแพคเกจทไมไดรบ Ack
Window ของผสง มหมายเลข seq อย N หมายเลขตดกน จ ากดหมายเลข seq ของแพตเกจทสงไปแลว และไมไดรบ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
ขอมลมาจาก layer ดานบน ถามหมายเลข seq วางใน window ให
สง pkt ได
timeout(n) สง pkt n ซ า จบเวลาใหม
ACK(n) in [sendbase sendbase+N] รวา ผรบไดรบ pkt n แลว ถา n เกดเปนหมายเลขแรกสดในหนาตาง
(n เทากบ sendbase) ทไมได ถก ack เลอน window ไปทางดานขวา โดยเลอนไปยงหมายเลขทไมไดถก ack
ผสง pkt n in [rcvbase rcvbase+N-1] สง ACK(n) ถาไมเรยงตามล าดบ buffer ถาตามล าดบ สง (รวมถงใหสง pkt ท
เรยงตามล าดบและอยในบฟเฟอร) เลอน window ไปทหมายเลข seq ถดไปของ pkt ทยงไมไดรบจากผสง
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise ทงไปไมตองสนใจ
ผรบ
Transport Layer 3-54
ขณะ Selective repeat ด าเนนการ
สง pkt0
sender receiver
รบ pkt0 สง ack0
รบ pkt1 สง ack1
รบ pkt3 buffer สง ack3 รบ ack0 สง pkt4
รบ ack1 สง pkt5
pkt 2 timeout send pkt2
X loss
รบ pkt4 buffer สง ack4
รบ pkt5 buffer สง ack5
รบ pkt2 deliver pkt2
pkt3 pkt4 pkt5 สง ack2
บนทก ack3 มาถงแลว
sender window (N=4)
บนทก ack4 มาถงแลว บนทก ack4 มาถงแลว
Q เกดอะไรขนเมอ ack2 มาถง
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
สง pkt1 สง pkt2
สง pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
ตวอยาง หมายเลข seq 0 1 2 3 ขนาดของ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
ผรบไมสามารถเหนดานผสงได พฤตกรรมผรบจะเหมอนกนทง 2 สถานการณ
มบางอยางทผด (มาก)
ผรบไมเหนถงความแตกตางของทง 2 เหตการณจ าลองน
ในเหตการณจ าลอง (b) ขอมลเกาทถกสงซ า เมอผรบรบมา จะนกวาเปนขอมลใหม
Q ขนาดของ seq กบขนาดของ
window เกยวของกนยงไงเพอทจะหลกเลยงปญหาในตวอยาง (b)
Transport Layer 3-56
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-57
TCP ภาพรวม RFCs 79311221323 2018 2581
ขอมลแบบสองทศทาง มการสงขอมลทงไปและกลบในการ
เชอมตอ (connection) เดยวกน MSS ขนาด segment ทใหญสดท
TCP จะรบได (Max Segment Size)
connection-oriented handshaking (การแลกเปลยนของ
ขอความควบคม) ตงคาสถานะตงตนใหผสงและผรบ กอนการแลกเปลยนขอความ
flow controlled ผสงจะไมสงขอมลเกนกวาทผรบจะรบ
ได
point-to-point (สถานทนง-ไป-สถานทนง) ผสงหนงคน ผรบหนงคน
สายขอมลเปนไบตทเรยงล าดบและขอมลไมสญหาย (reliable in-order byte steam) ไมม ldquoขอบเขตrdquo ของขอความ
(ขอความจะมาถงผรบตอเนองกน)
pipelined การควบคมความคบคงและการควบคม
อตราการไหลของ TCP จะก าหนดขนาดของ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG ขอมลเรงดวน (โดยทว ๆ ไป ไมถกใช)
ACK ACK valid
PSH ผลกขอมลใหชน app (โดยทว ๆ ไป ไมถกใช)
RST SYN FIN สรางการเชอตอ
(ค าสง setup teardown)
จ านวน bytes ท ผรบเตมใจจะรบ
นบโดยใช byte ของขอมล (ไมใช segment)
Internet checksum
(เหมอนใน UDP)
Transport Layer 3-59
TCP seq numbers ACKs
หมายเลข sequence เลขของ byte stream จะเปน byte
แรกของขอมลของ segment น acknowledgements เลข seq ของ byte ถดไปทอกดานหนง
คาดหวงวาจะได cumulative ACK (ACK แบบรวม)
Q ผรบจดการกบ segment ทมาถงไมเรยงล าดบอยางไร A TCP ไมมรายละเอยดสวนน ndash ขนอย
กบคนทจะมาเขยนโปรแกรม TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาเขามาถงผสง
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาออกจากผสง
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
เหตการณจ าลอง telnet อยางงาย
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q เราควรจะก าหนด time out ไวทเทาใด
มากกวาเวลาของ RTT แตเวลาของ RTT นนแปรปรวน
ก าหนดไวนอยเกนไป timeout กอนก าหนด ท าใหมการ retransmissions โดยไมจ าเปน
ก าหนดไวมากเกนไป ระบบตอบสนองตอการสญหายของ segment ชาเกนไป
Q จะประมาณเวลาของ RTT อยางไร
SampleRTT วดจากระยะเวลาตงแตเรมสง sengment จนกระทงไดรบACK ไมสนใจการ retransmissions
SampleRTT มคาแปรปรวน เราตองการประมาณเวลาของ RTT ให smooth กวา ใชคาเฉลยของคาหลาย ๆ คา ไมใชแค
เวลาของ SampleRTT ปจจบน
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
คาเฉลยของการเคลอนทถวงน าหนกแบบ exponential คา SampleRTT ทในอดตจะมผลตอ EstimatedRTT ลดลงแบบ exponentially โดยทวไปจะก าหนดคา = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
ชวงเวลาของ timeout EstimatedRTT บวกกบระยะเวลาทเผอเอาไว ยงคาของ EstimatedRTT ทแปรปรวนมากเทาไร -gt ระยะเวลาทเผอความมากขนตาม
มประเมนคาการเปลยนแปลงของ SampleRTT จาก EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoชวงเวลาทเผอrdquo
Transport Layer 3-64
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP สรางบรการแบบ reliable อยบนบรการของ IP ทเปนแบบ unreliable segments ถกสงแบบ pipeline cumulative acks ม timer ส าหรบสงใหมคาตวเดยว
TCP สง segment ใหมเมอ เหตการณ timeout ไดรบ acks ซ า ๆ กน
เรามาเรมตนพจารณาทางดานผสงของ TCP อยางงายกอน ยงไมตองสนใจ acks ซ า ยงไมตองสนใจการควบคม flow และ
ความคบคง
Transport Layer 3-66
เหตการณของ TCP sender
เมอไดขอมลจาก app สราง segment ดวยหมายเลข seq เลข seq คอหมายเลขของไบตแรก
ของขอมลในแตละ segment หาก timer ยงไมเคยถกตง จะเรม
ตงเวลา การตงเวลาเพอจบเวลาส าหรบ
segment เกาทสดยงไมไดรบ ack ชวงเวลาทหมดอาย
TimeOutInterval
timeout สงใหมเฉพาะ segment ทเกด
timeout ตงเวลานบใหม เมอไดรบ ack ถา ack เปน ack ของ segment
กอนหนายงไมไดรบ ack Update สงทรวา ถก ACK แลว เรมตงเวลานบ ถายงคงม segment
ทยงไมไดรบ acked
Transport Layer 3-67
ดานผสงของ TCP (อยางงาย)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
การสราง ACK ของ TCP [RFC 1122 RFC 2581]
เหตการณทผรบ เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ) โดยขอมลทงหมดจนถงเลข seq ทคาดหวงไว ถก ACK หมดแลว
เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ ท าให ไมม gap ใน segment ทไดมา) แตมบาง segment ยงไมได ACK
Segment มาถงแบบไมเรยงตามล าดบ โดยมเลข seq สงกวาทตองการ ท าใหม gap (ชองโหว) เกดขน Segment ท ามาถง ทจะเตมบางสวนหรอเตมเตมชองโหว
TCP receiver action อยาเพงสง ACK รออก segment นง โดยรอสก 500ms หากยงไมม segment มา กสง ACK สง ACK แบบรวม (cumulative) ไปทนทในครงเดยว ซงจะเปนการ Ack segment ทมาแบบเรยงตามล าดบทงสอง segments สง ACK ซ า ไปทนท โดยใสเลข seq ของ byte ทตองการ สง ACK แบบรวมทนท โดย segment ทจะ Ack เรมจากดานทนอยกวาของ gap
Transport Layer 3-71
TCP fast retransmit
ระยะเวลาในการ time-out มกจะคอนขางยาว (โดยเปรยบเทยบ) ท าใหใชเวลาคอนขางนานกอนทจะ
สง packet อกครง
แกโดย ตรวจสอบการสญเสย pack โดยดท ACKs ทซ า ๆ กน ผสงมกสง segment ตด ๆ กน ดงนน ถา segment หนงหายไป จง
เปนไปไดทจะม ACKs ซ า ๆ กนจ านวนมาก
ถาผสงไดรบ ACKs ส าหรบขอมลเดยวกน 3 ACKS (ACKs ทซ ากนสามครง) ผสงตองสง seq ทยงไมถก acked (ระบเลข seq ทเลกทสด) มแนวโนมวา segment ทยงไมถก
ack จะหายไปเลย ดงนน จงไมตองรอใหหมดเวลา
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-74
TCP flow control application
process
buffer ดานผรบ ของ TCP socket
TCP code
IP code
application
OS
protocol stack ดานผรบ
application ลบขอมลจาก buffer ของ TCP socket hellip
hellip ชากวา TCP สงขอมล ขนไป (ขณะทผสงก าลงจะสง)
from sender
ผรบสามารถควบคมผสงได ดงนน ผสงจะไมสงขอมลเรวไป หรอ มากเกนไปจนลน (Overflow) buffer ของผรบ
flow control
Transport Layer 3-75
การควบคมการไหลขอมลของ TCP
ขอมลทอย buffer
buffer สวนทยงวาง rwnd
RcvBuffer
สวนของขอมล (payload) ใน segment ของ TCP
ไปยง process ของ application
ผรบระบขนาดของ buffer ทวางไวใน field rwnd ทอยในสวนหวของ TCP ทจะสงไปยงผสง ผเขยนโปรแกรมระบขนาดของ RcvBuffer ได
โดยใช API ตงคา option ของ socket (คาเรมตนทวไปคอ 4096 ไบต)
ทกระบบปฏบตการจะปรบขนาด RcvBuffer อตโนมต
ผสงจ ากดจ านวนของขอมลทยงไมถก acked (ldquoอยในระหวางการเดนทางrdquo) ใหเทากบคา rwnd ของขอมลผรบ
เปนการรบประกนวา buffer ของผรบจะไมลน
การbuffer ในดานของผรบ
Transport Layer 3-76
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-77
การจดการกบการเชอมตอ กอนทจะมการแลกเปลยนขอมลกน ผสงและผรบตองตกลงกนกอน ตกลงรวมในการสรางการเชอมตอ (แตละคนจะรวาอกฝายอยากจะเชอมตอหรอไม) ตกลงคาพารามเตอรส าหรบการเชอมตอ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake จะท างานไดเสมอไปหรอไมบน network
ความลาชาอาจเปลยนไป ขอความอาจถกสงซ าตวอยาง (เชน
req_conn(x)) เนองจากการสญหายของขอมล
ขอมลอาจสลบกน ไมสามารถรไดวาอกฝงไดรบหรอไม
ไดรบขอมลอะไร
2-way handshake
มาคยกนเถอะ
ตกลง ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-79
เหตการณผดพลาดของ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-80
3-way handshake ของ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM ของ 3-way handshake ของ TCP
Transport Layer 3-82
TCP การหยดการเชอมตอ
client server เลกเชอมตอทแตละดานของการเชอมตอ โดยแตละดานจะสง TCP segment ดวย FIN bit = 1
ตอบกลบ FIN ดวย ACK ในขณะทรบ FIN ACK กสามารถรวมอยในแพคเกจทสง FIN มาไดดวย
แตละดานสามารถสง FIN ไดพรอม ๆ กน
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP การหยดการเชอมตอ
Transport Layer 3-84
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-85
ความคบคง ความหมายไมเปนทางการ ldquoเมอจ านวนคนสงมากเกนไป ก าลงสงขอมลมาก
เกนไปดวยอตราการสงเรวเกนกวาท Network จะรบไหวrdquo แตกตางจาก flow control ผลทอาจทเกดขนจากความคบคง
packets หาย (buffer ลนท routers) ลาชามาก (เขาควใน buffers ของ router)
เปนปญหาทคนสนใจตด 10 อนดบตนๆ
หลกการของการควบคมความคบคงของเครอขาย
Transport Layer 3-86
ตนเหตและผลของความคบคง เหตการณ 1
มผสงและผรบอยางละสองคน Router 1 ตว ไมจ ากด buffers ความจของ link R ไมมการสงขอมลซ า
อตราขอมลทสงส าเรจตอหนงการเชอมตอ R2
buffer ท link ขาออกม buffer ไมจกด
Host A
อตราการสงขอมลตนฉบบ lin
Host B
อตราขอมลทสงส าเรจ lout
R2
R2
lou
t
lin R2 de
lay
lin
ดเลยจะมากขนเมออตราสงขอมลตนฉบบเขาใกลความจของ link
Transport Layer 3-87
Router 1 ตว Buffer แตมขนาด buffer จ ากด ตองสง pkt ไปซ าถา pkt นน timeout
ขอมลเขาของชน application = ขอมลออกจากชน application lin = lout
ขอมลเขาของชน transport จะรวมทตองสงซ าดวย lin lin
Buffer ของ link ทใชรวมกนซงมขนาดจ ากด
Host A
lin ขอมลตนฉบบ
Host B
lout lin ขอมลตนฉบบบวกกบ ขอมลทตองสงซ า
lsquo
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-88
ในอดมคต สมมตผสงรความเปนไปในเครอขาย ผสงสงเฉพาะตอนทเราเตอรม buffer เหลออย
Buffer ของ link ทแชรอยางจ ากด
lout copy
ม buffer วาง
R2
R2
lou
t
lin
Host B
A
ตนเหตและผลของความคบคง เหตการณ 2
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-89
lout copy
no buffer space
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
A
Host B
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
เมอสงขอมลท R2 บาง packets ถกสงซ า แต goodput ยงคงมคาลเขาหา R2 (ท าไม)
A
Host B
ตนเหตและผลของความคบคง เหตการณ 2
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Host B
ในความเปนจรง มการสงซ า packets หายหรอตกหลนระหวาง
เสนทางเนองจาก buffers เตม แตบางครง Timer ของผสงหมดเวลาลง
กอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-92
R2
lou
t
ldquoผลrdquo ของความคบคง เพอใหไดขอมลในอตราทตองการ (goodput) ตองท างานมากขน (สงซ า) เมอตองสง packets ซ าโดยทไมจ าเปน link จะตองล าเลยงหลาย copy ของ
ขอมลเดยวกน ท าให goodput ลดลง
R2 lin
ตนเหตและผลของความคบคง เหตการณ 2
ในความเปนจรง มการสงซ า 1 packets หายหรอตกหลนระหวางเสนทางเนองจาก buffers เตม 2 แตบางครง Timer ของผสงหมดเวลาลงกอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Transport Layer 3-93
มผสงขอมลทง 4 โฮสต เสนทางตองผานหลายจด หมดเวลาสงไปขอมลซ า
Q เกดอะไรขนเมอ λin และ λinrsquo เพมขน
Buffer ของเสนทางการสงขอมลทใชรวมกนมขนาดจ ากด
Host A lout
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
Host B
Host C Host D
A เมอ λinrsquo ของขอมลเสนสแดงมขนาดเพมขน ขอมลใน
เสนสน าเงนกจะถก drop ท าให throughput ของ connection สน าเงนเหลอ 0
lin ขอมลตนฉบบ lin ขอมลตนฉบบ บวกกบ
ขอมลทตองสงซ า
Transport Layer 3-94
อกหนง ldquoผลเสยrdquo ของความคบคง เมอแพกเกจถกทงไป นนกเทากบวา ทรยากรเครอขาย (ทใชสงขอมลกอน
หนาทขอมลนจะถกทง) ถกใชไปอยางไรคา
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
แนวทางในการควบคมความคบคงของขอมล
2 แนวทางในการควบคมความคบคง
การควบคมความคบคงโดยใชแคเครองปลายทาง (end-end)
ไมมการแจงกลบ (feedback) จากเครอขาย
ความคบคงของเครอขายจะถกเดาโดยเครองทอยปลายทางทคอยสงเกต loss delay
เปนวธของ TCP
การควบคมความคบคงโดยใหอปกรณเครอขายชวย
routers จะท าการแจง feedback ไปทระบบปลายทาง ใช bit 1 bit เพอระบถงความ
แออด (SNA DECbit TCPIP ECN ATM) หรอ ระบอตราการสงทชดเจน
ส าหรบผสง
Transport Layer 3-96
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
ABR available bit rate ldquoบรการทมความยดหยนrdquo ถาเสนทางของผสง ldquoมขอมลนอยกวา
ความจะมากrdquo ผสงจะใชประโยชนจาก
bandwidth ทเหลออย ถา path ของผสงแออด
ผสงจะคอย ๆ ลดอตราสงใหเหลอเทาอตราการสงขนต าทรบประกนไว
RM (resource management) cells สงโดยผสง แทรก ๆ ไปกบ cell ทเปนขอมล bits ใน RM cell ถกตงคาโดย switches
(ldquoเครอขายคอยชวยrdquo) NI bit ไมเพมอตราการสง (ความแออด
ระดบกลาง) CI bit การบงบอกถงความแออด
ผรบไมแกคาใน bit นของ RM cells และสงไปใหผสง
Transport Layer 3-97
field ขอมล ER (explicit rate) ขนาด 2 byte ใน cell RM switch ทแออดอาจลดคา ER ใน cell ดงนน อตราทผสงจะสงขอมลจะเปนอตราการสงมากทสดท link ในเสนทางจะรองรบได
bit EFCI ใน cell ขอมล ถกตงคาไวท 1 ใน switch ทมขอมลแออด ถา cell ขอมลกอนหนา RM cell ถกตงคา EFCI ผรบจะตงคา bit CI ใน cell RM ท
สงกลบใหผสง
RM cell data cell
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
Transport Layer 3-98
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-99
การควบคมความคบคงของ TCP additive increase (เพมแบบบวก) multiplicative decrease (ลดแบบเทาตว)
วธ ผสงเพมอตราสง (window size) ควานหา bandwidth ทมใหใชได จนกวาการสญหายจะเกดขน additive increase เพม cwnd ทละ 1 MSS ทก ๆ RTT จนกวาจะ pkt จะหาย multiplicative decrease ตดลด cwnd เหลอครงเดยวหลงจากการสญหาย
cwnd
ขนา
ดของ co
nges
tion
wind
ow ของผส
งแบบ
TCP
พฤตกรรมของ AIMD เปน ลกษณะฟนเลอย หา bandwidth
ขนาด window เพมแบบบวก hellip hellip จนกวาจะเกดการสญหาย (จากนน ตดลงเหลอครงนง)
time
Transport Layer 3-100
ผสงจ ากดการสง
ขนาด cwnd จะเปลยนแปลงไปมา ขนกบความคบคงของเครอขายทผสงไดรมา
อตราการสง TCP อยางคราว ๆ สงขอมลจ านวน
cwnd bytes รอ ACKS เพอประมาณคา RTT จากนนสงไบตขอมลเพม
byte สดทายท ถก ACKed สง แตยงไมถก
ACK (ldquoอยระหวางการเดนทางrdquo)
byte สดทายทสงไป
cwnd
LastByteSent-
LastByteAcked lt cwnd
ชวงเลข sequence number ของผสง
rate ~ ~ cwnd
RTT bytessec
การควบคมความคบคงของ TCP รายละเอยด
Transport Layer 3-101
TCP Slow Start
เมอเรมการเชอมตอ เพมอตราการสงแบบยกก าลง (exponentially) จนกวาจะเจอกบ loss ครงแรก เรมตนขนาด cwnd = 1 MSS เพมขนาด cwnd หนงเทาตวทก ๆ RTT นนคอ โดยเพมขนาด cwnd ไป 1 MSS
ส าหรบทก ๆ ACK ทไดรบ
สรป อตราสงเรมแรกจะชาแตคาจะเพมแบบกระโดดขนอยางรวดเรว
Host A
RTT
Host B
time
Transport Layer 3-102
TCP การหา loss และการตอบสนอง
ถา loss ถกระบโดย timeout cwnd ถกตงไวท 1 MSS จากนนหนาตางจะเพมขนเปนเลขยกก าลง (exponential เหมอนใน slow start)
จนไปถงคา threshold จากนนจะเพมขนเปนเชงเสน
ถา loss ถกระบโดยไดรบ ACK ซ า 3 ACKs (3 duplicate acks) TCP RENO
ACKs ซ า ระบถงความสามารถการสง segments ของเครอขาย
cwnd ถกตดเหลอครงนงจากนนเพมขนแบบเชงเสน
TCP Tahoe จะตงคา cwnd เปน 1 เสมอ (ไมวาจะ timeout หรอ 3 dup acks)
Transport Layer 3-103
Q เมอไร TCP ควรจะเปลยนจากการเพมขนแบบ exponential เปนแบบเชงเสน
A เมอ cwnd ถกเพมเปน 12 ของ ldquoคาทมากทสดrdquo ของมนกอนจะเกด timeout
การด าเนนการ ตวแปร ssthresh ขณะเกด Loss ssthresh จะถก
ตงคาท 12 ของคา cwnd กอนเกดเหตแปปเดยว (คา cwnd ทมากทสดกอนเกดเหตการณ)
TCP จาก slow start เปน CA (Congestion Avoidance)
Transport Layer 3-104
สรป TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput ของ TCP
คาเฉลย throughput ของ TCP เปน function ของขนาดของ window และ RTT ไมสนใจ slow start สมมตวาขอมลถกสงตลอด
W ขนาดของ window (หนวยเปน bytes) การสญเสยทเกดขน คาเฉลยขนาดของ window (จ านวน byte ทเดนทางอย) คอ frac34 W คาเฉลยของ throughput คอ 34W ตอ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP ในอนาคต TCP ใน ldquopipes ทยาวและมความจสงrdquo
ตวอยาง 1500 byte segments 100ms RTT ตองการชองทางการสงขนาด 10 Gbps
requires W = 83333 in-flight segments ความเปนไปไดของการสญหายของในชองทางการสงขอมล L [Mathis 1997]
เพอทจะมชองทางการสงขนาด 10Gbps ตองมการสญหายของขอมลเพยงแค =
210-10 ndash นอยมาก ดงนน ตองม TCP รนใหมส าหรบการสงแบบความเรวสง
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
เปาหมายของ fairness ถาม TCP session จ านวน K session ใชทรพยากร bandwidth R รวมกน แตละ session ควรจะเฉลยทรพยากรเหมอนกนท RK
TCP connection 1
router คอขวด มความจ R
ความเสมอภาค (Fairness) ของ TCP
TCP connection 2
Transport Layer 3-108
ความเสมอภาคของ TCP คออะไร session 2 session แขงกนใชทรพยากร additive increase ใหความชนเสนเทากบ 1 (session ทง 2 คอย ๆ ได throughput เพมทละ
นด) multiplicative decrease ลด throughput ไปครงหนง
R
R
เสนระบแบนดวธทใชรวมเทากน
Throuput ของ การเชอมตอท 1
congestion avoidance (CA) additive increase สญเสย ลดขนาดของ window ลงไปครงนง
congestion avoidance (CA) additive increase
สญเสย ลดขนาดของ window ลงไปครงนง
Transport Layer 3-109
ความเสมอภาค (ตอ)
ความเสมอภาค และ UDP มลตมเดยแอพพลเคชนบอยครงไม
ใช TCP ไมตองการใหอตราการสงลดลงเพราะ
การควบคมความคบคง
มลตมเดยแอพพลเคชนจงใช UDP แทน สงเสยงวดโอดวยความเรวคงท ทน
ตอการสญเสยขอมล
ความเสมอภาค การเชอมตอ TCP แบบขนาน แอพพลเคชนสามารถทจะเปดหลายการ
เชอมตอระหวางเครอง 2 เครองแบบขนานได
เวบบราวเซอรท าแบบน ตวอยางเชน link ทมความจ R ซงม 9 การ
เชอมตอ ถาแอพใหมตองการ 1 TCP จะไดรบท rate
R10 ถาแอพใหมตองการ 11 TCPs จะไดรบท R2
Transport Layer 3-110
Chapter 3 บทสรป
หลกการเบองหลงการใหบรการชนtransport multiplexing demultiplexing การสงขอมลแบบไวใจได การควบคมการไหลของขอมล การควบคมความคบคงของขอมล
กรณศกษาและการปฏบตบน internet UDP TCP
ถดไป ออกจากปลายทางของระบบ
เครอขาย (application transport layers)
เขาไปยงสแกนของเครอขาย
Transport Layer 3-10
demultiplexing กรณทไมมการเชอมตอ (Connectionless)
datagrams ของ IP ทม เลข port ปลายทางตวเดยวกน แมจะมทอย IP และหรอ เลข port ของเครองตนทางตางกน (process ทสง datagram เปนคนละ process แตสงมาท process ผรบตวเดยวกน) จะถกน าไปยง socket เดยวกน ทเครองปลายทาง
จากบททแลว socket ทถกสรางจะมหมายเลข port ก ากบ
DatagramSocket mySocket1 = new DatagramSocket(12534)
เมอ host รบ segment ของ UDP ตรวจสอบหมายเลข port ใน
segment น า segment ของ UDP ไปยง
socket ทผกกบ port นน
เมอจะสรางดาตาแกรมเพอสงไปยง
socket ทเปน UDP ตองท าการระบ หมายเลขไอพปลายทาง หมายเลข port ปลายทาง
Transport Layer 3-11
Connectionless demux example
DatagramSocket serverSocket = new DatagramSocket
(6428)
transport
application
physical
link
network
P3 transport
application
physical
link
network
P1
transport
application
physical
link
network
P4
DatagramSocket mySocket1 = new DatagramSocket (5775)
DatagramSocket mySocket2 = new DatagramSocket
(9157)
source port 9157 dest port 6428
source port 6428 dest port 9157
source port dest port
source port dest port
Transport Layer 3-12
socket แบบ TCP ถกระบดวย 4 สวน ซงมองคประกอบดงน source IP address
(หมายเลขไอพตนทาง)
source port number (หมายเลขพอรตตนทาง )
dest IP address (หมายเลขไอพปลายทาง)
dest port number (หมายเลขพอรตปลายทาง )
demux จะดคาทงสสวนเพอน า packet ไปยง sockets ทเหมาะสม
เครองเซรฟเวอรอาจเปด sockets แบบ TCP จ านวนมากพรอมกน ซง แตละ socket ถกระบดวย 4 สวน
(แตจะมสวนท 3 คอหมายเลข IP ปลายทางเหมอน ๆ กน)
web servers จะม socket หลาย ๆ socket ไวส าหรบเชอมตอกบแตละ client HTTP แบบ non-persistent จะใช
socket ทแตกตางกนส าหรบแตละ request
demux กรณทมการเชอมตอ (Connection-oriented)
Transport Layer 3-13
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
P4
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
network
P6 P5 P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
ทง 3 segment มทอย IP ปลายทาง คอ B และ เลขพอรต ปลายทางคอ 80 แตถกแยกสงไปยง socket ทตางกน
server IP address B
Transport Layer 3-14
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
server IP address B
network
P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
P4
threaded server
Transport Layer 3-15
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
เปน protocol ของ Internet ทไมไดมสวนเพมเตมอะไร
บรการแบบ ldquoจะพยายามใหดทสดrdquo (best effort) ดงนน segment แบบ UDP อาจ สญหาย ไปถง app ของผรบแตไมเรยงล าดบ
ไมมการเชอมตอ ไมมการท า handshake ระหวางผสง
และผรบ แตละ segment ทเปน UDP จะถก
จดการเปนอสระจาก segment อน ๆ
UDP ใชใน app ทสง multimedia อยางตอเนอง
(ซงทนตอการสญเสย แต sensitive กบอตราการสง)
DNS SNMP
ถาจะให การถายโอนขอมลบน UDP มความนาเชอถอกวาน เพมความนาเชอถอทชน application มการกคนขอผดพลาด (ขนอยกบ แตละ
application)
Transport Layer 3-17
UDP สวนหวของ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
ควายาวของ segment ของ UDP (หนวยเปน byte) รวมความยาว
ของ header ดวย
ไมตองสรางการเชอมตอ (ซงเปนสวนทเพมความลาชา)
งาย ไมซบซอน ไมตองมสถานะของการเชอมตอทผสงและผรบ
สวนหว (header) มขนาดเลก ไมมการควบคมความคบคง UDP
สามารถสงขอมลไดรวดเรวตามทตองการ
ท าไมถงตองม UDP
Transport Layer 3-18
checksum ของ UDP
ผสง จดการขอมลทงหมดทจะไปอยใน
segment รวมทงขอมลสวนหวตาง ๆ ทเปนล าดบของจ านวนเตม 16 บตหลายจ านวน
checksum ผลรวมของขอมลตาง ๆ ใน segment
ผสงใส checksum เขาไปใน field checksum ใน header ของ UDP
ผรบ ค านวณหา checksum ของ segment ทได
รบมาใหม ตรวจสอบคา checksum ใน field ของ
header กบ คาทเพงไดจากการค านวณ วาเทากนหรอไม ถาไม แสดงวาพบขอผดพลาด ถาใช แสดงวา ไมพบขอผดพลาด แต
จรง ๆ แลว กอาจจะมขอผดพลาดไดอยด (รายละเอยดจะกลาวภายหลง)
จดมงหมาย ตรวจสอบขอผดพลาด เชน bits ทคาโดนกลบใน segment
Transport Layer 3-19
Internet checksum ตวอยาง
ตวอยาง การบวก 16-bit integers สองจ านวน
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note ขณะทบวกตวเลข เมอ bitท 16 (bit ซายสด) มการทดเลข ใหน าเลขนนไปบวกกบ bit ท 1 แลวจง flip bit ทก bit เพอใหได checksum
Transport Layer 3-20
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-21
Principles of reliable data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
หลกการของความนาเชอถอ data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
หลกการของความนาเชอถอ data transfer
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
ส าคญในชน application transport link ตด top-10 ของหวขอทางดานเครอขาย
Transport Layer 3-24
Reliable data transfer เรมตน
ดานผสง ดานผรบ
rdt_send() ถกเรยกจากชนดานบน (เชน โดย app) ท าหนาทผานขอมลเพอใหขอมลถกสงไป
ยงชนดานบนของผรบ
udt_send() ถกเรยกโดย rdt เพอทจะโอนถาย packet ผานชองการ
สอสารท unreliable ไปยงผรบ
rdt_rcv() ถกเรยกโดย OS เมอ OS ไดรบ packet ทมาถงชองการสอสารดานผรบ
deliver_data() ถกเรยกโดย rdt เพอใหสงขอมลไปยงชนดานบน
Transport Layer 3-25
เราจะ คอย ๆ พฒนา protocol ส าหรบการโอนถายขอมลแบบ reliable หรอ reliable
data transfer protocol (rdt) ตอนน พจารณาเฉพาะการโอนถายขอมลแบบทางเดยวกอน
แตขอมลส าหรบการควบคม (control info) จะถกสงไปกลบทงสองทาง
ใช finite state machines (FSM) เพอก าหนดการกระท าของผสงและผรบ
state 1
state 2
เหตการณทท าใหเกดการเปลยนผานของ State การกระท าขณะเปลยนผาน State
สถานะ (state) เมออยใน state ปจจบน state ถดไปจะขนอยกบเหตการณทจะ
เกดขน ณ state ปจจบน
เหตการณ การกระท า
Reliable data transfer เรมตน
Transport Layer 3-26
rdt10 การโอนถายขอมลแบบ reliable ผานชองสญญาณแบบ reliable
สมมตให ชองทางทอยขางใตเปนชองทางทเชอถอได ไมมการผดพลาดของบต ไมมขอมลสญหาย
FSMs ส าหรบผสง และ ส าหรบผ รบ ผสงสงขอมลไปยงชนดานลาง ผรบรบขอมลจากชนดานลาง
รอรบการเรยกจากชน
ดานบน packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
รอรบการเรยกจากชน
ดานลาง
rdt_rcv(packet)
ผสง ผรบ
Transport Layer 3-27
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร
acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK
negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors
sender retransmits pkt on receipt of NAK
new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 ชองทางการสอสารทม bit errors
ปกตแลว มนษยใชวธการใดในการแกไข ldquoerrorsrdquo ระหวางการสนทนา
Transport Layer 3-28
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร การตอบรบ (acknowledgements (ACKs)) ผรบแจงผสงวาไดรบ packet แลว การตอบปฏเสธ (negative acknowledgements (NAKs)) ผรบแจงผสงวา packet ม
errors sender สงขอมลซ าอกครง เมอไดรบ NAK
กลไกทเพมขน in rdt20 (เพมจาก rdt10) การตรวจจบความผดพลาด การแจงกลบ (feedback) ขอมลส าหรบการควบคม (ACKNAK) จากผรบไปยงผสง
rdt20 ชองทางการสอสารทม bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 ขอก าหนดของ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
จะเกดอะไรขนถา ACKNAK เกดเสยหาย ผสงไมรวาผรบรบ pkt ครบถวน
หรอไม ไมควรสง pkt ซ าอกครง เพราะ
pkt ซ ากน
การจดการกบขอมลทซ าซอน ผสงจะสง packet อกครงถา
ACKNAK เกดเสยหาย เตมหมายเลข sequence ใหแตละ
packet ผรบตองทง packet ทซ ากน
stop and wait ผสงท าการสงpacketและรอใหผรบตอบกลบดวย ACKNAK กอนทจะสง packet ตอไป
Transport Layer 3-33
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Transport Layer 3-35
rdt21 อภปราย
ผสง ใสหมายเลข seq ในpacket หมายเลข seq (01) กพอ
นกสท าไม ตองตรวจสอบวา ACKNAK ท
ไดรบเสยไปหรอไม จ านวนหมายเลข seq ตองเปนสอง
เทาของจ านวนสถานะ เพราะผสงตองเกบสถานะเพอldquoจ าrdquo
วา pkt ถดไปจะตองมเลข seq 0 หรอ 1
ผรบ ตองตรวจสอบวา pkt ทไดรบซ ากบ
pkt ทไดรบกอนหนาหรอไม ผรบจะเกบสถานะทระบวา 0 หรอ 1
คอหมายเลข seq ทคาดวาจะได
ขอสงเกต ผรบไมสามารถรวา ACKNAK สดทายทผสงไดรบถกตองหรอไม
Transport Layer 3-36
rdt22 protocol ทไมตองใช NAK
ท างานเหมอนกบ rdt21 แตใชแค ACKs แทนทจะสง NAK ผรบสง ACK ส าหรบ pkt สดทายทไดรบถกตอง
ฝงรบจะตองรวมหมายเลข seq ของ pkt ทก าลงถก ACK ไปดวย
จะสง ACK ซ าไปทผสงถาไมไดรบ pkt ทมหมายเลข seq ทคาดหวง ผลลพธจะออกมาเหมอนกรณทสง NAK ผสงตองสง pkt ตวลาสดไปใหมอกครง
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 ชองสญญาณทมความผดพลาดและ pkt สญหาย
เพมขอสนนษฐาน ชองสญญาณสามารถสญเสยแพคเกจ (ไมวาจะเปนขอมลหรอ ACKs) ได กลไก checksum หมายเลข seq
ACKs และ การสงซ า สามารถชวย แตมนกยงไมใชทางออก
วธ ผสงรอ ACK กลบมาในชวงเวลาท ldquoสมเหตสมผลrdquo
สง pkt เดมไปใหมอกครงถาไมไดรบ ACK ภายในชวงเวลาน
ถา pkt (หรอ ACK) มาถงลาชา (ไมใชหายไป) การสงใหมกจะเปนการสงซ า ซง seq
ไดจดการเรองเกยวกบขอมลซ าได ผรบตองระบเลข seq ของ pkt ทก าลง
ถก ACKed
ตองใชการนบเวลาถอยหลง (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
ขณะ rdt30 ด าเนนการ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
ขณะ rdt30 ด าเนนการ
Transport Layer 3-42
ประสทธภาพของ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
บตแรกของแพคเกจกถกสง t = 0
ผสง ผรบ
RTT
บตสดทายของแพคเกจถกสง t = L R
บตแรกของแพคเกจมาถง บตสดทายของแพคเกจมาถง สง ACK
ไดรบ ACK สงแพคเกจตอไป t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols แบบ pipelined
pipelining ผสงสงหลาย packet ไปยงผรบทง ๆ ท pkt เหลานนยงไมไดรบการยนยนตอบรบ (not yet acked) ชวงของหมายเลข sequence จะตองเพมขน ตองพกขอมล (buffer) ทผสงและผรบ
protocols แบบ pipelined แบบทวไปมสองแบบ go-Back-N selective repeat
Transport Layer 3-45
Pipelining ชวยเพม utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols แบบ pipeline ภาพรวม
Go-back-N ผสงสามารถสงแพคเกจทไมยงถก
ack ไดไมเกน N แพคเกจใน pipeline
ผรบแคสง cumulative ack ไม ack packet ถามนกอใหเกด gap
ผสงจบเวลาส าหรบแพคเกจทสงไป
นานทสดทยงไมได ack เมอเวลาหมด ผสงจะสงแพคเกจ
ทงหมดทยงไมไดรบ ack อกครง
Selective Repeat ผสงสามารถสงแพคเกจทไมยงถก ack ได
ไมเกน N แพคเกจใน pipeline
ผรบจะตองสง ack กลบใหแตละแพคเกจ
ผสงจะจบเวลาส าหรบแตละแพคเกจท
ไมได ack เมอเวลาส าหรบแพคเกจใดหมด ผสงจะสง
เฉพาะแพคเกจนนเทานน
Transport Layer 3-47
Go-Back-N ผสง
หมายเลข seq (k bit) จะอยใน header ของ packet อนญาตใหขนาด ldquowindowrdquo (ของ pkt ทตดกนและยงไมถก ack) ไมเกน N
ACK(n) จะ ack แพคเกจทงหมดไปจนถงทมหมายเลข seq เทากบ n - ldquoการ ACK แบบรวม (cumulative ACK)rdquo อาจมการไดรบ ACKs หมายเลข seq เดมซ า (ดรายละเอยดดาน receiver)
มการจบเวลาส าหรบแพคเกจทเดนทางอย ซงเดนทางนานทสดและยงไมได ACK (pkt ทมหมายเลข seq นอยทสดใน window)
timeout(n) เวลาหมดท pkt n ผสงจะสง pkt n และ pkt ทงหมดใน window (ซงมหมายเลข seq สงกวา n) อกครง
Transport Layer 3-48
GBN FSM ดานผสงทเพมจากของเดม
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum
out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM ดานผรบทเพมจากของเดม
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
ผ รบ Ack แตละแพคเกจทไดรบมาถกตอง เกบ (buffer) แพคเกจ เทาทจ าเปน เพอทจะสงขอมลทเรยงล าดบแลว ไปยง layer
บนไดในทายทสด
ผสงแคสงแพคเกจซ าเฉพาะแพคเกจทไมไดรบ Ack เทานน ตวจบเวลา (ทางฝงผสง) จะจบเวลาของแตละแพคเกจทไมไดรบ Ack
Window ของผสง มหมายเลข seq อย N หมายเลขตดกน จ ากดหมายเลข seq ของแพตเกจทสงไปแลว และไมไดรบ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
ขอมลมาจาก layer ดานบน ถามหมายเลข seq วางใน window ให
สง pkt ได
timeout(n) สง pkt n ซ า จบเวลาใหม
ACK(n) in [sendbase sendbase+N] รวา ผรบไดรบ pkt n แลว ถา n เกดเปนหมายเลขแรกสดในหนาตาง
(n เทากบ sendbase) ทไมได ถก ack เลอน window ไปทางดานขวา โดยเลอนไปยงหมายเลขทไมไดถก ack
ผสง pkt n in [rcvbase rcvbase+N-1] สง ACK(n) ถาไมเรยงตามล าดบ buffer ถาตามล าดบ สง (รวมถงใหสง pkt ท
เรยงตามล าดบและอยในบฟเฟอร) เลอน window ไปทหมายเลข seq ถดไปของ pkt ทยงไมไดรบจากผสง
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise ทงไปไมตองสนใจ
ผรบ
Transport Layer 3-54
ขณะ Selective repeat ด าเนนการ
สง pkt0
sender receiver
รบ pkt0 สง ack0
รบ pkt1 สง ack1
รบ pkt3 buffer สง ack3 รบ ack0 สง pkt4
รบ ack1 สง pkt5
pkt 2 timeout send pkt2
X loss
รบ pkt4 buffer สง ack4
รบ pkt5 buffer สง ack5
รบ pkt2 deliver pkt2
pkt3 pkt4 pkt5 สง ack2
บนทก ack3 มาถงแลว
sender window (N=4)
บนทก ack4 มาถงแลว บนทก ack4 มาถงแลว
Q เกดอะไรขนเมอ ack2 มาถง
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
สง pkt1 สง pkt2
สง pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
ตวอยาง หมายเลข seq 0 1 2 3 ขนาดของ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
ผรบไมสามารถเหนดานผสงได พฤตกรรมผรบจะเหมอนกนทง 2 สถานการณ
มบางอยางทผด (มาก)
ผรบไมเหนถงความแตกตางของทง 2 เหตการณจ าลองน
ในเหตการณจ าลอง (b) ขอมลเกาทถกสงซ า เมอผรบรบมา จะนกวาเปนขอมลใหม
Q ขนาดของ seq กบขนาดของ
window เกยวของกนยงไงเพอทจะหลกเลยงปญหาในตวอยาง (b)
Transport Layer 3-56
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-57
TCP ภาพรวม RFCs 79311221323 2018 2581
ขอมลแบบสองทศทาง มการสงขอมลทงไปและกลบในการ
เชอมตอ (connection) เดยวกน MSS ขนาด segment ทใหญสดท
TCP จะรบได (Max Segment Size)
connection-oriented handshaking (การแลกเปลยนของ
ขอความควบคม) ตงคาสถานะตงตนใหผสงและผรบ กอนการแลกเปลยนขอความ
flow controlled ผสงจะไมสงขอมลเกนกวาทผรบจะรบ
ได
point-to-point (สถานทนง-ไป-สถานทนง) ผสงหนงคน ผรบหนงคน
สายขอมลเปนไบตทเรยงล าดบและขอมลไมสญหาย (reliable in-order byte steam) ไมม ldquoขอบเขตrdquo ของขอความ
(ขอความจะมาถงผรบตอเนองกน)
pipelined การควบคมความคบคงและการควบคม
อตราการไหลของ TCP จะก าหนดขนาดของ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG ขอมลเรงดวน (โดยทว ๆ ไป ไมถกใช)
ACK ACK valid
PSH ผลกขอมลใหชน app (โดยทว ๆ ไป ไมถกใช)
RST SYN FIN สรางการเชอตอ
(ค าสง setup teardown)
จ านวน bytes ท ผรบเตมใจจะรบ
นบโดยใช byte ของขอมล (ไมใช segment)
Internet checksum
(เหมอนใน UDP)
Transport Layer 3-59
TCP seq numbers ACKs
หมายเลข sequence เลขของ byte stream จะเปน byte
แรกของขอมลของ segment น acknowledgements เลข seq ของ byte ถดไปทอกดานหนง
คาดหวงวาจะได cumulative ACK (ACK แบบรวม)
Q ผรบจดการกบ segment ทมาถงไมเรยงล าดบอยางไร A TCP ไมมรายละเอยดสวนน ndash ขนอย
กบคนทจะมาเขยนโปรแกรม TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาเขามาถงผสง
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาออกจากผสง
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
เหตการณจ าลอง telnet อยางงาย
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q เราควรจะก าหนด time out ไวทเทาใด
มากกวาเวลาของ RTT แตเวลาของ RTT นนแปรปรวน
ก าหนดไวนอยเกนไป timeout กอนก าหนด ท าใหมการ retransmissions โดยไมจ าเปน
ก าหนดไวมากเกนไป ระบบตอบสนองตอการสญหายของ segment ชาเกนไป
Q จะประมาณเวลาของ RTT อยางไร
SampleRTT วดจากระยะเวลาตงแตเรมสง sengment จนกระทงไดรบACK ไมสนใจการ retransmissions
SampleRTT มคาแปรปรวน เราตองการประมาณเวลาของ RTT ให smooth กวา ใชคาเฉลยของคาหลาย ๆ คา ไมใชแค
เวลาของ SampleRTT ปจจบน
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
คาเฉลยของการเคลอนทถวงน าหนกแบบ exponential คา SampleRTT ทในอดตจะมผลตอ EstimatedRTT ลดลงแบบ exponentially โดยทวไปจะก าหนดคา = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
ชวงเวลาของ timeout EstimatedRTT บวกกบระยะเวลาทเผอเอาไว ยงคาของ EstimatedRTT ทแปรปรวนมากเทาไร -gt ระยะเวลาทเผอความมากขนตาม
มประเมนคาการเปลยนแปลงของ SampleRTT จาก EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoชวงเวลาทเผอrdquo
Transport Layer 3-64
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP สรางบรการแบบ reliable อยบนบรการของ IP ทเปนแบบ unreliable segments ถกสงแบบ pipeline cumulative acks ม timer ส าหรบสงใหมคาตวเดยว
TCP สง segment ใหมเมอ เหตการณ timeout ไดรบ acks ซ า ๆ กน
เรามาเรมตนพจารณาทางดานผสงของ TCP อยางงายกอน ยงไมตองสนใจ acks ซ า ยงไมตองสนใจการควบคม flow และ
ความคบคง
Transport Layer 3-66
เหตการณของ TCP sender
เมอไดขอมลจาก app สราง segment ดวยหมายเลข seq เลข seq คอหมายเลขของไบตแรก
ของขอมลในแตละ segment หาก timer ยงไมเคยถกตง จะเรม
ตงเวลา การตงเวลาเพอจบเวลาส าหรบ
segment เกาทสดยงไมไดรบ ack ชวงเวลาทหมดอาย
TimeOutInterval
timeout สงใหมเฉพาะ segment ทเกด
timeout ตงเวลานบใหม เมอไดรบ ack ถา ack เปน ack ของ segment
กอนหนายงไมไดรบ ack Update สงทรวา ถก ACK แลว เรมตงเวลานบ ถายงคงม segment
ทยงไมไดรบ acked
Transport Layer 3-67
ดานผสงของ TCP (อยางงาย)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
การสราง ACK ของ TCP [RFC 1122 RFC 2581]
เหตการณทผรบ เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ) โดยขอมลทงหมดจนถงเลข seq ทคาดหวงไว ถก ACK หมดแลว
เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ ท าให ไมม gap ใน segment ทไดมา) แตมบาง segment ยงไมได ACK
Segment มาถงแบบไมเรยงตามล าดบ โดยมเลข seq สงกวาทตองการ ท าใหม gap (ชองโหว) เกดขน Segment ท ามาถง ทจะเตมบางสวนหรอเตมเตมชองโหว
TCP receiver action อยาเพงสง ACK รออก segment นง โดยรอสก 500ms หากยงไมม segment มา กสง ACK สง ACK แบบรวม (cumulative) ไปทนทในครงเดยว ซงจะเปนการ Ack segment ทมาแบบเรยงตามล าดบทงสอง segments สง ACK ซ า ไปทนท โดยใสเลข seq ของ byte ทตองการ สง ACK แบบรวมทนท โดย segment ทจะ Ack เรมจากดานทนอยกวาของ gap
Transport Layer 3-71
TCP fast retransmit
ระยะเวลาในการ time-out มกจะคอนขางยาว (โดยเปรยบเทยบ) ท าใหใชเวลาคอนขางนานกอนทจะ
สง packet อกครง
แกโดย ตรวจสอบการสญเสย pack โดยดท ACKs ทซ า ๆ กน ผสงมกสง segment ตด ๆ กน ดงนน ถา segment หนงหายไป จง
เปนไปไดทจะม ACKs ซ า ๆ กนจ านวนมาก
ถาผสงไดรบ ACKs ส าหรบขอมลเดยวกน 3 ACKS (ACKs ทซ ากนสามครง) ผสงตองสง seq ทยงไมถก acked (ระบเลข seq ทเลกทสด) มแนวโนมวา segment ทยงไมถก
ack จะหายไปเลย ดงนน จงไมตองรอใหหมดเวลา
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-74
TCP flow control application
process
buffer ดานผรบ ของ TCP socket
TCP code
IP code
application
OS
protocol stack ดานผรบ
application ลบขอมลจาก buffer ของ TCP socket hellip
hellip ชากวา TCP สงขอมล ขนไป (ขณะทผสงก าลงจะสง)
from sender
ผรบสามารถควบคมผสงได ดงนน ผสงจะไมสงขอมลเรวไป หรอ มากเกนไปจนลน (Overflow) buffer ของผรบ
flow control
Transport Layer 3-75
การควบคมการไหลขอมลของ TCP
ขอมลทอย buffer
buffer สวนทยงวาง rwnd
RcvBuffer
สวนของขอมล (payload) ใน segment ของ TCP
ไปยง process ของ application
ผรบระบขนาดของ buffer ทวางไวใน field rwnd ทอยในสวนหวของ TCP ทจะสงไปยงผสง ผเขยนโปรแกรมระบขนาดของ RcvBuffer ได
โดยใช API ตงคา option ของ socket (คาเรมตนทวไปคอ 4096 ไบต)
ทกระบบปฏบตการจะปรบขนาด RcvBuffer อตโนมต
ผสงจ ากดจ านวนของขอมลทยงไมถก acked (ldquoอยในระหวางการเดนทางrdquo) ใหเทากบคา rwnd ของขอมลผรบ
เปนการรบประกนวา buffer ของผรบจะไมลน
การbuffer ในดานของผรบ
Transport Layer 3-76
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-77
การจดการกบการเชอมตอ กอนทจะมการแลกเปลยนขอมลกน ผสงและผรบตองตกลงกนกอน ตกลงรวมในการสรางการเชอมตอ (แตละคนจะรวาอกฝายอยากจะเชอมตอหรอไม) ตกลงคาพารามเตอรส าหรบการเชอมตอ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake จะท างานไดเสมอไปหรอไมบน network
ความลาชาอาจเปลยนไป ขอความอาจถกสงซ าตวอยาง (เชน
req_conn(x)) เนองจากการสญหายของขอมล
ขอมลอาจสลบกน ไมสามารถรไดวาอกฝงไดรบหรอไม
ไดรบขอมลอะไร
2-way handshake
มาคยกนเถอะ
ตกลง ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-79
เหตการณผดพลาดของ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-80
3-way handshake ของ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM ของ 3-way handshake ของ TCP
Transport Layer 3-82
TCP การหยดการเชอมตอ
client server เลกเชอมตอทแตละดานของการเชอมตอ โดยแตละดานจะสง TCP segment ดวย FIN bit = 1
ตอบกลบ FIN ดวย ACK ในขณะทรบ FIN ACK กสามารถรวมอยในแพคเกจทสง FIN มาไดดวย
แตละดานสามารถสง FIN ไดพรอม ๆ กน
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP การหยดการเชอมตอ
Transport Layer 3-84
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-85
ความคบคง ความหมายไมเปนทางการ ldquoเมอจ านวนคนสงมากเกนไป ก าลงสงขอมลมาก
เกนไปดวยอตราการสงเรวเกนกวาท Network จะรบไหวrdquo แตกตางจาก flow control ผลทอาจทเกดขนจากความคบคง
packets หาย (buffer ลนท routers) ลาชามาก (เขาควใน buffers ของ router)
เปนปญหาทคนสนใจตด 10 อนดบตนๆ
หลกการของการควบคมความคบคงของเครอขาย
Transport Layer 3-86
ตนเหตและผลของความคบคง เหตการณ 1
มผสงและผรบอยางละสองคน Router 1 ตว ไมจ ากด buffers ความจของ link R ไมมการสงขอมลซ า
อตราขอมลทสงส าเรจตอหนงการเชอมตอ R2
buffer ท link ขาออกม buffer ไมจกด
Host A
อตราการสงขอมลตนฉบบ lin
Host B
อตราขอมลทสงส าเรจ lout
R2
R2
lou
t
lin R2 de
lay
lin
ดเลยจะมากขนเมออตราสงขอมลตนฉบบเขาใกลความจของ link
Transport Layer 3-87
Router 1 ตว Buffer แตมขนาด buffer จ ากด ตองสง pkt ไปซ าถา pkt นน timeout
ขอมลเขาของชน application = ขอมลออกจากชน application lin = lout
ขอมลเขาของชน transport จะรวมทตองสงซ าดวย lin lin
Buffer ของ link ทใชรวมกนซงมขนาดจ ากด
Host A
lin ขอมลตนฉบบ
Host B
lout lin ขอมลตนฉบบบวกกบ ขอมลทตองสงซ า
lsquo
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-88
ในอดมคต สมมตผสงรความเปนไปในเครอขาย ผสงสงเฉพาะตอนทเราเตอรม buffer เหลออย
Buffer ของ link ทแชรอยางจ ากด
lout copy
ม buffer วาง
R2
R2
lou
t
lin
Host B
A
ตนเหตและผลของความคบคง เหตการณ 2
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-89
lout copy
no buffer space
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
A
Host B
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
เมอสงขอมลท R2 บาง packets ถกสงซ า แต goodput ยงคงมคาลเขาหา R2 (ท าไม)
A
Host B
ตนเหตและผลของความคบคง เหตการณ 2
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Host B
ในความเปนจรง มการสงซ า packets หายหรอตกหลนระหวาง
เสนทางเนองจาก buffers เตม แตบางครง Timer ของผสงหมดเวลาลง
กอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-92
R2
lou
t
ldquoผลrdquo ของความคบคง เพอใหไดขอมลในอตราทตองการ (goodput) ตองท างานมากขน (สงซ า) เมอตองสง packets ซ าโดยทไมจ าเปน link จะตองล าเลยงหลาย copy ของ
ขอมลเดยวกน ท าให goodput ลดลง
R2 lin
ตนเหตและผลของความคบคง เหตการณ 2
ในความเปนจรง มการสงซ า 1 packets หายหรอตกหลนระหวางเสนทางเนองจาก buffers เตม 2 แตบางครง Timer ของผสงหมดเวลาลงกอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Transport Layer 3-93
มผสงขอมลทง 4 โฮสต เสนทางตองผานหลายจด หมดเวลาสงไปขอมลซ า
Q เกดอะไรขนเมอ λin และ λinrsquo เพมขน
Buffer ของเสนทางการสงขอมลทใชรวมกนมขนาดจ ากด
Host A lout
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
Host B
Host C Host D
A เมอ λinrsquo ของขอมลเสนสแดงมขนาดเพมขน ขอมลใน
เสนสน าเงนกจะถก drop ท าให throughput ของ connection สน าเงนเหลอ 0
lin ขอมลตนฉบบ lin ขอมลตนฉบบ บวกกบ
ขอมลทตองสงซ า
Transport Layer 3-94
อกหนง ldquoผลเสยrdquo ของความคบคง เมอแพกเกจถกทงไป นนกเทากบวา ทรยากรเครอขาย (ทใชสงขอมลกอน
หนาทขอมลนจะถกทง) ถกใชไปอยางไรคา
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
แนวทางในการควบคมความคบคงของขอมล
2 แนวทางในการควบคมความคบคง
การควบคมความคบคงโดยใชแคเครองปลายทาง (end-end)
ไมมการแจงกลบ (feedback) จากเครอขาย
ความคบคงของเครอขายจะถกเดาโดยเครองทอยปลายทางทคอยสงเกต loss delay
เปนวธของ TCP
การควบคมความคบคงโดยใหอปกรณเครอขายชวย
routers จะท าการแจง feedback ไปทระบบปลายทาง ใช bit 1 bit เพอระบถงความ
แออด (SNA DECbit TCPIP ECN ATM) หรอ ระบอตราการสงทชดเจน
ส าหรบผสง
Transport Layer 3-96
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
ABR available bit rate ldquoบรการทมความยดหยนrdquo ถาเสนทางของผสง ldquoมขอมลนอยกวา
ความจะมากrdquo ผสงจะใชประโยชนจาก
bandwidth ทเหลออย ถา path ของผสงแออด
ผสงจะคอย ๆ ลดอตราสงใหเหลอเทาอตราการสงขนต าทรบประกนไว
RM (resource management) cells สงโดยผสง แทรก ๆ ไปกบ cell ทเปนขอมล bits ใน RM cell ถกตงคาโดย switches
(ldquoเครอขายคอยชวยrdquo) NI bit ไมเพมอตราการสง (ความแออด
ระดบกลาง) CI bit การบงบอกถงความแออด
ผรบไมแกคาใน bit นของ RM cells และสงไปใหผสง
Transport Layer 3-97
field ขอมล ER (explicit rate) ขนาด 2 byte ใน cell RM switch ทแออดอาจลดคา ER ใน cell ดงนน อตราทผสงจะสงขอมลจะเปนอตราการสงมากทสดท link ในเสนทางจะรองรบได
bit EFCI ใน cell ขอมล ถกตงคาไวท 1 ใน switch ทมขอมลแออด ถา cell ขอมลกอนหนา RM cell ถกตงคา EFCI ผรบจะตงคา bit CI ใน cell RM ท
สงกลบใหผสง
RM cell data cell
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
Transport Layer 3-98
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-99
การควบคมความคบคงของ TCP additive increase (เพมแบบบวก) multiplicative decrease (ลดแบบเทาตว)
วธ ผสงเพมอตราสง (window size) ควานหา bandwidth ทมใหใชได จนกวาการสญหายจะเกดขน additive increase เพม cwnd ทละ 1 MSS ทก ๆ RTT จนกวาจะ pkt จะหาย multiplicative decrease ตดลด cwnd เหลอครงเดยวหลงจากการสญหาย
cwnd
ขนา
ดของ co
nges
tion
wind
ow ของผส
งแบบ
TCP
พฤตกรรมของ AIMD เปน ลกษณะฟนเลอย หา bandwidth
ขนาด window เพมแบบบวก hellip hellip จนกวาจะเกดการสญหาย (จากนน ตดลงเหลอครงนง)
time
Transport Layer 3-100
ผสงจ ากดการสง
ขนาด cwnd จะเปลยนแปลงไปมา ขนกบความคบคงของเครอขายทผสงไดรมา
อตราการสง TCP อยางคราว ๆ สงขอมลจ านวน
cwnd bytes รอ ACKS เพอประมาณคา RTT จากนนสงไบตขอมลเพม
byte สดทายท ถก ACKed สง แตยงไมถก
ACK (ldquoอยระหวางการเดนทางrdquo)
byte สดทายทสงไป
cwnd
LastByteSent-
LastByteAcked lt cwnd
ชวงเลข sequence number ของผสง
rate ~ ~ cwnd
RTT bytessec
การควบคมความคบคงของ TCP รายละเอยด
Transport Layer 3-101
TCP Slow Start
เมอเรมการเชอมตอ เพมอตราการสงแบบยกก าลง (exponentially) จนกวาจะเจอกบ loss ครงแรก เรมตนขนาด cwnd = 1 MSS เพมขนาด cwnd หนงเทาตวทก ๆ RTT นนคอ โดยเพมขนาด cwnd ไป 1 MSS
ส าหรบทก ๆ ACK ทไดรบ
สรป อตราสงเรมแรกจะชาแตคาจะเพมแบบกระโดดขนอยางรวดเรว
Host A
RTT
Host B
time
Transport Layer 3-102
TCP การหา loss และการตอบสนอง
ถา loss ถกระบโดย timeout cwnd ถกตงไวท 1 MSS จากนนหนาตางจะเพมขนเปนเลขยกก าลง (exponential เหมอนใน slow start)
จนไปถงคา threshold จากนนจะเพมขนเปนเชงเสน
ถา loss ถกระบโดยไดรบ ACK ซ า 3 ACKs (3 duplicate acks) TCP RENO
ACKs ซ า ระบถงความสามารถการสง segments ของเครอขาย
cwnd ถกตดเหลอครงนงจากนนเพมขนแบบเชงเสน
TCP Tahoe จะตงคา cwnd เปน 1 เสมอ (ไมวาจะ timeout หรอ 3 dup acks)
Transport Layer 3-103
Q เมอไร TCP ควรจะเปลยนจากการเพมขนแบบ exponential เปนแบบเชงเสน
A เมอ cwnd ถกเพมเปน 12 ของ ldquoคาทมากทสดrdquo ของมนกอนจะเกด timeout
การด าเนนการ ตวแปร ssthresh ขณะเกด Loss ssthresh จะถก
ตงคาท 12 ของคา cwnd กอนเกดเหตแปปเดยว (คา cwnd ทมากทสดกอนเกดเหตการณ)
TCP จาก slow start เปน CA (Congestion Avoidance)
Transport Layer 3-104
สรป TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput ของ TCP
คาเฉลย throughput ของ TCP เปน function ของขนาดของ window และ RTT ไมสนใจ slow start สมมตวาขอมลถกสงตลอด
W ขนาดของ window (หนวยเปน bytes) การสญเสยทเกดขน คาเฉลยขนาดของ window (จ านวน byte ทเดนทางอย) คอ frac34 W คาเฉลยของ throughput คอ 34W ตอ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP ในอนาคต TCP ใน ldquopipes ทยาวและมความจสงrdquo
ตวอยาง 1500 byte segments 100ms RTT ตองการชองทางการสงขนาด 10 Gbps
requires W = 83333 in-flight segments ความเปนไปไดของการสญหายของในชองทางการสงขอมล L [Mathis 1997]
เพอทจะมชองทางการสงขนาด 10Gbps ตองมการสญหายของขอมลเพยงแค =
210-10 ndash นอยมาก ดงนน ตองม TCP รนใหมส าหรบการสงแบบความเรวสง
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
เปาหมายของ fairness ถาม TCP session จ านวน K session ใชทรพยากร bandwidth R รวมกน แตละ session ควรจะเฉลยทรพยากรเหมอนกนท RK
TCP connection 1
router คอขวด มความจ R
ความเสมอภาค (Fairness) ของ TCP
TCP connection 2
Transport Layer 3-108
ความเสมอภาคของ TCP คออะไร session 2 session แขงกนใชทรพยากร additive increase ใหความชนเสนเทากบ 1 (session ทง 2 คอย ๆ ได throughput เพมทละ
นด) multiplicative decrease ลด throughput ไปครงหนง
R
R
เสนระบแบนดวธทใชรวมเทากน
Throuput ของ การเชอมตอท 1
congestion avoidance (CA) additive increase สญเสย ลดขนาดของ window ลงไปครงนง
congestion avoidance (CA) additive increase
สญเสย ลดขนาดของ window ลงไปครงนง
Transport Layer 3-109
ความเสมอภาค (ตอ)
ความเสมอภาค และ UDP มลตมเดยแอพพลเคชนบอยครงไม
ใช TCP ไมตองการใหอตราการสงลดลงเพราะ
การควบคมความคบคง
มลตมเดยแอพพลเคชนจงใช UDP แทน สงเสยงวดโอดวยความเรวคงท ทน
ตอการสญเสยขอมล
ความเสมอภาค การเชอมตอ TCP แบบขนาน แอพพลเคชนสามารถทจะเปดหลายการ
เชอมตอระหวางเครอง 2 เครองแบบขนานได
เวบบราวเซอรท าแบบน ตวอยางเชน link ทมความจ R ซงม 9 การ
เชอมตอ ถาแอพใหมตองการ 1 TCP จะไดรบท rate
R10 ถาแอพใหมตองการ 11 TCPs จะไดรบท R2
Transport Layer 3-110
Chapter 3 บทสรป
หลกการเบองหลงการใหบรการชนtransport multiplexing demultiplexing การสงขอมลแบบไวใจได การควบคมการไหลของขอมล การควบคมความคบคงของขอมล
กรณศกษาและการปฏบตบน internet UDP TCP
ถดไป ออกจากปลายทางของระบบ
เครอขาย (application transport layers)
เขาไปยงสแกนของเครอขาย
Transport Layer 3-11
Connectionless demux example
DatagramSocket serverSocket = new DatagramSocket
(6428)
transport
application
physical
link
network
P3 transport
application
physical
link
network
P1
transport
application
physical
link
network
P4
DatagramSocket mySocket1 = new DatagramSocket (5775)
DatagramSocket mySocket2 = new DatagramSocket
(9157)
source port 9157 dest port 6428
source port 6428 dest port 9157
source port dest port
source port dest port
Transport Layer 3-12
socket แบบ TCP ถกระบดวย 4 สวน ซงมองคประกอบดงน source IP address
(หมายเลขไอพตนทาง)
source port number (หมายเลขพอรตตนทาง )
dest IP address (หมายเลขไอพปลายทาง)
dest port number (หมายเลขพอรตปลายทาง )
demux จะดคาทงสสวนเพอน า packet ไปยง sockets ทเหมาะสม
เครองเซรฟเวอรอาจเปด sockets แบบ TCP จ านวนมากพรอมกน ซง แตละ socket ถกระบดวย 4 สวน
(แตจะมสวนท 3 คอหมายเลข IP ปลายทางเหมอน ๆ กน)
web servers จะม socket หลาย ๆ socket ไวส าหรบเชอมตอกบแตละ client HTTP แบบ non-persistent จะใช
socket ทแตกตางกนส าหรบแตละ request
demux กรณทมการเชอมตอ (Connection-oriented)
Transport Layer 3-13
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
P4
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
network
P6 P5 P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
ทง 3 segment มทอย IP ปลายทาง คอ B และ เลขพอรต ปลายทางคอ 80 แตถกแยกสงไปยง socket ทตางกน
server IP address B
Transport Layer 3-14
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
server IP address B
network
P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
P4
threaded server
Transport Layer 3-15
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
เปน protocol ของ Internet ทไมไดมสวนเพมเตมอะไร
บรการแบบ ldquoจะพยายามใหดทสดrdquo (best effort) ดงนน segment แบบ UDP อาจ สญหาย ไปถง app ของผรบแตไมเรยงล าดบ
ไมมการเชอมตอ ไมมการท า handshake ระหวางผสง
และผรบ แตละ segment ทเปน UDP จะถก
จดการเปนอสระจาก segment อน ๆ
UDP ใชใน app ทสง multimedia อยางตอเนอง
(ซงทนตอการสญเสย แต sensitive กบอตราการสง)
DNS SNMP
ถาจะให การถายโอนขอมลบน UDP มความนาเชอถอกวาน เพมความนาเชอถอทชน application มการกคนขอผดพลาด (ขนอยกบ แตละ
application)
Transport Layer 3-17
UDP สวนหวของ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
ควายาวของ segment ของ UDP (หนวยเปน byte) รวมความยาว
ของ header ดวย
ไมตองสรางการเชอมตอ (ซงเปนสวนทเพมความลาชา)
งาย ไมซบซอน ไมตองมสถานะของการเชอมตอทผสงและผรบ
สวนหว (header) มขนาดเลก ไมมการควบคมความคบคง UDP
สามารถสงขอมลไดรวดเรวตามทตองการ
ท าไมถงตองม UDP
Transport Layer 3-18
checksum ของ UDP
ผสง จดการขอมลทงหมดทจะไปอยใน
segment รวมทงขอมลสวนหวตาง ๆ ทเปนล าดบของจ านวนเตม 16 บตหลายจ านวน
checksum ผลรวมของขอมลตาง ๆ ใน segment
ผสงใส checksum เขาไปใน field checksum ใน header ของ UDP
ผรบ ค านวณหา checksum ของ segment ทได
รบมาใหม ตรวจสอบคา checksum ใน field ของ
header กบ คาทเพงไดจากการค านวณ วาเทากนหรอไม ถาไม แสดงวาพบขอผดพลาด ถาใช แสดงวา ไมพบขอผดพลาด แต
จรง ๆ แลว กอาจจะมขอผดพลาดไดอยด (รายละเอยดจะกลาวภายหลง)
จดมงหมาย ตรวจสอบขอผดพลาด เชน bits ทคาโดนกลบใน segment
Transport Layer 3-19
Internet checksum ตวอยาง
ตวอยาง การบวก 16-bit integers สองจ านวน
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note ขณะทบวกตวเลข เมอ bitท 16 (bit ซายสด) มการทดเลข ใหน าเลขนนไปบวกกบ bit ท 1 แลวจง flip bit ทก bit เพอใหได checksum
Transport Layer 3-20
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-21
Principles of reliable data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
หลกการของความนาเชอถอ data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
หลกการของความนาเชอถอ data transfer
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
ส าคญในชน application transport link ตด top-10 ของหวขอทางดานเครอขาย
Transport Layer 3-24
Reliable data transfer เรมตน
ดานผสง ดานผรบ
rdt_send() ถกเรยกจากชนดานบน (เชน โดย app) ท าหนาทผานขอมลเพอใหขอมลถกสงไป
ยงชนดานบนของผรบ
udt_send() ถกเรยกโดย rdt เพอทจะโอนถาย packet ผานชองการ
สอสารท unreliable ไปยงผรบ
rdt_rcv() ถกเรยกโดย OS เมอ OS ไดรบ packet ทมาถงชองการสอสารดานผรบ
deliver_data() ถกเรยกโดย rdt เพอใหสงขอมลไปยงชนดานบน
Transport Layer 3-25
เราจะ คอย ๆ พฒนา protocol ส าหรบการโอนถายขอมลแบบ reliable หรอ reliable
data transfer protocol (rdt) ตอนน พจารณาเฉพาะการโอนถายขอมลแบบทางเดยวกอน
แตขอมลส าหรบการควบคม (control info) จะถกสงไปกลบทงสองทาง
ใช finite state machines (FSM) เพอก าหนดการกระท าของผสงและผรบ
state 1
state 2
เหตการณทท าใหเกดการเปลยนผานของ State การกระท าขณะเปลยนผาน State
สถานะ (state) เมออยใน state ปจจบน state ถดไปจะขนอยกบเหตการณทจะ
เกดขน ณ state ปจจบน
เหตการณ การกระท า
Reliable data transfer เรมตน
Transport Layer 3-26
rdt10 การโอนถายขอมลแบบ reliable ผานชองสญญาณแบบ reliable
สมมตให ชองทางทอยขางใตเปนชองทางทเชอถอได ไมมการผดพลาดของบต ไมมขอมลสญหาย
FSMs ส าหรบผสง และ ส าหรบผ รบ ผสงสงขอมลไปยงชนดานลาง ผรบรบขอมลจากชนดานลาง
รอรบการเรยกจากชน
ดานบน packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
รอรบการเรยกจากชน
ดานลาง
rdt_rcv(packet)
ผสง ผรบ
Transport Layer 3-27
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร
acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK
negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors
sender retransmits pkt on receipt of NAK
new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 ชองทางการสอสารทม bit errors
ปกตแลว มนษยใชวธการใดในการแกไข ldquoerrorsrdquo ระหวางการสนทนา
Transport Layer 3-28
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร การตอบรบ (acknowledgements (ACKs)) ผรบแจงผสงวาไดรบ packet แลว การตอบปฏเสธ (negative acknowledgements (NAKs)) ผรบแจงผสงวา packet ม
errors sender สงขอมลซ าอกครง เมอไดรบ NAK
กลไกทเพมขน in rdt20 (เพมจาก rdt10) การตรวจจบความผดพลาด การแจงกลบ (feedback) ขอมลส าหรบการควบคม (ACKNAK) จากผรบไปยงผสง
rdt20 ชองทางการสอสารทม bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 ขอก าหนดของ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
จะเกดอะไรขนถา ACKNAK เกดเสยหาย ผสงไมรวาผรบรบ pkt ครบถวน
หรอไม ไมควรสง pkt ซ าอกครง เพราะ
pkt ซ ากน
การจดการกบขอมลทซ าซอน ผสงจะสง packet อกครงถา
ACKNAK เกดเสยหาย เตมหมายเลข sequence ใหแตละ
packet ผรบตองทง packet ทซ ากน
stop and wait ผสงท าการสงpacketและรอใหผรบตอบกลบดวย ACKNAK กอนทจะสง packet ตอไป
Transport Layer 3-33
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Transport Layer 3-35
rdt21 อภปราย
ผสง ใสหมายเลข seq ในpacket หมายเลข seq (01) กพอ
นกสท าไม ตองตรวจสอบวา ACKNAK ท
ไดรบเสยไปหรอไม จ านวนหมายเลข seq ตองเปนสอง
เทาของจ านวนสถานะ เพราะผสงตองเกบสถานะเพอldquoจ าrdquo
วา pkt ถดไปจะตองมเลข seq 0 หรอ 1
ผรบ ตองตรวจสอบวา pkt ทไดรบซ ากบ
pkt ทไดรบกอนหนาหรอไม ผรบจะเกบสถานะทระบวา 0 หรอ 1
คอหมายเลข seq ทคาดวาจะได
ขอสงเกต ผรบไมสามารถรวา ACKNAK สดทายทผสงไดรบถกตองหรอไม
Transport Layer 3-36
rdt22 protocol ทไมตองใช NAK
ท างานเหมอนกบ rdt21 แตใชแค ACKs แทนทจะสง NAK ผรบสง ACK ส าหรบ pkt สดทายทไดรบถกตอง
ฝงรบจะตองรวมหมายเลข seq ของ pkt ทก าลงถก ACK ไปดวย
จะสง ACK ซ าไปทผสงถาไมไดรบ pkt ทมหมายเลข seq ทคาดหวง ผลลพธจะออกมาเหมอนกรณทสง NAK ผสงตองสง pkt ตวลาสดไปใหมอกครง
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 ชองสญญาณทมความผดพลาดและ pkt สญหาย
เพมขอสนนษฐาน ชองสญญาณสามารถสญเสยแพคเกจ (ไมวาจะเปนขอมลหรอ ACKs) ได กลไก checksum หมายเลข seq
ACKs และ การสงซ า สามารถชวย แตมนกยงไมใชทางออก
วธ ผสงรอ ACK กลบมาในชวงเวลาท ldquoสมเหตสมผลrdquo
สง pkt เดมไปใหมอกครงถาไมไดรบ ACK ภายในชวงเวลาน
ถา pkt (หรอ ACK) มาถงลาชา (ไมใชหายไป) การสงใหมกจะเปนการสงซ า ซง seq
ไดจดการเรองเกยวกบขอมลซ าได ผรบตองระบเลข seq ของ pkt ทก าลง
ถก ACKed
ตองใชการนบเวลาถอยหลง (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
ขณะ rdt30 ด าเนนการ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
ขณะ rdt30 ด าเนนการ
Transport Layer 3-42
ประสทธภาพของ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
บตแรกของแพคเกจกถกสง t = 0
ผสง ผรบ
RTT
บตสดทายของแพคเกจถกสง t = L R
บตแรกของแพคเกจมาถง บตสดทายของแพคเกจมาถง สง ACK
ไดรบ ACK สงแพคเกจตอไป t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols แบบ pipelined
pipelining ผสงสงหลาย packet ไปยงผรบทง ๆ ท pkt เหลานนยงไมไดรบการยนยนตอบรบ (not yet acked) ชวงของหมายเลข sequence จะตองเพมขน ตองพกขอมล (buffer) ทผสงและผรบ
protocols แบบ pipelined แบบทวไปมสองแบบ go-Back-N selective repeat
Transport Layer 3-45
Pipelining ชวยเพม utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols แบบ pipeline ภาพรวม
Go-back-N ผสงสามารถสงแพคเกจทไมยงถก
ack ไดไมเกน N แพคเกจใน pipeline
ผรบแคสง cumulative ack ไม ack packet ถามนกอใหเกด gap
ผสงจบเวลาส าหรบแพคเกจทสงไป
นานทสดทยงไมได ack เมอเวลาหมด ผสงจะสงแพคเกจ
ทงหมดทยงไมไดรบ ack อกครง
Selective Repeat ผสงสามารถสงแพคเกจทไมยงถก ack ได
ไมเกน N แพคเกจใน pipeline
ผรบจะตองสง ack กลบใหแตละแพคเกจ
ผสงจะจบเวลาส าหรบแตละแพคเกจท
ไมได ack เมอเวลาส าหรบแพคเกจใดหมด ผสงจะสง
เฉพาะแพคเกจนนเทานน
Transport Layer 3-47
Go-Back-N ผสง
หมายเลข seq (k bit) จะอยใน header ของ packet อนญาตใหขนาด ldquowindowrdquo (ของ pkt ทตดกนและยงไมถก ack) ไมเกน N
ACK(n) จะ ack แพคเกจทงหมดไปจนถงทมหมายเลข seq เทากบ n - ldquoการ ACK แบบรวม (cumulative ACK)rdquo อาจมการไดรบ ACKs หมายเลข seq เดมซ า (ดรายละเอยดดาน receiver)
มการจบเวลาส าหรบแพคเกจทเดนทางอย ซงเดนทางนานทสดและยงไมได ACK (pkt ทมหมายเลข seq นอยทสดใน window)
timeout(n) เวลาหมดท pkt n ผสงจะสง pkt n และ pkt ทงหมดใน window (ซงมหมายเลข seq สงกวา n) อกครง
Transport Layer 3-48
GBN FSM ดานผสงทเพมจากของเดม
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum
out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM ดานผรบทเพมจากของเดม
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
ผ รบ Ack แตละแพคเกจทไดรบมาถกตอง เกบ (buffer) แพคเกจ เทาทจ าเปน เพอทจะสงขอมลทเรยงล าดบแลว ไปยง layer
บนไดในทายทสด
ผสงแคสงแพคเกจซ าเฉพาะแพคเกจทไมไดรบ Ack เทานน ตวจบเวลา (ทางฝงผสง) จะจบเวลาของแตละแพคเกจทไมไดรบ Ack
Window ของผสง มหมายเลข seq อย N หมายเลขตดกน จ ากดหมายเลข seq ของแพตเกจทสงไปแลว และไมไดรบ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
ขอมลมาจาก layer ดานบน ถามหมายเลข seq วางใน window ให
สง pkt ได
timeout(n) สง pkt n ซ า จบเวลาใหม
ACK(n) in [sendbase sendbase+N] รวา ผรบไดรบ pkt n แลว ถา n เกดเปนหมายเลขแรกสดในหนาตาง
(n เทากบ sendbase) ทไมได ถก ack เลอน window ไปทางดานขวา โดยเลอนไปยงหมายเลขทไมไดถก ack
ผสง pkt n in [rcvbase rcvbase+N-1] สง ACK(n) ถาไมเรยงตามล าดบ buffer ถาตามล าดบ สง (รวมถงใหสง pkt ท
เรยงตามล าดบและอยในบฟเฟอร) เลอน window ไปทหมายเลข seq ถดไปของ pkt ทยงไมไดรบจากผสง
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise ทงไปไมตองสนใจ
ผรบ
Transport Layer 3-54
ขณะ Selective repeat ด าเนนการ
สง pkt0
sender receiver
รบ pkt0 สง ack0
รบ pkt1 สง ack1
รบ pkt3 buffer สง ack3 รบ ack0 สง pkt4
รบ ack1 สง pkt5
pkt 2 timeout send pkt2
X loss
รบ pkt4 buffer สง ack4
รบ pkt5 buffer สง ack5
รบ pkt2 deliver pkt2
pkt3 pkt4 pkt5 สง ack2
บนทก ack3 มาถงแลว
sender window (N=4)
บนทก ack4 มาถงแลว บนทก ack4 มาถงแลว
Q เกดอะไรขนเมอ ack2 มาถง
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
สง pkt1 สง pkt2
สง pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
ตวอยาง หมายเลข seq 0 1 2 3 ขนาดของ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
ผรบไมสามารถเหนดานผสงได พฤตกรรมผรบจะเหมอนกนทง 2 สถานการณ
มบางอยางทผด (มาก)
ผรบไมเหนถงความแตกตางของทง 2 เหตการณจ าลองน
ในเหตการณจ าลอง (b) ขอมลเกาทถกสงซ า เมอผรบรบมา จะนกวาเปนขอมลใหม
Q ขนาดของ seq กบขนาดของ
window เกยวของกนยงไงเพอทจะหลกเลยงปญหาในตวอยาง (b)
Transport Layer 3-56
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-57
TCP ภาพรวม RFCs 79311221323 2018 2581
ขอมลแบบสองทศทาง มการสงขอมลทงไปและกลบในการ
เชอมตอ (connection) เดยวกน MSS ขนาด segment ทใหญสดท
TCP จะรบได (Max Segment Size)
connection-oriented handshaking (การแลกเปลยนของ
ขอความควบคม) ตงคาสถานะตงตนใหผสงและผรบ กอนการแลกเปลยนขอความ
flow controlled ผสงจะไมสงขอมลเกนกวาทผรบจะรบ
ได
point-to-point (สถานทนง-ไป-สถานทนง) ผสงหนงคน ผรบหนงคน
สายขอมลเปนไบตทเรยงล าดบและขอมลไมสญหาย (reliable in-order byte steam) ไมม ldquoขอบเขตrdquo ของขอความ
(ขอความจะมาถงผรบตอเนองกน)
pipelined การควบคมความคบคงและการควบคม
อตราการไหลของ TCP จะก าหนดขนาดของ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG ขอมลเรงดวน (โดยทว ๆ ไป ไมถกใช)
ACK ACK valid
PSH ผลกขอมลใหชน app (โดยทว ๆ ไป ไมถกใช)
RST SYN FIN สรางการเชอตอ
(ค าสง setup teardown)
จ านวน bytes ท ผรบเตมใจจะรบ
นบโดยใช byte ของขอมล (ไมใช segment)
Internet checksum
(เหมอนใน UDP)
Transport Layer 3-59
TCP seq numbers ACKs
หมายเลข sequence เลขของ byte stream จะเปน byte
แรกของขอมลของ segment น acknowledgements เลข seq ของ byte ถดไปทอกดานหนง
คาดหวงวาจะได cumulative ACK (ACK แบบรวม)
Q ผรบจดการกบ segment ทมาถงไมเรยงล าดบอยางไร A TCP ไมมรายละเอยดสวนน ndash ขนอย
กบคนทจะมาเขยนโปรแกรม TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาเขามาถงผสง
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาออกจากผสง
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
เหตการณจ าลอง telnet อยางงาย
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q เราควรจะก าหนด time out ไวทเทาใด
มากกวาเวลาของ RTT แตเวลาของ RTT นนแปรปรวน
ก าหนดไวนอยเกนไป timeout กอนก าหนด ท าใหมการ retransmissions โดยไมจ าเปน
ก าหนดไวมากเกนไป ระบบตอบสนองตอการสญหายของ segment ชาเกนไป
Q จะประมาณเวลาของ RTT อยางไร
SampleRTT วดจากระยะเวลาตงแตเรมสง sengment จนกระทงไดรบACK ไมสนใจการ retransmissions
SampleRTT มคาแปรปรวน เราตองการประมาณเวลาของ RTT ให smooth กวา ใชคาเฉลยของคาหลาย ๆ คา ไมใชแค
เวลาของ SampleRTT ปจจบน
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
คาเฉลยของการเคลอนทถวงน าหนกแบบ exponential คา SampleRTT ทในอดตจะมผลตอ EstimatedRTT ลดลงแบบ exponentially โดยทวไปจะก าหนดคา = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
ชวงเวลาของ timeout EstimatedRTT บวกกบระยะเวลาทเผอเอาไว ยงคาของ EstimatedRTT ทแปรปรวนมากเทาไร -gt ระยะเวลาทเผอความมากขนตาม
มประเมนคาการเปลยนแปลงของ SampleRTT จาก EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoชวงเวลาทเผอrdquo
Transport Layer 3-64
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP สรางบรการแบบ reliable อยบนบรการของ IP ทเปนแบบ unreliable segments ถกสงแบบ pipeline cumulative acks ม timer ส าหรบสงใหมคาตวเดยว
TCP สง segment ใหมเมอ เหตการณ timeout ไดรบ acks ซ า ๆ กน
เรามาเรมตนพจารณาทางดานผสงของ TCP อยางงายกอน ยงไมตองสนใจ acks ซ า ยงไมตองสนใจการควบคม flow และ
ความคบคง
Transport Layer 3-66
เหตการณของ TCP sender
เมอไดขอมลจาก app สราง segment ดวยหมายเลข seq เลข seq คอหมายเลขของไบตแรก
ของขอมลในแตละ segment หาก timer ยงไมเคยถกตง จะเรม
ตงเวลา การตงเวลาเพอจบเวลาส าหรบ
segment เกาทสดยงไมไดรบ ack ชวงเวลาทหมดอาย
TimeOutInterval
timeout สงใหมเฉพาะ segment ทเกด
timeout ตงเวลานบใหม เมอไดรบ ack ถา ack เปน ack ของ segment
กอนหนายงไมไดรบ ack Update สงทรวา ถก ACK แลว เรมตงเวลานบ ถายงคงม segment
ทยงไมไดรบ acked
Transport Layer 3-67
ดานผสงของ TCP (อยางงาย)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
การสราง ACK ของ TCP [RFC 1122 RFC 2581]
เหตการณทผรบ เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ) โดยขอมลทงหมดจนถงเลข seq ทคาดหวงไว ถก ACK หมดแลว
เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ ท าให ไมม gap ใน segment ทไดมา) แตมบาง segment ยงไมได ACK
Segment มาถงแบบไมเรยงตามล าดบ โดยมเลข seq สงกวาทตองการ ท าใหม gap (ชองโหว) เกดขน Segment ท ามาถง ทจะเตมบางสวนหรอเตมเตมชองโหว
TCP receiver action อยาเพงสง ACK รออก segment นง โดยรอสก 500ms หากยงไมม segment มา กสง ACK สง ACK แบบรวม (cumulative) ไปทนทในครงเดยว ซงจะเปนการ Ack segment ทมาแบบเรยงตามล าดบทงสอง segments สง ACK ซ า ไปทนท โดยใสเลข seq ของ byte ทตองการ สง ACK แบบรวมทนท โดย segment ทจะ Ack เรมจากดานทนอยกวาของ gap
Transport Layer 3-71
TCP fast retransmit
ระยะเวลาในการ time-out มกจะคอนขางยาว (โดยเปรยบเทยบ) ท าใหใชเวลาคอนขางนานกอนทจะ
สง packet อกครง
แกโดย ตรวจสอบการสญเสย pack โดยดท ACKs ทซ า ๆ กน ผสงมกสง segment ตด ๆ กน ดงนน ถา segment หนงหายไป จง
เปนไปไดทจะม ACKs ซ า ๆ กนจ านวนมาก
ถาผสงไดรบ ACKs ส าหรบขอมลเดยวกน 3 ACKS (ACKs ทซ ากนสามครง) ผสงตองสง seq ทยงไมถก acked (ระบเลข seq ทเลกทสด) มแนวโนมวา segment ทยงไมถก
ack จะหายไปเลย ดงนน จงไมตองรอใหหมดเวลา
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-74
TCP flow control application
process
buffer ดานผรบ ของ TCP socket
TCP code
IP code
application
OS
protocol stack ดานผรบ
application ลบขอมลจาก buffer ของ TCP socket hellip
hellip ชากวา TCP สงขอมล ขนไป (ขณะทผสงก าลงจะสง)
from sender
ผรบสามารถควบคมผสงได ดงนน ผสงจะไมสงขอมลเรวไป หรอ มากเกนไปจนลน (Overflow) buffer ของผรบ
flow control
Transport Layer 3-75
การควบคมการไหลขอมลของ TCP
ขอมลทอย buffer
buffer สวนทยงวาง rwnd
RcvBuffer
สวนของขอมล (payload) ใน segment ของ TCP
ไปยง process ของ application
ผรบระบขนาดของ buffer ทวางไวใน field rwnd ทอยในสวนหวของ TCP ทจะสงไปยงผสง ผเขยนโปรแกรมระบขนาดของ RcvBuffer ได
โดยใช API ตงคา option ของ socket (คาเรมตนทวไปคอ 4096 ไบต)
ทกระบบปฏบตการจะปรบขนาด RcvBuffer อตโนมต
ผสงจ ากดจ านวนของขอมลทยงไมถก acked (ldquoอยในระหวางการเดนทางrdquo) ใหเทากบคา rwnd ของขอมลผรบ
เปนการรบประกนวา buffer ของผรบจะไมลน
การbuffer ในดานของผรบ
Transport Layer 3-76
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-77
การจดการกบการเชอมตอ กอนทจะมการแลกเปลยนขอมลกน ผสงและผรบตองตกลงกนกอน ตกลงรวมในการสรางการเชอมตอ (แตละคนจะรวาอกฝายอยากจะเชอมตอหรอไม) ตกลงคาพารามเตอรส าหรบการเชอมตอ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake จะท างานไดเสมอไปหรอไมบน network
ความลาชาอาจเปลยนไป ขอความอาจถกสงซ าตวอยาง (เชน
req_conn(x)) เนองจากการสญหายของขอมล
ขอมลอาจสลบกน ไมสามารถรไดวาอกฝงไดรบหรอไม
ไดรบขอมลอะไร
2-way handshake
มาคยกนเถอะ
ตกลง ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-79
เหตการณผดพลาดของ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-80
3-way handshake ของ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM ของ 3-way handshake ของ TCP
Transport Layer 3-82
TCP การหยดการเชอมตอ
client server เลกเชอมตอทแตละดานของการเชอมตอ โดยแตละดานจะสง TCP segment ดวย FIN bit = 1
ตอบกลบ FIN ดวย ACK ในขณะทรบ FIN ACK กสามารถรวมอยในแพคเกจทสง FIN มาไดดวย
แตละดานสามารถสง FIN ไดพรอม ๆ กน
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP การหยดการเชอมตอ
Transport Layer 3-84
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-85
ความคบคง ความหมายไมเปนทางการ ldquoเมอจ านวนคนสงมากเกนไป ก าลงสงขอมลมาก
เกนไปดวยอตราการสงเรวเกนกวาท Network จะรบไหวrdquo แตกตางจาก flow control ผลทอาจทเกดขนจากความคบคง
packets หาย (buffer ลนท routers) ลาชามาก (เขาควใน buffers ของ router)
เปนปญหาทคนสนใจตด 10 อนดบตนๆ
หลกการของการควบคมความคบคงของเครอขาย
Transport Layer 3-86
ตนเหตและผลของความคบคง เหตการณ 1
มผสงและผรบอยางละสองคน Router 1 ตว ไมจ ากด buffers ความจของ link R ไมมการสงขอมลซ า
อตราขอมลทสงส าเรจตอหนงการเชอมตอ R2
buffer ท link ขาออกม buffer ไมจกด
Host A
อตราการสงขอมลตนฉบบ lin
Host B
อตราขอมลทสงส าเรจ lout
R2
R2
lou
t
lin R2 de
lay
lin
ดเลยจะมากขนเมออตราสงขอมลตนฉบบเขาใกลความจของ link
Transport Layer 3-87
Router 1 ตว Buffer แตมขนาด buffer จ ากด ตองสง pkt ไปซ าถา pkt นน timeout
ขอมลเขาของชน application = ขอมลออกจากชน application lin = lout
ขอมลเขาของชน transport จะรวมทตองสงซ าดวย lin lin
Buffer ของ link ทใชรวมกนซงมขนาดจ ากด
Host A
lin ขอมลตนฉบบ
Host B
lout lin ขอมลตนฉบบบวกกบ ขอมลทตองสงซ า
lsquo
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-88
ในอดมคต สมมตผสงรความเปนไปในเครอขาย ผสงสงเฉพาะตอนทเราเตอรม buffer เหลออย
Buffer ของ link ทแชรอยางจ ากด
lout copy
ม buffer วาง
R2
R2
lou
t
lin
Host B
A
ตนเหตและผลของความคบคง เหตการณ 2
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-89
lout copy
no buffer space
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
A
Host B
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
เมอสงขอมลท R2 บาง packets ถกสงซ า แต goodput ยงคงมคาลเขาหา R2 (ท าไม)
A
Host B
ตนเหตและผลของความคบคง เหตการณ 2
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Host B
ในความเปนจรง มการสงซ า packets หายหรอตกหลนระหวาง
เสนทางเนองจาก buffers เตม แตบางครง Timer ของผสงหมดเวลาลง
กอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-92
R2
lou
t
ldquoผลrdquo ของความคบคง เพอใหไดขอมลในอตราทตองการ (goodput) ตองท างานมากขน (สงซ า) เมอตองสง packets ซ าโดยทไมจ าเปน link จะตองล าเลยงหลาย copy ของ
ขอมลเดยวกน ท าให goodput ลดลง
R2 lin
ตนเหตและผลของความคบคง เหตการณ 2
ในความเปนจรง มการสงซ า 1 packets หายหรอตกหลนระหวางเสนทางเนองจาก buffers เตม 2 แตบางครง Timer ของผสงหมดเวลาลงกอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Transport Layer 3-93
มผสงขอมลทง 4 โฮสต เสนทางตองผานหลายจด หมดเวลาสงไปขอมลซ า
Q เกดอะไรขนเมอ λin และ λinrsquo เพมขน
Buffer ของเสนทางการสงขอมลทใชรวมกนมขนาดจ ากด
Host A lout
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
Host B
Host C Host D
A เมอ λinrsquo ของขอมลเสนสแดงมขนาดเพมขน ขอมลใน
เสนสน าเงนกจะถก drop ท าให throughput ของ connection สน าเงนเหลอ 0
lin ขอมลตนฉบบ lin ขอมลตนฉบบ บวกกบ
ขอมลทตองสงซ า
Transport Layer 3-94
อกหนง ldquoผลเสยrdquo ของความคบคง เมอแพกเกจถกทงไป นนกเทากบวา ทรยากรเครอขาย (ทใชสงขอมลกอน
หนาทขอมลนจะถกทง) ถกใชไปอยางไรคา
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
แนวทางในการควบคมความคบคงของขอมล
2 แนวทางในการควบคมความคบคง
การควบคมความคบคงโดยใชแคเครองปลายทาง (end-end)
ไมมการแจงกลบ (feedback) จากเครอขาย
ความคบคงของเครอขายจะถกเดาโดยเครองทอยปลายทางทคอยสงเกต loss delay
เปนวธของ TCP
การควบคมความคบคงโดยใหอปกรณเครอขายชวย
routers จะท าการแจง feedback ไปทระบบปลายทาง ใช bit 1 bit เพอระบถงความ
แออด (SNA DECbit TCPIP ECN ATM) หรอ ระบอตราการสงทชดเจน
ส าหรบผสง
Transport Layer 3-96
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
ABR available bit rate ldquoบรการทมความยดหยนrdquo ถาเสนทางของผสง ldquoมขอมลนอยกวา
ความจะมากrdquo ผสงจะใชประโยชนจาก
bandwidth ทเหลออย ถา path ของผสงแออด
ผสงจะคอย ๆ ลดอตราสงใหเหลอเทาอตราการสงขนต าทรบประกนไว
RM (resource management) cells สงโดยผสง แทรก ๆ ไปกบ cell ทเปนขอมล bits ใน RM cell ถกตงคาโดย switches
(ldquoเครอขายคอยชวยrdquo) NI bit ไมเพมอตราการสง (ความแออด
ระดบกลาง) CI bit การบงบอกถงความแออด
ผรบไมแกคาใน bit นของ RM cells และสงไปใหผสง
Transport Layer 3-97
field ขอมล ER (explicit rate) ขนาด 2 byte ใน cell RM switch ทแออดอาจลดคา ER ใน cell ดงนน อตราทผสงจะสงขอมลจะเปนอตราการสงมากทสดท link ในเสนทางจะรองรบได
bit EFCI ใน cell ขอมล ถกตงคาไวท 1 ใน switch ทมขอมลแออด ถา cell ขอมลกอนหนา RM cell ถกตงคา EFCI ผรบจะตงคา bit CI ใน cell RM ท
สงกลบใหผสง
RM cell data cell
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
Transport Layer 3-98
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-99
การควบคมความคบคงของ TCP additive increase (เพมแบบบวก) multiplicative decrease (ลดแบบเทาตว)
วธ ผสงเพมอตราสง (window size) ควานหา bandwidth ทมใหใชได จนกวาการสญหายจะเกดขน additive increase เพม cwnd ทละ 1 MSS ทก ๆ RTT จนกวาจะ pkt จะหาย multiplicative decrease ตดลด cwnd เหลอครงเดยวหลงจากการสญหาย
cwnd
ขนา
ดของ co
nges
tion
wind
ow ของผส
งแบบ
TCP
พฤตกรรมของ AIMD เปน ลกษณะฟนเลอย หา bandwidth
ขนาด window เพมแบบบวก hellip hellip จนกวาจะเกดการสญหาย (จากนน ตดลงเหลอครงนง)
time
Transport Layer 3-100
ผสงจ ากดการสง
ขนาด cwnd จะเปลยนแปลงไปมา ขนกบความคบคงของเครอขายทผสงไดรมา
อตราการสง TCP อยางคราว ๆ สงขอมลจ านวน
cwnd bytes รอ ACKS เพอประมาณคา RTT จากนนสงไบตขอมลเพม
byte สดทายท ถก ACKed สง แตยงไมถก
ACK (ldquoอยระหวางการเดนทางrdquo)
byte สดทายทสงไป
cwnd
LastByteSent-
LastByteAcked lt cwnd
ชวงเลข sequence number ของผสง
rate ~ ~ cwnd
RTT bytessec
การควบคมความคบคงของ TCP รายละเอยด
Transport Layer 3-101
TCP Slow Start
เมอเรมการเชอมตอ เพมอตราการสงแบบยกก าลง (exponentially) จนกวาจะเจอกบ loss ครงแรก เรมตนขนาด cwnd = 1 MSS เพมขนาด cwnd หนงเทาตวทก ๆ RTT นนคอ โดยเพมขนาด cwnd ไป 1 MSS
ส าหรบทก ๆ ACK ทไดรบ
สรป อตราสงเรมแรกจะชาแตคาจะเพมแบบกระโดดขนอยางรวดเรว
Host A
RTT
Host B
time
Transport Layer 3-102
TCP การหา loss และการตอบสนอง
ถา loss ถกระบโดย timeout cwnd ถกตงไวท 1 MSS จากนนหนาตางจะเพมขนเปนเลขยกก าลง (exponential เหมอนใน slow start)
จนไปถงคา threshold จากนนจะเพมขนเปนเชงเสน
ถา loss ถกระบโดยไดรบ ACK ซ า 3 ACKs (3 duplicate acks) TCP RENO
ACKs ซ า ระบถงความสามารถการสง segments ของเครอขาย
cwnd ถกตดเหลอครงนงจากนนเพมขนแบบเชงเสน
TCP Tahoe จะตงคา cwnd เปน 1 เสมอ (ไมวาจะ timeout หรอ 3 dup acks)
Transport Layer 3-103
Q เมอไร TCP ควรจะเปลยนจากการเพมขนแบบ exponential เปนแบบเชงเสน
A เมอ cwnd ถกเพมเปน 12 ของ ldquoคาทมากทสดrdquo ของมนกอนจะเกด timeout
การด าเนนการ ตวแปร ssthresh ขณะเกด Loss ssthresh จะถก
ตงคาท 12 ของคา cwnd กอนเกดเหตแปปเดยว (คา cwnd ทมากทสดกอนเกดเหตการณ)
TCP จาก slow start เปน CA (Congestion Avoidance)
Transport Layer 3-104
สรป TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput ของ TCP
คาเฉลย throughput ของ TCP เปน function ของขนาดของ window และ RTT ไมสนใจ slow start สมมตวาขอมลถกสงตลอด
W ขนาดของ window (หนวยเปน bytes) การสญเสยทเกดขน คาเฉลยขนาดของ window (จ านวน byte ทเดนทางอย) คอ frac34 W คาเฉลยของ throughput คอ 34W ตอ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP ในอนาคต TCP ใน ldquopipes ทยาวและมความจสงrdquo
ตวอยาง 1500 byte segments 100ms RTT ตองการชองทางการสงขนาด 10 Gbps
requires W = 83333 in-flight segments ความเปนไปไดของการสญหายของในชองทางการสงขอมล L [Mathis 1997]
เพอทจะมชองทางการสงขนาด 10Gbps ตองมการสญหายของขอมลเพยงแค =
210-10 ndash นอยมาก ดงนน ตองม TCP รนใหมส าหรบการสงแบบความเรวสง
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
เปาหมายของ fairness ถาม TCP session จ านวน K session ใชทรพยากร bandwidth R รวมกน แตละ session ควรจะเฉลยทรพยากรเหมอนกนท RK
TCP connection 1
router คอขวด มความจ R
ความเสมอภาค (Fairness) ของ TCP
TCP connection 2
Transport Layer 3-108
ความเสมอภาคของ TCP คออะไร session 2 session แขงกนใชทรพยากร additive increase ใหความชนเสนเทากบ 1 (session ทง 2 คอย ๆ ได throughput เพมทละ
นด) multiplicative decrease ลด throughput ไปครงหนง
R
R
เสนระบแบนดวธทใชรวมเทากน
Throuput ของ การเชอมตอท 1
congestion avoidance (CA) additive increase สญเสย ลดขนาดของ window ลงไปครงนง
congestion avoidance (CA) additive increase
สญเสย ลดขนาดของ window ลงไปครงนง
Transport Layer 3-109
ความเสมอภาค (ตอ)
ความเสมอภาค และ UDP มลตมเดยแอพพลเคชนบอยครงไม
ใช TCP ไมตองการใหอตราการสงลดลงเพราะ
การควบคมความคบคง
มลตมเดยแอพพลเคชนจงใช UDP แทน สงเสยงวดโอดวยความเรวคงท ทน
ตอการสญเสยขอมล
ความเสมอภาค การเชอมตอ TCP แบบขนาน แอพพลเคชนสามารถทจะเปดหลายการ
เชอมตอระหวางเครอง 2 เครองแบบขนานได
เวบบราวเซอรท าแบบน ตวอยางเชน link ทมความจ R ซงม 9 การ
เชอมตอ ถาแอพใหมตองการ 1 TCP จะไดรบท rate
R10 ถาแอพใหมตองการ 11 TCPs จะไดรบท R2
Transport Layer 3-110
Chapter 3 บทสรป
หลกการเบองหลงการใหบรการชนtransport multiplexing demultiplexing การสงขอมลแบบไวใจได การควบคมการไหลของขอมล การควบคมความคบคงของขอมล
กรณศกษาและการปฏบตบน internet UDP TCP
ถดไป ออกจากปลายทางของระบบ
เครอขาย (application transport layers)
เขาไปยงสแกนของเครอขาย
Transport Layer 3-12
socket แบบ TCP ถกระบดวย 4 สวน ซงมองคประกอบดงน source IP address
(หมายเลขไอพตนทาง)
source port number (หมายเลขพอรตตนทาง )
dest IP address (หมายเลขไอพปลายทาง)
dest port number (หมายเลขพอรตปลายทาง )
demux จะดคาทงสสวนเพอน า packet ไปยง sockets ทเหมาะสม
เครองเซรฟเวอรอาจเปด sockets แบบ TCP จ านวนมากพรอมกน ซง แตละ socket ถกระบดวย 4 สวน
(แตจะมสวนท 3 คอหมายเลข IP ปลายทางเหมอน ๆ กน)
web servers จะม socket หลาย ๆ socket ไวส าหรบเชอมตอกบแตละ client HTTP แบบ non-persistent จะใช
socket ทแตกตางกนส าหรบแตละ request
demux กรณทมการเชอมตอ (Connection-oriented)
Transport Layer 3-13
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
P4
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
network
P6 P5 P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
ทง 3 segment มทอย IP ปลายทาง คอ B และ เลขพอรต ปลายทางคอ 80 แตถกแยกสงไปยง socket ทตางกน
server IP address B
Transport Layer 3-14
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
server IP address B
network
P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
P4
threaded server
Transport Layer 3-15
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
เปน protocol ของ Internet ทไมไดมสวนเพมเตมอะไร
บรการแบบ ldquoจะพยายามใหดทสดrdquo (best effort) ดงนน segment แบบ UDP อาจ สญหาย ไปถง app ของผรบแตไมเรยงล าดบ
ไมมการเชอมตอ ไมมการท า handshake ระหวางผสง
และผรบ แตละ segment ทเปน UDP จะถก
จดการเปนอสระจาก segment อน ๆ
UDP ใชใน app ทสง multimedia อยางตอเนอง
(ซงทนตอการสญเสย แต sensitive กบอตราการสง)
DNS SNMP
ถาจะให การถายโอนขอมลบน UDP มความนาเชอถอกวาน เพมความนาเชอถอทชน application มการกคนขอผดพลาด (ขนอยกบ แตละ
application)
Transport Layer 3-17
UDP สวนหวของ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
ควายาวของ segment ของ UDP (หนวยเปน byte) รวมความยาว
ของ header ดวย
ไมตองสรางการเชอมตอ (ซงเปนสวนทเพมความลาชา)
งาย ไมซบซอน ไมตองมสถานะของการเชอมตอทผสงและผรบ
สวนหว (header) มขนาดเลก ไมมการควบคมความคบคง UDP
สามารถสงขอมลไดรวดเรวตามทตองการ
ท าไมถงตองม UDP
Transport Layer 3-18
checksum ของ UDP
ผสง จดการขอมลทงหมดทจะไปอยใน
segment รวมทงขอมลสวนหวตาง ๆ ทเปนล าดบของจ านวนเตม 16 บตหลายจ านวน
checksum ผลรวมของขอมลตาง ๆ ใน segment
ผสงใส checksum เขาไปใน field checksum ใน header ของ UDP
ผรบ ค านวณหา checksum ของ segment ทได
รบมาใหม ตรวจสอบคา checksum ใน field ของ
header กบ คาทเพงไดจากการค านวณ วาเทากนหรอไม ถาไม แสดงวาพบขอผดพลาด ถาใช แสดงวา ไมพบขอผดพลาด แต
จรง ๆ แลว กอาจจะมขอผดพลาดไดอยด (รายละเอยดจะกลาวภายหลง)
จดมงหมาย ตรวจสอบขอผดพลาด เชน bits ทคาโดนกลบใน segment
Transport Layer 3-19
Internet checksum ตวอยาง
ตวอยาง การบวก 16-bit integers สองจ านวน
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note ขณะทบวกตวเลข เมอ bitท 16 (bit ซายสด) มการทดเลข ใหน าเลขนนไปบวกกบ bit ท 1 แลวจง flip bit ทก bit เพอใหได checksum
Transport Layer 3-20
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-21
Principles of reliable data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
หลกการของความนาเชอถอ data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
หลกการของความนาเชอถอ data transfer
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
ส าคญในชน application transport link ตด top-10 ของหวขอทางดานเครอขาย
Transport Layer 3-24
Reliable data transfer เรมตน
ดานผสง ดานผรบ
rdt_send() ถกเรยกจากชนดานบน (เชน โดย app) ท าหนาทผานขอมลเพอใหขอมลถกสงไป
ยงชนดานบนของผรบ
udt_send() ถกเรยกโดย rdt เพอทจะโอนถาย packet ผานชองการ
สอสารท unreliable ไปยงผรบ
rdt_rcv() ถกเรยกโดย OS เมอ OS ไดรบ packet ทมาถงชองการสอสารดานผรบ
deliver_data() ถกเรยกโดย rdt เพอใหสงขอมลไปยงชนดานบน
Transport Layer 3-25
เราจะ คอย ๆ พฒนา protocol ส าหรบการโอนถายขอมลแบบ reliable หรอ reliable
data transfer protocol (rdt) ตอนน พจารณาเฉพาะการโอนถายขอมลแบบทางเดยวกอน
แตขอมลส าหรบการควบคม (control info) จะถกสงไปกลบทงสองทาง
ใช finite state machines (FSM) เพอก าหนดการกระท าของผสงและผรบ
state 1
state 2
เหตการณทท าใหเกดการเปลยนผานของ State การกระท าขณะเปลยนผาน State
สถานะ (state) เมออยใน state ปจจบน state ถดไปจะขนอยกบเหตการณทจะ
เกดขน ณ state ปจจบน
เหตการณ การกระท า
Reliable data transfer เรมตน
Transport Layer 3-26
rdt10 การโอนถายขอมลแบบ reliable ผานชองสญญาณแบบ reliable
สมมตให ชองทางทอยขางใตเปนชองทางทเชอถอได ไมมการผดพลาดของบต ไมมขอมลสญหาย
FSMs ส าหรบผสง และ ส าหรบผ รบ ผสงสงขอมลไปยงชนดานลาง ผรบรบขอมลจากชนดานลาง
รอรบการเรยกจากชน
ดานบน packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
รอรบการเรยกจากชน
ดานลาง
rdt_rcv(packet)
ผสง ผรบ
Transport Layer 3-27
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร
acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK
negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors
sender retransmits pkt on receipt of NAK
new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 ชองทางการสอสารทม bit errors
ปกตแลว มนษยใชวธการใดในการแกไข ldquoerrorsrdquo ระหวางการสนทนา
Transport Layer 3-28
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร การตอบรบ (acknowledgements (ACKs)) ผรบแจงผสงวาไดรบ packet แลว การตอบปฏเสธ (negative acknowledgements (NAKs)) ผรบแจงผสงวา packet ม
errors sender สงขอมลซ าอกครง เมอไดรบ NAK
กลไกทเพมขน in rdt20 (เพมจาก rdt10) การตรวจจบความผดพลาด การแจงกลบ (feedback) ขอมลส าหรบการควบคม (ACKNAK) จากผรบไปยงผสง
rdt20 ชองทางการสอสารทม bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 ขอก าหนดของ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
จะเกดอะไรขนถา ACKNAK เกดเสยหาย ผสงไมรวาผรบรบ pkt ครบถวน
หรอไม ไมควรสง pkt ซ าอกครง เพราะ
pkt ซ ากน
การจดการกบขอมลทซ าซอน ผสงจะสง packet อกครงถา
ACKNAK เกดเสยหาย เตมหมายเลข sequence ใหแตละ
packet ผรบตองทง packet ทซ ากน
stop and wait ผสงท าการสงpacketและรอใหผรบตอบกลบดวย ACKNAK กอนทจะสง packet ตอไป
Transport Layer 3-33
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Transport Layer 3-35
rdt21 อภปราย
ผสง ใสหมายเลข seq ในpacket หมายเลข seq (01) กพอ
นกสท าไม ตองตรวจสอบวา ACKNAK ท
ไดรบเสยไปหรอไม จ านวนหมายเลข seq ตองเปนสอง
เทาของจ านวนสถานะ เพราะผสงตองเกบสถานะเพอldquoจ าrdquo
วา pkt ถดไปจะตองมเลข seq 0 หรอ 1
ผรบ ตองตรวจสอบวา pkt ทไดรบซ ากบ
pkt ทไดรบกอนหนาหรอไม ผรบจะเกบสถานะทระบวา 0 หรอ 1
คอหมายเลข seq ทคาดวาจะได
ขอสงเกต ผรบไมสามารถรวา ACKNAK สดทายทผสงไดรบถกตองหรอไม
Transport Layer 3-36
rdt22 protocol ทไมตองใช NAK
ท างานเหมอนกบ rdt21 แตใชแค ACKs แทนทจะสง NAK ผรบสง ACK ส าหรบ pkt สดทายทไดรบถกตอง
ฝงรบจะตองรวมหมายเลข seq ของ pkt ทก าลงถก ACK ไปดวย
จะสง ACK ซ าไปทผสงถาไมไดรบ pkt ทมหมายเลข seq ทคาดหวง ผลลพธจะออกมาเหมอนกรณทสง NAK ผสงตองสง pkt ตวลาสดไปใหมอกครง
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 ชองสญญาณทมความผดพลาดและ pkt สญหาย
เพมขอสนนษฐาน ชองสญญาณสามารถสญเสยแพคเกจ (ไมวาจะเปนขอมลหรอ ACKs) ได กลไก checksum หมายเลข seq
ACKs และ การสงซ า สามารถชวย แตมนกยงไมใชทางออก
วธ ผสงรอ ACK กลบมาในชวงเวลาท ldquoสมเหตสมผลrdquo
สง pkt เดมไปใหมอกครงถาไมไดรบ ACK ภายในชวงเวลาน
ถา pkt (หรอ ACK) มาถงลาชา (ไมใชหายไป) การสงใหมกจะเปนการสงซ า ซง seq
ไดจดการเรองเกยวกบขอมลซ าได ผรบตองระบเลข seq ของ pkt ทก าลง
ถก ACKed
ตองใชการนบเวลาถอยหลง (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
ขณะ rdt30 ด าเนนการ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
ขณะ rdt30 ด าเนนการ
Transport Layer 3-42
ประสทธภาพของ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
บตแรกของแพคเกจกถกสง t = 0
ผสง ผรบ
RTT
บตสดทายของแพคเกจถกสง t = L R
บตแรกของแพคเกจมาถง บตสดทายของแพคเกจมาถง สง ACK
ไดรบ ACK สงแพคเกจตอไป t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols แบบ pipelined
pipelining ผสงสงหลาย packet ไปยงผรบทง ๆ ท pkt เหลานนยงไมไดรบการยนยนตอบรบ (not yet acked) ชวงของหมายเลข sequence จะตองเพมขน ตองพกขอมล (buffer) ทผสงและผรบ
protocols แบบ pipelined แบบทวไปมสองแบบ go-Back-N selective repeat
Transport Layer 3-45
Pipelining ชวยเพม utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols แบบ pipeline ภาพรวม
Go-back-N ผสงสามารถสงแพคเกจทไมยงถก
ack ไดไมเกน N แพคเกจใน pipeline
ผรบแคสง cumulative ack ไม ack packet ถามนกอใหเกด gap
ผสงจบเวลาส าหรบแพคเกจทสงไป
นานทสดทยงไมได ack เมอเวลาหมด ผสงจะสงแพคเกจ
ทงหมดทยงไมไดรบ ack อกครง
Selective Repeat ผสงสามารถสงแพคเกจทไมยงถก ack ได
ไมเกน N แพคเกจใน pipeline
ผรบจะตองสง ack กลบใหแตละแพคเกจ
ผสงจะจบเวลาส าหรบแตละแพคเกจท
ไมได ack เมอเวลาส าหรบแพคเกจใดหมด ผสงจะสง
เฉพาะแพคเกจนนเทานน
Transport Layer 3-47
Go-Back-N ผสง
หมายเลข seq (k bit) จะอยใน header ของ packet อนญาตใหขนาด ldquowindowrdquo (ของ pkt ทตดกนและยงไมถก ack) ไมเกน N
ACK(n) จะ ack แพคเกจทงหมดไปจนถงทมหมายเลข seq เทากบ n - ldquoการ ACK แบบรวม (cumulative ACK)rdquo อาจมการไดรบ ACKs หมายเลข seq เดมซ า (ดรายละเอยดดาน receiver)
มการจบเวลาส าหรบแพคเกจทเดนทางอย ซงเดนทางนานทสดและยงไมได ACK (pkt ทมหมายเลข seq นอยทสดใน window)
timeout(n) เวลาหมดท pkt n ผสงจะสง pkt n และ pkt ทงหมดใน window (ซงมหมายเลข seq สงกวา n) อกครง
Transport Layer 3-48
GBN FSM ดานผสงทเพมจากของเดม
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum
out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM ดานผรบทเพมจากของเดม
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
ผ รบ Ack แตละแพคเกจทไดรบมาถกตอง เกบ (buffer) แพคเกจ เทาทจ าเปน เพอทจะสงขอมลทเรยงล าดบแลว ไปยง layer
บนไดในทายทสด
ผสงแคสงแพคเกจซ าเฉพาะแพคเกจทไมไดรบ Ack เทานน ตวจบเวลา (ทางฝงผสง) จะจบเวลาของแตละแพคเกจทไมไดรบ Ack
Window ของผสง มหมายเลข seq อย N หมายเลขตดกน จ ากดหมายเลข seq ของแพตเกจทสงไปแลว และไมไดรบ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
ขอมลมาจาก layer ดานบน ถามหมายเลข seq วางใน window ให
สง pkt ได
timeout(n) สง pkt n ซ า จบเวลาใหม
ACK(n) in [sendbase sendbase+N] รวา ผรบไดรบ pkt n แลว ถา n เกดเปนหมายเลขแรกสดในหนาตาง
(n เทากบ sendbase) ทไมได ถก ack เลอน window ไปทางดานขวา โดยเลอนไปยงหมายเลขทไมไดถก ack
ผสง pkt n in [rcvbase rcvbase+N-1] สง ACK(n) ถาไมเรยงตามล าดบ buffer ถาตามล าดบ สง (รวมถงใหสง pkt ท
เรยงตามล าดบและอยในบฟเฟอร) เลอน window ไปทหมายเลข seq ถดไปของ pkt ทยงไมไดรบจากผสง
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise ทงไปไมตองสนใจ
ผรบ
Transport Layer 3-54
ขณะ Selective repeat ด าเนนการ
สง pkt0
sender receiver
รบ pkt0 สง ack0
รบ pkt1 สง ack1
รบ pkt3 buffer สง ack3 รบ ack0 สง pkt4
รบ ack1 สง pkt5
pkt 2 timeout send pkt2
X loss
รบ pkt4 buffer สง ack4
รบ pkt5 buffer สง ack5
รบ pkt2 deliver pkt2
pkt3 pkt4 pkt5 สง ack2
บนทก ack3 มาถงแลว
sender window (N=4)
บนทก ack4 มาถงแลว บนทก ack4 มาถงแลว
Q เกดอะไรขนเมอ ack2 มาถง
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
สง pkt1 สง pkt2
สง pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
ตวอยาง หมายเลข seq 0 1 2 3 ขนาดของ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
ผรบไมสามารถเหนดานผสงได พฤตกรรมผรบจะเหมอนกนทง 2 สถานการณ
มบางอยางทผด (มาก)
ผรบไมเหนถงความแตกตางของทง 2 เหตการณจ าลองน
ในเหตการณจ าลอง (b) ขอมลเกาทถกสงซ า เมอผรบรบมา จะนกวาเปนขอมลใหม
Q ขนาดของ seq กบขนาดของ
window เกยวของกนยงไงเพอทจะหลกเลยงปญหาในตวอยาง (b)
Transport Layer 3-56
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-57
TCP ภาพรวม RFCs 79311221323 2018 2581
ขอมลแบบสองทศทาง มการสงขอมลทงไปและกลบในการ
เชอมตอ (connection) เดยวกน MSS ขนาด segment ทใหญสดท
TCP จะรบได (Max Segment Size)
connection-oriented handshaking (การแลกเปลยนของ
ขอความควบคม) ตงคาสถานะตงตนใหผสงและผรบ กอนการแลกเปลยนขอความ
flow controlled ผสงจะไมสงขอมลเกนกวาทผรบจะรบ
ได
point-to-point (สถานทนง-ไป-สถานทนง) ผสงหนงคน ผรบหนงคน
สายขอมลเปนไบตทเรยงล าดบและขอมลไมสญหาย (reliable in-order byte steam) ไมม ldquoขอบเขตrdquo ของขอความ
(ขอความจะมาถงผรบตอเนองกน)
pipelined การควบคมความคบคงและการควบคม
อตราการไหลของ TCP จะก าหนดขนาดของ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG ขอมลเรงดวน (โดยทว ๆ ไป ไมถกใช)
ACK ACK valid
PSH ผลกขอมลใหชน app (โดยทว ๆ ไป ไมถกใช)
RST SYN FIN สรางการเชอตอ
(ค าสง setup teardown)
จ านวน bytes ท ผรบเตมใจจะรบ
นบโดยใช byte ของขอมล (ไมใช segment)
Internet checksum
(เหมอนใน UDP)
Transport Layer 3-59
TCP seq numbers ACKs
หมายเลข sequence เลขของ byte stream จะเปน byte
แรกของขอมลของ segment น acknowledgements เลข seq ของ byte ถดไปทอกดานหนง
คาดหวงวาจะได cumulative ACK (ACK แบบรวม)
Q ผรบจดการกบ segment ทมาถงไมเรยงล าดบอยางไร A TCP ไมมรายละเอยดสวนน ndash ขนอย
กบคนทจะมาเขยนโปรแกรม TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาเขามาถงผสง
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาออกจากผสง
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
เหตการณจ าลอง telnet อยางงาย
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q เราควรจะก าหนด time out ไวทเทาใด
มากกวาเวลาของ RTT แตเวลาของ RTT นนแปรปรวน
ก าหนดไวนอยเกนไป timeout กอนก าหนด ท าใหมการ retransmissions โดยไมจ าเปน
ก าหนดไวมากเกนไป ระบบตอบสนองตอการสญหายของ segment ชาเกนไป
Q จะประมาณเวลาของ RTT อยางไร
SampleRTT วดจากระยะเวลาตงแตเรมสง sengment จนกระทงไดรบACK ไมสนใจการ retransmissions
SampleRTT มคาแปรปรวน เราตองการประมาณเวลาของ RTT ให smooth กวา ใชคาเฉลยของคาหลาย ๆ คา ไมใชแค
เวลาของ SampleRTT ปจจบน
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
คาเฉลยของการเคลอนทถวงน าหนกแบบ exponential คา SampleRTT ทในอดตจะมผลตอ EstimatedRTT ลดลงแบบ exponentially โดยทวไปจะก าหนดคา = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
ชวงเวลาของ timeout EstimatedRTT บวกกบระยะเวลาทเผอเอาไว ยงคาของ EstimatedRTT ทแปรปรวนมากเทาไร -gt ระยะเวลาทเผอความมากขนตาม
มประเมนคาการเปลยนแปลงของ SampleRTT จาก EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoชวงเวลาทเผอrdquo
Transport Layer 3-64
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP สรางบรการแบบ reliable อยบนบรการของ IP ทเปนแบบ unreliable segments ถกสงแบบ pipeline cumulative acks ม timer ส าหรบสงใหมคาตวเดยว
TCP สง segment ใหมเมอ เหตการณ timeout ไดรบ acks ซ า ๆ กน
เรามาเรมตนพจารณาทางดานผสงของ TCP อยางงายกอน ยงไมตองสนใจ acks ซ า ยงไมตองสนใจการควบคม flow และ
ความคบคง
Transport Layer 3-66
เหตการณของ TCP sender
เมอไดขอมลจาก app สราง segment ดวยหมายเลข seq เลข seq คอหมายเลขของไบตแรก
ของขอมลในแตละ segment หาก timer ยงไมเคยถกตง จะเรม
ตงเวลา การตงเวลาเพอจบเวลาส าหรบ
segment เกาทสดยงไมไดรบ ack ชวงเวลาทหมดอาย
TimeOutInterval
timeout สงใหมเฉพาะ segment ทเกด
timeout ตงเวลานบใหม เมอไดรบ ack ถา ack เปน ack ของ segment
กอนหนายงไมไดรบ ack Update สงทรวา ถก ACK แลว เรมตงเวลานบ ถายงคงม segment
ทยงไมไดรบ acked
Transport Layer 3-67
ดานผสงของ TCP (อยางงาย)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
การสราง ACK ของ TCP [RFC 1122 RFC 2581]
เหตการณทผรบ เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ) โดยขอมลทงหมดจนถงเลข seq ทคาดหวงไว ถก ACK หมดแลว
เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ ท าให ไมม gap ใน segment ทไดมา) แตมบาง segment ยงไมได ACK
Segment มาถงแบบไมเรยงตามล าดบ โดยมเลข seq สงกวาทตองการ ท าใหม gap (ชองโหว) เกดขน Segment ท ามาถง ทจะเตมบางสวนหรอเตมเตมชองโหว
TCP receiver action อยาเพงสง ACK รออก segment นง โดยรอสก 500ms หากยงไมม segment มา กสง ACK สง ACK แบบรวม (cumulative) ไปทนทในครงเดยว ซงจะเปนการ Ack segment ทมาแบบเรยงตามล าดบทงสอง segments สง ACK ซ า ไปทนท โดยใสเลข seq ของ byte ทตองการ สง ACK แบบรวมทนท โดย segment ทจะ Ack เรมจากดานทนอยกวาของ gap
Transport Layer 3-71
TCP fast retransmit
ระยะเวลาในการ time-out มกจะคอนขางยาว (โดยเปรยบเทยบ) ท าใหใชเวลาคอนขางนานกอนทจะ
สง packet อกครง
แกโดย ตรวจสอบการสญเสย pack โดยดท ACKs ทซ า ๆ กน ผสงมกสง segment ตด ๆ กน ดงนน ถา segment หนงหายไป จง
เปนไปไดทจะม ACKs ซ า ๆ กนจ านวนมาก
ถาผสงไดรบ ACKs ส าหรบขอมลเดยวกน 3 ACKS (ACKs ทซ ากนสามครง) ผสงตองสง seq ทยงไมถก acked (ระบเลข seq ทเลกทสด) มแนวโนมวา segment ทยงไมถก
ack จะหายไปเลย ดงนน จงไมตองรอใหหมดเวลา
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-74
TCP flow control application
process
buffer ดานผรบ ของ TCP socket
TCP code
IP code
application
OS
protocol stack ดานผรบ
application ลบขอมลจาก buffer ของ TCP socket hellip
hellip ชากวา TCP สงขอมล ขนไป (ขณะทผสงก าลงจะสง)
from sender
ผรบสามารถควบคมผสงได ดงนน ผสงจะไมสงขอมลเรวไป หรอ มากเกนไปจนลน (Overflow) buffer ของผรบ
flow control
Transport Layer 3-75
การควบคมการไหลขอมลของ TCP
ขอมลทอย buffer
buffer สวนทยงวาง rwnd
RcvBuffer
สวนของขอมล (payload) ใน segment ของ TCP
ไปยง process ของ application
ผรบระบขนาดของ buffer ทวางไวใน field rwnd ทอยในสวนหวของ TCP ทจะสงไปยงผสง ผเขยนโปรแกรมระบขนาดของ RcvBuffer ได
โดยใช API ตงคา option ของ socket (คาเรมตนทวไปคอ 4096 ไบต)
ทกระบบปฏบตการจะปรบขนาด RcvBuffer อตโนมต
ผสงจ ากดจ านวนของขอมลทยงไมถก acked (ldquoอยในระหวางการเดนทางrdquo) ใหเทากบคา rwnd ของขอมลผรบ
เปนการรบประกนวา buffer ของผรบจะไมลน
การbuffer ในดานของผรบ
Transport Layer 3-76
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-77
การจดการกบการเชอมตอ กอนทจะมการแลกเปลยนขอมลกน ผสงและผรบตองตกลงกนกอน ตกลงรวมในการสรางการเชอมตอ (แตละคนจะรวาอกฝายอยากจะเชอมตอหรอไม) ตกลงคาพารามเตอรส าหรบการเชอมตอ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake จะท างานไดเสมอไปหรอไมบน network
ความลาชาอาจเปลยนไป ขอความอาจถกสงซ าตวอยาง (เชน
req_conn(x)) เนองจากการสญหายของขอมล
ขอมลอาจสลบกน ไมสามารถรไดวาอกฝงไดรบหรอไม
ไดรบขอมลอะไร
2-way handshake
มาคยกนเถอะ
ตกลง ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-79
เหตการณผดพลาดของ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-80
3-way handshake ของ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM ของ 3-way handshake ของ TCP
Transport Layer 3-82
TCP การหยดการเชอมตอ
client server เลกเชอมตอทแตละดานของการเชอมตอ โดยแตละดานจะสง TCP segment ดวย FIN bit = 1
ตอบกลบ FIN ดวย ACK ในขณะทรบ FIN ACK กสามารถรวมอยในแพคเกจทสง FIN มาไดดวย
แตละดานสามารถสง FIN ไดพรอม ๆ กน
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP การหยดการเชอมตอ
Transport Layer 3-84
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-85
ความคบคง ความหมายไมเปนทางการ ldquoเมอจ านวนคนสงมากเกนไป ก าลงสงขอมลมาก
เกนไปดวยอตราการสงเรวเกนกวาท Network จะรบไหวrdquo แตกตางจาก flow control ผลทอาจทเกดขนจากความคบคง
packets หาย (buffer ลนท routers) ลาชามาก (เขาควใน buffers ของ router)
เปนปญหาทคนสนใจตด 10 อนดบตนๆ
หลกการของการควบคมความคบคงของเครอขาย
Transport Layer 3-86
ตนเหตและผลของความคบคง เหตการณ 1
มผสงและผรบอยางละสองคน Router 1 ตว ไมจ ากด buffers ความจของ link R ไมมการสงขอมลซ า
อตราขอมลทสงส าเรจตอหนงการเชอมตอ R2
buffer ท link ขาออกม buffer ไมจกด
Host A
อตราการสงขอมลตนฉบบ lin
Host B
อตราขอมลทสงส าเรจ lout
R2
R2
lou
t
lin R2 de
lay
lin
ดเลยจะมากขนเมออตราสงขอมลตนฉบบเขาใกลความจของ link
Transport Layer 3-87
Router 1 ตว Buffer แตมขนาด buffer จ ากด ตองสง pkt ไปซ าถา pkt นน timeout
ขอมลเขาของชน application = ขอมลออกจากชน application lin = lout
ขอมลเขาของชน transport จะรวมทตองสงซ าดวย lin lin
Buffer ของ link ทใชรวมกนซงมขนาดจ ากด
Host A
lin ขอมลตนฉบบ
Host B
lout lin ขอมลตนฉบบบวกกบ ขอมลทตองสงซ า
lsquo
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-88
ในอดมคต สมมตผสงรความเปนไปในเครอขาย ผสงสงเฉพาะตอนทเราเตอรม buffer เหลออย
Buffer ของ link ทแชรอยางจ ากด
lout copy
ม buffer วาง
R2
R2
lou
t
lin
Host B
A
ตนเหตและผลของความคบคง เหตการณ 2
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-89
lout copy
no buffer space
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
A
Host B
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
เมอสงขอมลท R2 บาง packets ถกสงซ า แต goodput ยงคงมคาลเขาหา R2 (ท าไม)
A
Host B
ตนเหตและผลของความคบคง เหตการณ 2
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Host B
ในความเปนจรง มการสงซ า packets หายหรอตกหลนระหวาง
เสนทางเนองจาก buffers เตม แตบางครง Timer ของผสงหมดเวลาลง
กอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-92
R2
lou
t
ldquoผลrdquo ของความคบคง เพอใหไดขอมลในอตราทตองการ (goodput) ตองท างานมากขน (สงซ า) เมอตองสง packets ซ าโดยทไมจ าเปน link จะตองล าเลยงหลาย copy ของ
ขอมลเดยวกน ท าให goodput ลดลง
R2 lin
ตนเหตและผลของความคบคง เหตการณ 2
ในความเปนจรง มการสงซ า 1 packets หายหรอตกหลนระหวางเสนทางเนองจาก buffers เตม 2 แตบางครง Timer ของผสงหมดเวลาลงกอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Transport Layer 3-93
มผสงขอมลทง 4 โฮสต เสนทางตองผานหลายจด หมดเวลาสงไปขอมลซ า
Q เกดอะไรขนเมอ λin และ λinrsquo เพมขน
Buffer ของเสนทางการสงขอมลทใชรวมกนมขนาดจ ากด
Host A lout
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
Host B
Host C Host D
A เมอ λinrsquo ของขอมลเสนสแดงมขนาดเพมขน ขอมลใน
เสนสน าเงนกจะถก drop ท าให throughput ของ connection สน าเงนเหลอ 0
lin ขอมลตนฉบบ lin ขอมลตนฉบบ บวกกบ
ขอมลทตองสงซ า
Transport Layer 3-94
อกหนง ldquoผลเสยrdquo ของความคบคง เมอแพกเกจถกทงไป นนกเทากบวา ทรยากรเครอขาย (ทใชสงขอมลกอน
หนาทขอมลนจะถกทง) ถกใชไปอยางไรคา
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
แนวทางในการควบคมความคบคงของขอมล
2 แนวทางในการควบคมความคบคง
การควบคมความคบคงโดยใชแคเครองปลายทาง (end-end)
ไมมการแจงกลบ (feedback) จากเครอขาย
ความคบคงของเครอขายจะถกเดาโดยเครองทอยปลายทางทคอยสงเกต loss delay
เปนวธของ TCP
การควบคมความคบคงโดยใหอปกรณเครอขายชวย
routers จะท าการแจง feedback ไปทระบบปลายทาง ใช bit 1 bit เพอระบถงความ
แออด (SNA DECbit TCPIP ECN ATM) หรอ ระบอตราการสงทชดเจน
ส าหรบผสง
Transport Layer 3-96
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
ABR available bit rate ldquoบรการทมความยดหยนrdquo ถาเสนทางของผสง ldquoมขอมลนอยกวา
ความจะมากrdquo ผสงจะใชประโยชนจาก
bandwidth ทเหลออย ถา path ของผสงแออด
ผสงจะคอย ๆ ลดอตราสงใหเหลอเทาอตราการสงขนต าทรบประกนไว
RM (resource management) cells สงโดยผสง แทรก ๆ ไปกบ cell ทเปนขอมล bits ใน RM cell ถกตงคาโดย switches
(ldquoเครอขายคอยชวยrdquo) NI bit ไมเพมอตราการสง (ความแออด
ระดบกลาง) CI bit การบงบอกถงความแออด
ผรบไมแกคาใน bit นของ RM cells และสงไปใหผสง
Transport Layer 3-97
field ขอมล ER (explicit rate) ขนาด 2 byte ใน cell RM switch ทแออดอาจลดคา ER ใน cell ดงนน อตราทผสงจะสงขอมลจะเปนอตราการสงมากทสดท link ในเสนทางจะรองรบได
bit EFCI ใน cell ขอมล ถกตงคาไวท 1 ใน switch ทมขอมลแออด ถา cell ขอมลกอนหนา RM cell ถกตงคา EFCI ผรบจะตงคา bit CI ใน cell RM ท
สงกลบใหผสง
RM cell data cell
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
Transport Layer 3-98
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-99
การควบคมความคบคงของ TCP additive increase (เพมแบบบวก) multiplicative decrease (ลดแบบเทาตว)
วธ ผสงเพมอตราสง (window size) ควานหา bandwidth ทมใหใชได จนกวาการสญหายจะเกดขน additive increase เพม cwnd ทละ 1 MSS ทก ๆ RTT จนกวาจะ pkt จะหาย multiplicative decrease ตดลด cwnd เหลอครงเดยวหลงจากการสญหาย
cwnd
ขนา
ดของ co
nges
tion
wind
ow ของผส
งแบบ
TCP
พฤตกรรมของ AIMD เปน ลกษณะฟนเลอย หา bandwidth
ขนาด window เพมแบบบวก hellip hellip จนกวาจะเกดการสญหาย (จากนน ตดลงเหลอครงนง)
time
Transport Layer 3-100
ผสงจ ากดการสง
ขนาด cwnd จะเปลยนแปลงไปมา ขนกบความคบคงของเครอขายทผสงไดรมา
อตราการสง TCP อยางคราว ๆ สงขอมลจ านวน
cwnd bytes รอ ACKS เพอประมาณคา RTT จากนนสงไบตขอมลเพม
byte สดทายท ถก ACKed สง แตยงไมถก
ACK (ldquoอยระหวางการเดนทางrdquo)
byte สดทายทสงไป
cwnd
LastByteSent-
LastByteAcked lt cwnd
ชวงเลข sequence number ของผสง
rate ~ ~ cwnd
RTT bytessec
การควบคมความคบคงของ TCP รายละเอยด
Transport Layer 3-101
TCP Slow Start
เมอเรมการเชอมตอ เพมอตราการสงแบบยกก าลง (exponentially) จนกวาจะเจอกบ loss ครงแรก เรมตนขนาด cwnd = 1 MSS เพมขนาด cwnd หนงเทาตวทก ๆ RTT นนคอ โดยเพมขนาด cwnd ไป 1 MSS
ส าหรบทก ๆ ACK ทไดรบ
สรป อตราสงเรมแรกจะชาแตคาจะเพมแบบกระโดดขนอยางรวดเรว
Host A
RTT
Host B
time
Transport Layer 3-102
TCP การหา loss และการตอบสนอง
ถา loss ถกระบโดย timeout cwnd ถกตงไวท 1 MSS จากนนหนาตางจะเพมขนเปนเลขยกก าลง (exponential เหมอนใน slow start)
จนไปถงคา threshold จากนนจะเพมขนเปนเชงเสน
ถา loss ถกระบโดยไดรบ ACK ซ า 3 ACKs (3 duplicate acks) TCP RENO
ACKs ซ า ระบถงความสามารถการสง segments ของเครอขาย
cwnd ถกตดเหลอครงนงจากนนเพมขนแบบเชงเสน
TCP Tahoe จะตงคา cwnd เปน 1 เสมอ (ไมวาจะ timeout หรอ 3 dup acks)
Transport Layer 3-103
Q เมอไร TCP ควรจะเปลยนจากการเพมขนแบบ exponential เปนแบบเชงเสน
A เมอ cwnd ถกเพมเปน 12 ของ ldquoคาทมากทสดrdquo ของมนกอนจะเกด timeout
การด าเนนการ ตวแปร ssthresh ขณะเกด Loss ssthresh จะถก
ตงคาท 12 ของคา cwnd กอนเกดเหตแปปเดยว (คา cwnd ทมากทสดกอนเกดเหตการณ)
TCP จาก slow start เปน CA (Congestion Avoidance)
Transport Layer 3-104
สรป TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput ของ TCP
คาเฉลย throughput ของ TCP เปน function ของขนาดของ window และ RTT ไมสนใจ slow start สมมตวาขอมลถกสงตลอด
W ขนาดของ window (หนวยเปน bytes) การสญเสยทเกดขน คาเฉลยขนาดของ window (จ านวน byte ทเดนทางอย) คอ frac34 W คาเฉลยของ throughput คอ 34W ตอ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP ในอนาคต TCP ใน ldquopipes ทยาวและมความจสงrdquo
ตวอยาง 1500 byte segments 100ms RTT ตองการชองทางการสงขนาด 10 Gbps
requires W = 83333 in-flight segments ความเปนไปไดของการสญหายของในชองทางการสงขอมล L [Mathis 1997]
เพอทจะมชองทางการสงขนาด 10Gbps ตองมการสญหายของขอมลเพยงแค =
210-10 ndash นอยมาก ดงนน ตองม TCP รนใหมส าหรบการสงแบบความเรวสง
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
เปาหมายของ fairness ถาม TCP session จ านวน K session ใชทรพยากร bandwidth R รวมกน แตละ session ควรจะเฉลยทรพยากรเหมอนกนท RK
TCP connection 1
router คอขวด มความจ R
ความเสมอภาค (Fairness) ของ TCP
TCP connection 2
Transport Layer 3-108
ความเสมอภาคของ TCP คออะไร session 2 session แขงกนใชทรพยากร additive increase ใหความชนเสนเทากบ 1 (session ทง 2 คอย ๆ ได throughput เพมทละ
นด) multiplicative decrease ลด throughput ไปครงหนง
R
R
เสนระบแบนดวธทใชรวมเทากน
Throuput ของ การเชอมตอท 1
congestion avoidance (CA) additive increase สญเสย ลดขนาดของ window ลงไปครงนง
congestion avoidance (CA) additive increase
สญเสย ลดขนาดของ window ลงไปครงนง
Transport Layer 3-109
ความเสมอภาค (ตอ)
ความเสมอภาค และ UDP มลตมเดยแอพพลเคชนบอยครงไม
ใช TCP ไมตองการใหอตราการสงลดลงเพราะ
การควบคมความคบคง
มลตมเดยแอพพลเคชนจงใช UDP แทน สงเสยงวดโอดวยความเรวคงท ทน
ตอการสญเสยขอมล
ความเสมอภาค การเชอมตอ TCP แบบขนาน แอพพลเคชนสามารถทจะเปดหลายการ
เชอมตอระหวางเครอง 2 เครองแบบขนานได
เวบบราวเซอรท าแบบน ตวอยางเชน link ทมความจ R ซงม 9 การ
เชอมตอ ถาแอพใหมตองการ 1 TCP จะไดรบท rate
R10 ถาแอพใหมตองการ 11 TCPs จะไดรบท R2
Transport Layer 3-110
Chapter 3 บทสรป
หลกการเบองหลงการใหบรการชนtransport multiplexing demultiplexing การสงขอมลแบบไวใจได การควบคมการไหลของขอมล การควบคมความคบคงของขอมล
กรณศกษาและการปฏบตบน internet UDP TCP
ถดไป ออกจากปลายทางของระบบ
เครอขาย (application transport layers)
เขาไปยงสแกนของเครอขาย
Transport Layer 3-13
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
P4
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
network
P6 P5 P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
ทง 3 segment มทอย IP ปลายทาง คอ B และ เลขพอรต ปลายทางคอ 80 แตถกแยกสงไปยง socket ทตางกน
server IP address B
Transport Layer 3-14
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
server IP address B
network
P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
P4
threaded server
Transport Layer 3-15
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
เปน protocol ของ Internet ทไมไดมสวนเพมเตมอะไร
บรการแบบ ldquoจะพยายามใหดทสดrdquo (best effort) ดงนน segment แบบ UDP อาจ สญหาย ไปถง app ของผรบแตไมเรยงล าดบ
ไมมการเชอมตอ ไมมการท า handshake ระหวางผสง
และผรบ แตละ segment ทเปน UDP จะถก
จดการเปนอสระจาก segment อน ๆ
UDP ใชใน app ทสง multimedia อยางตอเนอง
(ซงทนตอการสญเสย แต sensitive กบอตราการสง)
DNS SNMP
ถาจะให การถายโอนขอมลบน UDP มความนาเชอถอกวาน เพมความนาเชอถอทชน application มการกคนขอผดพลาด (ขนอยกบ แตละ
application)
Transport Layer 3-17
UDP สวนหวของ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
ควายาวของ segment ของ UDP (หนวยเปน byte) รวมความยาว
ของ header ดวย
ไมตองสรางการเชอมตอ (ซงเปนสวนทเพมความลาชา)
งาย ไมซบซอน ไมตองมสถานะของการเชอมตอทผสงและผรบ
สวนหว (header) มขนาดเลก ไมมการควบคมความคบคง UDP
สามารถสงขอมลไดรวดเรวตามทตองการ
ท าไมถงตองม UDP
Transport Layer 3-18
checksum ของ UDP
ผสง จดการขอมลทงหมดทจะไปอยใน
segment รวมทงขอมลสวนหวตาง ๆ ทเปนล าดบของจ านวนเตม 16 บตหลายจ านวน
checksum ผลรวมของขอมลตาง ๆ ใน segment
ผสงใส checksum เขาไปใน field checksum ใน header ของ UDP
ผรบ ค านวณหา checksum ของ segment ทได
รบมาใหม ตรวจสอบคา checksum ใน field ของ
header กบ คาทเพงไดจากการค านวณ วาเทากนหรอไม ถาไม แสดงวาพบขอผดพลาด ถาใช แสดงวา ไมพบขอผดพลาด แต
จรง ๆ แลว กอาจจะมขอผดพลาดไดอยด (รายละเอยดจะกลาวภายหลง)
จดมงหมาย ตรวจสอบขอผดพลาด เชน bits ทคาโดนกลบใน segment
Transport Layer 3-19
Internet checksum ตวอยาง
ตวอยาง การบวก 16-bit integers สองจ านวน
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note ขณะทบวกตวเลข เมอ bitท 16 (bit ซายสด) มการทดเลข ใหน าเลขนนไปบวกกบ bit ท 1 แลวจง flip bit ทก bit เพอใหได checksum
Transport Layer 3-20
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-21
Principles of reliable data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
หลกการของความนาเชอถอ data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
หลกการของความนาเชอถอ data transfer
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
ส าคญในชน application transport link ตด top-10 ของหวขอทางดานเครอขาย
Transport Layer 3-24
Reliable data transfer เรมตน
ดานผสง ดานผรบ
rdt_send() ถกเรยกจากชนดานบน (เชน โดย app) ท าหนาทผานขอมลเพอใหขอมลถกสงไป
ยงชนดานบนของผรบ
udt_send() ถกเรยกโดย rdt เพอทจะโอนถาย packet ผานชองการ
สอสารท unreliable ไปยงผรบ
rdt_rcv() ถกเรยกโดย OS เมอ OS ไดรบ packet ทมาถงชองการสอสารดานผรบ
deliver_data() ถกเรยกโดย rdt เพอใหสงขอมลไปยงชนดานบน
Transport Layer 3-25
เราจะ คอย ๆ พฒนา protocol ส าหรบการโอนถายขอมลแบบ reliable หรอ reliable
data transfer protocol (rdt) ตอนน พจารณาเฉพาะการโอนถายขอมลแบบทางเดยวกอน
แตขอมลส าหรบการควบคม (control info) จะถกสงไปกลบทงสองทาง
ใช finite state machines (FSM) เพอก าหนดการกระท าของผสงและผรบ
state 1
state 2
เหตการณทท าใหเกดการเปลยนผานของ State การกระท าขณะเปลยนผาน State
สถานะ (state) เมออยใน state ปจจบน state ถดไปจะขนอยกบเหตการณทจะ
เกดขน ณ state ปจจบน
เหตการณ การกระท า
Reliable data transfer เรมตน
Transport Layer 3-26
rdt10 การโอนถายขอมลแบบ reliable ผานชองสญญาณแบบ reliable
สมมตให ชองทางทอยขางใตเปนชองทางทเชอถอได ไมมการผดพลาดของบต ไมมขอมลสญหาย
FSMs ส าหรบผสง และ ส าหรบผ รบ ผสงสงขอมลไปยงชนดานลาง ผรบรบขอมลจากชนดานลาง
รอรบการเรยกจากชน
ดานบน packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
รอรบการเรยกจากชน
ดานลาง
rdt_rcv(packet)
ผสง ผรบ
Transport Layer 3-27
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร
acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK
negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors
sender retransmits pkt on receipt of NAK
new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 ชองทางการสอสารทม bit errors
ปกตแลว มนษยใชวธการใดในการแกไข ldquoerrorsrdquo ระหวางการสนทนา
Transport Layer 3-28
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร การตอบรบ (acknowledgements (ACKs)) ผรบแจงผสงวาไดรบ packet แลว การตอบปฏเสธ (negative acknowledgements (NAKs)) ผรบแจงผสงวา packet ม
errors sender สงขอมลซ าอกครง เมอไดรบ NAK
กลไกทเพมขน in rdt20 (เพมจาก rdt10) การตรวจจบความผดพลาด การแจงกลบ (feedback) ขอมลส าหรบการควบคม (ACKNAK) จากผรบไปยงผสง
rdt20 ชองทางการสอสารทม bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 ขอก าหนดของ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
จะเกดอะไรขนถา ACKNAK เกดเสยหาย ผสงไมรวาผรบรบ pkt ครบถวน
หรอไม ไมควรสง pkt ซ าอกครง เพราะ
pkt ซ ากน
การจดการกบขอมลทซ าซอน ผสงจะสง packet อกครงถา
ACKNAK เกดเสยหาย เตมหมายเลข sequence ใหแตละ
packet ผรบตองทง packet ทซ ากน
stop and wait ผสงท าการสงpacketและรอใหผรบตอบกลบดวย ACKNAK กอนทจะสง packet ตอไป
Transport Layer 3-33
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Transport Layer 3-35
rdt21 อภปราย
ผสง ใสหมายเลข seq ในpacket หมายเลข seq (01) กพอ
นกสท าไม ตองตรวจสอบวา ACKNAK ท
ไดรบเสยไปหรอไม จ านวนหมายเลข seq ตองเปนสอง
เทาของจ านวนสถานะ เพราะผสงตองเกบสถานะเพอldquoจ าrdquo
วา pkt ถดไปจะตองมเลข seq 0 หรอ 1
ผรบ ตองตรวจสอบวา pkt ทไดรบซ ากบ
pkt ทไดรบกอนหนาหรอไม ผรบจะเกบสถานะทระบวา 0 หรอ 1
คอหมายเลข seq ทคาดวาจะได
ขอสงเกต ผรบไมสามารถรวา ACKNAK สดทายทผสงไดรบถกตองหรอไม
Transport Layer 3-36
rdt22 protocol ทไมตองใช NAK
ท างานเหมอนกบ rdt21 แตใชแค ACKs แทนทจะสง NAK ผรบสง ACK ส าหรบ pkt สดทายทไดรบถกตอง
ฝงรบจะตองรวมหมายเลข seq ของ pkt ทก าลงถก ACK ไปดวย
จะสง ACK ซ าไปทผสงถาไมไดรบ pkt ทมหมายเลข seq ทคาดหวง ผลลพธจะออกมาเหมอนกรณทสง NAK ผสงตองสง pkt ตวลาสดไปใหมอกครง
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 ชองสญญาณทมความผดพลาดและ pkt สญหาย
เพมขอสนนษฐาน ชองสญญาณสามารถสญเสยแพคเกจ (ไมวาจะเปนขอมลหรอ ACKs) ได กลไก checksum หมายเลข seq
ACKs และ การสงซ า สามารถชวย แตมนกยงไมใชทางออก
วธ ผสงรอ ACK กลบมาในชวงเวลาท ldquoสมเหตสมผลrdquo
สง pkt เดมไปใหมอกครงถาไมไดรบ ACK ภายในชวงเวลาน
ถา pkt (หรอ ACK) มาถงลาชา (ไมใชหายไป) การสงใหมกจะเปนการสงซ า ซง seq
ไดจดการเรองเกยวกบขอมลซ าได ผรบตองระบเลข seq ของ pkt ทก าลง
ถก ACKed
ตองใชการนบเวลาถอยหลง (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
ขณะ rdt30 ด าเนนการ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
ขณะ rdt30 ด าเนนการ
Transport Layer 3-42
ประสทธภาพของ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
บตแรกของแพคเกจกถกสง t = 0
ผสง ผรบ
RTT
บตสดทายของแพคเกจถกสง t = L R
บตแรกของแพคเกจมาถง บตสดทายของแพคเกจมาถง สง ACK
ไดรบ ACK สงแพคเกจตอไป t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols แบบ pipelined
pipelining ผสงสงหลาย packet ไปยงผรบทง ๆ ท pkt เหลานนยงไมไดรบการยนยนตอบรบ (not yet acked) ชวงของหมายเลข sequence จะตองเพมขน ตองพกขอมล (buffer) ทผสงและผรบ
protocols แบบ pipelined แบบทวไปมสองแบบ go-Back-N selective repeat
Transport Layer 3-45
Pipelining ชวยเพม utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols แบบ pipeline ภาพรวม
Go-back-N ผสงสามารถสงแพคเกจทไมยงถก
ack ไดไมเกน N แพคเกจใน pipeline
ผรบแคสง cumulative ack ไม ack packet ถามนกอใหเกด gap
ผสงจบเวลาส าหรบแพคเกจทสงไป
นานทสดทยงไมได ack เมอเวลาหมด ผสงจะสงแพคเกจ
ทงหมดทยงไมไดรบ ack อกครง
Selective Repeat ผสงสามารถสงแพคเกจทไมยงถก ack ได
ไมเกน N แพคเกจใน pipeline
ผรบจะตองสง ack กลบใหแตละแพคเกจ
ผสงจะจบเวลาส าหรบแตละแพคเกจท
ไมได ack เมอเวลาส าหรบแพคเกจใดหมด ผสงจะสง
เฉพาะแพคเกจนนเทานน
Transport Layer 3-47
Go-Back-N ผสง
หมายเลข seq (k bit) จะอยใน header ของ packet อนญาตใหขนาด ldquowindowrdquo (ของ pkt ทตดกนและยงไมถก ack) ไมเกน N
ACK(n) จะ ack แพคเกจทงหมดไปจนถงทมหมายเลข seq เทากบ n - ldquoการ ACK แบบรวม (cumulative ACK)rdquo อาจมการไดรบ ACKs หมายเลข seq เดมซ า (ดรายละเอยดดาน receiver)
มการจบเวลาส าหรบแพคเกจทเดนทางอย ซงเดนทางนานทสดและยงไมได ACK (pkt ทมหมายเลข seq นอยทสดใน window)
timeout(n) เวลาหมดท pkt n ผสงจะสง pkt n และ pkt ทงหมดใน window (ซงมหมายเลข seq สงกวา n) อกครง
Transport Layer 3-48
GBN FSM ดานผสงทเพมจากของเดม
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum
out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM ดานผรบทเพมจากของเดม
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
ผ รบ Ack แตละแพคเกจทไดรบมาถกตอง เกบ (buffer) แพคเกจ เทาทจ าเปน เพอทจะสงขอมลทเรยงล าดบแลว ไปยง layer
บนไดในทายทสด
ผสงแคสงแพคเกจซ าเฉพาะแพคเกจทไมไดรบ Ack เทานน ตวจบเวลา (ทางฝงผสง) จะจบเวลาของแตละแพคเกจทไมไดรบ Ack
Window ของผสง มหมายเลข seq อย N หมายเลขตดกน จ ากดหมายเลข seq ของแพตเกจทสงไปแลว และไมไดรบ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
ขอมลมาจาก layer ดานบน ถามหมายเลข seq วางใน window ให
สง pkt ได
timeout(n) สง pkt n ซ า จบเวลาใหม
ACK(n) in [sendbase sendbase+N] รวา ผรบไดรบ pkt n แลว ถา n เกดเปนหมายเลขแรกสดในหนาตาง
(n เทากบ sendbase) ทไมได ถก ack เลอน window ไปทางดานขวา โดยเลอนไปยงหมายเลขทไมไดถก ack
ผสง pkt n in [rcvbase rcvbase+N-1] สง ACK(n) ถาไมเรยงตามล าดบ buffer ถาตามล าดบ สง (รวมถงใหสง pkt ท
เรยงตามล าดบและอยในบฟเฟอร) เลอน window ไปทหมายเลข seq ถดไปของ pkt ทยงไมไดรบจากผสง
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise ทงไปไมตองสนใจ
ผรบ
Transport Layer 3-54
ขณะ Selective repeat ด าเนนการ
สง pkt0
sender receiver
รบ pkt0 สง ack0
รบ pkt1 สง ack1
รบ pkt3 buffer สง ack3 รบ ack0 สง pkt4
รบ ack1 สง pkt5
pkt 2 timeout send pkt2
X loss
รบ pkt4 buffer สง ack4
รบ pkt5 buffer สง ack5
รบ pkt2 deliver pkt2
pkt3 pkt4 pkt5 สง ack2
บนทก ack3 มาถงแลว
sender window (N=4)
บนทก ack4 มาถงแลว บนทก ack4 มาถงแลว
Q เกดอะไรขนเมอ ack2 มาถง
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
สง pkt1 สง pkt2
สง pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
ตวอยาง หมายเลข seq 0 1 2 3 ขนาดของ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
ผรบไมสามารถเหนดานผสงได พฤตกรรมผรบจะเหมอนกนทง 2 สถานการณ
มบางอยางทผด (มาก)
ผรบไมเหนถงความแตกตางของทง 2 เหตการณจ าลองน
ในเหตการณจ าลอง (b) ขอมลเกาทถกสงซ า เมอผรบรบมา จะนกวาเปนขอมลใหม
Q ขนาดของ seq กบขนาดของ
window เกยวของกนยงไงเพอทจะหลกเลยงปญหาในตวอยาง (b)
Transport Layer 3-56
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-57
TCP ภาพรวม RFCs 79311221323 2018 2581
ขอมลแบบสองทศทาง มการสงขอมลทงไปและกลบในการ
เชอมตอ (connection) เดยวกน MSS ขนาด segment ทใหญสดท
TCP จะรบได (Max Segment Size)
connection-oriented handshaking (การแลกเปลยนของ
ขอความควบคม) ตงคาสถานะตงตนใหผสงและผรบ กอนการแลกเปลยนขอความ
flow controlled ผสงจะไมสงขอมลเกนกวาทผรบจะรบ
ได
point-to-point (สถานทนง-ไป-สถานทนง) ผสงหนงคน ผรบหนงคน
สายขอมลเปนไบตทเรยงล าดบและขอมลไมสญหาย (reliable in-order byte steam) ไมม ldquoขอบเขตrdquo ของขอความ
(ขอความจะมาถงผรบตอเนองกน)
pipelined การควบคมความคบคงและการควบคม
อตราการไหลของ TCP จะก าหนดขนาดของ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG ขอมลเรงดวน (โดยทว ๆ ไป ไมถกใช)
ACK ACK valid
PSH ผลกขอมลใหชน app (โดยทว ๆ ไป ไมถกใช)
RST SYN FIN สรางการเชอตอ
(ค าสง setup teardown)
จ านวน bytes ท ผรบเตมใจจะรบ
นบโดยใช byte ของขอมล (ไมใช segment)
Internet checksum
(เหมอนใน UDP)
Transport Layer 3-59
TCP seq numbers ACKs
หมายเลข sequence เลขของ byte stream จะเปน byte
แรกของขอมลของ segment น acknowledgements เลข seq ของ byte ถดไปทอกดานหนง
คาดหวงวาจะได cumulative ACK (ACK แบบรวม)
Q ผรบจดการกบ segment ทมาถงไมเรยงล าดบอยางไร A TCP ไมมรายละเอยดสวนน ndash ขนอย
กบคนทจะมาเขยนโปรแกรม TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาเขามาถงผสง
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาออกจากผสง
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
เหตการณจ าลอง telnet อยางงาย
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q เราควรจะก าหนด time out ไวทเทาใด
มากกวาเวลาของ RTT แตเวลาของ RTT นนแปรปรวน
ก าหนดไวนอยเกนไป timeout กอนก าหนด ท าใหมการ retransmissions โดยไมจ าเปน
ก าหนดไวมากเกนไป ระบบตอบสนองตอการสญหายของ segment ชาเกนไป
Q จะประมาณเวลาของ RTT อยางไร
SampleRTT วดจากระยะเวลาตงแตเรมสง sengment จนกระทงไดรบACK ไมสนใจการ retransmissions
SampleRTT มคาแปรปรวน เราตองการประมาณเวลาของ RTT ให smooth กวา ใชคาเฉลยของคาหลาย ๆ คา ไมใชแค
เวลาของ SampleRTT ปจจบน
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
คาเฉลยของการเคลอนทถวงน าหนกแบบ exponential คา SampleRTT ทในอดตจะมผลตอ EstimatedRTT ลดลงแบบ exponentially โดยทวไปจะก าหนดคา = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
ชวงเวลาของ timeout EstimatedRTT บวกกบระยะเวลาทเผอเอาไว ยงคาของ EstimatedRTT ทแปรปรวนมากเทาไร -gt ระยะเวลาทเผอความมากขนตาม
มประเมนคาการเปลยนแปลงของ SampleRTT จาก EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoชวงเวลาทเผอrdquo
Transport Layer 3-64
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP สรางบรการแบบ reliable อยบนบรการของ IP ทเปนแบบ unreliable segments ถกสงแบบ pipeline cumulative acks ม timer ส าหรบสงใหมคาตวเดยว
TCP สง segment ใหมเมอ เหตการณ timeout ไดรบ acks ซ า ๆ กน
เรามาเรมตนพจารณาทางดานผสงของ TCP อยางงายกอน ยงไมตองสนใจ acks ซ า ยงไมตองสนใจการควบคม flow และ
ความคบคง
Transport Layer 3-66
เหตการณของ TCP sender
เมอไดขอมลจาก app สราง segment ดวยหมายเลข seq เลข seq คอหมายเลขของไบตแรก
ของขอมลในแตละ segment หาก timer ยงไมเคยถกตง จะเรม
ตงเวลา การตงเวลาเพอจบเวลาส าหรบ
segment เกาทสดยงไมไดรบ ack ชวงเวลาทหมดอาย
TimeOutInterval
timeout สงใหมเฉพาะ segment ทเกด
timeout ตงเวลานบใหม เมอไดรบ ack ถา ack เปน ack ของ segment
กอนหนายงไมไดรบ ack Update สงทรวา ถก ACK แลว เรมตงเวลานบ ถายงคงม segment
ทยงไมไดรบ acked
Transport Layer 3-67
ดานผสงของ TCP (อยางงาย)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
การสราง ACK ของ TCP [RFC 1122 RFC 2581]
เหตการณทผรบ เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ) โดยขอมลทงหมดจนถงเลข seq ทคาดหวงไว ถก ACK หมดแลว
เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ ท าให ไมม gap ใน segment ทไดมา) แตมบาง segment ยงไมได ACK
Segment มาถงแบบไมเรยงตามล าดบ โดยมเลข seq สงกวาทตองการ ท าใหม gap (ชองโหว) เกดขน Segment ท ามาถง ทจะเตมบางสวนหรอเตมเตมชองโหว
TCP receiver action อยาเพงสง ACK รออก segment นง โดยรอสก 500ms หากยงไมม segment มา กสง ACK สง ACK แบบรวม (cumulative) ไปทนทในครงเดยว ซงจะเปนการ Ack segment ทมาแบบเรยงตามล าดบทงสอง segments สง ACK ซ า ไปทนท โดยใสเลข seq ของ byte ทตองการ สง ACK แบบรวมทนท โดย segment ทจะ Ack เรมจากดานทนอยกวาของ gap
Transport Layer 3-71
TCP fast retransmit
ระยะเวลาในการ time-out มกจะคอนขางยาว (โดยเปรยบเทยบ) ท าใหใชเวลาคอนขางนานกอนทจะ
สง packet อกครง
แกโดย ตรวจสอบการสญเสย pack โดยดท ACKs ทซ า ๆ กน ผสงมกสง segment ตด ๆ กน ดงนน ถา segment หนงหายไป จง
เปนไปไดทจะม ACKs ซ า ๆ กนจ านวนมาก
ถาผสงไดรบ ACKs ส าหรบขอมลเดยวกน 3 ACKS (ACKs ทซ ากนสามครง) ผสงตองสง seq ทยงไมถก acked (ระบเลข seq ทเลกทสด) มแนวโนมวา segment ทยงไมถก
ack จะหายไปเลย ดงนน จงไมตองรอใหหมดเวลา
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-74
TCP flow control application
process
buffer ดานผรบ ของ TCP socket
TCP code
IP code
application
OS
protocol stack ดานผรบ
application ลบขอมลจาก buffer ของ TCP socket hellip
hellip ชากวา TCP สงขอมล ขนไป (ขณะทผสงก าลงจะสง)
from sender
ผรบสามารถควบคมผสงได ดงนน ผสงจะไมสงขอมลเรวไป หรอ มากเกนไปจนลน (Overflow) buffer ของผรบ
flow control
Transport Layer 3-75
การควบคมการไหลขอมลของ TCP
ขอมลทอย buffer
buffer สวนทยงวาง rwnd
RcvBuffer
สวนของขอมล (payload) ใน segment ของ TCP
ไปยง process ของ application
ผรบระบขนาดของ buffer ทวางไวใน field rwnd ทอยในสวนหวของ TCP ทจะสงไปยงผสง ผเขยนโปรแกรมระบขนาดของ RcvBuffer ได
โดยใช API ตงคา option ของ socket (คาเรมตนทวไปคอ 4096 ไบต)
ทกระบบปฏบตการจะปรบขนาด RcvBuffer อตโนมต
ผสงจ ากดจ านวนของขอมลทยงไมถก acked (ldquoอยในระหวางการเดนทางrdquo) ใหเทากบคา rwnd ของขอมลผรบ
เปนการรบประกนวา buffer ของผรบจะไมลน
การbuffer ในดานของผรบ
Transport Layer 3-76
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-77
การจดการกบการเชอมตอ กอนทจะมการแลกเปลยนขอมลกน ผสงและผรบตองตกลงกนกอน ตกลงรวมในการสรางการเชอมตอ (แตละคนจะรวาอกฝายอยากจะเชอมตอหรอไม) ตกลงคาพารามเตอรส าหรบการเชอมตอ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake จะท างานไดเสมอไปหรอไมบน network
ความลาชาอาจเปลยนไป ขอความอาจถกสงซ าตวอยาง (เชน
req_conn(x)) เนองจากการสญหายของขอมล
ขอมลอาจสลบกน ไมสามารถรไดวาอกฝงไดรบหรอไม
ไดรบขอมลอะไร
2-way handshake
มาคยกนเถอะ
ตกลง ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-79
เหตการณผดพลาดของ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-80
3-way handshake ของ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM ของ 3-way handshake ของ TCP
Transport Layer 3-82
TCP การหยดการเชอมตอ
client server เลกเชอมตอทแตละดานของการเชอมตอ โดยแตละดานจะสง TCP segment ดวย FIN bit = 1
ตอบกลบ FIN ดวย ACK ในขณะทรบ FIN ACK กสามารถรวมอยในแพคเกจทสง FIN มาไดดวย
แตละดานสามารถสง FIN ไดพรอม ๆ กน
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP การหยดการเชอมตอ
Transport Layer 3-84
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-85
ความคบคง ความหมายไมเปนทางการ ldquoเมอจ านวนคนสงมากเกนไป ก าลงสงขอมลมาก
เกนไปดวยอตราการสงเรวเกนกวาท Network จะรบไหวrdquo แตกตางจาก flow control ผลทอาจทเกดขนจากความคบคง
packets หาย (buffer ลนท routers) ลาชามาก (เขาควใน buffers ของ router)
เปนปญหาทคนสนใจตด 10 อนดบตนๆ
หลกการของการควบคมความคบคงของเครอขาย
Transport Layer 3-86
ตนเหตและผลของความคบคง เหตการณ 1
มผสงและผรบอยางละสองคน Router 1 ตว ไมจ ากด buffers ความจของ link R ไมมการสงขอมลซ า
อตราขอมลทสงส าเรจตอหนงการเชอมตอ R2
buffer ท link ขาออกม buffer ไมจกด
Host A
อตราการสงขอมลตนฉบบ lin
Host B
อตราขอมลทสงส าเรจ lout
R2
R2
lou
t
lin R2 de
lay
lin
ดเลยจะมากขนเมออตราสงขอมลตนฉบบเขาใกลความจของ link
Transport Layer 3-87
Router 1 ตว Buffer แตมขนาด buffer จ ากด ตองสง pkt ไปซ าถา pkt นน timeout
ขอมลเขาของชน application = ขอมลออกจากชน application lin = lout
ขอมลเขาของชน transport จะรวมทตองสงซ าดวย lin lin
Buffer ของ link ทใชรวมกนซงมขนาดจ ากด
Host A
lin ขอมลตนฉบบ
Host B
lout lin ขอมลตนฉบบบวกกบ ขอมลทตองสงซ า
lsquo
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-88
ในอดมคต สมมตผสงรความเปนไปในเครอขาย ผสงสงเฉพาะตอนทเราเตอรม buffer เหลออย
Buffer ของ link ทแชรอยางจ ากด
lout copy
ม buffer วาง
R2
R2
lou
t
lin
Host B
A
ตนเหตและผลของความคบคง เหตการณ 2
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-89
lout copy
no buffer space
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
A
Host B
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
เมอสงขอมลท R2 บาง packets ถกสงซ า แต goodput ยงคงมคาลเขาหา R2 (ท าไม)
A
Host B
ตนเหตและผลของความคบคง เหตการณ 2
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Host B
ในความเปนจรง มการสงซ า packets หายหรอตกหลนระหวาง
เสนทางเนองจาก buffers เตม แตบางครง Timer ของผสงหมดเวลาลง
กอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-92
R2
lou
t
ldquoผลrdquo ของความคบคง เพอใหไดขอมลในอตราทตองการ (goodput) ตองท างานมากขน (สงซ า) เมอตองสง packets ซ าโดยทไมจ าเปน link จะตองล าเลยงหลาย copy ของ
ขอมลเดยวกน ท าให goodput ลดลง
R2 lin
ตนเหตและผลของความคบคง เหตการณ 2
ในความเปนจรง มการสงซ า 1 packets หายหรอตกหลนระหวางเสนทางเนองจาก buffers เตม 2 แตบางครง Timer ของผสงหมดเวลาลงกอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Transport Layer 3-93
มผสงขอมลทง 4 โฮสต เสนทางตองผานหลายจด หมดเวลาสงไปขอมลซ า
Q เกดอะไรขนเมอ λin และ λinrsquo เพมขน
Buffer ของเสนทางการสงขอมลทใชรวมกนมขนาดจ ากด
Host A lout
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
Host B
Host C Host D
A เมอ λinrsquo ของขอมลเสนสแดงมขนาดเพมขน ขอมลใน
เสนสน าเงนกจะถก drop ท าให throughput ของ connection สน าเงนเหลอ 0
lin ขอมลตนฉบบ lin ขอมลตนฉบบ บวกกบ
ขอมลทตองสงซ า
Transport Layer 3-94
อกหนง ldquoผลเสยrdquo ของความคบคง เมอแพกเกจถกทงไป นนกเทากบวา ทรยากรเครอขาย (ทใชสงขอมลกอน
หนาทขอมลนจะถกทง) ถกใชไปอยางไรคา
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
แนวทางในการควบคมความคบคงของขอมล
2 แนวทางในการควบคมความคบคง
การควบคมความคบคงโดยใชแคเครองปลายทาง (end-end)
ไมมการแจงกลบ (feedback) จากเครอขาย
ความคบคงของเครอขายจะถกเดาโดยเครองทอยปลายทางทคอยสงเกต loss delay
เปนวธของ TCP
การควบคมความคบคงโดยใหอปกรณเครอขายชวย
routers จะท าการแจง feedback ไปทระบบปลายทาง ใช bit 1 bit เพอระบถงความ
แออด (SNA DECbit TCPIP ECN ATM) หรอ ระบอตราการสงทชดเจน
ส าหรบผสง
Transport Layer 3-96
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
ABR available bit rate ldquoบรการทมความยดหยนrdquo ถาเสนทางของผสง ldquoมขอมลนอยกวา
ความจะมากrdquo ผสงจะใชประโยชนจาก
bandwidth ทเหลออย ถา path ของผสงแออด
ผสงจะคอย ๆ ลดอตราสงใหเหลอเทาอตราการสงขนต าทรบประกนไว
RM (resource management) cells สงโดยผสง แทรก ๆ ไปกบ cell ทเปนขอมล bits ใน RM cell ถกตงคาโดย switches
(ldquoเครอขายคอยชวยrdquo) NI bit ไมเพมอตราการสง (ความแออด
ระดบกลาง) CI bit การบงบอกถงความแออด
ผรบไมแกคาใน bit นของ RM cells และสงไปใหผสง
Transport Layer 3-97
field ขอมล ER (explicit rate) ขนาด 2 byte ใน cell RM switch ทแออดอาจลดคา ER ใน cell ดงนน อตราทผสงจะสงขอมลจะเปนอตราการสงมากทสดท link ในเสนทางจะรองรบได
bit EFCI ใน cell ขอมล ถกตงคาไวท 1 ใน switch ทมขอมลแออด ถา cell ขอมลกอนหนา RM cell ถกตงคา EFCI ผรบจะตงคา bit CI ใน cell RM ท
สงกลบใหผสง
RM cell data cell
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
Transport Layer 3-98
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-99
การควบคมความคบคงของ TCP additive increase (เพมแบบบวก) multiplicative decrease (ลดแบบเทาตว)
วธ ผสงเพมอตราสง (window size) ควานหา bandwidth ทมใหใชได จนกวาการสญหายจะเกดขน additive increase เพม cwnd ทละ 1 MSS ทก ๆ RTT จนกวาจะ pkt จะหาย multiplicative decrease ตดลด cwnd เหลอครงเดยวหลงจากการสญหาย
cwnd
ขนา
ดของ co
nges
tion
wind
ow ของผส
งแบบ
TCP
พฤตกรรมของ AIMD เปน ลกษณะฟนเลอย หา bandwidth
ขนาด window เพมแบบบวก hellip hellip จนกวาจะเกดการสญหาย (จากนน ตดลงเหลอครงนง)
time
Transport Layer 3-100
ผสงจ ากดการสง
ขนาด cwnd จะเปลยนแปลงไปมา ขนกบความคบคงของเครอขายทผสงไดรมา
อตราการสง TCP อยางคราว ๆ สงขอมลจ านวน
cwnd bytes รอ ACKS เพอประมาณคา RTT จากนนสงไบตขอมลเพม
byte สดทายท ถก ACKed สง แตยงไมถก
ACK (ldquoอยระหวางการเดนทางrdquo)
byte สดทายทสงไป
cwnd
LastByteSent-
LastByteAcked lt cwnd
ชวงเลข sequence number ของผสง
rate ~ ~ cwnd
RTT bytessec
การควบคมความคบคงของ TCP รายละเอยด
Transport Layer 3-101
TCP Slow Start
เมอเรมการเชอมตอ เพมอตราการสงแบบยกก าลง (exponentially) จนกวาจะเจอกบ loss ครงแรก เรมตนขนาด cwnd = 1 MSS เพมขนาด cwnd หนงเทาตวทก ๆ RTT นนคอ โดยเพมขนาด cwnd ไป 1 MSS
ส าหรบทก ๆ ACK ทไดรบ
สรป อตราสงเรมแรกจะชาแตคาจะเพมแบบกระโดดขนอยางรวดเรว
Host A
RTT
Host B
time
Transport Layer 3-102
TCP การหา loss และการตอบสนอง
ถา loss ถกระบโดย timeout cwnd ถกตงไวท 1 MSS จากนนหนาตางจะเพมขนเปนเลขยกก าลง (exponential เหมอนใน slow start)
จนไปถงคา threshold จากนนจะเพมขนเปนเชงเสน
ถา loss ถกระบโดยไดรบ ACK ซ า 3 ACKs (3 duplicate acks) TCP RENO
ACKs ซ า ระบถงความสามารถการสง segments ของเครอขาย
cwnd ถกตดเหลอครงนงจากนนเพมขนแบบเชงเสน
TCP Tahoe จะตงคา cwnd เปน 1 เสมอ (ไมวาจะ timeout หรอ 3 dup acks)
Transport Layer 3-103
Q เมอไร TCP ควรจะเปลยนจากการเพมขนแบบ exponential เปนแบบเชงเสน
A เมอ cwnd ถกเพมเปน 12 ของ ldquoคาทมากทสดrdquo ของมนกอนจะเกด timeout
การด าเนนการ ตวแปร ssthresh ขณะเกด Loss ssthresh จะถก
ตงคาท 12 ของคา cwnd กอนเกดเหตแปปเดยว (คา cwnd ทมากทสดกอนเกดเหตการณ)
TCP จาก slow start เปน CA (Congestion Avoidance)
Transport Layer 3-104
สรป TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput ของ TCP
คาเฉลย throughput ของ TCP เปน function ของขนาดของ window และ RTT ไมสนใจ slow start สมมตวาขอมลถกสงตลอด
W ขนาดของ window (หนวยเปน bytes) การสญเสยทเกดขน คาเฉลยขนาดของ window (จ านวน byte ทเดนทางอย) คอ frac34 W คาเฉลยของ throughput คอ 34W ตอ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP ในอนาคต TCP ใน ldquopipes ทยาวและมความจสงrdquo
ตวอยาง 1500 byte segments 100ms RTT ตองการชองทางการสงขนาด 10 Gbps
requires W = 83333 in-flight segments ความเปนไปไดของการสญหายของในชองทางการสงขอมล L [Mathis 1997]
เพอทจะมชองทางการสงขนาด 10Gbps ตองมการสญหายของขอมลเพยงแค =
210-10 ndash นอยมาก ดงนน ตองม TCP รนใหมส าหรบการสงแบบความเรวสง
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
เปาหมายของ fairness ถาม TCP session จ านวน K session ใชทรพยากร bandwidth R รวมกน แตละ session ควรจะเฉลยทรพยากรเหมอนกนท RK
TCP connection 1
router คอขวด มความจ R
ความเสมอภาค (Fairness) ของ TCP
TCP connection 2
Transport Layer 3-108
ความเสมอภาคของ TCP คออะไร session 2 session แขงกนใชทรพยากร additive increase ใหความชนเสนเทากบ 1 (session ทง 2 คอย ๆ ได throughput เพมทละ
นด) multiplicative decrease ลด throughput ไปครงหนง
R
R
เสนระบแบนดวธทใชรวมเทากน
Throuput ของ การเชอมตอท 1
congestion avoidance (CA) additive increase สญเสย ลดขนาดของ window ลงไปครงนง
congestion avoidance (CA) additive increase
สญเสย ลดขนาดของ window ลงไปครงนง
Transport Layer 3-109
ความเสมอภาค (ตอ)
ความเสมอภาค และ UDP มลตมเดยแอพพลเคชนบอยครงไม
ใช TCP ไมตองการใหอตราการสงลดลงเพราะ
การควบคมความคบคง
มลตมเดยแอพพลเคชนจงใช UDP แทน สงเสยงวดโอดวยความเรวคงท ทน
ตอการสญเสยขอมล
ความเสมอภาค การเชอมตอ TCP แบบขนาน แอพพลเคชนสามารถทจะเปดหลายการ
เชอมตอระหวางเครอง 2 เครองแบบขนานได
เวบบราวเซอรท าแบบน ตวอยางเชน link ทมความจ R ซงม 9 การ
เชอมตอ ถาแอพใหมตองการ 1 TCP จะไดรบท rate
R10 ถาแอพใหมตองการ 11 TCPs จะไดรบท R2
Transport Layer 3-110
Chapter 3 บทสรป
หลกการเบองหลงการใหบรการชนtransport multiplexing demultiplexing การสงขอมลแบบไวใจได การควบคมการไหลของขอมล การควบคมความคบคงของขอมล
กรณศกษาและการปฏบตบน internet UDP TCP
ถดไป ออกจากปลายทางของระบบ
เครอขาย (application transport layers)
เขาไปยงสแกนของเครอขาย
Transport Layer 3-14
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
server IP address B
network
P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
P4
threaded server
Transport Layer 3-15
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
เปน protocol ของ Internet ทไมไดมสวนเพมเตมอะไร
บรการแบบ ldquoจะพยายามใหดทสดrdquo (best effort) ดงนน segment แบบ UDP อาจ สญหาย ไปถง app ของผรบแตไมเรยงล าดบ
ไมมการเชอมตอ ไมมการท า handshake ระหวางผสง
และผรบ แตละ segment ทเปน UDP จะถก
จดการเปนอสระจาก segment อน ๆ
UDP ใชใน app ทสง multimedia อยางตอเนอง
(ซงทนตอการสญเสย แต sensitive กบอตราการสง)
DNS SNMP
ถาจะให การถายโอนขอมลบน UDP มความนาเชอถอกวาน เพมความนาเชอถอทชน application มการกคนขอผดพลาด (ขนอยกบ แตละ
application)
Transport Layer 3-17
UDP สวนหวของ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
ควายาวของ segment ของ UDP (หนวยเปน byte) รวมความยาว
ของ header ดวย
ไมตองสรางการเชอมตอ (ซงเปนสวนทเพมความลาชา)
งาย ไมซบซอน ไมตองมสถานะของการเชอมตอทผสงและผรบ
สวนหว (header) มขนาดเลก ไมมการควบคมความคบคง UDP
สามารถสงขอมลไดรวดเรวตามทตองการ
ท าไมถงตองม UDP
Transport Layer 3-18
checksum ของ UDP
ผสง จดการขอมลทงหมดทจะไปอยใน
segment รวมทงขอมลสวนหวตาง ๆ ทเปนล าดบของจ านวนเตม 16 บตหลายจ านวน
checksum ผลรวมของขอมลตาง ๆ ใน segment
ผสงใส checksum เขาไปใน field checksum ใน header ของ UDP
ผรบ ค านวณหา checksum ของ segment ทได
รบมาใหม ตรวจสอบคา checksum ใน field ของ
header กบ คาทเพงไดจากการค านวณ วาเทากนหรอไม ถาไม แสดงวาพบขอผดพลาด ถาใช แสดงวา ไมพบขอผดพลาด แต
จรง ๆ แลว กอาจจะมขอผดพลาดไดอยด (รายละเอยดจะกลาวภายหลง)
จดมงหมาย ตรวจสอบขอผดพลาด เชน bits ทคาโดนกลบใน segment
Transport Layer 3-19
Internet checksum ตวอยาง
ตวอยาง การบวก 16-bit integers สองจ านวน
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note ขณะทบวกตวเลข เมอ bitท 16 (bit ซายสด) มการทดเลข ใหน าเลขนนไปบวกกบ bit ท 1 แลวจง flip bit ทก bit เพอใหได checksum
Transport Layer 3-20
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-21
Principles of reliable data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
หลกการของความนาเชอถอ data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
หลกการของความนาเชอถอ data transfer
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
ส าคญในชน application transport link ตด top-10 ของหวขอทางดานเครอขาย
Transport Layer 3-24
Reliable data transfer เรมตน
ดานผสง ดานผรบ
rdt_send() ถกเรยกจากชนดานบน (เชน โดย app) ท าหนาทผานขอมลเพอใหขอมลถกสงไป
ยงชนดานบนของผรบ
udt_send() ถกเรยกโดย rdt เพอทจะโอนถาย packet ผานชองการ
สอสารท unreliable ไปยงผรบ
rdt_rcv() ถกเรยกโดย OS เมอ OS ไดรบ packet ทมาถงชองการสอสารดานผรบ
deliver_data() ถกเรยกโดย rdt เพอใหสงขอมลไปยงชนดานบน
Transport Layer 3-25
เราจะ คอย ๆ พฒนา protocol ส าหรบการโอนถายขอมลแบบ reliable หรอ reliable
data transfer protocol (rdt) ตอนน พจารณาเฉพาะการโอนถายขอมลแบบทางเดยวกอน
แตขอมลส าหรบการควบคม (control info) จะถกสงไปกลบทงสองทาง
ใช finite state machines (FSM) เพอก าหนดการกระท าของผสงและผรบ
state 1
state 2
เหตการณทท าใหเกดการเปลยนผานของ State การกระท าขณะเปลยนผาน State
สถานะ (state) เมออยใน state ปจจบน state ถดไปจะขนอยกบเหตการณทจะ
เกดขน ณ state ปจจบน
เหตการณ การกระท า
Reliable data transfer เรมตน
Transport Layer 3-26
rdt10 การโอนถายขอมลแบบ reliable ผานชองสญญาณแบบ reliable
สมมตให ชองทางทอยขางใตเปนชองทางทเชอถอได ไมมการผดพลาดของบต ไมมขอมลสญหาย
FSMs ส าหรบผสง และ ส าหรบผ รบ ผสงสงขอมลไปยงชนดานลาง ผรบรบขอมลจากชนดานลาง
รอรบการเรยกจากชน
ดานบน packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
รอรบการเรยกจากชน
ดานลาง
rdt_rcv(packet)
ผสง ผรบ
Transport Layer 3-27
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร
acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK
negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors
sender retransmits pkt on receipt of NAK
new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 ชองทางการสอสารทม bit errors
ปกตแลว มนษยใชวธการใดในการแกไข ldquoerrorsrdquo ระหวางการสนทนา
Transport Layer 3-28
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร การตอบรบ (acknowledgements (ACKs)) ผรบแจงผสงวาไดรบ packet แลว การตอบปฏเสธ (negative acknowledgements (NAKs)) ผรบแจงผสงวา packet ม
errors sender สงขอมลซ าอกครง เมอไดรบ NAK
กลไกทเพมขน in rdt20 (เพมจาก rdt10) การตรวจจบความผดพลาด การแจงกลบ (feedback) ขอมลส าหรบการควบคม (ACKNAK) จากผรบไปยงผสง
rdt20 ชองทางการสอสารทม bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 ขอก าหนดของ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
จะเกดอะไรขนถา ACKNAK เกดเสยหาย ผสงไมรวาผรบรบ pkt ครบถวน
หรอไม ไมควรสง pkt ซ าอกครง เพราะ
pkt ซ ากน
การจดการกบขอมลทซ าซอน ผสงจะสง packet อกครงถา
ACKNAK เกดเสยหาย เตมหมายเลข sequence ใหแตละ
packet ผรบตองทง packet ทซ ากน
stop and wait ผสงท าการสงpacketและรอใหผรบตอบกลบดวย ACKNAK กอนทจะสง packet ตอไป
Transport Layer 3-33
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Transport Layer 3-35
rdt21 อภปราย
ผสง ใสหมายเลข seq ในpacket หมายเลข seq (01) กพอ
นกสท าไม ตองตรวจสอบวา ACKNAK ท
ไดรบเสยไปหรอไม จ านวนหมายเลข seq ตองเปนสอง
เทาของจ านวนสถานะ เพราะผสงตองเกบสถานะเพอldquoจ าrdquo
วา pkt ถดไปจะตองมเลข seq 0 หรอ 1
ผรบ ตองตรวจสอบวา pkt ทไดรบซ ากบ
pkt ทไดรบกอนหนาหรอไม ผรบจะเกบสถานะทระบวา 0 หรอ 1
คอหมายเลข seq ทคาดวาจะได
ขอสงเกต ผรบไมสามารถรวา ACKNAK สดทายทผสงไดรบถกตองหรอไม
Transport Layer 3-36
rdt22 protocol ทไมตองใช NAK
ท างานเหมอนกบ rdt21 แตใชแค ACKs แทนทจะสง NAK ผรบสง ACK ส าหรบ pkt สดทายทไดรบถกตอง
ฝงรบจะตองรวมหมายเลข seq ของ pkt ทก าลงถก ACK ไปดวย
จะสง ACK ซ าไปทผสงถาไมไดรบ pkt ทมหมายเลข seq ทคาดหวง ผลลพธจะออกมาเหมอนกรณทสง NAK ผสงตองสง pkt ตวลาสดไปใหมอกครง
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 ชองสญญาณทมความผดพลาดและ pkt สญหาย
เพมขอสนนษฐาน ชองสญญาณสามารถสญเสยแพคเกจ (ไมวาจะเปนขอมลหรอ ACKs) ได กลไก checksum หมายเลข seq
ACKs และ การสงซ า สามารถชวย แตมนกยงไมใชทางออก
วธ ผสงรอ ACK กลบมาในชวงเวลาท ldquoสมเหตสมผลrdquo
สง pkt เดมไปใหมอกครงถาไมไดรบ ACK ภายในชวงเวลาน
ถา pkt (หรอ ACK) มาถงลาชา (ไมใชหายไป) การสงใหมกจะเปนการสงซ า ซง seq
ไดจดการเรองเกยวกบขอมลซ าได ผรบตองระบเลข seq ของ pkt ทก าลง
ถก ACKed
ตองใชการนบเวลาถอยหลง (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
ขณะ rdt30 ด าเนนการ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
ขณะ rdt30 ด าเนนการ
Transport Layer 3-42
ประสทธภาพของ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
บตแรกของแพคเกจกถกสง t = 0
ผสง ผรบ
RTT
บตสดทายของแพคเกจถกสง t = L R
บตแรกของแพคเกจมาถง บตสดทายของแพคเกจมาถง สง ACK
ไดรบ ACK สงแพคเกจตอไป t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols แบบ pipelined
pipelining ผสงสงหลาย packet ไปยงผรบทง ๆ ท pkt เหลานนยงไมไดรบการยนยนตอบรบ (not yet acked) ชวงของหมายเลข sequence จะตองเพมขน ตองพกขอมล (buffer) ทผสงและผรบ
protocols แบบ pipelined แบบทวไปมสองแบบ go-Back-N selective repeat
Transport Layer 3-45
Pipelining ชวยเพม utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols แบบ pipeline ภาพรวม
Go-back-N ผสงสามารถสงแพคเกจทไมยงถก
ack ไดไมเกน N แพคเกจใน pipeline
ผรบแคสง cumulative ack ไม ack packet ถามนกอใหเกด gap
ผสงจบเวลาส าหรบแพคเกจทสงไป
นานทสดทยงไมได ack เมอเวลาหมด ผสงจะสงแพคเกจ
ทงหมดทยงไมไดรบ ack อกครง
Selective Repeat ผสงสามารถสงแพคเกจทไมยงถก ack ได
ไมเกน N แพคเกจใน pipeline
ผรบจะตองสง ack กลบใหแตละแพคเกจ
ผสงจะจบเวลาส าหรบแตละแพคเกจท
ไมได ack เมอเวลาส าหรบแพคเกจใดหมด ผสงจะสง
เฉพาะแพคเกจนนเทานน
Transport Layer 3-47
Go-Back-N ผสง
หมายเลข seq (k bit) จะอยใน header ของ packet อนญาตใหขนาด ldquowindowrdquo (ของ pkt ทตดกนและยงไมถก ack) ไมเกน N
ACK(n) จะ ack แพคเกจทงหมดไปจนถงทมหมายเลข seq เทากบ n - ldquoการ ACK แบบรวม (cumulative ACK)rdquo อาจมการไดรบ ACKs หมายเลข seq เดมซ า (ดรายละเอยดดาน receiver)
มการจบเวลาส าหรบแพคเกจทเดนทางอย ซงเดนทางนานทสดและยงไมได ACK (pkt ทมหมายเลข seq นอยทสดใน window)
timeout(n) เวลาหมดท pkt n ผสงจะสง pkt n และ pkt ทงหมดใน window (ซงมหมายเลข seq สงกวา n) อกครง
Transport Layer 3-48
GBN FSM ดานผสงทเพมจากของเดม
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum
out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM ดานผรบทเพมจากของเดม
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
ผ รบ Ack แตละแพคเกจทไดรบมาถกตอง เกบ (buffer) แพคเกจ เทาทจ าเปน เพอทจะสงขอมลทเรยงล าดบแลว ไปยง layer
บนไดในทายทสด
ผสงแคสงแพคเกจซ าเฉพาะแพคเกจทไมไดรบ Ack เทานน ตวจบเวลา (ทางฝงผสง) จะจบเวลาของแตละแพคเกจทไมไดรบ Ack
Window ของผสง มหมายเลข seq อย N หมายเลขตดกน จ ากดหมายเลข seq ของแพตเกจทสงไปแลว และไมไดรบ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
ขอมลมาจาก layer ดานบน ถามหมายเลข seq วางใน window ให
สง pkt ได
timeout(n) สง pkt n ซ า จบเวลาใหม
ACK(n) in [sendbase sendbase+N] รวา ผรบไดรบ pkt n แลว ถา n เกดเปนหมายเลขแรกสดในหนาตาง
(n เทากบ sendbase) ทไมได ถก ack เลอน window ไปทางดานขวา โดยเลอนไปยงหมายเลขทไมไดถก ack
ผสง pkt n in [rcvbase rcvbase+N-1] สง ACK(n) ถาไมเรยงตามล าดบ buffer ถาตามล าดบ สง (รวมถงใหสง pkt ท
เรยงตามล าดบและอยในบฟเฟอร) เลอน window ไปทหมายเลข seq ถดไปของ pkt ทยงไมไดรบจากผสง
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise ทงไปไมตองสนใจ
ผรบ
Transport Layer 3-54
ขณะ Selective repeat ด าเนนการ
สง pkt0
sender receiver
รบ pkt0 สง ack0
รบ pkt1 สง ack1
รบ pkt3 buffer สง ack3 รบ ack0 สง pkt4
รบ ack1 สง pkt5
pkt 2 timeout send pkt2
X loss
รบ pkt4 buffer สง ack4
รบ pkt5 buffer สง ack5
รบ pkt2 deliver pkt2
pkt3 pkt4 pkt5 สง ack2
บนทก ack3 มาถงแลว
sender window (N=4)
บนทก ack4 มาถงแลว บนทก ack4 มาถงแลว
Q เกดอะไรขนเมอ ack2 มาถง
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
สง pkt1 สง pkt2
สง pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
ตวอยาง หมายเลข seq 0 1 2 3 ขนาดของ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
ผรบไมสามารถเหนดานผสงได พฤตกรรมผรบจะเหมอนกนทง 2 สถานการณ
มบางอยางทผด (มาก)
ผรบไมเหนถงความแตกตางของทง 2 เหตการณจ าลองน
ในเหตการณจ าลอง (b) ขอมลเกาทถกสงซ า เมอผรบรบมา จะนกวาเปนขอมลใหม
Q ขนาดของ seq กบขนาดของ
window เกยวของกนยงไงเพอทจะหลกเลยงปญหาในตวอยาง (b)
Transport Layer 3-56
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-57
TCP ภาพรวม RFCs 79311221323 2018 2581
ขอมลแบบสองทศทาง มการสงขอมลทงไปและกลบในการ
เชอมตอ (connection) เดยวกน MSS ขนาด segment ทใหญสดท
TCP จะรบได (Max Segment Size)
connection-oriented handshaking (การแลกเปลยนของ
ขอความควบคม) ตงคาสถานะตงตนใหผสงและผรบ กอนการแลกเปลยนขอความ
flow controlled ผสงจะไมสงขอมลเกนกวาทผรบจะรบ
ได
point-to-point (สถานทนง-ไป-สถานทนง) ผสงหนงคน ผรบหนงคน
สายขอมลเปนไบตทเรยงล าดบและขอมลไมสญหาย (reliable in-order byte steam) ไมม ldquoขอบเขตrdquo ของขอความ
(ขอความจะมาถงผรบตอเนองกน)
pipelined การควบคมความคบคงและการควบคม
อตราการไหลของ TCP จะก าหนดขนาดของ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG ขอมลเรงดวน (โดยทว ๆ ไป ไมถกใช)
ACK ACK valid
PSH ผลกขอมลใหชน app (โดยทว ๆ ไป ไมถกใช)
RST SYN FIN สรางการเชอตอ
(ค าสง setup teardown)
จ านวน bytes ท ผรบเตมใจจะรบ
นบโดยใช byte ของขอมล (ไมใช segment)
Internet checksum
(เหมอนใน UDP)
Transport Layer 3-59
TCP seq numbers ACKs
หมายเลข sequence เลขของ byte stream จะเปน byte
แรกของขอมลของ segment น acknowledgements เลข seq ของ byte ถดไปทอกดานหนง
คาดหวงวาจะได cumulative ACK (ACK แบบรวม)
Q ผรบจดการกบ segment ทมาถงไมเรยงล าดบอยางไร A TCP ไมมรายละเอยดสวนน ndash ขนอย
กบคนทจะมาเขยนโปรแกรม TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาเขามาถงผสง
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาออกจากผสง
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
เหตการณจ าลอง telnet อยางงาย
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q เราควรจะก าหนด time out ไวทเทาใด
มากกวาเวลาของ RTT แตเวลาของ RTT นนแปรปรวน
ก าหนดไวนอยเกนไป timeout กอนก าหนด ท าใหมการ retransmissions โดยไมจ าเปน
ก าหนดไวมากเกนไป ระบบตอบสนองตอการสญหายของ segment ชาเกนไป
Q จะประมาณเวลาของ RTT อยางไร
SampleRTT วดจากระยะเวลาตงแตเรมสง sengment จนกระทงไดรบACK ไมสนใจการ retransmissions
SampleRTT มคาแปรปรวน เราตองการประมาณเวลาของ RTT ให smooth กวา ใชคาเฉลยของคาหลาย ๆ คา ไมใชแค
เวลาของ SampleRTT ปจจบน
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
คาเฉลยของการเคลอนทถวงน าหนกแบบ exponential คา SampleRTT ทในอดตจะมผลตอ EstimatedRTT ลดลงแบบ exponentially โดยทวไปจะก าหนดคา = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
ชวงเวลาของ timeout EstimatedRTT บวกกบระยะเวลาทเผอเอาไว ยงคาของ EstimatedRTT ทแปรปรวนมากเทาไร -gt ระยะเวลาทเผอความมากขนตาม
มประเมนคาการเปลยนแปลงของ SampleRTT จาก EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoชวงเวลาทเผอrdquo
Transport Layer 3-64
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP สรางบรการแบบ reliable อยบนบรการของ IP ทเปนแบบ unreliable segments ถกสงแบบ pipeline cumulative acks ม timer ส าหรบสงใหมคาตวเดยว
TCP สง segment ใหมเมอ เหตการณ timeout ไดรบ acks ซ า ๆ กน
เรามาเรมตนพจารณาทางดานผสงของ TCP อยางงายกอน ยงไมตองสนใจ acks ซ า ยงไมตองสนใจการควบคม flow และ
ความคบคง
Transport Layer 3-66
เหตการณของ TCP sender
เมอไดขอมลจาก app สราง segment ดวยหมายเลข seq เลข seq คอหมายเลขของไบตแรก
ของขอมลในแตละ segment หาก timer ยงไมเคยถกตง จะเรม
ตงเวลา การตงเวลาเพอจบเวลาส าหรบ
segment เกาทสดยงไมไดรบ ack ชวงเวลาทหมดอาย
TimeOutInterval
timeout สงใหมเฉพาะ segment ทเกด
timeout ตงเวลานบใหม เมอไดรบ ack ถา ack เปน ack ของ segment
กอนหนายงไมไดรบ ack Update สงทรวา ถก ACK แลว เรมตงเวลานบ ถายงคงม segment
ทยงไมไดรบ acked
Transport Layer 3-67
ดานผสงของ TCP (อยางงาย)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
การสราง ACK ของ TCP [RFC 1122 RFC 2581]
เหตการณทผรบ เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ) โดยขอมลทงหมดจนถงเลข seq ทคาดหวงไว ถก ACK หมดแลว
เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ ท าให ไมม gap ใน segment ทไดมา) แตมบาง segment ยงไมได ACK
Segment มาถงแบบไมเรยงตามล าดบ โดยมเลข seq สงกวาทตองการ ท าใหม gap (ชองโหว) เกดขน Segment ท ามาถง ทจะเตมบางสวนหรอเตมเตมชองโหว
TCP receiver action อยาเพงสง ACK รออก segment นง โดยรอสก 500ms หากยงไมม segment มา กสง ACK สง ACK แบบรวม (cumulative) ไปทนทในครงเดยว ซงจะเปนการ Ack segment ทมาแบบเรยงตามล าดบทงสอง segments สง ACK ซ า ไปทนท โดยใสเลข seq ของ byte ทตองการ สง ACK แบบรวมทนท โดย segment ทจะ Ack เรมจากดานทนอยกวาของ gap
Transport Layer 3-71
TCP fast retransmit
ระยะเวลาในการ time-out มกจะคอนขางยาว (โดยเปรยบเทยบ) ท าใหใชเวลาคอนขางนานกอนทจะ
สง packet อกครง
แกโดย ตรวจสอบการสญเสย pack โดยดท ACKs ทซ า ๆ กน ผสงมกสง segment ตด ๆ กน ดงนน ถา segment หนงหายไป จง
เปนไปไดทจะม ACKs ซ า ๆ กนจ านวนมาก
ถาผสงไดรบ ACKs ส าหรบขอมลเดยวกน 3 ACKS (ACKs ทซ ากนสามครง) ผสงตองสง seq ทยงไมถก acked (ระบเลข seq ทเลกทสด) มแนวโนมวา segment ทยงไมถก
ack จะหายไปเลย ดงนน จงไมตองรอใหหมดเวลา
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-74
TCP flow control application
process
buffer ดานผรบ ของ TCP socket
TCP code
IP code
application
OS
protocol stack ดานผรบ
application ลบขอมลจาก buffer ของ TCP socket hellip
hellip ชากวา TCP สงขอมล ขนไป (ขณะทผสงก าลงจะสง)
from sender
ผรบสามารถควบคมผสงได ดงนน ผสงจะไมสงขอมลเรวไป หรอ มากเกนไปจนลน (Overflow) buffer ของผรบ
flow control
Transport Layer 3-75
การควบคมการไหลขอมลของ TCP
ขอมลทอย buffer
buffer สวนทยงวาง rwnd
RcvBuffer
สวนของขอมล (payload) ใน segment ของ TCP
ไปยง process ของ application
ผรบระบขนาดของ buffer ทวางไวใน field rwnd ทอยในสวนหวของ TCP ทจะสงไปยงผสง ผเขยนโปรแกรมระบขนาดของ RcvBuffer ได
โดยใช API ตงคา option ของ socket (คาเรมตนทวไปคอ 4096 ไบต)
ทกระบบปฏบตการจะปรบขนาด RcvBuffer อตโนมต
ผสงจ ากดจ านวนของขอมลทยงไมถก acked (ldquoอยในระหวางการเดนทางrdquo) ใหเทากบคา rwnd ของขอมลผรบ
เปนการรบประกนวา buffer ของผรบจะไมลน
การbuffer ในดานของผรบ
Transport Layer 3-76
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-77
การจดการกบการเชอมตอ กอนทจะมการแลกเปลยนขอมลกน ผสงและผรบตองตกลงกนกอน ตกลงรวมในการสรางการเชอมตอ (แตละคนจะรวาอกฝายอยากจะเชอมตอหรอไม) ตกลงคาพารามเตอรส าหรบการเชอมตอ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake จะท างานไดเสมอไปหรอไมบน network
ความลาชาอาจเปลยนไป ขอความอาจถกสงซ าตวอยาง (เชน
req_conn(x)) เนองจากการสญหายของขอมล
ขอมลอาจสลบกน ไมสามารถรไดวาอกฝงไดรบหรอไม
ไดรบขอมลอะไร
2-way handshake
มาคยกนเถอะ
ตกลง ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-79
เหตการณผดพลาดของ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-80
3-way handshake ของ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM ของ 3-way handshake ของ TCP
Transport Layer 3-82
TCP การหยดการเชอมตอ
client server เลกเชอมตอทแตละดานของการเชอมตอ โดยแตละดานจะสง TCP segment ดวย FIN bit = 1
ตอบกลบ FIN ดวย ACK ในขณะทรบ FIN ACK กสามารถรวมอยในแพคเกจทสง FIN มาไดดวย
แตละดานสามารถสง FIN ไดพรอม ๆ กน
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP การหยดการเชอมตอ
Transport Layer 3-84
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-85
ความคบคง ความหมายไมเปนทางการ ldquoเมอจ านวนคนสงมากเกนไป ก าลงสงขอมลมาก
เกนไปดวยอตราการสงเรวเกนกวาท Network จะรบไหวrdquo แตกตางจาก flow control ผลทอาจทเกดขนจากความคบคง
packets หาย (buffer ลนท routers) ลาชามาก (เขาควใน buffers ของ router)
เปนปญหาทคนสนใจตด 10 อนดบตนๆ
หลกการของการควบคมความคบคงของเครอขาย
Transport Layer 3-86
ตนเหตและผลของความคบคง เหตการณ 1
มผสงและผรบอยางละสองคน Router 1 ตว ไมจ ากด buffers ความจของ link R ไมมการสงขอมลซ า
อตราขอมลทสงส าเรจตอหนงการเชอมตอ R2
buffer ท link ขาออกม buffer ไมจกด
Host A
อตราการสงขอมลตนฉบบ lin
Host B
อตราขอมลทสงส าเรจ lout
R2
R2
lou
t
lin R2 de
lay
lin
ดเลยจะมากขนเมออตราสงขอมลตนฉบบเขาใกลความจของ link
Transport Layer 3-87
Router 1 ตว Buffer แตมขนาด buffer จ ากด ตองสง pkt ไปซ าถา pkt นน timeout
ขอมลเขาของชน application = ขอมลออกจากชน application lin = lout
ขอมลเขาของชน transport จะรวมทตองสงซ าดวย lin lin
Buffer ของ link ทใชรวมกนซงมขนาดจ ากด
Host A
lin ขอมลตนฉบบ
Host B
lout lin ขอมลตนฉบบบวกกบ ขอมลทตองสงซ า
lsquo
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-88
ในอดมคต สมมตผสงรความเปนไปในเครอขาย ผสงสงเฉพาะตอนทเราเตอรม buffer เหลออย
Buffer ของ link ทแชรอยางจ ากด
lout copy
ม buffer วาง
R2
R2
lou
t
lin
Host B
A
ตนเหตและผลของความคบคง เหตการณ 2
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-89
lout copy
no buffer space
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
A
Host B
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
เมอสงขอมลท R2 บาง packets ถกสงซ า แต goodput ยงคงมคาลเขาหา R2 (ท าไม)
A
Host B
ตนเหตและผลของความคบคง เหตการณ 2
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Host B
ในความเปนจรง มการสงซ า packets หายหรอตกหลนระหวาง
เสนทางเนองจาก buffers เตม แตบางครง Timer ของผสงหมดเวลาลง
กอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-92
R2
lou
t
ldquoผลrdquo ของความคบคง เพอใหไดขอมลในอตราทตองการ (goodput) ตองท างานมากขน (สงซ า) เมอตองสง packets ซ าโดยทไมจ าเปน link จะตองล าเลยงหลาย copy ของ
ขอมลเดยวกน ท าให goodput ลดลง
R2 lin
ตนเหตและผลของความคบคง เหตการณ 2
ในความเปนจรง มการสงซ า 1 packets หายหรอตกหลนระหวางเสนทางเนองจาก buffers เตม 2 แตบางครง Timer ของผสงหมดเวลาลงกอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Transport Layer 3-93
มผสงขอมลทง 4 โฮสต เสนทางตองผานหลายจด หมดเวลาสงไปขอมลซ า
Q เกดอะไรขนเมอ λin และ λinrsquo เพมขน
Buffer ของเสนทางการสงขอมลทใชรวมกนมขนาดจ ากด
Host A lout
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
Host B
Host C Host D
A เมอ λinrsquo ของขอมลเสนสแดงมขนาดเพมขน ขอมลใน
เสนสน าเงนกจะถก drop ท าให throughput ของ connection สน าเงนเหลอ 0
lin ขอมลตนฉบบ lin ขอมลตนฉบบ บวกกบ
ขอมลทตองสงซ า
Transport Layer 3-94
อกหนง ldquoผลเสยrdquo ของความคบคง เมอแพกเกจถกทงไป นนกเทากบวา ทรยากรเครอขาย (ทใชสงขอมลกอน
หนาทขอมลนจะถกทง) ถกใชไปอยางไรคา
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
แนวทางในการควบคมความคบคงของขอมล
2 แนวทางในการควบคมความคบคง
การควบคมความคบคงโดยใชแคเครองปลายทาง (end-end)
ไมมการแจงกลบ (feedback) จากเครอขาย
ความคบคงของเครอขายจะถกเดาโดยเครองทอยปลายทางทคอยสงเกต loss delay
เปนวธของ TCP
การควบคมความคบคงโดยใหอปกรณเครอขายชวย
routers จะท าการแจง feedback ไปทระบบปลายทาง ใช bit 1 bit เพอระบถงความ
แออด (SNA DECbit TCPIP ECN ATM) หรอ ระบอตราการสงทชดเจน
ส าหรบผสง
Transport Layer 3-96
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
ABR available bit rate ldquoบรการทมความยดหยนrdquo ถาเสนทางของผสง ldquoมขอมลนอยกวา
ความจะมากrdquo ผสงจะใชประโยชนจาก
bandwidth ทเหลออย ถา path ของผสงแออด
ผสงจะคอย ๆ ลดอตราสงใหเหลอเทาอตราการสงขนต าทรบประกนไว
RM (resource management) cells สงโดยผสง แทรก ๆ ไปกบ cell ทเปนขอมล bits ใน RM cell ถกตงคาโดย switches
(ldquoเครอขายคอยชวยrdquo) NI bit ไมเพมอตราการสง (ความแออด
ระดบกลาง) CI bit การบงบอกถงความแออด
ผรบไมแกคาใน bit นของ RM cells และสงไปใหผสง
Transport Layer 3-97
field ขอมล ER (explicit rate) ขนาด 2 byte ใน cell RM switch ทแออดอาจลดคา ER ใน cell ดงนน อตราทผสงจะสงขอมลจะเปนอตราการสงมากทสดท link ในเสนทางจะรองรบได
bit EFCI ใน cell ขอมล ถกตงคาไวท 1 ใน switch ทมขอมลแออด ถา cell ขอมลกอนหนา RM cell ถกตงคา EFCI ผรบจะตงคา bit CI ใน cell RM ท
สงกลบใหผสง
RM cell data cell
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
Transport Layer 3-98
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-99
การควบคมความคบคงของ TCP additive increase (เพมแบบบวก) multiplicative decrease (ลดแบบเทาตว)
วธ ผสงเพมอตราสง (window size) ควานหา bandwidth ทมใหใชได จนกวาการสญหายจะเกดขน additive increase เพม cwnd ทละ 1 MSS ทก ๆ RTT จนกวาจะ pkt จะหาย multiplicative decrease ตดลด cwnd เหลอครงเดยวหลงจากการสญหาย
cwnd
ขนา
ดของ co
nges
tion
wind
ow ของผส
งแบบ
TCP
พฤตกรรมของ AIMD เปน ลกษณะฟนเลอย หา bandwidth
ขนาด window เพมแบบบวก hellip hellip จนกวาจะเกดการสญหาย (จากนน ตดลงเหลอครงนง)
time
Transport Layer 3-100
ผสงจ ากดการสง
ขนาด cwnd จะเปลยนแปลงไปมา ขนกบความคบคงของเครอขายทผสงไดรมา
อตราการสง TCP อยางคราว ๆ สงขอมลจ านวน
cwnd bytes รอ ACKS เพอประมาณคา RTT จากนนสงไบตขอมลเพม
byte สดทายท ถก ACKed สง แตยงไมถก
ACK (ldquoอยระหวางการเดนทางrdquo)
byte สดทายทสงไป
cwnd
LastByteSent-
LastByteAcked lt cwnd
ชวงเลข sequence number ของผสง
rate ~ ~ cwnd
RTT bytessec
การควบคมความคบคงของ TCP รายละเอยด
Transport Layer 3-101
TCP Slow Start
เมอเรมการเชอมตอ เพมอตราการสงแบบยกก าลง (exponentially) จนกวาจะเจอกบ loss ครงแรก เรมตนขนาด cwnd = 1 MSS เพมขนาด cwnd หนงเทาตวทก ๆ RTT นนคอ โดยเพมขนาด cwnd ไป 1 MSS
ส าหรบทก ๆ ACK ทไดรบ
สรป อตราสงเรมแรกจะชาแตคาจะเพมแบบกระโดดขนอยางรวดเรว
Host A
RTT
Host B
time
Transport Layer 3-102
TCP การหา loss และการตอบสนอง
ถา loss ถกระบโดย timeout cwnd ถกตงไวท 1 MSS จากนนหนาตางจะเพมขนเปนเลขยกก าลง (exponential เหมอนใน slow start)
จนไปถงคา threshold จากนนจะเพมขนเปนเชงเสน
ถา loss ถกระบโดยไดรบ ACK ซ า 3 ACKs (3 duplicate acks) TCP RENO
ACKs ซ า ระบถงความสามารถการสง segments ของเครอขาย
cwnd ถกตดเหลอครงนงจากนนเพมขนแบบเชงเสน
TCP Tahoe จะตงคา cwnd เปน 1 เสมอ (ไมวาจะ timeout หรอ 3 dup acks)
Transport Layer 3-103
Q เมอไร TCP ควรจะเปลยนจากการเพมขนแบบ exponential เปนแบบเชงเสน
A เมอ cwnd ถกเพมเปน 12 ของ ldquoคาทมากทสดrdquo ของมนกอนจะเกด timeout
การด าเนนการ ตวแปร ssthresh ขณะเกด Loss ssthresh จะถก
ตงคาท 12 ของคา cwnd กอนเกดเหตแปปเดยว (คา cwnd ทมากทสดกอนเกดเหตการณ)
TCP จาก slow start เปน CA (Congestion Avoidance)
Transport Layer 3-104
สรป TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput ของ TCP
คาเฉลย throughput ของ TCP เปน function ของขนาดของ window และ RTT ไมสนใจ slow start สมมตวาขอมลถกสงตลอด
W ขนาดของ window (หนวยเปน bytes) การสญเสยทเกดขน คาเฉลยขนาดของ window (จ านวน byte ทเดนทางอย) คอ frac34 W คาเฉลยของ throughput คอ 34W ตอ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP ในอนาคต TCP ใน ldquopipes ทยาวและมความจสงrdquo
ตวอยาง 1500 byte segments 100ms RTT ตองการชองทางการสงขนาด 10 Gbps
requires W = 83333 in-flight segments ความเปนไปไดของการสญหายของในชองทางการสงขอมล L [Mathis 1997]
เพอทจะมชองทางการสงขนาด 10Gbps ตองมการสญหายของขอมลเพยงแค =
210-10 ndash นอยมาก ดงนน ตองม TCP รนใหมส าหรบการสงแบบความเรวสง
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
เปาหมายของ fairness ถาม TCP session จ านวน K session ใชทรพยากร bandwidth R รวมกน แตละ session ควรจะเฉลยทรพยากรเหมอนกนท RK
TCP connection 1
router คอขวด มความจ R
ความเสมอภาค (Fairness) ของ TCP
TCP connection 2
Transport Layer 3-108
ความเสมอภาคของ TCP คออะไร session 2 session แขงกนใชทรพยากร additive increase ใหความชนเสนเทากบ 1 (session ทง 2 คอย ๆ ได throughput เพมทละ
นด) multiplicative decrease ลด throughput ไปครงหนง
R
R
เสนระบแบนดวธทใชรวมเทากน
Throuput ของ การเชอมตอท 1
congestion avoidance (CA) additive increase สญเสย ลดขนาดของ window ลงไปครงนง
congestion avoidance (CA) additive increase
สญเสย ลดขนาดของ window ลงไปครงนง
Transport Layer 3-109
ความเสมอภาค (ตอ)
ความเสมอภาค และ UDP มลตมเดยแอพพลเคชนบอยครงไม
ใช TCP ไมตองการใหอตราการสงลดลงเพราะ
การควบคมความคบคง
มลตมเดยแอพพลเคชนจงใช UDP แทน สงเสยงวดโอดวยความเรวคงท ทน
ตอการสญเสยขอมล
ความเสมอภาค การเชอมตอ TCP แบบขนาน แอพพลเคชนสามารถทจะเปดหลายการ
เชอมตอระหวางเครอง 2 เครองแบบขนานได
เวบบราวเซอรท าแบบน ตวอยางเชน link ทมความจ R ซงม 9 การ
เชอมตอ ถาแอพใหมตองการ 1 TCP จะไดรบท rate
R10 ถาแอพใหมตองการ 11 TCPs จะไดรบท R2
Transport Layer 3-110
Chapter 3 บทสรป
หลกการเบองหลงการใหบรการชนtransport multiplexing demultiplexing การสงขอมลแบบไวใจได การควบคมการไหลของขอมล การควบคมความคบคงของขอมล
กรณศกษาและการปฏบตบน internet UDP TCP
ถดไป ออกจากปลายทางของระบบ
เครอขาย (application transport layers)
เขาไปยงสแกนของเครอขาย
Transport Layer 3-15
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
เปน protocol ของ Internet ทไมไดมสวนเพมเตมอะไร
บรการแบบ ldquoจะพยายามใหดทสดrdquo (best effort) ดงนน segment แบบ UDP อาจ สญหาย ไปถง app ของผรบแตไมเรยงล าดบ
ไมมการเชอมตอ ไมมการท า handshake ระหวางผสง
และผรบ แตละ segment ทเปน UDP จะถก
จดการเปนอสระจาก segment อน ๆ
UDP ใชใน app ทสง multimedia อยางตอเนอง
(ซงทนตอการสญเสย แต sensitive กบอตราการสง)
DNS SNMP
ถาจะให การถายโอนขอมลบน UDP มความนาเชอถอกวาน เพมความนาเชอถอทชน application มการกคนขอผดพลาด (ขนอยกบ แตละ
application)
Transport Layer 3-17
UDP สวนหวของ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
ควายาวของ segment ของ UDP (หนวยเปน byte) รวมความยาว
ของ header ดวย
ไมตองสรางการเชอมตอ (ซงเปนสวนทเพมความลาชา)
งาย ไมซบซอน ไมตองมสถานะของการเชอมตอทผสงและผรบ
สวนหว (header) มขนาดเลก ไมมการควบคมความคบคง UDP
สามารถสงขอมลไดรวดเรวตามทตองการ
ท าไมถงตองม UDP
Transport Layer 3-18
checksum ของ UDP
ผสง จดการขอมลทงหมดทจะไปอยใน
segment รวมทงขอมลสวนหวตาง ๆ ทเปนล าดบของจ านวนเตม 16 บตหลายจ านวน
checksum ผลรวมของขอมลตาง ๆ ใน segment
ผสงใส checksum เขาไปใน field checksum ใน header ของ UDP
ผรบ ค านวณหา checksum ของ segment ทได
รบมาใหม ตรวจสอบคา checksum ใน field ของ
header กบ คาทเพงไดจากการค านวณ วาเทากนหรอไม ถาไม แสดงวาพบขอผดพลาด ถาใช แสดงวา ไมพบขอผดพลาด แต
จรง ๆ แลว กอาจจะมขอผดพลาดไดอยด (รายละเอยดจะกลาวภายหลง)
จดมงหมาย ตรวจสอบขอผดพลาด เชน bits ทคาโดนกลบใน segment
Transport Layer 3-19
Internet checksum ตวอยาง
ตวอยาง การบวก 16-bit integers สองจ านวน
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note ขณะทบวกตวเลข เมอ bitท 16 (bit ซายสด) มการทดเลข ใหน าเลขนนไปบวกกบ bit ท 1 แลวจง flip bit ทก bit เพอใหได checksum
Transport Layer 3-20
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-21
Principles of reliable data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
หลกการของความนาเชอถอ data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
หลกการของความนาเชอถอ data transfer
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
ส าคญในชน application transport link ตด top-10 ของหวขอทางดานเครอขาย
Transport Layer 3-24
Reliable data transfer เรมตน
ดานผสง ดานผรบ
rdt_send() ถกเรยกจากชนดานบน (เชน โดย app) ท าหนาทผานขอมลเพอใหขอมลถกสงไป
ยงชนดานบนของผรบ
udt_send() ถกเรยกโดย rdt เพอทจะโอนถาย packet ผานชองการ
สอสารท unreliable ไปยงผรบ
rdt_rcv() ถกเรยกโดย OS เมอ OS ไดรบ packet ทมาถงชองการสอสารดานผรบ
deliver_data() ถกเรยกโดย rdt เพอใหสงขอมลไปยงชนดานบน
Transport Layer 3-25
เราจะ คอย ๆ พฒนา protocol ส าหรบการโอนถายขอมลแบบ reliable หรอ reliable
data transfer protocol (rdt) ตอนน พจารณาเฉพาะการโอนถายขอมลแบบทางเดยวกอน
แตขอมลส าหรบการควบคม (control info) จะถกสงไปกลบทงสองทาง
ใช finite state machines (FSM) เพอก าหนดการกระท าของผสงและผรบ
state 1
state 2
เหตการณทท าใหเกดการเปลยนผานของ State การกระท าขณะเปลยนผาน State
สถานะ (state) เมออยใน state ปจจบน state ถดไปจะขนอยกบเหตการณทจะ
เกดขน ณ state ปจจบน
เหตการณ การกระท า
Reliable data transfer เรมตน
Transport Layer 3-26
rdt10 การโอนถายขอมลแบบ reliable ผานชองสญญาณแบบ reliable
สมมตให ชองทางทอยขางใตเปนชองทางทเชอถอได ไมมการผดพลาดของบต ไมมขอมลสญหาย
FSMs ส าหรบผสง และ ส าหรบผ รบ ผสงสงขอมลไปยงชนดานลาง ผรบรบขอมลจากชนดานลาง
รอรบการเรยกจากชน
ดานบน packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
รอรบการเรยกจากชน
ดานลาง
rdt_rcv(packet)
ผสง ผรบ
Transport Layer 3-27
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร
acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK
negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors
sender retransmits pkt on receipt of NAK
new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 ชองทางการสอสารทม bit errors
ปกตแลว มนษยใชวธการใดในการแกไข ldquoerrorsrdquo ระหวางการสนทนา
Transport Layer 3-28
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร การตอบรบ (acknowledgements (ACKs)) ผรบแจงผสงวาไดรบ packet แลว การตอบปฏเสธ (negative acknowledgements (NAKs)) ผรบแจงผสงวา packet ม
errors sender สงขอมลซ าอกครง เมอไดรบ NAK
กลไกทเพมขน in rdt20 (เพมจาก rdt10) การตรวจจบความผดพลาด การแจงกลบ (feedback) ขอมลส าหรบการควบคม (ACKNAK) จากผรบไปยงผสง
rdt20 ชองทางการสอสารทม bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 ขอก าหนดของ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
จะเกดอะไรขนถา ACKNAK เกดเสยหาย ผสงไมรวาผรบรบ pkt ครบถวน
หรอไม ไมควรสง pkt ซ าอกครง เพราะ
pkt ซ ากน
การจดการกบขอมลทซ าซอน ผสงจะสง packet อกครงถา
ACKNAK เกดเสยหาย เตมหมายเลข sequence ใหแตละ
packet ผรบตองทง packet ทซ ากน
stop and wait ผสงท าการสงpacketและรอใหผรบตอบกลบดวย ACKNAK กอนทจะสง packet ตอไป
Transport Layer 3-33
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Transport Layer 3-35
rdt21 อภปราย
ผสง ใสหมายเลข seq ในpacket หมายเลข seq (01) กพอ
นกสท าไม ตองตรวจสอบวา ACKNAK ท
ไดรบเสยไปหรอไม จ านวนหมายเลข seq ตองเปนสอง
เทาของจ านวนสถานะ เพราะผสงตองเกบสถานะเพอldquoจ าrdquo
วา pkt ถดไปจะตองมเลข seq 0 หรอ 1
ผรบ ตองตรวจสอบวา pkt ทไดรบซ ากบ
pkt ทไดรบกอนหนาหรอไม ผรบจะเกบสถานะทระบวา 0 หรอ 1
คอหมายเลข seq ทคาดวาจะได
ขอสงเกต ผรบไมสามารถรวา ACKNAK สดทายทผสงไดรบถกตองหรอไม
Transport Layer 3-36
rdt22 protocol ทไมตองใช NAK
ท างานเหมอนกบ rdt21 แตใชแค ACKs แทนทจะสง NAK ผรบสง ACK ส าหรบ pkt สดทายทไดรบถกตอง
ฝงรบจะตองรวมหมายเลข seq ของ pkt ทก าลงถก ACK ไปดวย
จะสง ACK ซ าไปทผสงถาไมไดรบ pkt ทมหมายเลข seq ทคาดหวง ผลลพธจะออกมาเหมอนกรณทสง NAK ผสงตองสง pkt ตวลาสดไปใหมอกครง
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 ชองสญญาณทมความผดพลาดและ pkt สญหาย
เพมขอสนนษฐาน ชองสญญาณสามารถสญเสยแพคเกจ (ไมวาจะเปนขอมลหรอ ACKs) ได กลไก checksum หมายเลข seq
ACKs และ การสงซ า สามารถชวย แตมนกยงไมใชทางออก
วธ ผสงรอ ACK กลบมาในชวงเวลาท ldquoสมเหตสมผลrdquo
สง pkt เดมไปใหมอกครงถาไมไดรบ ACK ภายในชวงเวลาน
ถา pkt (หรอ ACK) มาถงลาชา (ไมใชหายไป) การสงใหมกจะเปนการสงซ า ซง seq
ไดจดการเรองเกยวกบขอมลซ าได ผรบตองระบเลข seq ของ pkt ทก าลง
ถก ACKed
ตองใชการนบเวลาถอยหลง (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
ขณะ rdt30 ด าเนนการ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
ขณะ rdt30 ด าเนนการ
Transport Layer 3-42
ประสทธภาพของ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
บตแรกของแพคเกจกถกสง t = 0
ผสง ผรบ
RTT
บตสดทายของแพคเกจถกสง t = L R
บตแรกของแพคเกจมาถง บตสดทายของแพคเกจมาถง สง ACK
ไดรบ ACK สงแพคเกจตอไป t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols แบบ pipelined
pipelining ผสงสงหลาย packet ไปยงผรบทง ๆ ท pkt เหลานนยงไมไดรบการยนยนตอบรบ (not yet acked) ชวงของหมายเลข sequence จะตองเพมขน ตองพกขอมล (buffer) ทผสงและผรบ
protocols แบบ pipelined แบบทวไปมสองแบบ go-Back-N selective repeat
Transport Layer 3-45
Pipelining ชวยเพม utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols แบบ pipeline ภาพรวม
Go-back-N ผสงสามารถสงแพคเกจทไมยงถก
ack ไดไมเกน N แพคเกจใน pipeline
ผรบแคสง cumulative ack ไม ack packet ถามนกอใหเกด gap
ผสงจบเวลาส าหรบแพคเกจทสงไป
นานทสดทยงไมได ack เมอเวลาหมด ผสงจะสงแพคเกจ
ทงหมดทยงไมไดรบ ack อกครง
Selective Repeat ผสงสามารถสงแพคเกจทไมยงถก ack ได
ไมเกน N แพคเกจใน pipeline
ผรบจะตองสง ack กลบใหแตละแพคเกจ
ผสงจะจบเวลาส าหรบแตละแพคเกจท
ไมได ack เมอเวลาส าหรบแพคเกจใดหมด ผสงจะสง
เฉพาะแพคเกจนนเทานน
Transport Layer 3-47
Go-Back-N ผสง
หมายเลข seq (k bit) จะอยใน header ของ packet อนญาตใหขนาด ldquowindowrdquo (ของ pkt ทตดกนและยงไมถก ack) ไมเกน N
ACK(n) จะ ack แพคเกจทงหมดไปจนถงทมหมายเลข seq เทากบ n - ldquoการ ACK แบบรวม (cumulative ACK)rdquo อาจมการไดรบ ACKs หมายเลข seq เดมซ า (ดรายละเอยดดาน receiver)
มการจบเวลาส าหรบแพคเกจทเดนทางอย ซงเดนทางนานทสดและยงไมได ACK (pkt ทมหมายเลข seq นอยทสดใน window)
timeout(n) เวลาหมดท pkt n ผสงจะสง pkt n และ pkt ทงหมดใน window (ซงมหมายเลข seq สงกวา n) อกครง
Transport Layer 3-48
GBN FSM ดานผสงทเพมจากของเดม
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum
out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM ดานผรบทเพมจากของเดม
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
ผ รบ Ack แตละแพคเกจทไดรบมาถกตอง เกบ (buffer) แพคเกจ เทาทจ าเปน เพอทจะสงขอมลทเรยงล าดบแลว ไปยง layer
บนไดในทายทสด
ผสงแคสงแพคเกจซ าเฉพาะแพคเกจทไมไดรบ Ack เทานน ตวจบเวลา (ทางฝงผสง) จะจบเวลาของแตละแพคเกจทไมไดรบ Ack
Window ของผสง มหมายเลข seq อย N หมายเลขตดกน จ ากดหมายเลข seq ของแพตเกจทสงไปแลว และไมไดรบ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
ขอมลมาจาก layer ดานบน ถามหมายเลข seq วางใน window ให
สง pkt ได
timeout(n) สง pkt n ซ า จบเวลาใหม
ACK(n) in [sendbase sendbase+N] รวา ผรบไดรบ pkt n แลว ถา n เกดเปนหมายเลขแรกสดในหนาตาง
(n เทากบ sendbase) ทไมได ถก ack เลอน window ไปทางดานขวา โดยเลอนไปยงหมายเลขทไมไดถก ack
ผสง pkt n in [rcvbase rcvbase+N-1] สง ACK(n) ถาไมเรยงตามล าดบ buffer ถาตามล าดบ สง (รวมถงใหสง pkt ท
เรยงตามล าดบและอยในบฟเฟอร) เลอน window ไปทหมายเลข seq ถดไปของ pkt ทยงไมไดรบจากผสง
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise ทงไปไมตองสนใจ
ผรบ
Transport Layer 3-54
ขณะ Selective repeat ด าเนนการ
สง pkt0
sender receiver
รบ pkt0 สง ack0
รบ pkt1 สง ack1
รบ pkt3 buffer สง ack3 รบ ack0 สง pkt4
รบ ack1 สง pkt5
pkt 2 timeout send pkt2
X loss
รบ pkt4 buffer สง ack4
รบ pkt5 buffer สง ack5
รบ pkt2 deliver pkt2
pkt3 pkt4 pkt5 สง ack2
บนทก ack3 มาถงแลว
sender window (N=4)
บนทก ack4 มาถงแลว บนทก ack4 มาถงแลว
Q เกดอะไรขนเมอ ack2 มาถง
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
สง pkt1 สง pkt2
สง pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
ตวอยาง หมายเลข seq 0 1 2 3 ขนาดของ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
ผรบไมสามารถเหนดานผสงได พฤตกรรมผรบจะเหมอนกนทง 2 สถานการณ
มบางอยางทผด (มาก)
ผรบไมเหนถงความแตกตางของทง 2 เหตการณจ าลองน
ในเหตการณจ าลอง (b) ขอมลเกาทถกสงซ า เมอผรบรบมา จะนกวาเปนขอมลใหม
Q ขนาดของ seq กบขนาดของ
window เกยวของกนยงไงเพอทจะหลกเลยงปญหาในตวอยาง (b)
Transport Layer 3-56
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-57
TCP ภาพรวม RFCs 79311221323 2018 2581
ขอมลแบบสองทศทาง มการสงขอมลทงไปและกลบในการ
เชอมตอ (connection) เดยวกน MSS ขนาด segment ทใหญสดท
TCP จะรบได (Max Segment Size)
connection-oriented handshaking (การแลกเปลยนของ
ขอความควบคม) ตงคาสถานะตงตนใหผสงและผรบ กอนการแลกเปลยนขอความ
flow controlled ผสงจะไมสงขอมลเกนกวาทผรบจะรบ
ได
point-to-point (สถานทนง-ไป-สถานทนง) ผสงหนงคน ผรบหนงคน
สายขอมลเปนไบตทเรยงล าดบและขอมลไมสญหาย (reliable in-order byte steam) ไมม ldquoขอบเขตrdquo ของขอความ
(ขอความจะมาถงผรบตอเนองกน)
pipelined การควบคมความคบคงและการควบคม
อตราการไหลของ TCP จะก าหนดขนาดของ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG ขอมลเรงดวน (โดยทว ๆ ไป ไมถกใช)
ACK ACK valid
PSH ผลกขอมลใหชน app (โดยทว ๆ ไป ไมถกใช)
RST SYN FIN สรางการเชอตอ
(ค าสง setup teardown)
จ านวน bytes ท ผรบเตมใจจะรบ
นบโดยใช byte ของขอมล (ไมใช segment)
Internet checksum
(เหมอนใน UDP)
Transport Layer 3-59
TCP seq numbers ACKs
หมายเลข sequence เลขของ byte stream จะเปน byte
แรกของขอมลของ segment น acknowledgements เลข seq ของ byte ถดไปทอกดานหนง
คาดหวงวาจะได cumulative ACK (ACK แบบรวม)
Q ผรบจดการกบ segment ทมาถงไมเรยงล าดบอยางไร A TCP ไมมรายละเอยดสวนน ndash ขนอย
กบคนทจะมาเขยนโปรแกรม TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาเขามาถงผสง
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาออกจากผสง
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
เหตการณจ าลอง telnet อยางงาย
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q เราควรจะก าหนด time out ไวทเทาใด
มากกวาเวลาของ RTT แตเวลาของ RTT นนแปรปรวน
ก าหนดไวนอยเกนไป timeout กอนก าหนด ท าใหมการ retransmissions โดยไมจ าเปน
ก าหนดไวมากเกนไป ระบบตอบสนองตอการสญหายของ segment ชาเกนไป
Q จะประมาณเวลาของ RTT อยางไร
SampleRTT วดจากระยะเวลาตงแตเรมสง sengment จนกระทงไดรบACK ไมสนใจการ retransmissions
SampleRTT มคาแปรปรวน เราตองการประมาณเวลาของ RTT ให smooth กวา ใชคาเฉลยของคาหลาย ๆ คา ไมใชแค
เวลาของ SampleRTT ปจจบน
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
คาเฉลยของการเคลอนทถวงน าหนกแบบ exponential คา SampleRTT ทในอดตจะมผลตอ EstimatedRTT ลดลงแบบ exponentially โดยทวไปจะก าหนดคา = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
ชวงเวลาของ timeout EstimatedRTT บวกกบระยะเวลาทเผอเอาไว ยงคาของ EstimatedRTT ทแปรปรวนมากเทาไร -gt ระยะเวลาทเผอความมากขนตาม
มประเมนคาการเปลยนแปลงของ SampleRTT จาก EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoชวงเวลาทเผอrdquo
Transport Layer 3-64
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP สรางบรการแบบ reliable อยบนบรการของ IP ทเปนแบบ unreliable segments ถกสงแบบ pipeline cumulative acks ม timer ส าหรบสงใหมคาตวเดยว
TCP สง segment ใหมเมอ เหตการณ timeout ไดรบ acks ซ า ๆ กน
เรามาเรมตนพจารณาทางดานผสงของ TCP อยางงายกอน ยงไมตองสนใจ acks ซ า ยงไมตองสนใจการควบคม flow และ
ความคบคง
Transport Layer 3-66
เหตการณของ TCP sender
เมอไดขอมลจาก app สราง segment ดวยหมายเลข seq เลข seq คอหมายเลขของไบตแรก
ของขอมลในแตละ segment หาก timer ยงไมเคยถกตง จะเรม
ตงเวลา การตงเวลาเพอจบเวลาส าหรบ
segment เกาทสดยงไมไดรบ ack ชวงเวลาทหมดอาย
TimeOutInterval
timeout สงใหมเฉพาะ segment ทเกด
timeout ตงเวลานบใหม เมอไดรบ ack ถา ack เปน ack ของ segment
กอนหนายงไมไดรบ ack Update สงทรวา ถก ACK แลว เรมตงเวลานบ ถายงคงม segment
ทยงไมไดรบ acked
Transport Layer 3-67
ดานผสงของ TCP (อยางงาย)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
การสราง ACK ของ TCP [RFC 1122 RFC 2581]
เหตการณทผรบ เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ) โดยขอมลทงหมดจนถงเลข seq ทคาดหวงไว ถก ACK หมดแลว
เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ ท าให ไมม gap ใน segment ทไดมา) แตมบาง segment ยงไมได ACK
Segment มาถงแบบไมเรยงตามล าดบ โดยมเลข seq สงกวาทตองการ ท าใหม gap (ชองโหว) เกดขน Segment ท ามาถง ทจะเตมบางสวนหรอเตมเตมชองโหว
TCP receiver action อยาเพงสง ACK รออก segment นง โดยรอสก 500ms หากยงไมม segment มา กสง ACK สง ACK แบบรวม (cumulative) ไปทนทในครงเดยว ซงจะเปนการ Ack segment ทมาแบบเรยงตามล าดบทงสอง segments สง ACK ซ า ไปทนท โดยใสเลข seq ของ byte ทตองการ สง ACK แบบรวมทนท โดย segment ทจะ Ack เรมจากดานทนอยกวาของ gap
Transport Layer 3-71
TCP fast retransmit
ระยะเวลาในการ time-out มกจะคอนขางยาว (โดยเปรยบเทยบ) ท าใหใชเวลาคอนขางนานกอนทจะ
สง packet อกครง
แกโดย ตรวจสอบการสญเสย pack โดยดท ACKs ทซ า ๆ กน ผสงมกสง segment ตด ๆ กน ดงนน ถา segment หนงหายไป จง
เปนไปไดทจะม ACKs ซ า ๆ กนจ านวนมาก
ถาผสงไดรบ ACKs ส าหรบขอมลเดยวกน 3 ACKS (ACKs ทซ ากนสามครง) ผสงตองสง seq ทยงไมถก acked (ระบเลข seq ทเลกทสด) มแนวโนมวา segment ทยงไมถก
ack จะหายไปเลย ดงนน จงไมตองรอใหหมดเวลา
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-74
TCP flow control application
process
buffer ดานผรบ ของ TCP socket
TCP code
IP code
application
OS
protocol stack ดานผรบ
application ลบขอมลจาก buffer ของ TCP socket hellip
hellip ชากวา TCP สงขอมล ขนไป (ขณะทผสงก าลงจะสง)
from sender
ผรบสามารถควบคมผสงได ดงนน ผสงจะไมสงขอมลเรวไป หรอ มากเกนไปจนลน (Overflow) buffer ของผรบ
flow control
Transport Layer 3-75
การควบคมการไหลขอมลของ TCP
ขอมลทอย buffer
buffer สวนทยงวาง rwnd
RcvBuffer
สวนของขอมล (payload) ใน segment ของ TCP
ไปยง process ของ application
ผรบระบขนาดของ buffer ทวางไวใน field rwnd ทอยในสวนหวของ TCP ทจะสงไปยงผสง ผเขยนโปรแกรมระบขนาดของ RcvBuffer ได
โดยใช API ตงคา option ของ socket (คาเรมตนทวไปคอ 4096 ไบต)
ทกระบบปฏบตการจะปรบขนาด RcvBuffer อตโนมต
ผสงจ ากดจ านวนของขอมลทยงไมถก acked (ldquoอยในระหวางการเดนทางrdquo) ใหเทากบคา rwnd ของขอมลผรบ
เปนการรบประกนวา buffer ของผรบจะไมลน
การbuffer ในดานของผรบ
Transport Layer 3-76
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-77
การจดการกบการเชอมตอ กอนทจะมการแลกเปลยนขอมลกน ผสงและผรบตองตกลงกนกอน ตกลงรวมในการสรางการเชอมตอ (แตละคนจะรวาอกฝายอยากจะเชอมตอหรอไม) ตกลงคาพารามเตอรส าหรบการเชอมตอ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake จะท างานไดเสมอไปหรอไมบน network
ความลาชาอาจเปลยนไป ขอความอาจถกสงซ าตวอยาง (เชน
req_conn(x)) เนองจากการสญหายของขอมล
ขอมลอาจสลบกน ไมสามารถรไดวาอกฝงไดรบหรอไม
ไดรบขอมลอะไร
2-way handshake
มาคยกนเถอะ
ตกลง ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-79
เหตการณผดพลาดของ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-80
3-way handshake ของ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM ของ 3-way handshake ของ TCP
Transport Layer 3-82
TCP การหยดการเชอมตอ
client server เลกเชอมตอทแตละดานของการเชอมตอ โดยแตละดานจะสง TCP segment ดวย FIN bit = 1
ตอบกลบ FIN ดวย ACK ในขณะทรบ FIN ACK กสามารถรวมอยในแพคเกจทสง FIN มาไดดวย
แตละดานสามารถสง FIN ไดพรอม ๆ กน
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP การหยดการเชอมตอ
Transport Layer 3-84
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-85
ความคบคง ความหมายไมเปนทางการ ldquoเมอจ านวนคนสงมากเกนไป ก าลงสงขอมลมาก
เกนไปดวยอตราการสงเรวเกนกวาท Network จะรบไหวrdquo แตกตางจาก flow control ผลทอาจทเกดขนจากความคบคง
packets หาย (buffer ลนท routers) ลาชามาก (เขาควใน buffers ของ router)
เปนปญหาทคนสนใจตด 10 อนดบตนๆ
หลกการของการควบคมความคบคงของเครอขาย
Transport Layer 3-86
ตนเหตและผลของความคบคง เหตการณ 1
มผสงและผรบอยางละสองคน Router 1 ตว ไมจ ากด buffers ความจของ link R ไมมการสงขอมลซ า
อตราขอมลทสงส าเรจตอหนงการเชอมตอ R2
buffer ท link ขาออกม buffer ไมจกด
Host A
อตราการสงขอมลตนฉบบ lin
Host B
อตราขอมลทสงส าเรจ lout
R2
R2
lou
t
lin R2 de
lay
lin
ดเลยจะมากขนเมออตราสงขอมลตนฉบบเขาใกลความจของ link
Transport Layer 3-87
Router 1 ตว Buffer แตมขนาด buffer จ ากด ตองสง pkt ไปซ าถา pkt นน timeout
ขอมลเขาของชน application = ขอมลออกจากชน application lin = lout
ขอมลเขาของชน transport จะรวมทตองสงซ าดวย lin lin
Buffer ของ link ทใชรวมกนซงมขนาดจ ากด
Host A
lin ขอมลตนฉบบ
Host B
lout lin ขอมลตนฉบบบวกกบ ขอมลทตองสงซ า
lsquo
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-88
ในอดมคต สมมตผสงรความเปนไปในเครอขาย ผสงสงเฉพาะตอนทเราเตอรม buffer เหลออย
Buffer ของ link ทแชรอยางจ ากด
lout copy
ม buffer วาง
R2
R2
lou
t
lin
Host B
A
ตนเหตและผลของความคบคง เหตการณ 2
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-89
lout copy
no buffer space
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
A
Host B
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
เมอสงขอมลท R2 บาง packets ถกสงซ า แต goodput ยงคงมคาลเขาหา R2 (ท าไม)
A
Host B
ตนเหตและผลของความคบคง เหตการณ 2
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Host B
ในความเปนจรง มการสงซ า packets หายหรอตกหลนระหวาง
เสนทางเนองจาก buffers เตม แตบางครง Timer ของผสงหมดเวลาลง
กอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-92
R2
lou
t
ldquoผลrdquo ของความคบคง เพอใหไดขอมลในอตราทตองการ (goodput) ตองท างานมากขน (สงซ า) เมอตองสง packets ซ าโดยทไมจ าเปน link จะตองล าเลยงหลาย copy ของ
ขอมลเดยวกน ท าให goodput ลดลง
R2 lin
ตนเหตและผลของความคบคง เหตการณ 2
ในความเปนจรง มการสงซ า 1 packets หายหรอตกหลนระหวางเสนทางเนองจาก buffers เตม 2 แตบางครง Timer ของผสงหมดเวลาลงกอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Transport Layer 3-93
มผสงขอมลทง 4 โฮสต เสนทางตองผานหลายจด หมดเวลาสงไปขอมลซ า
Q เกดอะไรขนเมอ λin และ λinrsquo เพมขน
Buffer ของเสนทางการสงขอมลทใชรวมกนมขนาดจ ากด
Host A lout
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
Host B
Host C Host D
A เมอ λinrsquo ของขอมลเสนสแดงมขนาดเพมขน ขอมลใน
เสนสน าเงนกจะถก drop ท าให throughput ของ connection สน าเงนเหลอ 0
lin ขอมลตนฉบบ lin ขอมลตนฉบบ บวกกบ
ขอมลทตองสงซ า
Transport Layer 3-94
อกหนง ldquoผลเสยrdquo ของความคบคง เมอแพกเกจถกทงไป นนกเทากบวา ทรยากรเครอขาย (ทใชสงขอมลกอน
หนาทขอมลนจะถกทง) ถกใชไปอยางไรคา
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
แนวทางในการควบคมความคบคงของขอมล
2 แนวทางในการควบคมความคบคง
การควบคมความคบคงโดยใชแคเครองปลายทาง (end-end)
ไมมการแจงกลบ (feedback) จากเครอขาย
ความคบคงของเครอขายจะถกเดาโดยเครองทอยปลายทางทคอยสงเกต loss delay
เปนวธของ TCP
การควบคมความคบคงโดยใหอปกรณเครอขายชวย
routers จะท าการแจง feedback ไปทระบบปลายทาง ใช bit 1 bit เพอระบถงความ
แออด (SNA DECbit TCPIP ECN ATM) หรอ ระบอตราการสงทชดเจน
ส าหรบผสง
Transport Layer 3-96
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
ABR available bit rate ldquoบรการทมความยดหยนrdquo ถาเสนทางของผสง ldquoมขอมลนอยกวา
ความจะมากrdquo ผสงจะใชประโยชนจาก
bandwidth ทเหลออย ถา path ของผสงแออด
ผสงจะคอย ๆ ลดอตราสงใหเหลอเทาอตราการสงขนต าทรบประกนไว
RM (resource management) cells สงโดยผสง แทรก ๆ ไปกบ cell ทเปนขอมล bits ใน RM cell ถกตงคาโดย switches
(ldquoเครอขายคอยชวยrdquo) NI bit ไมเพมอตราการสง (ความแออด
ระดบกลาง) CI bit การบงบอกถงความแออด
ผรบไมแกคาใน bit นของ RM cells และสงไปใหผสง
Transport Layer 3-97
field ขอมล ER (explicit rate) ขนาด 2 byte ใน cell RM switch ทแออดอาจลดคา ER ใน cell ดงนน อตราทผสงจะสงขอมลจะเปนอตราการสงมากทสดท link ในเสนทางจะรองรบได
bit EFCI ใน cell ขอมล ถกตงคาไวท 1 ใน switch ทมขอมลแออด ถา cell ขอมลกอนหนา RM cell ถกตงคา EFCI ผรบจะตงคา bit CI ใน cell RM ท
สงกลบใหผสง
RM cell data cell
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
Transport Layer 3-98
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-99
การควบคมความคบคงของ TCP additive increase (เพมแบบบวก) multiplicative decrease (ลดแบบเทาตว)
วธ ผสงเพมอตราสง (window size) ควานหา bandwidth ทมใหใชได จนกวาการสญหายจะเกดขน additive increase เพม cwnd ทละ 1 MSS ทก ๆ RTT จนกวาจะ pkt จะหาย multiplicative decrease ตดลด cwnd เหลอครงเดยวหลงจากการสญหาย
cwnd
ขนา
ดของ co
nges
tion
wind
ow ของผส
งแบบ
TCP
พฤตกรรมของ AIMD เปน ลกษณะฟนเลอย หา bandwidth
ขนาด window เพมแบบบวก hellip hellip จนกวาจะเกดการสญหาย (จากนน ตดลงเหลอครงนง)
time
Transport Layer 3-100
ผสงจ ากดการสง
ขนาด cwnd จะเปลยนแปลงไปมา ขนกบความคบคงของเครอขายทผสงไดรมา
อตราการสง TCP อยางคราว ๆ สงขอมลจ านวน
cwnd bytes รอ ACKS เพอประมาณคา RTT จากนนสงไบตขอมลเพม
byte สดทายท ถก ACKed สง แตยงไมถก
ACK (ldquoอยระหวางการเดนทางrdquo)
byte สดทายทสงไป
cwnd
LastByteSent-
LastByteAcked lt cwnd
ชวงเลข sequence number ของผสง
rate ~ ~ cwnd
RTT bytessec
การควบคมความคบคงของ TCP รายละเอยด
Transport Layer 3-101
TCP Slow Start
เมอเรมการเชอมตอ เพมอตราการสงแบบยกก าลง (exponentially) จนกวาจะเจอกบ loss ครงแรก เรมตนขนาด cwnd = 1 MSS เพมขนาด cwnd หนงเทาตวทก ๆ RTT นนคอ โดยเพมขนาด cwnd ไป 1 MSS
ส าหรบทก ๆ ACK ทไดรบ
สรป อตราสงเรมแรกจะชาแตคาจะเพมแบบกระโดดขนอยางรวดเรว
Host A
RTT
Host B
time
Transport Layer 3-102
TCP การหา loss และการตอบสนอง
ถา loss ถกระบโดย timeout cwnd ถกตงไวท 1 MSS จากนนหนาตางจะเพมขนเปนเลขยกก าลง (exponential เหมอนใน slow start)
จนไปถงคา threshold จากนนจะเพมขนเปนเชงเสน
ถา loss ถกระบโดยไดรบ ACK ซ า 3 ACKs (3 duplicate acks) TCP RENO
ACKs ซ า ระบถงความสามารถการสง segments ของเครอขาย
cwnd ถกตดเหลอครงนงจากนนเพมขนแบบเชงเสน
TCP Tahoe จะตงคา cwnd เปน 1 เสมอ (ไมวาจะ timeout หรอ 3 dup acks)
Transport Layer 3-103
Q เมอไร TCP ควรจะเปลยนจากการเพมขนแบบ exponential เปนแบบเชงเสน
A เมอ cwnd ถกเพมเปน 12 ของ ldquoคาทมากทสดrdquo ของมนกอนจะเกด timeout
การด าเนนการ ตวแปร ssthresh ขณะเกด Loss ssthresh จะถก
ตงคาท 12 ของคา cwnd กอนเกดเหตแปปเดยว (คา cwnd ทมากทสดกอนเกดเหตการณ)
TCP จาก slow start เปน CA (Congestion Avoidance)
Transport Layer 3-104
สรป TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput ของ TCP
คาเฉลย throughput ของ TCP เปน function ของขนาดของ window และ RTT ไมสนใจ slow start สมมตวาขอมลถกสงตลอด
W ขนาดของ window (หนวยเปน bytes) การสญเสยทเกดขน คาเฉลยขนาดของ window (จ านวน byte ทเดนทางอย) คอ frac34 W คาเฉลยของ throughput คอ 34W ตอ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP ในอนาคต TCP ใน ldquopipes ทยาวและมความจสงrdquo
ตวอยาง 1500 byte segments 100ms RTT ตองการชองทางการสงขนาด 10 Gbps
requires W = 83333 in-flight segments ความเปนไปไดของการสญหายของในชองทางการสงขอมล L [Mathis 1997]
เพอทจะมชองทางการสงขนาด 10Gbps ตองมการสญหายของขอมลเพยงแค =
210-10 ndash นอยมาก ดงนน ตองม TCP รนใหมส าหรบการสงแบบความเรวสง
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
เปาหมายของ fairness ถาม TCP session จ านวน K session ใชทรพยากร bandwidth R รวมกน แตละ session ควรจะเฉลยทรพยากรเหมอนกนท RK
TCP connection 1
router คอขวด มความจ R
ความเสมอภาค (Fairness) ของ TCP
TCP connection 2
Transport Layer 3-108
ความเสมอภาคของ TCP คออะไร session 2 session แขงกนใชทรพยากร additive increase ใหความชนเสนเทากบ 1 (session ทง 2 คอย ๆ ได throughput เพมทละ
นด) multiplicative decrease ลด throughput ไปครงหนง
R
R
เสนระบแบนดวธทใชรวมเทากน
Throuput ของ การเชอมตอท 1
congestion avoidance (CA) additive increase สญเสย ลดขนาดของ window ลงไปครงนง
congestion avoidance (CA) additive increase
สญเสย ลดขนาดของ window ลงไปครงนง
Transport Layer 3-109
ความเสมอภาค (ตอ)
ความเสมอภาค และ UDP มลตมเดยแอพพลเคชนบอยครงไม
ใช TCP ไมตองการใหอตราการสงลดลงเพราะ
การควบคมความคบคง
มลตมเดยแอพพลเคชนจงใช UDP แทน สงเสยงวดโอดวยความเรวคงท ทน
ตอการสญเสยขอมล
ความเสมอภาค การเชอมตอ TCP แบบขนาน แอพพลเคชนสามารถทจะเปดหลายการ
เชอมตอระหวางเครอง 2 เครองแบบขนานได
เวบบราวเซอรท าแบบน ตวอยางเชน link ทมความจ R ซงม 9 การ
เชอมตอ ถาแอพใหมตองการ 1 TCP จะไดรบท rate
R10 ถาแอพใหมตองการ 11 TCPs จะไดรบท R2
Transport Layer 3-110
Chapter 3 บทสรป
หลกการเบองหลงการใหบรการชนtransport multiplexing demultiplexing การสงขอมลแบบไวใจได การควบคมการไหลของขอมล การควบคมความคบคงของขอมล
กรณศกษาและการปฏบตบน internet UDP TCP
ถดไป ออกจากปลายทางของระบบ
เครอขาย (application transport layers)
เขาไปยงสแกนของเครอขาย
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
เปน protocol ของ Internet ทไมไดมสวนเพมเตมอะไร
บรการแบบ ldquoจะพยายามใหดทสดrdquo (best effort) ดงนน segment แบบ UDP อาจ สญหาย ไปถง app ของผรบแตไมเรยงล าดบ
ไมมการเชอมตอ ไมมการท า handshake ระหวางผสง
และผรบ แตละ segment ทเปน UDP จะถก
จดการเปนอสระจาก segment อน ๆ
UDP ใชใน app ทสง multimedia อยางตอเนอง
(ซงทนตอการสญเสย แต sensitive กบอตราการสง)
DNS SNMP
ถาจะให การถายโอนขอมลบน UDP มความนาเชอถอกวาน เพมความนาเชอถอทชน application มการกคนขอผดพลาด (ขนอยกบ แตละ
application)
Transport Layer 3-17
UDP สวนหวของ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
ควายาวของ segment ของ UDP (หนวยเปน byte) รวมความยาว
ของ header ดวย
ไมตองสรางการเชอมตอ (ซงเปนสวนทเพมความลาชา)
งาย ไมซบซอน ไมตองมสถานะของการเชอมตอทผสงและผรบ
สวนหว (header) มขนาดเลก ไมมการควบคมความคบคง UDP
สามารถสงขอมลไดรวดเรวตามทตองการ
ท าไมถงตองม UDP
Transport Layer 3-18
checksum ของ UDP
ผสง จดการขอมลทงหมดทจะไปอยใน
segment รวมทงขอมลสวนหวตาง ๆ ทเปนล าดบของจ านวนเตม 16 บตหลายจ านวน
checksum ผลรวมของขอมลตาง ๆ ใน segment
ผสงใส checksum เขาไปใน field checksum ใน header ของ UDP
ผรบ ค านวณหา checksum ของ segment ทได
รบมาใหม ตรวจสอบคา checksum ใน field ของ
header กบ คาทเพงไดจากการค านวณ วาเทากนหรอไม ถาไม แสดงวาพบขอผดพลาด ถาใช แสดงวา ไมพบขอผดพลาด แต
จรง ๆ แลว กอาจจะมขอผดพลาดไดอยด (รายละเอยดจะกลาวภายหลง)
จดมงหมาย ตรวจสอบขอผดพลาด เชน bits ทคาโดนกลบใน segment
Transport Layer 3-19
Internet checksum ตวอยาง
ตวอยาง การบวก 16-bit integers สองจ านวน
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note ขณะทบวกตวเลข เมอ bitท 16 (bit ซายสด) มการทดเลข ใหน าเลขนนไปบวกกบ bit ท 1 แลวจง flip bit ทก bit เพอใหได checksum
Transport Layer 3-20
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-21
Principles of reliable data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
หลกการของความนาเชอถอ data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
หลกการของความนาเชอถอ data transfer
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
ส าคญในชน application transport link ตด top-10 ของหวขอทางดานเครอขาย
Transport Layer 3-24
Reliable data transfer เรมตน
ดานผสง ดานผรบ
rdt_send() ถกเรยกจากชนดานบน (เชน โดย app) ท าหนาทผานขอมลเพอใหขอมลถกสงไป
ยงชนดานบนของผรบ
udt_send() ถกเรยกโดย rdt เพอทจะโอนถาย packet ผานชองการ
สอสารท unreliable ไปยงผรบ
rdt_rcv() ถกเรยกโดย OS เมอ OS ไดรบ packet ทมาถงชองการสอสารดานผรบ
deliver_data() ถกเรยกโดย rdt เพอใหสงขอมลไปยงชนดานบน
Transport Layer 3-25
เราจะ คอย ๆ พฒนา protocol ส าหรบการโอนถายขอมลแบบ reliable หรอ reliable
data transfer protocol (rdt) ตอนน พจารณาเฉพาะการโอนถายขอมลแบบทางเดยวกอน
แตขอมลส าหรบการควบคม (control info) จะถกสงไปกลบทงสองทาง
ใช finite state machines (FSM) เพอก าหนดการกระท าของผสงและผรบ
state 1
state 2
เหตการณทท าใหเกดการเปลยนผานของ State การกระท าขณะเปลยนผาน State
สถานะ (state) เมออยใน state ปจจบน state ถดไปจะขนอยกบเหตการณทจะ
เกดขน ณ state ปจจบน
เหตการณ การกระท า
Reliable data transfer เรมตน
Transport Layer 3-26
rdt10 การโอนถายขอมลแบบ reliable ผานชองสญญาณแบบ reliable
สมมตให ชองทางทอยขางใตเปนชองทางทเชอถอได ไมมการผดพลาดของบต ไมมขอมลสญหาย
FSMs ส าหรบผสง และ ส าหรบผ รบ ผสงสงขอมลไปยงชนดานลาง ผรบรบขอมลจากชนดานลาง
รอรบการเรยกจากชน
ดานบน packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
รอรบการเรยกจากชน
ดานลาง
rdt_rcv(packet)
ผสง ผรบ
Transport Layer 3-27
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร
acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK
negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors
sender retransmits pkt on receipt of NAK
new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 ชองทางการสอสารทม bit errors
ปกตแลว มนษยใชวธการใดในการแกไข ldquoerrorsrdquo ระหวางการสนทนา
Transport Layer 3-28
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร การตอบรบ (acknowledgements (ACKs)) ผรบแจงผสงวาไดรบ packet แลว การตอบปฏเสธ (negative acknowledgements (NAKs)) ผรบแจงผสงวา packet ม
errors sender สงขอมลซ าอกครง เมอไดรบ NAK
กลไกทเพมขน in rdt20 (เพมจาก rdt10) การตรวจจบความผดพลาด การแจงกลบ (feedback) ขอมลส าหรบการควบคม (ACKNAK) จากผรบไปยงผสง
rdt20 ชองทางการสอสารทม bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 ขอก าหนดของ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
จะเกดอะไรขนถา ACKNAK เกดเสยหาย ผสงไมรวาผรบรบ pkt ครบถวน
หรอไม ไมควรสง pkt ซ าอกครง เพราะ
pkt ซ ากน
การจดการกบขอมลทซ าซอน ผสงจะสง packet อกครงถา
ACKNAK เกดเสยหาย เตมหมายเลข sequence ใหแตละ
packet ผรบตองทง packet ทซ ากน
stop and wait ผสงท าการสงpacketและรอใหผรบตอบกลบดวย ACKNAK กอนทจะสง packet ตอไป
Transport Layer 3-33
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Transport Layer 3-35
rdt21 อภปราย
ผสง ใสหมายเลข seq ในpacket หมายเลข seq (01) กพอ
นกสท าไม ตองตรวจสอบวา ACKNAK ท
ไดรบเสยไปหรอไม จ านวนหมายเลข seq ตองเปนสอง
เทาของจ านวนสถานะ เพราะผสงตองเกบสถานะเพอldquoจ าrdquo
วา pkt ถดไปจะตองมเลข seq 0 หรอ 1
ผรบ ตองตรวจสอบวา pkt ทไดรบซ ากบ
pkt ทไดรบกอนหนาหรอไม ผรบจะเกบสถานะทระบวา 0 หรอ 1
คอหมายเลข seq ทคาดวาจะได
ขอสงเกต ผรบไมสามารถรวา ACKNAK สดทายทผสงไดรบถกตองหรอไม
Transport Layer 3-36
rdt22 protocol ทไมตองใช NAK
ท างานเหมอนกบ rdt21 แตใชแค ACKs แทนทจะสง NAK ผรบสง ACK ส าหรบ pkt สดทายทไดรบถกตอง
ฝงรบจะตองรวมหมายเลข seq ของ pkt ทก าลงถก ACK ไปดวย
จะสง ACK ซ าไปทผสงถาไมไดรบ pkt ทมหมายเลข seq ทคาดหวง ผลลพธจะออกมาเหมอนกรณทสง NAK ผสงตองสง pkt ตวลาสดไปใหมอกครง
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 ชองสญญาณทมความผดพลาดและ pkt สญหาย
เพมขอสนนษฐาน ชองสญญาณสามารถสญเสยแพคเกจ (ไมวาจะเปนขอมลหรอ ACKs) ได กลไก checksum หมายเลข seq
ACKs และ การสงซ า สามารถชวย แตมนกยงไมใชทางออก
วธ ผสงรอ ACK กลบมาในชวงเวลาท ldquoสมเหตสมผลrdquo
สง pkt เดมไปใหมอกครงถาไมไดรบ ACK ภายในชวงเวลาน
ถา pkt (หรอ ACK) มาถงลาชา (ไมใชหายไป) การสงใหมกจะเปนการสงซ า ซง seq
ไดจดการเรองเกยวกบขอมลซ าได ผรบตองระบเลข seq ของ pkt ทก าลง
ถก ACKed
ตองใชการนบเวลาถอยหลง (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
ขณะ rdt30 ด าเนนการ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
ขณะ rdt30 ด าเนนการ
Transport Layer 3-42
ประสทธภาพของ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
บตแรกของแพคเกจกถกสง t = 0
ผสง ผรบ
RTT
บตสดทายของแพคเกจถกสง t = L R
บตแรกของแพคเกจมาถง บตสดทายของแพคเกจมาถง สง ACK
ไดรบ ACK สงแพคเกจตอไป t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols แบบ pipelined
pipelining ผสงสงหลาย packet ไปยงผรบทง ๆ ท pkt เหลานนยงไมไดรบการยนยนตอบรบ (not yet acked) ชวงของหมายเลข sequence จะตองเพมขน ตองพกขอมล (buffer) ทผสงและผรบ
protocols แบบ pipelined แบบทวไปมสองแบบ go-Back-N selective repeat
Transport Layer 3-45
Pipelining ชวยเพม utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols แบบ pipeline ภาพรวม
Go-back-N ผสงสามารถสงแพคเกจทไมยงถก
ack ไดไมเกน N แพคเกจใน pipeline
ผรบแคสง cumulative ack ไม ack packet ถามนกอใหเกด gap
ผสงจบเวลาส าหรบแพคเกจทสงไป
นานทสดทยงไมได ack เมอเวลาหมด ผสงจะสงแพคเกจ
ทงหมดทยงไมไดรบ ack อกครง
Selective Repeat ผสงสามารถสงแพคเกจทไมยงถก ack ได
ไมเกน N แพคเกจใน pipeline
ผรบจะตองสง ack กลบใหแตละแพคเกจ
ผสงจะจบเวลาส าหรบแตละแพคเกจท
ไมได ack เมอเวลาส าหรบแพคเกจใดหมด ผสงจะสง
เฉพาะแพคเกจนนเทานน
Transport Layer 3-47
Go-Back-N ผสง
หมายเลข seq (k bit) จะอยใน header ของ packet อนญาตใหขนาด ldquowindowrdquo (ของ pkt ทตดกนและยงไมถก ack) ไมเกน N
ACK(n) จะ ack แพคเกจทงหมดไปจนถงทมหมายเลข seq เทากบ n - ldquoการ ACK แบบรวม (cumulative ACK)rdquo อาจมการไดรบ ACKs หมายเลข seq เดมซ า (ดรายละเอยดดาน receiver)
มการจบเวลาส าหรบแพคเกจทเดนทางอย ซงเดนทางนานทสดและยงไมได ACK (pkt ทมหมายเลข seq นอยทสดใน window)
timeout(n) เวลาหมดท pkt n ผสงจะสง pkt n และ pkt ทงหมดใน window (ซงมหมายเลข seq สงกวา n) อกครง
Transport Layer 3-48
GBN FSM ดานผสงทเพมจากของเดม
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum
out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM ดานผรบทเพมจากของเดม
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
ผ รบ Ack แตละแพคเกจทไดรบมาถกตอง เกบ (buffer) แพคเกจ เทาทจ าเปน เพอทจะสงขอมลทเรยงล าดบแลว ไปยง layer
บนไดในทายทสด
ผสงแคสงแพคเกจซ าเฉพาะแพคเกจทไมไดรบ Ack เทานน ตวจบเวลา (ทางฝงผสง) จะจบเวลาของแตละแพคเกจทไมไดรบ Ack
Window ของผสง มหมายเลข seq อย N หมายเลขตดกน จ ากดหมายเลข seq ของแพตเกจทสงไปแลว และไมไดรบ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
ขอมลมาจาก layer ดานบน ถามหมายเลข seq วางใน window ให
สง pkt ได
timeout(n) สง pkt n ซ า จบเวลาใหม
ACK(n) in [sendbase sendbase+N] รวา ผรบไดรบ pkt n แลว ถา n เกดเปนหมายเลขแรกสดในหนาตาง
(n เทากบ sendbase) ทไมได ถก ack เลอน window ไปทางดานขวา โดยเลอนไปยงหมายเลขทไมไดถก ack
ผสง pkt n in [rcvbase rcvbase+N-1] สง ACK(n) ถาไมเรยงตามล าดบ buffer ถาตามล าดบ สง (รวมถงใหสง pkt ท
เรยงตามล าดบและอยในบฟเฟอร) เลอน window ไปทหมายเลข seq ถดไปของ pkt ทยงไมไดรบจากผสง
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise ทงไปไมตองสนใจ
ผรบ
Transport Layer 3-54
ขณะ Selective repeat ด าเนนการ
สง pkt0
sender receiver
รบ pkt0 สง ack0
รบ pkt1 สง ack1
รบ pkt3 buffer สง ack3 รบ ack0 สง pkt4
รบ ack1 สง pkt5
pkt 2 timeout send pkt2
X loss
รบ pkt4 buffer สง ack4
รบ pkt5 buffer สง ack5
รบ pkt2 deliver pkt2
pkt3 pkt4 pkt5 สง ack2
บนทก ack3 มาถงแลว
sender window (N=4)
บนทก ack4 มาถงแลว บนทก ack4 มาถงแลว
Q เกดอะไรขนเมอ ack2 มาถง
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
สง pkt1 สง pkt2
สง pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
ตวอยาง หมายเลข seq 0 1 2 3 ขนาดของ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
ผรบไมสามารถเหนดานผสงได พฤตกรรมผรบจะเหมอนกนทง 2 สถานการณ
มบางอยางทผด (มาก)
ผรบไมเหนถงความแตกตางของทง 2 เหตการณจ าลองน
ในเหตการณจ าลอง (b) ขอมลเกาทถกสงซ า เมอผรบรบมา จะนกวาเปนขอมลใหม
Q ขนาดของ seq กบขนาดของ
window เกยวของกนยงไงเพอทจะหลกเลยงปญหาในตวอยาง (b)
Transport Layer 3-56
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-57
TCP ภาพรวม RFCs 79311221323 2018 2581
ขอมลแบบสองทศทาง มการสงขอมลทงไปและกลบในการ
เชอมตอ (connection) เดยวกน MSS ขนาด segment ทใหญสดท
TCP จะรบได (Max Segment Size)
connection-oriented handshaking (การแลกเปลยนของ
ขอความควบคม) ตงคาสถานะตงตนใหผสงและผรบ กอนการแลกเปลยนขอความ
flow controlled ผสงจะไมสงขอมลเกนกวาทผรบจะรบ
ได
point-to-point (สถานทนง-ไป-สถานทนง) ผสงหนงคน ผรบหนงคน
สายขอมลเปนไบตทเรยงล าดบและขอมลไมสญหาย (reliable in-order byte steam) ไมม ldquoขอบเขตrdquo ของขอความ
(ขอความจะมาถงผรบตอเนองกน)
pipelined การควบคมความคบคงและการควบคม
อตราการไหลของ TCP จะก าหนดขนาดของ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG ขอมลเรงดวน (โดยทว ๆ ไป ไมถกใช)
ACK ACK valid
PSH ผลกขอมลใหชน app (โดยทว ๆ ไป ไมถกใช)
RST SYN FIN สรางการเชอตอ
(ค าสง setup teardown)
จ านวน bytes ท ผรบเตมใจจะรบ
นบโดยใช byte ของขอมล (ไมใช segment)
Internet checksum
(เหมอนใน UDP)
Transport Layer 3-59
TCP seq numbers ACKs
หมายเลข sequence เลขของ byte stream จะเปน byte
แรกของขอมลของ segment น acknowledgements เลข seq ของ byte ถดไปทอกดานหนง
คาดหวงวาจะได cumulative ACK (ACK แบบรวม)
Q ผรบจดการกบ segment ทมาถงไมเรยงล าดบอยางไร A TCP ไมมรายละเอยดสวนน ndash ขนอย
กบคนทจะมาเขยนโปรแกรม TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาเขามาถงผสง
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาออกจากผสง
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
เหตการณจ าลอง telnet อยางงาย
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q เราควรจะก าหนด time out ไวทเทาใด
มากกวาเวลาของ RTT แตเวลาของ RTT นนแปรปรวน
ก าหนดไวนอยเกนไป timeout กอนก าหนด ท าใหมการ retransmissions โดยไมจ าเปน
ก าหนดไวมากเกนไป ระบบตอบสนองตอการสญหายของ segment ชาเกนไป
Q จะประมาณเวลาของ RTT อยางไร
SampleRTT วดจากระยะเวลาตงแตเรมสง sengment จนกระทงไดรบACK ไมสนใจการ retransmissions
SampleRTT มคาแปรปรวน เราตองการประมาณเวลาของ RTT ให smooth กวา ใชคาเฉลยของคาหลาย ๆ คา ไมใชแค
เวลาของ SampleRTT ปจจบน
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
คาเฉลยของการเคลอนทถวงน าหนกแบบ exponential คา SampleRTT ทในอดตจะมผลตอ EstimatedRTT ลดลงแบบ exponentially โดยทวไปจะก าหนดคา = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
ชวงเวลาของ timeout EstimatedRTT บวกกบระยะเวลาทเผอเอาไว ยงคาของ EstimatedRTT ทแปรปรวนมากเทาไร -gt ระยะเวลาทเผอความมากขนตาม
มประเมนคาการเปลยนแปลงของ SampleRTT จาก EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoชวงเวลาทเผอrdquo
Transport Layer 3-64
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP สรางบรการแบบ reliable อยบนบรการของ IP ทเปนแบบ unreliable segments ถกสงแบบ pipeline cumulative acks ม timer ส าหรบสงใหมคาตวเดยว
TCP สง segment ใหมเมอ เหตการณ timeout ไดรบ acks ซ า ๆ กน
เรามาเรมตนพจารณาทางดานผสงของ TCP อยางงายกอน ยงไมตองสนใจ acks ซ า ยงไมตองสนใจการควบคม flow และ
ความคบคง
Transport Layer 3-66
เหตการณของ TCP sender
เมอไดขอมลจาก app สราง segment ดวยหมายเลข seq เลข seq คอหมายเลขของไบตแรก
ของขอมลในแตละ segment หาก timer ยงไมเคยถกตง จะเรม
ตงเวลา การตงเวลาเพอจบเวลาส าหรบ
segment เกาทสดยงไมไดรบ ack ชวงเวลาทหมดอาย
TimeOutInterval
timeout สงใหมเฉพาะ segment ทเกด
timeout ตงเวลานบใหม เมอไดรบ ack ถา ack เปน ack ของ segment
กอนหนายงไมไดรบ ack Update สงทรวา ถก ACK แลว เรมตงเวลานบ ถายงคงม segment
ทยงไมไดรบ acked
Transport Layer 3-67
ดานผสงของ TCP (อยางงาย)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
การสราง ACK ของ TCP [RFC 1122 RFC 2581]
เหตการณทผรบ เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ) โดยขอมลทงหมดจนถงเลข seq ทคาดหวงไว ถก ACK หมดแลว
เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ ท าให ไมม gap ใน segment ทไดมา) แตมบาง segment ยงไมได ACK
Segment มาถงแบบไมเรยงตามล าดบ โดยมเลข seq สงกวาทตองการ ท าใหม gap (ชองโหว) เกดขน Segment ท ามาถง ทจะเตมบางสวนหรอเตมเตมชองโหว
TCP receiver action อยาเพงสง ACK รออก segment นง โดยรอสก 500ms หากยงไมม segment มา กสง ACK สง ACK แบบรวม (cumulative) ไปทนทในครงเดยว ซงจะเปนการ Ack segment ทมาแบบเรยงตามล าดบทงสอง segments สง ACK ซ า ไปทนท โดยใสเลข seq ของ byte ทตองการ สง ACK แบบรวมทนท โดย segment ทจะ Ack เรมจากดานทนอยกวาของ gap
Transport Layer 3-71
TCP fast retransmit
ระยะเวลาในการ time-out มกจะคอนขางยาว (โดยเปรยบเทยบ) ท าใหใชเวลาคอนขางนานกอนทจะ
สง packet อกครง
แกโดย ตรวจสอบการสญเสย pack โดยดท ACKs ทซ า ๆ กน ผสงมกสง segment ตด ๆ กน ดงนน ถา segment หนงหายไป จง
เปนไปไดทจะม ACKs ซ า ๆ กนจ านวนมาก
ถาผสงไดรบ ACKs ส าหรบขอมลเดยวกน 3 ACKS (ACKs ทซ ากนสามครง) ผสงตองสง seq ทยงไมถก acked (ระบเลข seq ทเลกทสด) มแนวโนมวา segment ทยงไมถก
ack จะหายไปเลย ดงนน จงไมตองรอใหหมดเวลา
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-74
TCP flow control application
process
buffer ดานผรบ ของ TCP socket
TCP code
IP code
application
OS
protocol stack ดานผรบ
application ลบขอมลจาก buffer ของ TCP socket hellip
hellip ชากวา TCP สงขอมล ขนไป (ขณะทผสงก าลงจะสง)
from sender
ผรบสามารถควบคมผสงได ดงนน ผสงจะไมสงขอมลเรวไป หรอ มากเกนไปจนลน (Overflow) buffer ของผรบ
flow control
Transport Layer 3-75
การควบคมการไหลขอมลของ TCP
ขอมลทอย buffer
buffer สวนทยงวาง rwnd
RcvBuffer
สวนของขอมล (payload) ใน segment ของ TCP
ไปยง process ของ application
ผรบระบขนาดของ buffer ทวางไวใน field rwnd ทอยในสวนหวของ TCP ทจะสงไปยงผสง ผเขยนโปรแกรมระบขนาดของ RcvBuffer ได
โดยใช API ตงคา option ของ socket (คาเรมตนทวไปคอ 4096 ไบต)
ทกระบบปฏบตการจะปรบขนาด RcvBuffer อตโนมต
ผสงจ ากดจ านวนของขอมลทยงไมถก acked (ldquoอยในระหวางการเดนทางrdquo) ใหเทากบคา rwnd ของขอมลผรบ
เปนการรบประกนวา buffer ของผรบจะไมลน
การbuffer ในดานของผรบ
Transport Layer 3-76
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-77
การจดการกบการเชอมตอ กอนทจะมการแลกเปลยนขอมลกน ผสงและผรบตองตกลงกนกอน ตกลงรวมในการสรางการเชอมตอ (แตละคนจะรวาอกฝายอยากจะเชอมตอหรอไม) ตกลงคาพารามเตอรส าหรบการเชอมตอ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake จะท างานไดเสมอไปหรอไมบน network
ความลาชาอาจเปลยนไป ขอความอาจถกสงซ าตวอยาง (เชน
req_conn(x)) เนองจากการสญหายของขอมล
ขอมลอาจสลบกน ไมสามารถรไดวาอกฝงไดรบหรอไม
ไดรบขอมลอะไร
2-way handshake
มาคยกนเถอะ
ตกลง ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-79
เหตการณผดพลาดของ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-80
3-way handshake ของ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM ของ 3-way handshake ของ TCP
Transport Layer 3-82
TCP การหยดการเชอมตอ
client server เลกเชอมตอทแตละดานของการเชอมตอ โดยแตละดานจะสง TCP segment ดวย FIN bit = 1
ตอบกลบ FIN ดวย ACK ในขณะทรบ FIN ACK กสามารถรวมอยในแพคเกจทสง FIN มาไดดวย
แตละดานสามารถสง FIN ไดพรอม ๆ กน
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP การหยดการเชอมตอ
Transport Layer 3-84
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-85
ความคบคง ความหมายไมเปนทางการ ldquoเมอจ านวนคนสงมากเกนไป ก าลงสงขอมลมาก
เกนไปดวยอตราการสงเรวเกนกวาท Network จะรบไหวrdquo แตกตางจาก flow control ผลทอาจทเกดขนจากความคบคง
packets หาย (buffer ลนท routers) ลาชามาก (เขาควใน buffers ของ router)
เปนปญหาทคนสนใจตด 10 อนดบตนๆ
หลกการของการควบคมความคบคงของเครอขาย
Transport Layer 3-86
ตนเหตและผลของความคบคง เหตการณ 1
มผสงและผรบอยางละสองคน Router 1 ตว ไมจ ากด buffers ความจของ link R ไมมการสงขอมลซ า
อตราขอมลทสงส าเรจตอหนงการเชอมตอ R2
buffer ท link ขาออกม buffer ไมจกด
Host A
อตราการสงขอมลตนฉบบ lin
Host B
อตราขอมลทสงส าเรจ lout
R2
R2
lou
t
lin R2 de
lay
lin
ดเลยจะมากขนเมออตราสงขอมลตนฉบบเขาใกลความจของ link
Transport Layer 3-87
Router 1 ตว Buffer แตมขนาด buffer จ ากด ตองสง pkt ไปซ าถา pkt นน timeout
ขอมลเขาของชน application = ขอมลออกจากชน application lin = lout
ขอมลเขาของชน transport จะรวมทตองสงซ าดวย lin lin
Buffer ของ link ทใชรวมกนซงมขนาดจ ากด
Host A
lin ขอมลตนฉบบ
Host B
lout lin ขอมลตนฉบบบวกกบ ขอมลทตองสงซ า
lsquo
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-88
ในอดมคต สมมตผสงรความเปนไปในเครอขาย ผสงสงเฉพาะตอนทเราเตอรม buffer เหลออย
Buffer ของ link ทแชรอยางจ ากด
lout copy
ม buffer วาง
R2
R2
lou
t
lin
Host B
A
ตนเหตและผลของความคบคง เหตการณ 2
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-89
lout copy
no buffer space
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
A
Host B
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
เมอสงขอมลท R2 บาง packets ถกสงซ า แต goodput ยงคงมคาลเขาหา R2 (ท าไม)
A
Host B
ตนเหตและผลของความคบคง เหตการณ 2
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Host B
ในความเปนจรง มการสงซ า packets หายหรอตกหลนระหวาง
เสนทางเนองจาก buffers เตม แตบางครง Timer ของผสงหมดเวลาลง
กอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-92
R2
lou
t
ldquoผลrdquo ของความคบคง เพอใหไดขอมลในอตราทตองการ (goodput) ตองท างานมากขน (สงซ า) เมอตองสง packets ซ าโดยทไมจ าเปน link จะตองล าเลยงหลาย copy ของ
ขอมลเดยวกน ท าให goodput ลดลง
R2 lin
ตนเหตและผลของความคบคง เหตการณ 2
ในความเปนจรง มการสงซ า 1 packets หายหรอตกหลนระหวางเสนทางเนองจาก buffers เตม 2 แตบางครง Timer ของผสงหมดเวลาลงกอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Transport Layer 3-93
มผสงขอมลทง 4 โฮสต เสนทางตองผานหลายจด หมดเวลาสงไปขอมลซ า
Q เกดอะไรขนเมอ λin และ λinrsquo เพมขน
Buffer ของเสนทางการสงขอมลทใชรวมกนมขนาดจ ากด
Host A lout
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
Host B
Host C Host D
A เมอ λinrsquo ของขอมลเสนสแดงมขนาดเพมขน ขอมลใน
เสนสน าเงนกจะถก drop ท าให throughput ของ connection สน าเงนเหลอ 0
lin ขอมลตนฉบบ lin ขอมลตนฉบบ บวกกบ
ขอมลทตองสงซ า
Transport Layer 3-94
อกหนง ldquoผลเสยrdquo ของความคบคง เมอแพกเกจถกทงไป นนกเทากบวา ทรยากรเครอขาย (ทใชสงขอมลกอน
หนาทขอมลนจะถกทง) ถกใชไปอยางไรคา
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
แนวทางในการควบคมความคบคงของขอมล
2 แนวทางในการควบคมความคบคง
การควบคมความคบคงโดยใชแคเครองปลายทาง (end-end)
ไมมการแจงกลบ (feedback) จากเครอขาย
ความคบคงของเครอขายจะถกเดาโดยเครองทอยปลายทางทคอยสงเกต loss delay
เปนวธของ TCP
การควบคมความคบคงโดยใหอปกรณเครอขายชวย
routers จะท าการแจง feedback ไปทระบบปลายทาง ใช bit 1 bit เพอระบถงความ
แออด (SNA DECbit TCPIP ECN ATM) หรอ ระบอตราการสงทชดเจน
ส าหรบผสง
Transport Layer 3-96
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
ABR available bit rate ldquoบรการทมความยดหยนrdquo ถาเสนทางของผสง ldquoมขอมลนอยกวา
ความจะมากrdquo ผสงจะใชประโยชนจาก
bandwidth ทเหลออย ถา path ของผสงแออด
ผสงจะคอย ๆ ลดอตราสงใหเหลอเทาอตราการสงขนต าทรบประกนไว
RM (resource management) cells สงโดยผสง แทรก ๆ ไปกบ cell ทเปนขอมล bits ใน RM cell ถกตงคาโดย switches
(ldquoเครอขายคอยชวยrdquo) NI bit ไมเพมอตราการสง (ความแออด
ระดบกลาง) CI bit การบงบอกถงความแออด
ผรบไมแกคาใน bit นของ RM cells และสงไปใหผสง
Transport Layer 3-97
field ขอมล ER (explicit rate) ขนาด 2 byte ใน cell RM switch ทแออดอาจลดคา ER ใน cell ดงนน อตราทผสงจะสงขอมลจะเปนอตราการสงมากทสดท link ในเสนทางจะรองรบได
bit EFCI ใน cell ขอมล ถกตงคาไวท 1 ใน switch ทมขอมลแออด ถา cell ขอมลกอนหนา RM cell ถกตงคา EFCI ผรบจะตงคา bit CI ใน cell RM ท
สงกลบใหผสง
RM cell data cell
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
Transport Layer 3-98
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-99
การควบคมความคบคงของ TCP additive increase (เพมแบบบวก) multiplicative decrease (ลดแบบเทาตว)
วธ ผสงเพมอตราสง (window size) ควานหา bandwidth ทมใหใชได จนกวาการสญหายจะเกดขน additive increase เพม cwnd ทละ 1 MSS ทก ๆ RTT จนกวาจะ pkt จะหาย multiplicative decrease ตดลด cwnd เหลอครงเดยวหลงจากการสญหาย
cwnd
ขนา
ดของ co
nges
tion
wind
ow ของผส
งแบบ
TCP
พฤตกรรมของ AIMD เปน ลกษณะฟนเลอย หา bandwidth
ขนาด window เพมแบบบวก hellip hellip จนกวาจะเกดการสญหาย (จากนน ตดลงเหลอครงนง)
time
Transport Layer 3-100
ผสงจ ากดการสง
ขนาด cwnd จะเปลยนแปลงไปมา ขนกบความคบคงของเครอขายทผสงไดรมา
อตราการสง TCP อยางคราว ๆ สงขอมลจ านวน
cwnd bytes รอ ACKS เพอประมาณคา RTT จากนนสงไบตขอมลเพม
byte สดทายท ถก ACKed สง แตยงไมถก
ACK (ldquoอยระหวางการเดนทางrdquo)
byte สดทายทสงไป
cwnd
LastByteSent-
LastByteAcked lt cwnd
ชวงเลข sequence number ของผสง
rate ~ ~ cwnd
RTT bytessec
การควบคมความคบคงของ TCP รายละเอยด
Transport Layer 3-101
TCP Slow Start
เมอเรมการเชอมตอ เพมอตราการสงแบบยกก าลง (exponentially) จนกวาจะเจอกบ loss ครงแรก เรมตนขนาด cwnd = 1 MSS เพมขนาด cwnd หนงเทาตวทก ๆ RTT นนคอ โดยเพมขนาด cwnd ไป 1 MSS
ส าหรบทก ๆ ACK ทไดรบ
สรป อตราสงเรมแรกจะชาแตคาจะเพมแบบกระโดดขนอยางรวดเรว
Host A
RTT
Host B
time
Transport Layer 3-102
TCP การหา loss และการตอบสนอง
ถา loss ถกระบโดย timeout cwnd ถกตงไวท 1 MSS จากนนหนาตางจะเพมขนเปนเลขยกก าลง (exponential เหมอนใน slow start)
จนไปถงคา threshold จากนนจะเพมขนเปนเชงเสน
ถา loss ถกระบโดยไดรบ ACK ซ า 3 ACKs (3 duplicate acks) TCP RENO
ACKs ซ า ระบถงความสามารถการสง segments ของเครอขาย
cwnd ถกตดเหลอครงนงจากนนเพมขนแบบเชงเสน
TCP Tahoe จะตงคา cwnd เปน 1 เสมอ (ไมวาจะ timeout หรอ 3 dup acks)
Transport Layer 3-103
Q เมอไร TCP ควรจะเปลยนจากการเพมขนแบบ exponential เปนแบบเชงเสน
A เมอ cwnd ถกเพมเปน 12 ของ ldquoคาทมากทสดrdquo ของมนกอนจะเกด timeout
การด าเนนการ ตวแปร ssthresh ขณะเกด Loss ssthresh จะถก
ตงคาท 12 ของคา cwnd กอนเกดเหตแปปเดยว (คา cwnd ทมากทสดกอนเกดเหตการณ)
TCP จาก slow start เปน CA (Congestion Avoidance)
Transport Layer 3-104
สรป TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput ของ TCP
คาเฉลย throughput ของ TCP เปน function ของขนาดของ window และ RTT ไมสนใจ slow start สมมตวาขอมลถกสงตลอด
W ขนาดของ window (หนวยเปน bytes) การสญเสยทเกดขน คาเฉลยขนาดของ window (จ านวน byte ทเดนทางอย) คอ frac34 W คาเฉลยของ throughput คอ 34W ตอ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP ในอนาคต TCP ใน ldquopipes ทยาวและมความจสงrdquo
ตวอยาง 1500 byte segments 100ms RTT ตองการชองทางการสงขนาด 10 Gbps
requires W = 83333 in-flight segments ความเปนไปไดของการสญหายของในชองทางการสงขอมล L [Mathis 1997]
เพอทจะมชองทางการสงขนาด 10Gbps ตองมการสญหายของขอมลเพยงแค =
210-10 ndash นอยมาก ดงนน ตองม TCP รนใหมส าหรบการสงแบบความเรวสง
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
เปาหมายของ fairness ถาม TCP session จ านวน K session ใชทรพยากร bandwidth R รวมกน แตละ session ควรจะเฉลยทรพยากรเหมอนกนท RK
TCP connection 1
router คอขวด มความจ R
ความเสมอภาค (Fairness) ของ TCP
TCP connection 2
Transport Layer 3-108
ความเสมอภาคของ TCP คออะไร session 2 session แขงกนใชทรพยากร additive increase ใหความชนเสนเทากบ 1 (session ทง 2 คอย ๆ ได throughput เพมทละ
นด) multiplicative decrease ลด throughput ไปครงหนง
R
R
เสนระบแบนดวธทใชรวมเทากน
Throuput ของ การเชอมตอท 1
congestion avoidance (CA) additive increase สญเสย ลดขนาดของ window ลงไปครงนง
congestion avoidance (CA) additive increase
สญเสย ลดขนาดของ window ลงไปครงนง
Transport Layer 3-109
ความเสมอภาค (ตอ)
ความเสมอภาค และ UDP มลตมเดยแอพพลเคชนบอยครงไม
ใช TCP ไมตองการใหอตราการสงลดลงเพราะ
การควบคมความคบคง
มลตมเดยแอพพลเคชนจงใช UDP แทน สงเสยงวดโอดวยความเรวคงท ทน
ตอการสญเสยขอมล
ความเสมอภาค การเชอมตอ TCP แบบขนาน แอพพลเคชนสามารถทจะเปดหลายการ
เชอมตอระหวางเครอง 2 เครองแบบขนานได
เวบบราวเซอรท าแบบน ตวอยางเชน link ทมความจ R ซงม 9 การ
เชอมตอ ถาแอพใหมตองการ 1 TCP จะไดรบท rate
R10 ถาแอพใหมตองการ 11 TCPs จะไดรบท R2
Transport Layer 3-110
Chapter 3 บทสรป
หลกการเบองหลงการใหบรการชนtransport multiplexing demultiplexing การสงขอมลแบบไวใจได การควบคมการไหลของขอมล การควบคมความคบคงของขอมล
กรณศกษาและการปฏบตบน internet UDP TCP
ถดไป ออกจากปลายทางของระบบ
เครอขาย (application transport layers)
เขาไปยงสแกนของเครอขาย
Transport Layer 3-17
UDP สวนหวของ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
ควายาวของ segment ของ UDP (หนวยเปน byte) รวมความยาว
ของ header ดวย
ไมตองสรางการเชอมตอ (ซงเปนสวนทเพมความลาชา)
งาย ไมซบซอน ไมตองมสถานะของการเชอมตอทผสงและผรบ
สวนหว (header) มขนาดเลก ไมมการควบคมความคบคง UDP
สามารถสงขอมลไดรวดเรวตามทตองการ
ท าไมถงตองม UDP
Transport Layer 3-18
checksum ของ UDP
ผสง จดการขอมลทงหมดทจะไปอยใน
segment รวมทงขอมลสวนหวตาง ๆ ทเปนล าดบของจ านวนเตม 16 บตหลายจ านวน
checksum ผลรวมของขอมลตาง ๆ ใน segment
ผสงใส checksum เขาไปใน field checksum ใน header ของ UDP
ผรบ ค านวณหา checksum ของ segment ทได
รบมาใหม ตรวจสอบคา checksum ใน field ของ
header กบ คาทเพงไดจากการค านวณ วาเทากนหรอไม ถาไม แสดงวาพบขอผดพลาด ถาใช แสดงวา ไมพบขอผดพลาด แต
จรง ๆ แลว กอาจจะมขอผดพลาดไดอยด (รายละเอยดจะกลาวภายหลง)
จดมงหมาย ตรวจสอบขอผดพลาด เชน bits ทคาโดนกลบใน segment
Transport Layer 3-19
Internet checksum ตวอยาง
ตวอยาง การบวก 16-bit integers สองจ านวน
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note ขณะทบวกตวเลข เมอ bitท 16 (bit ซายสด) มการทดเลข ใหน าเลขนนไปบวกกบ bit ท 1 แลวจง flip bit ทก bit เพอใหได checksum
Transport Layer 3-20
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-21
Principles of reliable data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
หลกการของความนาเชอถอ data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
หลกการของความนาเชอถอ data transfer
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
ส าคญในชน application transport link ตด top-10 ของหวขอทางดานเครอขาย
Transport Layer 3-24
Reliable data transfer เรมตน
ดานผสง ดานผรบ
rdt_send() ถกเรยกจากชนดานบน (เชน โดย app) ท าหนาทผานขอมลเพอใหขอมลถกสงไป
ยงชนดานบนของผรบ
udt_send() ถกเรยกโดย rdt เพอทจะโอนถาย packet ผานชองการ
สอสารท unreliable ไปยงผรบ
rdt_rcv() ถกเรยกโดย OS เมอ OS ไดรบ packet ทมาถงชองการสอสารดานผรบ
deliver_data() ถกเรยกโดย rdt เพอใหสงขอมลไปยงชนดานบน
Transport Layer 3-25
เราจะ คอย ๆ พฒนา protocol ส าหรบการโอนถายขอมลแบบ reliable หรอ reliable
data transfer protocol (rdt) ตอนน พจารณาเฉพาะการโอนถายขอมลแบบทางเดยวกอน
แตขอมลส าหรบการควบคม (control info) จะถกสงไปกลบทงสองทาง
ใช finite state machines (FSM) เพอก าหนดการกระท าของผสงและผรบ
state 1
state 2
เหตการณทท าใหเกดการเปลยนผานของ State การกระท าขณะเปลยนผาน State
สถานะ (state) เมออยใน state ปจจบน state ถดไปจะขนอยกบเหตการณทจะ
เกดขน ณ state ปจจบน
เหตการณ การกระท า
Reliable data transfer เรมตน
Transport Layer 3-26
rdt10 การโอนถายขอมลแบบ reliable ผานชองสญญาณแบบ reliable
สมมตให ชองทางทอยขางใตเปนชองทางทเชอถอได ไมมการผดพลาดของบต ไมมขอมลสญหาย
FSMs ส าหรบผสง และ ส าหรบผ รบ ผสงสงขอมลไปยงชนดานลาง ผรบรบขอมลจากชนดานลาง
รอรบการเรยกจากชน
ดานบน packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
รอรบการเรยกจากชน
ดานลาง
rdt_rcv(packet)
ผสง ผรบ
Transport Layer 3-27
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร
acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK
negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors
sender retransmits pkt on receipt of NAK
new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 ชองทางการสอสารทม bit errors
ปกตแลว มนษยใชวธการใดในการแกไข ldquoerrorsrdquo ระหวางการสนทนา
Transport Layer 3-28
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร การตอบรบ (acknowledgements (ACKs)) ผรบแจงผสงวาไดรบ packet แลว การตอบปฏเสธ (negative acknowledgements (NAKs)) ผรบแจงผสงวา packet ม
errors sender สงขอมลซ าอกครง เมอไดรบ NAK
กลไกทเพมขน in rdt20 (เพมจาก rdt10) การตรวจจบความผดพลาด การแจงกลบ (feedback) ขอมลส าหรบการควบคม (ACKNAK) จากผรบไปยงผสง
rdt20 ชองทางการสอสารทม bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 ขอก าหนดของ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
จะเกดอะไรขนถา ACKNAK เกดเสยหาย ผสงไมรวาผรบรบ pkt ครบถวน
หรอไม ไมควรสง pkt ซ าอกครง เพราะ
pkt ซ ากน
การจดการกบขอมลทซ าซอน ผสงจะสง packet อกครงถา
ACKNAK เกดเสยหาย เตมหมายเลข sequence ใหแตละ
packet ผรบตองทง packet ทซ ากน
stop and wait ผสงท าการสงpacketและรอใหผรบตอบกลบดวย ACKNAK กอนทจะสง packet ตอไป
Transport Layer 3-33
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Transport Layer 3-35
rdt21 อภปราย
ผสง ใสหมายเลข seq ในpacket หมายเลข seq (01) กพอ
นกสท าไม ตองตรวจสอบวา ACKNAK ท
ไดรบเสยไปหรอไม จ านวนหมายเลข seq ตองเปนสอง
เทาของจ านวนสถานะ เพราะผสงตองเกบสถานะเพอldquoจ าrdquo
วา pkt ถดไปจะตองมเลข seq 0 หรอ 1
ผรบ ตองตรวจสอบวา pkt ทไดรบซ ากบ
pkt ทไดรบกอนหนาหรอไม ผรบจะเกบสถานะทระบวา 0 หรอ 1
คอหมายเลข seq ทคาดวาจะได
ขอสงเกต ผรบไมสามารถรวา ACKNAK สดทายทผสงไดรบถกตองหรอไม
Transport Layer 3-36
rdt22 protocol ทไมตองใช NAK
ท างานเหมอนกบ rdt21 แตใชแค ACKs แทนทจะสง NAK ผรบสง ACK ส าหรบ pkt สดทายทไดรบถกตอง
ฝงรบจะตองรวมหมายเลข seq ของ pkt ทก าลงถก ACK ไปดวย
จะสง ACK ซ าไปทผสงถาไมไดรบ pkt ทมหมายเลข seq ทคาดหวง ผลลพธจะออกมาเหมอนกรณทสง NAK ผสงตองสง pkt ตวลาสดไปใหมอกครง
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 ชองสญญาณทมความผดพลาดและ pkt สญหาย
เพมขอสนนษฐาน ชองสญญาณสามารถสญเสยแพคเกจ (ไมวาจะเปนขอมลหรอ ACKs) ได กลไก checksum หมายเลข seq
ACKs และ การสงซ า สามารถชวย แตมนกยงไมใชทางออก
วธ ผสงรอ ACK กลบมาในชวงเวลาท ldquoสมเหตสมผลrdquo
สง pkt เดมไปใหมอกครงถาไมไดรบ ACK ภายในชวงเวลาน
ถา pkt (หรอ ACK) มาถงลาชา (ไมใชหายไป) การสงใหมกจะเปนการสงซ า ซง seq
ไดจดการเรองเกยวกบขอมลซ าได ผรบตองระบเลข seq ของ pkt ทก าลง
ถก ACKed
ตองใชการนบเวลาถอยหลง (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
ขณะ rdt30 ด าเนนการ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
ขณะ rdt30 ด าเนนการ
Transport Layer 3-42
ประสทธภาพของ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
บตแรกของแพคเกจกถกสง t = 0
ผสง ผรบ
RTT
บตสดทายของแพคเกจถกสง t = L R
บตแรกของแพคเกจมาถง บตสดทายของแพคเกจมาถง สง ACK
ไดรบ ACK สงแพคเกจตอไป t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols แบบ pipelined
pipelining ผสงสงหลาย packet ไปยงผรบทง ๆ ท pkt เหลานนยงไมไดรบการยนยนตอบรบ (not yet acked) ชวงของหมายเลข sequence จะตองเพมขน ตองพกขอมล (buffer) ทผสงและผรบ
protocols แบบ pipelined แบบทวไปมสองแบบ go-Back-N selective repeat
Transport Layer 3-45
Pipelining ชวยเพม utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols แบบ pipeline ภาพรวม
Go-back-N ผสงสามารถสงแพคเกจทไมยงถก
ack ไดไมเกน N แพคเกจใน pipeline
ผรบแคสง cumulative ack ไม ack packet ถามนกอใหเกด gap
ผสงจบเวลาส าหรบแพคเกจทสงไป
นานทสดทยงไมได ack เมอเวลาหมด ผสงจะสงแพคเกจ
ทงหมดทยงไมไดรบ ack อกครง
Selective Repeat ผสงสามารถสงแพคเกจทไมยงถก ack ได
ไมเกน N แพคเกจใน pipeline
ผรบจะตองสง ack กลบใหแตละแพคเกจ
ผสงจะจบเวลาส าหรบแตละแพคเกจท
ไมได ack เมอเวลาส าหรบแพคเกจใดหมด ผสงจะสง
เฉพาะแพคเกจนนเทานน
Transport Layer 3-47
Go-Back-N ผสง
หมายเลข seq (k bit) จะอยใน header ของ packet อนญาตใหขนาด ldquowindowrdquo (ของ pkt ทตดกนและยงไมถก ack) ไมเกน N
ACK(n) จะ ack แพคเกจทงหมดไปจนถงทมหมายเลข seq เทากบ n - ldquoการ ACK แบบรวม (cumulative ACK)rdquo อาจมการไดรบ ACKs หมายเลข seq เดมซ า (ดรายละเอยดดาน receiver)
มการจบเวลาส าหรบแพคเกจทเดนทางอย ซงเดนทางนานทสดและยงไมได ACK (pkt ทมหมายเลข seq นอยทสดใน window)
timeout(n) เวลาหมดท pkt n ผสงจะสง pkt n และ pkt ทงหมดใน window (ซงมหมายเลข seq สงกวา n) อกครง
Transport Layer 3-48
GBN FSM ดานผสงทเพมจากของเดม
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum
out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM ดานผรบทเพมจากของเดม
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
ผ รบ Ack แตละแพคเกจทไดรบมาถกตอง เกบ (buffer) แพคเกจ เทาทจ าเปน เพอทจะสงขอมลทเรยงล าดบแลว ไปยง layer
บนไดในทายทสด
ผสงแคสงแพคเกจซ าเฉพาะแพคเกจทไมไดรบ Ack เทานน ตวจบเวลา (ทางฝงผสง) จะจบเวลาของแตละแพคเกจทไมไดรบ Ack
Window ของผสง มหมายเลข seq อย N หมายเลขตดกน จ ากดหมายเลข seq ของแพตเกจทสงไปแลว และไมไดรบ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
ขอมลมาจาก layer ดานบน ถามหมายเลข seq วางใน window ให
สง pkt ได
timeout(n) สง pkt n ซ า จบเวลาใหม
ACK(n) in [sendbase sendbase+N] รวา ผรบไดรบ pkt n แลว ถา n เกดเปนหมายเลขแรกสดในหนาตาง
(n เทากบ sendbase) ทไมได ถก ack เลอน window ไปทางดานขวา โดยเลอนไปยงหมายเลขทไมไดถก ack
ผสง pkt n in [rcvbase rcvbase+N-1] สง ACK(n) ถาไมเรยงตามล าดบ buffer ถาตามล าดบ สง (รวมถงใหสง pkt ท
เรยงตามล าดบและอยในบฟเฟอร) เลอน window ไปทหมายเลข seq ถดไปของ pkt ทยงไมไดรบจากผสง
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise ทงไปไมตองสนใจ
ผรบ
Transport Layer 3-54
ขณะ Selective repeat ด าเนนการ
สง pkt0
sender receiver
รบ pkt0 สง ack0
รบ pkt1 สง ack1
รบ pkt3 buffer สง ack3 รบ ack0 สง pkt4
รบ ack1 สง pkt5
pkt 2 timeout send pkt2
X loss
รบ pkt4 buffer สง ack4
รบ pkt5 buffer สง ack5
รบ pkt2 deliver pkt2
pkt3 pkt4 pkt5 สง ack2
บนทก ack3 มาถงแลว
sender window (N=4)
บนทก ack4 มาถงแลว บนทก ack4 มาถงแลว
Q เกดอะไรขนเมอ ack2 มาถง
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
สง pkt1 สง pkt2
สง pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
ตวอยาง หมายเลข seq 0 1 2 3 ขนาดของ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
ผรบไมสามารถเหนดานผสงได พฤตกรรมผรบจะเหมอนกนทง 2 สถานการณ
มบางอยางทผด (มาก)
ผรบไมเหนถงความแตกตางของทง 2 เหตการณจ าลองน
ในเหตการณจ าลอง (b) ขอมลเกาทถกสงซ า เมอผรบรบมา จะนกวาเปนขอมลใหม
Q ขนาดของ seq กบขนาดของ
window เกยวของกนยงไงเพอทจะหลกเลยงปญหาในตวอยาง (b)
Transport Layer 3-56
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-57
TCP ภาพรวม RFCs 79311221323 2018 2581
ขอมลแบบสองทศทาง มการสงขอมลทงไปและกลบในการ
เชอมตอ (connection) เดยวกน MSS ขนาด segment ทใหญสดท
TCP จะรบได (Max Segment Size)
connection-oriented handshaking (การแลกเปลยนของ
ขอความควบคม) ตงคาสถานะตงตนใหผสงและผรบ กอนการแลกเปลยนขอความ
flow controlled ผสงจะไมสงขอมลเกนกวาทผรบจะรบ
ได
point-to-point (สถานทนง-ไป-สถานทนง) ผสงหนงคน ผรบหนงคน
สายขอมลเปนไบตทเรยงล าดบและขอมลไมสญหาย (reliable in-order byte steam) ไมม ldquoขอบเขตrdquo ของขอความ
(ขอความจะมาถงผรบตอเนองกน)
pipelined การควบคมความคบคงและการควบคม
อตราการไหลของ TCP จะก าหนดขนาดของ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG ขอมลเรงดวน (โดยทว ๆ ไป ไมถกใช)
ACK ACK valid
PSH ผลกขอมลใหชน app (โดยทว ๆ ไป ไมถกใช)
RST SYN FIN สรางการเชอตอ
(ค าสง setup teardown)
จ านวน bytes ท ผรบเตมใจจะรบ
นบโดยใช byte ของขอมล (ไมใช segment)
Internet checksum
(เหมอนใน UDP)
Transport Layer 3-59
TCP seq numbers ACKs
หมายเลข sequence เลขของ byte stream จะเปน byte
แรกของขอมลของ segment น acknowledgements เลข seq ของ byte ถดไปทอกดานหนง
คาดหวงวาจะได cumulative ACK (ACK แบบรวม)
Q ผรบจดการกบ segment ทมาถงไมเรยงล าดบอยางไร A TCP ไมมรายละเอยดสวนน ndash ขนอย
กบคนทจะมาเขยนโปรแกรม TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาเขามาถงผสง
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาออกจากผสง
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
เหตการณจ าลอง telnet อยางงาย
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q เราควรจะก าหนด time out ไวทเทาใด
มากกวาเวลาของ RTT แตเวลาของ RTT นนแปรปรวน
ก าหนดไวนอยเกนไป timeout กอนก าหนด ท าใหมการ retransmissions โดยไมจ าเปน
ก าหนดไวมากเกนไป ระบบตอบสนองตอการสญหายของ segment ชาเกนไป
Q จะประมาณเวลาของ RTT อยางไร
SampleRTT วดจากระยะเวลาตงแตเรมสง sengment จนกระทงไดรบACK ไมสนใจการ retransmissions
SampleRTT มคาแปรปรวน เราตองการประมาณเวลาของ RTT ให smooth กวา ใชคาเฉลยของคาหลาย ๆ คา ไมใชแค
เวลาของ SampleRTT ปจจบน
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
คาเฉลยของการเคลอนทถวงน าหนกแบบ exponential คา SampleRTT ทในอดตจะมผลตอ EstimatedRTT ลดลงแบบ exponentially โดยทวไปจะก าหนดคา = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
ชวงเวลาของ timeout EstimatedRTT บวกกบระยะเวลาทเผอเอาไว ยงคาของ EstimatedRTT ทแปรปรวนมากเทาไร -gt ระยะเวลาทเผอความมากขนตาม
มประเมนคาการเปลยนแปลงของ SampleRTT จาก EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoชวงเวลาทเผอrdquo
Transport Layer 3-64
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP สรางบรการแบบ reliable อยบนบรการของ IP ทเปนแบบ unreliable segments ถกสงแบบ pipeline cumulative acks ม timer ส าหรบสงใหมคาตวเดยว
TCP สง segment ใหมเมอ เหตการณ timeout ไดรบ acks ซ า ๆ กน
เรามาเรมตนพจารณาทางดานผสงของ TCP อยางงายกอน ยงไมตองสนใจ acks ซ า ยงไมตองสนใจการควบคม flow และ
ความคบคง
Transport Layer 3-66
เหตการณของ TCP sender
เมอไดขอมลจาก app สราง segment ดวยหมายเลข seq เลข seq คอหมายเลขของไบตแรก
ของขอมลในแตละ segment หาก timer ยงไมเคยถกตง จะเรม
ตงเวลา การตงเวลาเพอจบเวลาส าหรบ
segment เกาทสดยงไมไดรบ ack ชวงเวลาทหมดอาย
TimeOutInterval
timeout สงใหมเฉพาะ segment ทเกด
timeout ตงเวลานบใหม เมอไดรบ ack ถา ack เปน ack ของ segment
กอนหนายงไมไดรบ ack Update สงทรวา ถก ACK แลว เรมตงเวลานบ ถายงคงม segment
ทยงไมไดรบ acked
Transport Layer 3-67
ดานผสงของ TCP (อยางงาย)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
การสราง ACK ของ TCP [RFC 1122 RFC 2581]
เหตการณทผรบ เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ) โดยขอมลทงหมดจนถงเลข seq ทคาดหวงไว ถก ACK หมดแลว
เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ ท าให ไมม gap ใน segment ทไดมา) แตมบาง segment ยงไมได ACK
Segment มาถงแบบไมเรยงตามล าดบ โดยมเลข seq สงกวาทตองการ ท าใหม gap (ชองโหว) เกดขน Segment ท ามาถง ทจะเตมบางสวนหรอเตมเตมชองโหว
TCP receiver action อยาเพงสง ACK รออก segment นง โดยรอสก 500ms หากยงไมม segment มา กสง ACK สง ACK แบบรวม (cumulative) ไปทนทในครงเดยว ซงจะเปนการ Ack segment ทมาแบบเรยงตามล าดบทงสอง segments สง ACK ซ า ไปทนท โดยใสเลข seq ของ byte ทตองการ สง ACK แบบรวมทนท โดย segment ทจะ Ack เรมจากดานทนอยกวาของ gap
Transport Layer 3-71
TCP fast retransmit
ระยะเวลาในการ time-out มกจะคอนขางยาว (โดยเปรยบเทยบ) ท าใหใชเวลาคอนขางนานกอนทจะ
สง packet อกครง
แกโดย ตรวจสอบการสญเสย pack โดยดท ACKs ทซ า ๆ กน ผสงมกสง segment ตด ๆ กน ดงนน ถา segment หนงหายไป จง
เปนไปไดทจะม ACKs ซ า ๆ กนจ านวนมาก
ถาผสงไดรบ ACKs ส าหรบขอมลเดยวกน 3 ACKS (ACKs ทซ ากนสามครง) ผสงตองสง seq ทยงไมถก acked (ระบเลข seq ทเลกทสด) มแนวโนมวา segment ทยงไมถก
ack จะหายไปเลย ดงนน จงไมตองรอใหหมดเวลา
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-74
TCP flow control application
process
buffer ดานผรบ ของ TCP socket
TCP code
IP code
application
OS
protocol stack ดานผรบ
application ลบขอมลจาก buffer ของ TCP socket hellip
hellip ชากวา TCP สงขอมล ขนไป (ขณะทผสงก าลงจะสง)
from sender
ผรบสามารถควบคมผสงได ดงนน ผสงจะไมสงขอมลเรวไป หรอ มากเกนไปจนลน (Overflow) buffer ของผรบ
flow control
Transport Layer 3-75
การควบคมการไหลขอมลของ TCP
ขอมลทอย buffer
buffer สวนทยงวาง rwnd
RcvBuffer
สวนของขอมล (payload) ใน segment ของ TCP
ไปยง process ของ application
ผรบระบขนาดของ buffer ทวางไวใน field rwnd ทอยในสวนหวของ TCP ทจะสงไปยงผสง ผเขยนโปรแกรมระบขนาดของ RcvBuffer ได
โดยใช API ตงคา option ของ socket (คาเรมตนทวไปคอ 4096 ไบต)
ทกระบบปฏบตการจะปรบขนาด RcvBuffer อตโนมต
ผสงจ ากดจ านวนของขอมลทยงไมถก acked (ldquoอยในระหวางการเดนทางrdquo) ใหเทากบคา rwnd ของขอมลผรบ
เปนการรบประกนวา buffer ของผรบจะไมลน
การbuffer ในดานของผรบ
Transport Layer 3-76
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-77
การจดการกบการเชอมตอ กอนทจะมการแลกเปลยนขอมลกน ผสงและผรบตองตกลงกนกอน ตกลงรวมในการสรางการเชอมตอ (แตละคนจะรวาอกฝายอยากจะเชอมตอหรอไม) ตกลงคาพารามเตอรส าหรบการเชอมตอ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake จะท างานไดเสมอไปหรอไมบน network
ความลาชาอาจเปลยนไป ขอความอาจถกสงซ าตวอยาง (เชน
req_conn(x)) เนองจากการสญหายของขอมล
ขอมลอาจสลบกน ไมสามารถรไดวาอกฝงไดรบหรอไม
ไดรบขอมลอะไร
2-way handshake
มาคยกนเถอะ
ตกลง ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-79
เหตการณผดพลาดของ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-80
3-way handshake ของ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM ของ 3-way handshake ของ TCP
Transport Layer 3-82
TCP การหยดการเชอมตอ
client server เลกเชอมตอทแตละดานของการเชอมตอ โดยแตละดานจะสง TCP segment ดวย FIN bit = 1
ตอบกลบ FIN ดวย ACK ในขณะทรบ FIN ACK กสามารถรวมอยในแพคเกจทสง FIN มาไดดวย
แตละดานสามารถสง FIN ไดพรอม ๆ กน
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP การหยดการเชอมตอ
Transport Layer 3-84
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-85
ความคบคง ความหมายไมเปนทางการ ldquoเมอจ านวนคนสงมากเกนไป ก าลงสงขอมลมาก
เกนไปดวยอตราการสงเรวเกนกวาท Network จะรบไหวrdquo แตกตางจาก flow control ผลทอาจทเกดขนจากความคบคง
packets หาย (buffer ลนท routers) ลาชามาก (เขาควใน buffers ของ router)
เปนปญหาทคนสนใจตด 10 อนดบตนๆ
หลกการของการควบคมความคบคงของเครอขาย
Transport Layer 3-86
ตนเหตและผลของความคบคง เหตการณ 1
มผสงและผรบอยางละสองคน Router 1 ตว ไมจ ากด buffers ความจของ link R ไมมการสงขอมลซ า
อตราขอมลทสงส าเรจตอหนงการเชอมตอ R2
buffer ท link ขาออกม buffer ไมจกด
Host A
อตราการสงขอมลตนฉบบ lin
Host B
อตราขอมลทสงส าเรจ lout
R2
R2
lou
t
lin R2 de
lay
lin
ดเลยจะมากขนเมออตราสงขอมลตนฉบบเขาใกลความจของ link
Transport Layer 3-87
Router 1 ตว Buffer แตมขนาด buffer จ ากด ตองสง pkt ไปซ าถา pkt นน timeout
ขอมลเขาของชน application = ขอมลออกจากชน application lin = lout
ขอมลเขาของชน transport จะรวมทตองสงซ าดวย lin lin
Buffer ของ link ทใชรวมกนซงมขนาดจ ากด
Host A
lin ขอมลตนฉบบ
Host B
lout lin ขอมลตนฉบบบวกกบ ขอมลทตองสงซ า
lsquo
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-88
ในอดมคต สมมตผสงรความเปนไปในเครอขาย ผสงสงเฉพาะตอนทเราเตอรม buffer เหลออย
Buffer ของ link ทแชรอยางจ ากด
lout copy
ม buffer วาง
R2
R2
lou
t
lin
Host B
A
ตนเหตและผลของความคบคง เหตการณ 2
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-89
lout copy
no buffer space
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
A
Host B
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
เมอสงขอมลท R2 บาง packets ถกสงซ า แต goodput ยงคงมคาลเขาหา R2 (ท าไม)
A
Host B
ตนเหตและผลของความคบคง เหตการณ 2
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Host B
ในความเปนจรง มการสงซ า packets หายหรอตกหลนระหวาง
เสนทางเนองจาก buffers เตม แตบางครง Timer ของผสงหมดเวลาลง
กอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-92
R2
lou
t
ldquoผลrdquo ของความคบคง เพอใหไดขอมลในอตราทตองการ (goodput) ตองท างานมากขน (สงซ า) เมอตองสง packets ซ าโดยทไมจ าเปน link จะตองล าเลยงหลาย copy ของ
ขอมลเดยวกน ท าให goodput ลดลง
R2 lin
ตนเหตและผลของความคบคง เหตการณ 2
ในความเปนจรง มการสงซ า 1 packets หายหรอตกหลนระหวางเสนทางเนองจาก buffers เตม 2 แตบางครง Timer ของผสงหมดเวลาลงกอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Transport Layer 3-93
มผสงขอมลทง 4 โฮสต เสนทางตองผานหลายจด หมดเวลาสงไปขอมลซ า
Q เกดอะไรขนเมอ λin และ λinrsquo เพมขน
Buffer ของเสนทางการสงขอมลทใชรวมกนมขนาดจ ากด
Host A lout
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
Host B
Host C Host D
A เมอ λinrsquo ของขอมลเสนสแดงมขนาดเพมขน ขอมลใน
เสนสน าเงนกจะถก drop ท าให throughput ของ connection สน าเงนเหลอ 0
lin ขอมลตนฉบบ lin ขอมลตนฉบบ บวกกบ
ขอมลทตองสงซ า
Transport Layer 3-94
อกหนง ldquoผลเสยrdquo ของความคบคง เมอแพกเกจถกทงไป นนกเทากบวา ทรยากรเครอขาย (ทใชสงขอมลกอน
หนาทขอมลนจะถกทง) ถกใชไปอยางไรคา
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
แนวทางในการควบคมความคบคงของขอมล
2 แนวทางในการควบคมความคบคง
การควบคมความคบคงโดยใชแคเครองปลายทาง (end-end)
ไมมการแจงกลบ (feedback) จากเครอขาย
ความคบคงของเครอขายจะถกเดาโดยเครองทอยปลายทางทคอยสงเกต loss delay
เปนวธของ TCP
การควบคมความคบคงโดยใหอปกรณเครอขายชวย
routers จะท าการแจง feedback ไปทระบบปลายทาง ใช bit 1 bit เพอระบถงความ
แออด (SNA DECbit TCPIP ECN ATM) หรอ ระบอตราการสงทชดเจน
ส าหรบผสง
Transport Layer 3-96
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
ABR available bit rate ldquoบรการทมความยดหยนrdquo ถาเสนทางของผสง ldquoมขอมลนอยกวา
ความจะมากrdquo ผสงจะใชประโยชนจาก
bandwidth ทเหลออย ถา path ของผสงแออด
ผสงจะคอย ๆ ลดอตราสงใหเหลอเทาอตราการสงขนต าทรบประกนไว
RM (resource management) cells สงโดยผสง แทรก ๆ ไปกบ cell ทเปนขอมล bits ใน RM cell ถกตงคาโดย switches
(ldquoเครอขายคอยชวยrdquo) NI bit ไมเพมอตราการสง (ความแออด
ระดบกลาง) CI bit การบงบอกถงความแออด
ผรบไมแกคาใน bit นของ RM cells และสงไปใหผสง
Transport Layer 3-97
field ขอมล ER (explicit rate) ขนาด 2 byte ใน cell RM switch ทแออดอาจลดคา ER ใน cell ดงนน อตราทผสงจะสงขอมลจะเปนอตราการสงมากทสดท link ในเสนทางจะรองรบได
bit EFCI ใน cell ขอมล ถกตงคาไวท 1 ใน switch ทมขอมลแออด ถา cell ขอมลกอนหนา RM cell ถกตงคา EFCI ผรบจะตงคา bit CI ใน cell RM ท
สงกลบใหผสง
RM cell data cell
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
Transport Layer 3-98
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-99
การควบคมความคบคงของ TCP additive increase (เพมแบบบวก) multiplicative decrease (ลดแบบเทาตว)
วธ ผสงเพมอตราสง (window size) ควานหา bandwidth ทมใหใชได จนกวาการสญหายจะเกดขน additive increase เพม cwnd ทละ 1 MSS ทก ๆ RTT จนกวาจะ pkt จะหาย multiplicative decrease ตดลด cwnd เหลอครงเดยวหลงจากการสญหาย
cwnd
ขนา
ดของ co
nges
tion
wind
ow ของผส
งแบบ
TCP
พฤตกรรมของ AIMD เปน ลกษณะฟนเลอย หา bandwidth
ขนาด window เพมแบบบวก hellip hellip จนกวาจะเกดการสญหาย (จากนน ตดลงเหลอครงนง)
time
Transport Layer 3-100
ผสงจ ากดการสง
ขนาด cwnd จะเปลยนแปลงไปมา ขนกบความคบคงของเครอขายทผสงไดรมา
อตราการสง TCP อยางคราว ๆ สงขอมลจ านวน
cwnd bytes รอ ACKS เพอประมาณคา RTT จากนนสงไบตขอมลเพม
byte สดทายท ถก ACKed สง แตยงไมถก
ACK (ldquoอยระหวางการเดนทางrdquo)
byte สดทายทสงไป
cwnd
LastByteSent-
LastByteAcked lt cwnd
ชวงเลข sequence number ของผสง
rate ~ ~ cwnd
RTT bytessec
การควบคมความคบคงของ TCP รายละเอยด
Transport Layer 3-101
TCP Slow Start
เมอเรมการเชอมตอ เพมอตราการสงแบบยกก าลง (exponentially) จนกวาจะเจอกบ loss ครงแรก เรมตนขนาด cwnd = 1 MSS เพมขนาด cwnd หนงเทาตวทก ๆ RTT นนคอ โดยเพมขนาด cwnd ไป 1 MSS
ส าหรบทก ๆ ACK ทไดรบ
สรป อตราสงเรมแรกจะชาแตคาจะเพมแบบกระโดดขนอยางรวดเรว
Host A
RTT
Host B
time
Transport Layer 3-102
TCP การหา loss และการตอบสนอง
ถา loss ถกระบโดย timeout cwnd ถกตงไวท 1 MSS จากนนหนาตางจะเพมขนเปนเลขยกก าลง (exponential เหมอนใน slow start)
จนไปถงคา threshold จากนนจะเพมขนเปนเชงเสน
ถา loss ถกระบโดยไดรบ ACK ซ า 3 ACKs (3 duplicate acks) TCP RENO
ACKs ซ า ระบถงความสามารถการสง segments ของเครอขาย
cwnd ถกตดเหลอครงนงจากนนเพมขนแบบเชงเสน
TCP Tahoe จะตงคา cwnd เปน 1 เสมอ (ไมวาจะ timeout หรอ 3 dup acks)
Transport Layer 3-103
Q เมอไร TCP ควรจะเปลยนจากการเพมขนแบบ exponential เปนแบบเชงเสน
A เมอ cwnd ถกเพมเปน 12 ของ ldquoคาทมากทสดrdquo ของมนกอนจะเกด timeout
การด าเนนการ ตวแปร ssthresh ขณะเกด Loss ssthresh จะถก
ตงคาท 12 ของคา cwnd กอนเกดเหตแปปเดยว (คา cwnd ทมากทสดกอนเกดเหตการณ)
TCP จาก slow start เปน CA (Congestion Avoidance)
Transport Layer 3-104
สรป TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput ของ TCP
คาเฉลย throughput ของ TCP เปน function ของขนาดของ window และ RTT ไมสนใจ slow start สมมตวาขอมลถกสงตลอด
W ขนาดของ window (หนวยเปน bytes) การสญเสยทเกดขน คาเฉลยขนาดของ window (จ านวน byte ทเดนทางอย) คอ frac34 W คาเฉลยของ throughput คอ 34W ตอ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP ในอนาคต TCP ใน ldquopipes ทยาวและมความจสงrdquo
ตวอยาง 1500 byte segments 100ms RTT ตองการชองทางการสงขนาด 10 Gbps
requires W = 83333 in-flight segments ความเปนไปไดของการสญหายของในชองทางการสงขอมล L [Mathis 1997]
เพอทจะมชองทางการสงขนาด 10Gbps ตองมการสญหายของขอมลเพยงแค =
210-10 ndash นอยมาก ดงนน ตองม TCP รนใหมส าหรบการสงแบบความเรวสง
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
เปาหมายของ fairness ถาม TCP session จ านวน K session ใชทรพยากร bandwidth R รวมกน แตละ session ควรจะเฉลยทรพยากรเหมอนกนท RK
TCP connection 1
router คอขวด มความจ R
ความเสมอภาค (Fairness) ของ TCP
TCP connection 2
Transport Layer 3-108
ความเสมอภาคของ TCP คออะไร session 2 session แขงกนใชทรพยากร additive increase ใหความชนเสนเทากบ 1 (session ทง 2 คอย ๆ ได throughput เพมทละ
นด) multiplicative decrease ลด throughput ไปครงหนง
R
R
เสนระบแบนดวธทใชรวมเทากน
Throuput ของ การเชอมตอท 1
congestion avoidance (CA) additive increase สญเสย ลดขนาดของ window ลงไปครงนง
congestion avoidance (CA) additive increase
สญเสย ลดขนาดของ window ลงไปครงนง
Transport Layer 3-109
ความเสมอภาค (ตอ)
ความเสมอภาค และ UDP มลตมเดยแอพพลเคชนบอยครงไม
ใช TCP ไมตองการใหอตราการสงลดลงเพราะ
การควบคมความคบคง
มลตมเดยแอพพลเคชนจงใช UDP แทน สงเสยงวดโอดวยความเรวคงท ทน
ตอการสญเสยขอมล
ความเสมอภาค การเชอมตอ TCP แบบขนาน แอพพลเคชนสามารถทจะเปดหลายการ
เชอมตอระหวางเครอง 2 เครองแบบขนานได
เวบบราวเซอรท าแบบน ตวอยางเชน link ทมความจ R ซงม 9 การ
เชอมตอ ถาแอพใหมตองการ 1 TCP จะไดรบท rate
R10 ถาแอพใหมตองการ 11 TCPs จะไดรบท R2
Transport Layer 3-110
Chapter 3 บทสรป
หลกการเบองหลงการใหบรการชนtransport multiplexing demultiplexing การสงขอมลแบบไวใจได การควบคมการไหลของขอมล การควบคมความคบคงของขอมล
กรณศกษาและการปฏบตบน internet UDP TCP
ถดไป ออกจากปลายทางของระบบ
เครอขาย (application transport layers)
เขาไปยงสแกนของเครอขาย
Transport Layer 3-18
checksum ของ UDP
ผสง จดการขอมลทงหมดทจะไปอยใน
segment รวมทงขอมลสวนหวตาง ๆ ทเปนล าดบของจ านวนเตม 16 บตหลายจ านวน
checksum ผลรวมของขอมลตาง ๆ ใน segment
ผสงใส checksum เขาไปใน field checksum ใน header ของ UDP
ผรบ ค านวณหา checksum ของ segment ทได
รบมาใหม ตรวจสอบคา checksum ใน field ของ
header กบ คาทเพงไดจากการค านวณ วาเทากนหรอไม ถาไม แสดงวาพบขอผดพลาด ถาใช แสดงวา ไมพบขอผดพลาด แต
จรง ๆ แลว กอาจจะมขอผดพลาดไดอยด (รายละเอยดจะกลาวภายหลง)
จดมงหมาย ตรวจสอบขอผดพลาด เชน bits ทคาโดนกลบใน segment
Transport Layer 3-19
Internet checksum ตวอยาง
ตวอยาง การบวก 16-bit integers สองจ านวน
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note ขณะทบวกตวเลข เมอ bitท 16 (bit ซายสด) มการทดเลข ใหน าเลขนนไปบวกกบ bit ท 1 แลวจง flip bit ทก bit เพอใหได checksum
Transport Layer 3-20
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-21
Principles of reliable data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
หลกการของความนาเชอถอ data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
หลกการของความนาเชอถอ data transfer
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
ส าคญในชน application transport link ตด top-10 ของหวขอทางดานเครอขาย
Transport Layer 3-24
Reliable data transfer เรมตน
ดานผสง ดานผรบ
rdt_send() ถกเรยกจากชนดานบน (เชน โดย app) ท าหนาทผานขอมลเพอใหขอมลถกสงไป
ยงชนดานบนของผรบ
udt_send() ถกเรยกโดย rdt เพอทจะโอนถาย packet ผานชองการ
สอสารท unreliable ไปยงผรบ
rdt_rcv() ถกเรยกโดย OS เมอ OS ไดรบ packet ทมาถงชองการสอสารดานผรบ
deliver_data() ถกเรยกโดย rdt เพอใหสงขอมลไปยงชนดานบน
Transport Layer 3-25
เราจะ คอย ๆ พฒนา protocol ส าหรบการโอนถายขอมลแบบ reliable หรอ reliable
data transfer protocol (rdt) ตอนน พจารณาเฉพาะการโอนถายขอมลแบบทางเดยวกอน
แตขอมลส าหรบการควบคม (control info) จะถกสงไปกลบทงสองทาง
ใช finite state machines (FSM) เพอก าหนดการกระท าของผสงและผรบ
state 1
state 2
เหตการณทท าใหเกดการเปลยนผานของ State การกระท าขณะเปลยนผาน State
สถานะ (state) เมออยใน state ปจจบน state ถดไปจะขนอยกบเหตการณทจะ
เกดขน ณ state ปจจบน
เหตการณ การกระท า
Reliable data transfer เรมตน
Transport Layer 3-26
rdt10 การโอนถายขอมลแบบ reliable ผานชองสญญาณแบบ reliable
สมมตให ชองทางทอยขางใตเปนชองทางทเชอถอได ไมมการผดพลาดของบต ไมมขอมลสญหาย
FSMs ส าหรบผสง และ ส าหรบผ รบ ผสงสงขอมลไปยงชนดานลาง ผรบรบขอมลจากชนดานลาง
รอรบการเรยกจากชน
ดานบน packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
รอรบการเรยกจากชน
ดานลาง
rdt_rcv(packet)
ผสง ผรบ
Transport Layer 3-27
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร
acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK
negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors
sender retransmits pkt on receipt of NAK
new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 ชองทางการสอสารทม bit errors
ปกตแลว มนษยใชวธการใดในการแกไข ldquoerrorsrdquo ระหวางการสนทนา
Transport Layer 3-28
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร การตอบรบ (acknowledgements (ACKs)) ผรบแจงผสงวาไดรบ packet แลว การตอบปฏเสธ (negative acknowledgements (NAKs)) ผรบแจงผสงวา packet ม
errors sender สงขอมลซ าอกครง เมอไดรบ NAK
กลไกทเพมขน in rdt20 (เพมจาก rdt10) การตรวจจบความผดพลาด การแจงกลบ (feedback) ขอมลส าหรบการควบคม (ACKNAK) จากผรบไปยงผสง
rdt20 ชองทางการสอสารทม bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 ขอก าหนดของ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
จะเกดอะไรขนถา ACKNAK เกดเสยหาย ผสงไมรวาผรบรบ pkt ครบถวน
หรอไม ไมควรสง pkt ซ าอกครง เพราะ
pkt ซ ากน
การจดการกบขอมลทซ าซอน ผสงจะสง packet อกครงถา
ACKNAK เกดเสยหาย เตมหมายเลข sequence ใหแตละ
packet ผรบตองทง packet ทซ ากน
stop and wait ผสงท าการสงpacketและรอใหผรบตอบกลบดวย ACKNAK กอนทจะสง packet ตอไป
Transport Layer 3-33
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Transport Layer 3-35
rdt21 อภปราย
ผสง ใสหมายเลข seq ในpacket หมายเลข seq (01) กพอ
นกสท าไม ตองตรวจสอบวา ACKNAK ท
ไดรบเสยไปหรอไม จ านวนหมายเลข seq ตองเปนสอง
เทาของจ านวนสถานะ เพราะผสงตองเกบสถานะเพอldquoจ าrdquo
วา pkt ถดไปจะตองมเลข seq 0 หรอ 1
ผรบ ตองตรวจสอบวา pkt ทไดรบซ ากบ
pkt ทไดรบกอนหนาหรอไม ผรบจะเกบสถานะทระบวา 0 หรอ 1
คอหมายเลข seq ทคาดวาจะได
ขอสงเกต ผรบไมสามารถรวา ACKNAK สดทายทผสงไดรบถกตองหรอไม
Transport Layer 3-36
rdt22 protocol ทไมตองใช NAK
ท างานเหมอนกบ rdt21 แตใชแค ACKs แทนทจะสง NAK ผรบสง ACK ส าหรบ pkt สดทายทไดรบถกตอง
ฝงรบจะตองรวมหมายเลข seq ของ pkt ทก าลงถก ACK ไปดวย
จะสง ACK ซ าไปทผสงถาไมไดรบ pkt ทมหมายเลข seq ทคาดหวง ผลลพธจะออกมาเหมอนกรณทสง NAK ผสงตองสง pkt ตวลาสดไปใหมอกครง
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 ชองสญญาณทมความผดพลาดและ pkt สญหาย
เพมขอสนนษฐาน ชองสญญาณสามารถสญเสยแพคเกจ (ไมวาจะเปนขอมลหรอ ACKs) ได กลไก checksum หมายเลข seq
ACKs และ การสงซ า สามารถชวย แตมนกยงไมใชทางออก
วธ ผสงรอ ACK กลบมาในชวงเวลาท ldquoสมเหตสมผลrdquo
สง pkt เดมไปใหมอกครงถาไมไดรบ ACK ภายในชวงเวลาน
ถา pkt (หรอ ACK) มาถงลาชา (ไมใชหายไป) การสงใหมกจะเปนการสงซ า ซง seq
ไดจดการเรองเกยวกบขอมลซ าได ผรบตองระบเลข seq ของ pkt ทก าลง
ถก ACKed
ตองใชการนบเวลาถอยหลง (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
ขณะ rdt30 ด าเนนการ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
ขณะ rdt30 ด าเนนการ
Transport Layer 3-42
ประสทธภาพของ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
บตแรกของแพคเกจกถกสง t = 0
ผสง ผรบ
RTT
บตสดทายของแพคเกจถกสง t = L R
บตแรกของแพคเกจมาถง บตสดทายของแพคเกจมาถง สง ACK
ไดรบ ACK สงแพคเกจตอไป t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols แบบ pipelined
pipelining ผสงสงหลาย packet ไปยงผรบทง ๆ ท pkt เหลานนยงไมไดรบการยนยนตอบรบ (not yet acked) ชวงของหมายเลข sequence จะตองเพมขน ตองพกขอมล (buffer) ทผสงและผรบ
protocols แบบ pipelined แบบทวไปมสองแบบ go-Back-N selective repeat
Transport Layer 3-45
Pipelining ชวยเพม utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols แบบ pipeline ภาพรวม
Go-back-N ผสงสามารถสงแพคเกจทไมยงถก
ack ไดไมเกน N แพคเกจใน pipeline
ผรบแคสง cumulative ack ไม ack packet ถามนกอใหเกด gap
ผสงจบเวลาส าหรบแพคเกจทสงไป
นานทสดทยงไมได ack เมอเวลาหมด ผสงจะสงแพคเกจ
ทงหมดทยงไมไดรบ ack อกครง
Selective Repeat ผสงสามารถสงแพคเกจทไมยงถก ack ได
ไมเกน N แพคเกจใน pipeline
ผรบจะตองสง ack กลบใหแตละแพคเกจ
ผสงจะจบเวลาส าหรบแตละแพคเกจท
ไมได ack เมอเวลาส าหรบแพคเกจใดหมด ผสงจะสง
เฉพาะแพคเกจนนเทานน
Transport Layer 3-47
Go-Back-N ผสง
หมายเลข seq (k bit) จะอยใน header ของ packet อนญาตใหขนาด ldquowindowrdquo (ของ pkt ทตดกนและยงไมถก ack) ไมเกน N
ACK(n) จะ ack แพคเกจทงหมดไปจนถงทมหมายเลข seq เทากบ n - ldquoการ ACK แบบรวม (cumulative ACK)rdquo อาจมการไดรบ ACKs หมายเลข seq เดมซ า (ดรายละเอยดดาน receiver)
มการจบเวลาส าหรบแพคเกจทเดนทางอย ซงเดนทางนานทสดและยงไมได ACK (pkt ทมหมายเลข seq นอยทสดใน window)
timeout(n) เวลาหมดท pkt n ผสงจะสง pkt n และ pkt ทงหมดใน window (ซงมหมายเลข seq สงกวา n) อกครง
Transport Layer 3-48
GBN FSM ดานผสงทเพมจากของเดม
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum
out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM ดานผรบทเพมจากของเดม
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
ผ รบ Ack แตละแพคเกจทไดรบมาถกตอง เกบ (buffer) แพคเกจ เทาทจ าเปน เพอทจะสงขอมลทเรยงล าดบแลว ไปยง layer
บนไดในทายทสด
ผสงแคสงแพคเกจซ าเฉพาะแพคเกจทไมไดรบ Ack เทานน ตวจบเวลา (ทางฝงผสง) จะจบเวลาของแตละแพคเกจทไมไดรบ Ack
Window ของผสง มหมายเลข seq อย N หมายเลขตดกน จ ากดหมายเลข seq ของแพตเกจทสงไปแลว และไมไดรบ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
ขอมลมาจาก layer ดานบน ถามหมายเลข seq วางใน window ให
สง pkt ได
timeout(n) สง pkt n ซ า จบเวลาใหม
ACK(n) in [sendbase sendbase+N] รวา ผรบไดรบ pkt n แลว ถา n เกดเปนหมายเลขแรกสดในหนาตาง
(n เทากบ sendbase) ทไมได ถก ack เลอน window ไปทางดานขวา โดยเลอนไปยงหมายเลขทไมไดถก ack
ผสง pkt n in [rcvbase rcvbase+N-1] สง ACK(n) ถาไมเรยงตามล าดบ buffer ถาตามล าดบ สง (รวมถงใหสง pkt ท
เรยงตามล าดบและอยในบฟเฟอร) เลอน window ไปทหมายเลข seq ถดไปของ pkt ทยงไมไดรบจากผสง
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise ทงไปไมตองสนใจ
ผรบ
Transport Layer 3-54
ขณะ Selective repeat ด าเนนการ
สง pkt0
sender receiver
รบ pkt0 สง ack0
รบ pkt1 สง ack1
รบ pkt3 buffer สง ack3 รบ ack0 สง pkt4
รบ ack1 สง pkt5
pkt 2 timeout send pkt2
X loss
รบ pkt4 buffer สง ack4
รบ pkt5 buffer สง ack5
รบ pkt2 deliver pkt2
pkt3 pkt4 pkt5 สง ack2
บนทก ack3 มาถงแลว
sender window (N=4)
บนทก ack4 มาถงแลว บนทก ack4 มาถงแลว
Q เกดอะไรขนเมอ ack2 มาถง
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
สง pkt1 สง pkt2
สง pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
ตวอยาง หมายเลข seq 0 1 2 3 ขนาดของ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
ผรบไมสามารถเหนดานผสงได พฤตกรรมผรบจะเหมอนกนทง 2 สถานการณ
มบางอยางทผด (มาก)
ผรบไมเหนถงความแตกตางของทง 2 เหตการณจ าลองน
ในเหตการณจ าลอง (b) ขอมลเกาทถกสงซ า เมอผรบรบมา จะนกวาเปนขอมลใหม
Q ขนาดของ seq กบขนาดของ
window เกยวของกนยงไงเพอทจะหลกเลยงปญหาในตวอยาง (b)
Transport Layer 3-56
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-57
TCP ภาพรวม RFCs 79311221323 2018 2581
ขอมลแบบสองทศทาง มการสงขอมลทงไปและกลบในการ
เชอมตอ (connection) เดยวกน MSS ขนาด segment ทใหญสดท
TCP จะรบได (Max Segment Size)
connection-oriented handshaking (การแลกเปลยนของ
ขอความควบคม) ตงคาสถานะตงตนใหผสงและผรบ กอนการแลกเปลยนขอความ
flow controlled ผสงจะไมสงขอมลเกนกวาทผรบจะรบ
ได
point-to-point (สถานทนง-ไป-สถานทนง) ผสงหนงคน ผรบหนงคน
สายขอมลเปนไบตทเรยงล าดบและขอมลไมสญหาย (reliable in-order byte steam) ไมม ldquoขอบเขตrdquo ของขอความ
(ขอความจะมาถงผรบตอเนองกน)
pipelined การควบคมความคบคงและการควบคม
อตราการไหลของ TCP จะก าหนดขนาดของ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG ขอมลเรงดวน (โดยทว ๆ ไป ไมถกใช)
ACK ACK valid
PSH ผลกขอมลใหชน app (โดยทว ๆ ไป ไมถกใช)
RST SYN FIN สรางการเชอตอ
(ค าสง setup teardown)
จ านวน bytes ท ผรบเตมใจจะรบ
นบโดยใช byte ของขอมล (ไมใช segment)
Internet checksum
(เหมอนใน UDP)
Transport Layer 3-59
TCP seq numbers ACKs
หมายเลข sequence เลขของ byte stream จะเปน byte
แรกของขอมลของ segment น acknowledgements เลข seq ของ byte ถดไปทอกดานหนง
คาดหวงวาจะได cumulative ACK (ACK แบบรวม)
Q ผรบจดการกบ segment ทมาถงไมเรยงล าดบอยางไร A TCP ไมมรายละเอยดสวนน ndash ขนอย
กบคนทจะมาเขยนโปรแกรม TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาเขามาถงผสง
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาออกจากผสง
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
เหตการณจ าลอง telnet อยางงาย
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q เราควรจะก าหนด time out ไวทเทาใด
มากกวาเวลาของ RTT แตเวลาของ RTT นนแปรปรวน
ก าหนดไวนอยเกนไป timeout กอนก าหนด ท าใหมการ retransmissions โดยไมจ าเปน
ก าหนดไวมากเกนไป ระบบตอบสนองตอการสญหายของ segment ชาเกนไป
Q จะประมาณเวลาของ RTT อยางไร
SampleRTT วดจากระยะเวลาตงแตเรมสง sengment จนกระทงไดรบACK ไมสนใจการ retransmissions
SampleRTT มคาแปรปรวน เราตองการประมาณเวลาของ RTT ให smooth กวา ใชคาเฉลยของคาหลาย ๆ คา ไมใชแค
เวลาของ SampleRTT ปจจบน
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
คาเฉลยของการเคลอนทถวงน าหนกแบบ exponential คา SampleRTT ทในอดตจะมผลตอ EstimatedRTT ลดลงแบบ exponentially โดยทวไปจะก าหนดคา = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
ชวงเวลาของ timeout EstimatedRTT บวกกบระยะเวลาทเผอเอาไว ยงคาของ EstimatedRTT ทแปรปรวนมากเทาไร -gt ระยะเวลาทเผอความมากขนตาม
มประเมนคาการเปลยนแปลงของ SampleRTT จาก EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoชวงเวลาทเผอrdquo
Transport Layer 3-64
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP สรางบรการแบบ reliable อยบนบรการของ IP ทเปนแบบ unreliable segments ถกสงแบบ pipeline cumulative acks ม timer ส าหรบสงใหมคาตวเดยว
TCP สง segment ใหมเมอ เหตการณ timeout ไดรบ acks ซ า ๆ กน
เรามาเรมตนพจารณาทางดานผสงของ TCP อยางงายกอน ยงไมตองสนใจ acks ซ า ยงไมตองสนใจการควบคม flow และ
ความคบคง
Transport Layer 3-66
เหตการณของ TCP sender
เมอไดขอมลจาก app สราง segment ดวยหมายเลข seq เลข seq คอหมายเลขของไบตแรก
ของขอมลในแตละ segment หาก timer ยงไมเคยถกตง จะเรม
ตงเวลา การตงเวลาเพอจบเวลาส าหรบ
segment เกาทสดยงไมไดรบ ack ชวงเวลาทหมดอาย
TimeOutInterval
timeout สงใหมเฉพาะ segment ทเกด
timeout ตงเวลานบใหม เมอไดรบ ack ถา ack เปน ack ของ segment
กอนหนายงไมไดรบ ack Update สงทรวา ถก ACK แลว เรมตงเวลานบ ถายงคงม segment
ทยงไมไดรบ acked
Transport Layer 3-67
ดานผสงของ TCP (อยางงาย)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
การสราง ACK ของ TCP [RFC 1122 RFC 2581]
เหตการณทผรบ เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ) โดยขอมลทงหมดจนถงเลข seq ทคาดหวงไว ถก ACK หมดแลว
เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ ท าให ไมม gap ใน segment ทไดมา) แตมบาง segment ยงไมได ACK
Segment มาถงแบบไมเรยงตามล าดบ โดยมเลข seq สงกวาทตองการ ท าใหม gap (ชองโหว) เกดขน Segment ท ามาถง ทจะเตมบางสวนหรอเตมเตมชองโหว
TCP receiver action อยาเพงสง ACK รออก segment นง โดยรอสก 500ms หากยงไมม segment มา กสง ACK สง ACK แบบรวม (cumulative) ไปทนทในครงเดยว ซงจะเปนการ Ack segment ทมาแบบเรยงตามล าดบทงสอง segments สง ACK ซ า ไปทนท โดยใสเลข seq ของ byte ทตองการ สง ACK แบบรวมทนท โดย segment ทจะ Ack เรมจากดานทนอยกวาของ gap
Transport Layer 3-71
TCP fast retransmit
ระยะเวลาในการ time-out มกจะคอนขางยาว (โดยเปรยบเทยบ) ท าใหใชเวลาคอนขางนานกอนทจะ
สง packet อกครง
แกโดย ตรวจสอบการสญเสย pack โดยดท ACKs ทซ า ๆ กน ผสงมกสง segment ตด ๆ กน ดงนน ถา segment หนงหายไป จง
เปนไปไดทจะม ACKs ซ า ๆ กนจ านวนมาก
ถาผสงไดรบ ACKs ส าหรบขอมลเดยวกน 3 ACKS (ACKs ทซ ากนสามครง) ผสงตองสง seq ทยงไมถก acked (ระบเลข seq ทเลกทสด) มแนวโนมวา segment ทยงไมถก
ack จะหายไปเลย ดงนน จงไมตองรอใหหมดเวลา
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-74
TCP flow control application
process
buffer ดานผรบ ของ TCP socket
TCP code
IP code
application
OS
protocol stack ดานผรบ
application ลบขอมลจาก buffer ของ TCP socket hellip
hellip ชากวา TCP สงขอมล ขนไป (ขณะทผสงก าลงจะสง)
from sender
ผรบสามารถควบคมผสงได ดงนน ผสงจะไมสงขอมลเรวไป หรอ มากเกนไปจนลน (Overflow) buffer ของผรบ
flow control
Transport Layer 3-75
การควบคมการไหลขอมลของ TCP
ขอมลทอย buffer
buffer สวนทยงวาง rwnd
RcvBuffer
สวนของขอมล (payload) ใน segment ของ TCP
ไปยง process ของ application
ผรบระบขนาดของ buffer ทวางไวใน field rwnd ทอยในสวนหวของ TCP ทจะสงไปยงผสง ผเขยนโปรแกรมระบขนาดของ RcvBuffer ได
โดยใช API ตงคา option ของ socket (คาเรมตนทวไปคอ 4096 ไบต)
ทกระบบปฏบตการจะปรบขนาด RcvBuffer อตโนมต
ผสงจ ากดจ านวนของขอมลทยงไมถก acked (ldquoอยในระหวางการเดนทางrdquo) ใหเทากบคา rwnd ของขอมลผรบ
เปนการรบประกนวา buffer ของผรบจะไมลน
การbuffer ในดานของผรบ
Transport Layer 3-76
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-77
การจดการกบการเชอมตอ กอนทจะมการแลกเปลยนขอมลกน ผสงและผรบตองตกลงกนกอน ตกลงรวมในการสรางการเชอมตอ (แตละคนจะรวาอกฝายอยากจะเชอมตอหรอไม) ตกลงคาพารามเตอรส าหรบการเชอมตอ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake จะท างานไดเสมอไปหรอไมบน network
ความลาชาอาจเปลยนไป ขอความอาจถกสงซ าตวอยาง (เชน
req_conn(x)) เนองจากการสญหายของขอมล
ขอมลอาจสลบกน ไมสามารถรไดวาอกฝงไดรบหรอไม
ไดรบขอมลอะไร
2-way handshake
มาคยกนเถอะ
ตกลง ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-79
เหตการณผดพลาดของ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-80
3-way handshake ของ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM ของ 3-way handshake ของ TCP
Transport Layer 3-82
TCP การหยดการเชอมตอ
client server เลกเชอมตอทแตละดานของการเชอมตอ โดยแตละดานจะสง TCP segment ดวย FIN bit = 1
ตอบกลบ FIN ดวย ACK ในขณะทรบ FIN ACK กสามารถรวมอยในแพคเกจทสง FIN มาไดดวย
แตละดานสามารถสง FIN ไดพรอม ๆ กน
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP การหยดการเชอมตอ
Transport Layer 3-84
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-85
ความคบคง ความหมายไมเปนทางการ ldquoเมอจ านวนคนสงมากเกนไป ก าลงสงขอมลมาก
เกนไปดวยอตราการสงเรวเกนกวาท Network จะรบไหวrdquo แตกตางจาก flow control ผลทอาจทเกดขนจากความคบคง
packets หาย (buffer ลนท routers) ลาชามาก (เขาควใน buffers ของ router)
เปนปญหาทคนสนใจตด 10 อนดบตนๆ
หลกการของการควบคมความคบคงของเครอขาย
Transport Layer 3-86
ตนเหตและผลของความคบคง เหตการณ 1
มผสงและผรบอยางละสองคน Router 1 ตว ไมจ ากด buffers ความจของ link R ไมมการสงขอมลซ า
อตราขอมลทสงส าเรจตอหนงการเชอมตอ R2
buffer ท link ขาออกม buffer ไมจกด
Host A
อตราการสงขอมลตนฉบบ lin
Host B
อตราขอมลทสงส าเรจ lout
R2
R2
lou
t
lin R2 de
lay
lin
ดเลยจะมากขนเมออตราสงขอมลตนฉบบเขาใกลความจของ link
Transport Layer 3-87
Router 1 ตว Buffer แตมขนาด buffer จ ากด ตองสง pkt ไปซ าถา pkt นน timeout
ขอมลเขาของชน application = ขอมลออกจากชน application lin = lout
ขอมลเขาของชน transport จะรวมทตองสงซ าดวย lin lin
Buffer ของ link ทใชรวมกนซงมขนาดจ ากด
Host A
lin ขอมลตนฉบบ
Host B
lout lin ขอมลตนฉบบบวกกบ ขอมลทตองสงซ า
lsquo
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-88
ในอดมคต สมมตผสงรความเปนไปในเครอขาย ผสงสงเฉพาะตอนทเราเตอรม buffer เหลออย
Buffer ของ link ทแชรอยางจ ากด
lout copy
ม buffer วาง
R2
R2
lou
t
lin
Host B
A
ตนเหตและผลของความคบคง เหตการณ 2
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-89
lout copy
no buffer space
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
A
Host B
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
เมอสงขอมลท R2 บาง packets ถกสงซ า แต goodput ยงคงมคาลเขาหา R2 (ท าไม)
A
Host B
ตนเหตและผลของความคบคง เหตการณ 2
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Host B
ในความเปนจรง มการสงซ า packets หายหรอตกหลนระหวาง
เสนทางเนองจาก buffers เตม แตบางครง Timer ของผสงหมดเวลาลง
กอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-92
R2
lou
t
ldquoผลrdquo ของความคบคง เพอใหไดขอมลในอตราทตองการ (goodput) ตองท างานมากขน (สงซ า) เมอตองสง packets ซ าโดยทไมจ าเปน link จะตองล าเลยงหลาย copy ของ
ขอมลเดยวกน ท าให goodput ลดลง
R2 lin
ตนเหตและผลของความคบคง เหตการณ 2
ในความเปนจรง มการสงซ า 1 packets หายหรอตกหลนระหวางเสนทางเนองจาก buffers เตม 2 แตบางครง Timer ของผสงหมดเวลาลงกอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Transport Layer 3-93
มผสงขอมลทง 4 โฮสต เสนทางตองผานหลายจด หมดเวลาสงไปขอมลซ า
Q เกดอะไรขนเมอ λin และ λinrsquo เพมขน
Buffer ของเสนทางการสงขอมลทใชรวมกนมขนาดจ ากด
Host A lout
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
Host B
Host C Host D
A เมอ λinrsquo ของขอมลเสนสแดงมขนาดเพมขน ขอมลใน
เสนสน าเงนกจะถก drop ท าให throughput ของ connection สน าเงนเหลอ 0
lin ขอมลตนฉบบ lin ขอมลตนฉบบ บวกกบ
ขอมลทตองสงซ า
Transport Layer 3-94
อกหนง ldquoผลเสยrdquo ของความคบคง เมอแพกเกจถกทงไป นนกเทากบวา ทรยากรเครอขาย (ทใชสงขอมลกอน
หนาทขอมลนจะถกทง) ถกใชไปอยางไรคา
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
แนวทางในการควบคมความคบคงของขอมล
2 แนวทางในการควบคมความคบคง
การควบคมความคบคงโดยใชแคเครองปลายทาง (end-end)
ไมมการแจงกลบ (feedback) จากเครอขาย
ความคบคงของเครอขายจะถกเดาโดยเครองทอยปลายทางทคอยสงเกต loss delay
เปนวธของ TCP
การควบคมความคบคงโดยใหอปกรณเครอขายชวย
routers จะท าการแจง feedback ไปทระบบปลายทาง ใช bit 1 bit เพอระบถงความ
แออด (SNA DECbit TCPIP ECN ATM) หรอ ระบอตราการสงทชดเจน
ส าหรบผสง
Transport Layer 3-96
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
ABR available bit rate ldquoบรการทมความยดหยนrdquo ถาเสนทางของผสง ldquoมขอมลนอยกวา
ความจะมากrdquo ผสงจะใชประโยชนจาก
bandwidth ทเหลออย ถา path ของผสงแออด
ผสงจะคอย ๆ ลดอตราสงใหเหลอเทาอตราการสงขนต าทรบประกนไว
RM (resource management) cells สงโดยผสง แทรก ๆ ไปกบ cell ทเปนขอมล bits ใน RM cell ถกตงคาโดย switches
(ldquoเครอขายคอยชวยrdquo) NI bit ไมเพมอตราการสง (ความแออด
ระดบกลาง) CI bit การบงบอกถงความแออด
ผรบไมแกคาใน bit นของ RM cells และสงไปใหผสง
Transport Layer 3-97
field ขอมล ER (explicit rate) ขนาด 2 byte ใน cell RM switch ทแออดอาจลดคา ER ใน cell ดงนน อตราทผสงจะสงขอมลจะเปนอตราการสงมากทสดท link ในเสนทางจะรองรบได
bit EFCI ใน cell ขอมล ถกตงคาไวท 1 ใน switch ทมขอมลแออด ถา cell ขอมลกอนหนา RM cell ถกตงคา EFCI ผรบจะตงคา bit CI ใน cell RM ท
สงกลบใหผสง
RM cell data cell
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
Transport Layer 3-98
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-99
การควบคมความคบคงของ TCP additive increase (เพมแบบบวก) multiplicative decrease (ลดแบบเทาตว)
วธ ผสงเพมอตราสง (window size) ควานหา bandwidth ทมใหใชได จนกวาการสญหายจะเกดขน additive increase เพม cwnd ทละ 1 MSS ทก ๆ RTT จนกวาจะ pkt จะหาย multiplicative decrease ตดลด cwnd เหลอครงเดยวหลงจากการสญหาย
cwnd
ขนา
ดของ co
nges
tion
wind
ow ของผส
งแบบ
TCP
พฤตกรรมของ AIMD เปน ลกษณะฟนเลอย หา bandwidth
ขนาด window เพมแบบบวก hellip hellip จนกวาจะเกดการสญหาย (จากนน ตดลงเหลอครงนง)
time
Transport Layer 3-100
ผสงจ ากดการสง
ขนาด cwnd จะเปลยนแปลงไปมา ขนกบความคบคงของเครอขายทผสงไดรมา
อตราการสง TCP อยางคราว ๆ สงขอมลจ านวน
cwnd bytes รอ ACKS เพอประมาณคา RTT จากนนสงไบตขอมลเพม
byte สดทายท ถก ACKed สง แตยงไมถก
ACK (ldquoอยระหวางการเดนทางrdquo)
byte สดทายทสงไป
cwnd
LastByteSent-
LastByteAcked lt cwnd
ชวงเลข sequence number ของผสง
rate ~ ~ cwnd
RTT bytessec
การควบคมความคบคงของ TCP รายละเอยด
Transport Layer 3-101
TCP Slow Start
เมอเรมการเชอมตอ เพมอตราการสงแบบยกก าลง (exponentially) จนกวาจะเจอกบ loss ครงแรก เรมตนขนาด cwnd = 1 MSS เพมขนาด cwnd หนงเทาตวทก ๆ RTT นนคอ โดยเพมขนาด cwnd ไป 1 MSS
ส าหรบทก ๆ ACK ทไดรบ
สรป อตราสงเรมแรกจะชาแตคาจะเพมแบบกระโดดขนอยางรวดเรว
Host A
RTT
Host B
time
Transport Layer 3-102
TCP การหา loss และการตอบสนอง
ถา loss ถกระบโดย timeout cwnd ถกตงไวท 1 MSS จากนนหนาตางจะเพมขนเปนเลขยกก าลง (exponential เหมอนใน slow start)
จนไปถงคา threshold จากนนจะเพมขนเปนเชงเสน
ถา loss ถกระบโดยไดรบ ACK ซ า 3 ACKs (3 duplicate acks) TCP RENO
ACKs ซ า ระบถงความสามารถการสง segments ของเครอขาย
cwnd ถกตดเหลอครงนงจากนนเพมขนแบบเชงเสน
TCP Tahoe จะตงคา cwnd เปน 1 เสมอ (ไมวาจะ timeout หรอ 3 dup acks)
Transport Layer 3-103
Q เมอไร TCP ควรจะเปลยนจากการเพมขนแบบ exponential เปนแบบเชงเสน
A เมอ cwnd ถกเพมเปน 12 ของ ldquoคาทมากทสดrdquo ของมนกอนจะเกด timeout
การด าเนนการ ตวแปร ssthresh ขณะเกด Loss ssthresh จะถก
ตงคาท 12 ของคา cwnd กอนเกดเหตแปปเดยว (คา cwnd ทมากทสดกอนเกดเหตการณ)
TCP จาก slow start เปน CA (Congestion Avoidance)
Transport Layer 3-104
สรป TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput ของ TCP
คาเฉลย throughput ของ TCP เปน function ของขนาดของ window และ RTT ไมสนใจ slow start สมมตวาขอมลถกสงตลอด
W ขนาดของ window (หนวยเปน bytes) การสญเสยทเกดขน คาเฉลยขนาดของ window (จ านวน byte ทเดนทางอย) คอ frac34 W คาเฉลยของ throughput คอ 34W ตอ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP ในอนาคต TCP ใน ldquopipes ทยาวและมความจสงrdquo
ตวอยาง 1500 byte segments 100ms RTT ตองการชองทางการสงขนาด 10 Gbps
requires W = 83333 in-flight segments ความเปนไปไดของการสญหายของในชองทางการสงขอมล L [Mathis 1997]
เพอทจะมชองทางการสงขนาด 10Gbps ตองมการสญหายของขอมลเพยงแค =
210-10 ndash นอยมาก ดงนน ตองม TCP รนใหมส าหรบการสงแบบความเรวสง
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
เปาหมายของ fairness ถาม TCP session จ านวน K session ใชทรพยากร bandwidth R รวมกน แตละ session ควรจะเฉลยทรพยากรเหมอนกนท RK
TCP connection 1
router คอขวด มความจ R
ความเสมอภาค (Fairness) ของ TCP
TCP connection 2
Transport Layer 3-108
ความเสมอภาคของ TCP คออะไร session 2 session แขงกนใชทรพยากร additive increase ใหความชนเสนเทากบ 1 (session ทง 2 คอย ๆ ได throughput เพมทละ
นด) multiplicative decrease ลด throughput ไปครงหนง
R
R
เสนระบแบนดวธทใชรวมเทากน
Throuput ของ การเชอมตอท 1
congestion avoidance (CA) additive increase สญเสย ลดขนาดของ window ลงไปครงนง
congestion avoidance (CA) additive increase
สญเสย ลดขนาดของ window ลงไปครงนง
Transport Layer 3-109
ความเสมอภาค (ตอ)
ความเสมอภาค และ UDP มลตมเดยแอพพลเคชนบอยครงไม
ใช TCP ไมตองการใหอตราการสงลดลงเพราะ
การควบคมความคบคง
มลตมเดยแอพพลเคชนจงใช UDP แทน สงเสยงวดโอดวยความเรวคงท ทน
ตอการสญเสยขอมล
ความเสมอภาค การเชอมตอ TCP แบบขนาน แอพพลเคชนสามารถทจะเปดหลายการ
เชอมตอระหวางเครอง 2 เครองแบบขนานได
เวบบราวเซอรท าแบบน ตวอยางเชน link ทมความจ R ซงม 9 การ
เชอมตอ ถาแอพใหมตองการ 1 TCP จะไดรบท rate
R10 ถาแอพใหมตองการ 11 TCPs จะไดรบท R2
Transport Layer 3-110
Chapter 3 บทสรป
หลกการเบองหลงการใหบรการชนtransport multiplexing demultiplexing การสงขอมลแบบไวใจได การควบคมการไหลของขอมล การควบคมความคบคงของขอมล
กรณศกษาและการปฏบตบน internet UDP TCP
ถดไป ออกจากปลายทางของระบบ
เครอขาย (application transport layers)
เขาไปยงสแกนของเครอขาย
Transport Layer 3-19
Internet checksum ตวอยาง
ตวอยาง การบวก 16-bit integers สองจ านวน
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note ขณะทบวกตวเลข เมอ bitท 16 (bit ซายสด) มการทดเลข ใหน าเลขนนไปบวกกบ bit ท 1 แลวจง flip bit ทก bit เพอใหได checksum
Transport Layer 3-20
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-21
Principles of reliable data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
หลกการของความนาเชอถอ data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
หลกการของความนาเชอถอ data transfer
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
ส าคญในชน application transport link ตด top-10 ของหวขอทางดานเครอขาย
Transport Layer 3-24
Reliable data transfer เรมตน
ดานผสง ดานผรบ
rdt_send() ถกเรยกจากชนดานบน (เชน โดย app) ท าหนาทผานขอมลเพอใหขอมลถกสงไป
ยงชนดานบนของผรบ
udt_send() ถกเรยกโดย rdt เพอทจะโอนถาย packet ผานชองการ
สอสารท unreliable ไปยงผรบ
rdt_rcv() ถกเรยกโดย OS เมอ OS ไดรบ packet ทมาถงชองการสอสารดานผรบ
deliver_data() ถกเรยกโดย rdt เพอใหสงขอมลไปยงชนดานบน
Transport Layer 3-25
เราจะ คอย ๆ พฒนา protocol ส าหรบการโอนถายขอมลแบบ reliable หรอ reliable
data transfer protocol (rdt) ตอนน พจารณาเฉพาะการโอนถายขอมลแบบทางเดยวกอน
แตขอมลส าหรบการควบคม (control info) จะถกสงไปกลบทงสองทาง
ใช finite state machines (FSM) เพอก าหนดการกระท าของผสงและผรบ
state 1
state 2
เหตการณทท าใหเกดการเปลยนผานของ State การกระท าขณะเปลยนผาน State
สถานะ (state) เมออยใน state ปจจบน state ถดไปจะขนอยกบเหตการณทจะ
เกดขน ณ state ปจจบน
เหตการณ การกระท า
Reliable data transfer เรมตน
Transport Layer 3-26
rdt10 การโอนถายขอมลแบบ reliable ผานชองสญญาณแบบ reliable
สมมตให ชองทางทอยขางใตเปนชองทางทเชอถอได ไมมการผดพลาดของบต ไมมขอมลสญหาย
FSMs ส าหรบผสง และ ส าหรบผ รบ ผสงสงขอมลไปยงชนดานลาง ผรบรบขอมลจากชนดานลาง
รอรบการเรยกจากชน
ดานบน packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
รอรบการเรยกจากชน
ดานลาง
rdt_rcv(packet)
ผสง ผรบ
Transport Layer 3-27
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร
acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK
negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors
sender retransmits pkt on receipt of NAK
new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 ชองทางการสอสารทม bit errors
ปกตแลว มนษยใชวธการใดในการแกไข ldquoerrorsrdquo ระหวางการสนทนา
Transport Layer 3-28
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร การตอบรบ (acknowledgements (ACKs)) ผรบแจงผสงวาไดรบ packet แลว การตอบปฏเสธ (negative acknowledgements (NAKs)) ผรบแจงผสงวา packet ม
errors sender สงขอมลซ าอกครง เมอไดรบ NAK
กลไกทเพมขน in rdt20 (เพมจาก rdt10) การตรวจจบความผดพลาด การแจงกลบ (feedback) ขอมลส าหรบการควบคม (ACKNAK) จากผรบไปยงผสง
rdt20 ชองทางการสอสารทม bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 ขอก าหนดของ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
จะเกดอะไรขนถา ACKNAK เกดเสยหาย ผสงไมรวาผรบรบ pkt ครบถวน
หรอไม ไมควรสง pkt ซ าอกครง เพราะ
pkt ซ ากน
การจดการกบขอมลทซ าซอน ผสงจะสง packet อกครงถา
ACKNAK เกดเสยหาย เตมหมายเลข sequence ใหแตละ
packet ผรบตองทง packet ทซ ากน
stop and wait ผสงท าการสงpacketและรอใหผรบตอบกลบดวย ACKNAK กอนทจะสง packet ตอไป
Transport Layer 3-33
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Transport Layer 3-35
rdt21 อภปราย
ผสง ใสหมายเลข seq ในpacket หมายเลข seq (01) กพอ
นกสท าไม ตองตรวจสอบวา ACKNAK ท
ไดรบเสยไปหรอไม จ านวนหมายเลข seq ตองเปนสอง
เทาของจ านวนสถานะ เพราะผสงตองเกบสถานะเพอldquoจ าrdquo
วา pkt ถดไปจะตองมเลข seq 0 หรอ 1
ผรบ ตองตรวจสอบวา pkt ทไดรบซ ากบ
pkt ทไดรบกอนหนาหรอไม ผรบจะเกบสถานะทระบวา 0 หรอ 1
คอหมายเลข seq ทคาดวาจะได
ขอสงเกต ผรบไมสามารถรวา ACKNAK สดทายทผสงไดรบถกตองหรอไม
Transport Layer 3-36
rdt22 protocol ทไมตองใช NAK
ท างานเหมอนกบ rdt21 แตใชแค ACKs แทนทจะสง NAK ผรบสง ACK ส าหรบ pkt สดทายทไดรบถกตอง
ฝงรบจะตองรวมหมายเลข seq ของ pkt ทก าลงถก ACK ไปดวย
จะสง ACK ซ าไปทผสงถาไมไดรบ pkt ทมหมายเลข seq ทคาดหวง ผลลพธจะออกมาเหมอนกรณทสง NAK ผสงตองสง pkt ตวลาสดไปใหมอกครง
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 ชองสญญาณทมความผดพลาดและ pkt สญหาย
เพมขอสนนษฐาน ชองสญญาณสามารถสญเสยแพคเกจ (ไมวาจะเปนขอมลหรอ ACKs) ได กลไก checksum หมายเลข seq
ACKs และ การสงซ า สามารถชวย แตมนกยงไมใชทางออก
วธ ผสงรอ ACK กลบมาในชวงเวลาท ldquoสมเหตสมผลrdquo
สง pkt เดมไปใหมอกครงถาไมไดรบ ACK ภายในชวงเวลาน
ถา pkt (หรอ ACK) มาถงลาชา (ไมใชหายไป) การสงใหมกจะเปนการสงซ า ซง seq
ไดจดการเรองเกยวกบขอมลซ าได ผรบตองระบเลข seq ของ pkt ทก าลง
ถก ACKed
ตองใชการนบเวลาถอยหลง (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
ขณะ rdt30 ด าเนนการ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
ขณะ rdt30 ด าเนนการ
Transport Layer 3-42
ประสทธภาพของ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
บตแรกของแพคเกจกถกสง t = 0
ผสง ผรบ
RTT
บตสดทายของแพคเกจถกสง t = L R
บตแรกของแพคเกจมาถง บตสดทายของแพคเกจมาถง สง ACK
ไดรบ ACK สงแพคเกจตอไป t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols แบบ pipelined
pipelining ผสงสงหลาย packet ไปยงผรบทง ๆ ท pkt เหลานนยงไมไดรบการยนยนตอบรบ (not yet acked) ชวงของหมายเลข sequence จะตองเพมขน ตองพกขอมล (buffer) ทผสงและผรบ
protocols แบบ pipelined แบบทวไปมสองแบบ go-Back-N selective repeat
Transport Layer 3-45
Pipelining ชวยเพม utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols แบบ pipeline ภาพรวม
Go-back-N ผสงสามารถสงแพคเกจทไมยงถก
ack ไดไมเกน N แพคเกจใน pipeline
ผรบแคสง cumulative ack ไม ack packet ถามนกอใหเกด gap
ผสงจบเวลาส าหรบแพคเกจทสงไป
นานทสดทยงไมได ack เมอเวลาหมด ผสงจะสงแพคเกจ
ทงหมดทยงไมไดรบ ack อกครง
Selective Repeat ผสงสามารถสงแพคเกจทไมยงถก ack ได
ไมเกน N แพคเกจใน pipeline
ผรบจะตองสง ack กลบใหแตละแพคเกจ
ผสงจะจบเวลาส าหรบแตละแพคเกจท
ไมได ack เมอเวลาส าหรบแพคเกจใดหมด ผสงจะสง
เฉพาะแพคเกจนนเทานน
Transport Layer 3-47
Go-Back-N ผสง
หมายเลข seq (k bit) จะอยใน header ของ packet อนญาตใหขนาด ldquowindowrdquo (ของ pkt ทตดกนและยงไมถก ack) ไมเกน N
ACK(n) จะ ack แพคเกจทงหมดไปจนถงทมหมายเลข seq เทากบ n - ldquoการ ACK แบบรวม (cumulative ACK)rdquo อาจมการไดรบ ACKs หมายเลข seq เดมซ า (ดรายละเอยดดาน receiver)
มการจบเวลาส าหรบแพคเกจทเดนทางอย ซงเดนทางนานทสดและยงไมได ACK (pkt ทมหมายเลข seq นอยทสดใน window)
timeout(n) เวลาหมดท pkt n ผสงจะสง pkt n และ pkt ทงหมดใน window (ซงมหมายเลข seq สงกวา n) อกครง
Transport Layer 3-48
GBN FSM ดานผสงทเพมจากของเดม
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum
out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM ดานผรบทเพมจากของเดม
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
ผ รบ Ack แตละแพคเกจทไดรบมาถกตอง เกบ (buffer) แพคเกจ เทาทจ าเปน เพอทจะสงขอมลทเรยงล าดบแลว ไปยง layer
บนไดในทายทสด
ผสงแคสงแพคเกจซ าเฉพาะแพคเกจทไมไดรบ Ack เทานน ตวจบเวลา (ทางฝงผสง) จะจบเวลาของแตละแพคเกจทไมไดรบ Ack
Window ของผสง มหมายเลข seq อย N หมายเลขตดกน จ ากดหมายเลข seq ของแพตเกจทสงไปแลว และไมไดรบ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
ขอมลมาจาก layer ดานบน ถามหมายเลข seq วางใน window ให
สง pkt ได
timeout(n) สง pkt n ซ า จบเวลาใหม
ACK(n) in [sendbase sendbase+N] รวา ผรบไดรบ pkt n แลว ถา n เกดเปนหมายเลขแรกสดในหนาตาง
(n เทากบ sendbase) ทไมได ถก ack เลอน window ไปทางดานขวา โดยเลอนไปยงหมายเลขทไมไดถก ack
ผสง pkt n in [rcvbase rcvbase+N-1] สง ACK(n) ถาไมเรยงตามล าดบ buffer ถาตามล าดบ สง (รวมถงใหสง pkt ท
เรยงตามล าดบและอยในบฟเฟอร) เลอน window ไปทหมายเลข seq ถดไปของ pkt ทยงไมไดรบจากผสง
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise ทงไปไมตองสนใจ
ผรบ
Transport Layer 3-54
ขณะ Selective repeat ด าเนนการ
สง pkt0
sender receiver
รบ pkt0 สง ack0
รบ pkt1 สง ack1
รบ pkt3 buffer สง ack3 รบ ack0 สง pkt4
รบ ack1 สง pkt5
pkt 2 timeout send pkt2
X loss
รบ pkt4 buffer สง ack4
รบ pkt5 buffer สง ack5
รบ pkt2 deliver pkt2
pkt3 pkt4 pkt5 สง ack2
บนทก ack3 มาถงแลว
sender window (N=4)
บนทก ack4 มาถงแลว บนทก ack4 มาถงแลว
Q เกดอะไรขนเมอ ack2 มาถง
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
สง pkt1 สง pkt2
สง pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
ตวอยาง หมายเลข seq 0 1 2 3 ขนาดของ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
ผรบไมสามารถเหนดานผสงได พฤตกรรมผรบจะเหมอนกนทง 2 สถานการณ
มบางอยางทผด (มาก)
ผรบไมเหนถงความแตกตางของทง 2 เหตการณจ าลองน
ในเหตการณจ าลอง (b) ขอมลเกาทถกสงซ า เมอผรบรบมา จะนกวาเปนขอมลใหม
Q ขนาดของ seq กบขนาดของ
window เกยวของกนยงไงเพอทจะหลกเลยงปญหาในตวอยาง (b)
Transport Layer 3-56
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-57
TCP ภาพรวม RFCs 79311221323 2018 2581
ขอมลแบบสองทศทาง มการสงขอมลทงไปและกลบในการ
เชอมตอ (connection) เดยวกน MSS ขนาด segment ทใหญสดท
TCP จะรบได (Max Segment Size)
connection-oriented handshaking (การแลกเปลยนของ
ขอความควบคม) ตงคาสถานะตงตนใหผสงและผรบ กอนการแลกเปลยนขอความ
flow controlled ผสงจะไมสงขอมลเกนกวาทผรบจะรบ
ได
point-to-point (สถานทนง-ไป-สถานทนง) ผสงหนงคน ผรบหนงคน
สายขอมลเปนไบตทเรยงล าดบและขอมลไมสญหาย (reliable in-order byte steam) ไมม ldquoขอบเขตrdquo ของขอความ
(ขอความจะมาถงผรบตอเนองกน)
pipelined การควบคมความคบคงและการควบคม
อตราการไหลของ TCP จะก าหนดขนาดของ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG ขอมลเรงดวน (โดยทว ๆ ไป ไมถกใช)
ACK ACK valid
PSH ผลกขอมลใหชน app (โดยทว ๆ ไป ไมถกใช)
RST SYN FIN สรางการเชอตอ
(ค าสง setup teardown)
จ านวน bytes ท ผรบเตมใจจะรบ
นบโดยใช byte ของขอมล (ไมใช segment)
Internet checksum
(เหมอนใน UDP)
Transport Layer 3-59
TCP seq numbers ACKs
หมายเลข sequence เลขของ byte stream จะเปน byte
แรกของขอมลของ segment น acknowledgements เลข seq ของ byte ถดไปทอกดานหนง
คาดหวงวาจะได cumulative ACK (ACK แบบรวม)
Q ผรบจดการกบ segment ทมาถงไมเรยงล าดบอยางไร A TCP ไมมรายละเอยดสวนน ndash ขนอย
กบคนทจะมาเขยนโปรแกรม TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาเขามาถงผสง
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาออกจากผสง
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
เหตการณจ าลอง telnet อยางงาย
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q เราควรจะก าหนด time out ไวทเทาใด
มากกวาเวลาของ RTT แตเวลาของ RTT นนแปรปรวน
ก าหนดไวนอยเกนไป timeout กอนก าหนด ท าใหมการ retransmissions โดยไมจ าเปน
ก าหนดไวมากเกนไป ระบบตอบสนองตอการสญหายของ segment ชาเกนไป
Q จะประมาณเวลาของ RTT อยางไร
SampleRTT วดจากระยะเวลาตงแตเรมสง sengment จนกระทงไดรบACK ไมสนใจการ retransmissions
SampleRTT มคาแปรปรวน เราตองการประมาณเวลาของ RTT ให smooth กวา ใชคาเฉลยของคาหลาย ๆ คา ไมใชแค
เวลาของ SampleRTT ปจจบน
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
คาเฉลยของการเคลอนทถวงน าหนกแบบ exponential คา SampleRTT ทในอดตจะมผลตอ EstimatedRTT ลดลงแบบ exponentially โดยทวไปจะก าหนดคา = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
ชวงเวลาของ timeout EstimatedRTT บวกกบระยะเวลาทเผอเอาไว ยงคาของ EstimatedRTT ทแปรปรวนมากเทาไร -gt ระยะเวลาทเผอความมากขนตาม
มประเมนคาการเปลยนแปลงของ SampleRTT จาก EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoชวงเวลาทเผอrdquo
Transport Layer 3-64
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP สรางบรการแบบ reliable อยบนบรการของ IP ทเปนแบบ unreliable segments ถกสงแบบ pipeline cumulative acks ม timer ส าหรบสงใหมคาตวเดยว
TCP สง segment ใหมเมอ เหตการณ timeout ไดรบ acks ซ า ๆ กน
เรามาเรมตนพจารณาทางดานผสงของ TCP อยางงายกอน ยงไมตองสนใจ acks ซ า ยงไมตองสนใจการควบคม flow และ
ความคบคง
Transport Layer 3-66
เหตการณของ TCP sender
เมอไดขอมลจาก app สราง segment ดวยหมายเลข seq เลข seq คอหมายเลขของไบตแรก
ของขอมลในแตละ segment หาก timer ยงไมเคยถกตง จะเรม
ตงเวลา การตงเวลาเพอจบเวลาส าหรบ
segment เกาทสดยงไมไดรบ ack ชวงเวลาทหมดอาย
TimeOutInterval
timeout สงใหมเฉพาะ segment ทเกด
timeout ตงเวลานบใหม เมอไดรบ ack ถา ack เปน ack ของ segment
กอนหนายงไมไดรบ ack Update สงทรวา ถก ACK แลว เรมตงเวลานบ ถายงคงม segment
ทยงไมไดรบ acked
Transport Layer 3-67
ดานผสงของ TCP (อยางงาย)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
การสราง ACK ของ TCP [RFC 1122 RFC 2581]
เหตการณทผรบ เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ) โดยขอมลทงหมดจนถงเลข seq ทคาดหวงไว ถก ACK หมดแลว
เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ ท าให ไมม gap ใน segment ทไดมา) แตมบาง segment ยงไมได ACK
Segment มาถงแบบไมเรยงตามล าดบ โดยมเลข seq สงกวาทตองการ ท าใหม gap (ชองโหว) เกดขน Segment ท ามาถง ทจะเตมบางสวนหรอเตมเตมชองโหว
TCP receiver action อยาเพงสง ACK รออก segment นง โดยรอสก 500ms หากยงไมม segment มา กสง ACK สง ACK แบบรวม (cumulative) ไปทนทในครงเดยว ซงจะเปนการ Ack segment ทมาแบบเรยงตามล าดบทงสอง segments สง ACK ซ า ไปทนท โดยใสเลข seq ของ byte ทตองการ สง ACK แบบรวมทนท โดย segment ทจะ Ack เรมจากดานทนอยกวาของ gap
Transport Layer 3-71
TCP fast retransmit
ระยะเวลาในการ time-out มกจะคอนขางยาว (โดยเปรยบเทยบ) ท าใหใชเวลาคอนขางนานกอนทจะ
สง packet อกครง
แกโดย ตรวจสอบการสญเสย pack โดยดท ACKs ทซ า ๆ กน ผสงมกสง segment ตด ๆ กน ดงนน ถา segment หนงหายไป จง
เปนไปไดทจะม ACKs ซ า ๆ กนจ านวนมาก
ถาผสงไดรบ ACKs ส าหรบขอมลเดยวกน 3 ACKS (ACKs ทซ ากนสามครง) ผสงตองสง seq ทยงไมถก acked (ระบเลข seq ทเลกทสด) มแนวโนมวา segment ทยงไมถก
ack จะหายไปเลย ดงนน จงไมตองรอใหหมดเวลา
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-74
TCP flow control application
process
buffer ดานผรบ ของ TCP socket
TCP code
IP code
application
OS
protocol stack ดานผรบ
application ลบขอมลจาก buffer ของ TCP socket hellip
hellip ชากวา TCP สงขอมล ขนไป (ขณะทผสงก าลงจะสง)
from sender
ผรบสามารถควบคมผสงได ดงนน ผสงจะไมสงขอมลเรวไป หรอ มากเกนไปจนลน (Overflow) buffer ของผรบ
flow control
Transport Layer 3-75
การควบคมการไหลขอมลของ TCP
ขอมลทอย buffer
buffer สวนทยงวาง rwnd
RcvBuffer
สวนของขอมล (payload) ใน segment ของ TCP
ไปยง process ของ application
ผรบระบขนาดของ buffer ทวางไวใน field rwnd ทอยในสวนหวของ TCP ทจะสงไปยงผสง ผเขยนโปรแกรมระบขนาดของ RcvBuffer ได
โดยใช API ตงคา option ของ socket (คาเรมตนทวไปคอ 4096 ไบต)
ทกระบบปฏบตการจะปรบขนาด RcvBuffer อตโนมต
ผสงจ ากดจ านวนของขอมลทยงไมถก acked (ldquoอยในระหวางการเดนทางrdquo) ใหเทากบคา rwnd ของขอมลผรบ
เปนการรบประกนวา buffer ของผรบจะไมลน
การbuffer ในดานของผรบ
Transport Layer 3-76
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-77
การจดการกบการเชอมตอ กอนทจะมการแลกเปลยนขอมลกน ผสงและผรบตองตกลงกนกอน ตกลงรวมในการสรางการเชอมตอ (แตละคนจะรวาอกฝายอยากจะเชอมตอหรอไม) ตกลงคาพารามเตอรส าหรบการเชอมตอ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake จะท างานไดเสมอไปหรอไมบน network
ความลาชาอาจเปลยนไป ขอความอาจถกสงซ าตวอยาง (เชน
req_conn(x)) เนองจากการสญหายของขอมล
ขอมลอาจสลบกน ไมสามารถรไดวาอกฝงไดรบหรอไม
ไดรบขอมลอะไร
2-way handshake
มาคยกนเถอะ
ตกลง ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-79
เหตการณผดพลาดของ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-80
3-way handshake ของ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM ของ 3-way handshake ของ TCP
Transport Layer 3-82
TCP การหยดการเชอมตอ
client server เลกเชอมตอทแตละดานของการเชอมตอ โดยแตละดานจะสง TCP segment ดวย FIN bit = 1
ตอบกลบ FIN ดวย ACK ในขณะทรบ FIN ACK กสามารถรวมอยในแพคเกจทสง FIN มาไดดวย
แตละดานสามารถสง FIN ไดพรอม ๆ กน
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP การหยดการเชอมตอ
Transport Layer 3-84
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-85
ความคบคง ความหมายไมเปนทางการ ldquoเมอจ านวนคนสงมากเกนไป ก าลงสงขอมลมาก
เกนไปดวยอตราการสงเรวเกนกวาท Network จะรบไหวrdquo แตกตางจาก flow control ผลทอาจทเกดขนจากความคบคง
packets หาย (buffer ลนท routers) ลาชามาก (เขาควใน buffers ของ router)
เปนปญหาทคนสนใจตด 10 อนดบตนๆ
หลกการของการควบคมความคบคงของเครอขาย
Transport Layer 3-86
ตนเหตและผลของความคบคง เหตการณ 1
มผสงและผรบอยางละสองคน Router 1 ตว ไมจ ากด buffers ความจของ link R ไมมการสงขอมลซ า
อตราขอมลทสงส าเรจตอหนงการเชอมตอ R2
buffer ท link ขาออกม buffer ไมจกด
Host A
อตราการสงขอมลตนฉบบ lin
Host B
อตราขอมลทสงส าเรจ lout
R2
R2
lou
t
lin R2 de
lay
lin
ดเลยจะมากขนเมออตราสงขอมลตนฉบบเขาใกลความจของ link
Transport Layer 3-87
Router 1 ตว Buffer แตมขนาด buffer จ ากด ตองสง pkt ไปซ าถา pkt นน timeout
ขอมลเขาของชน application = ขอมลออกจากชน application lin = lout
ขอมลเขาของชน transport จะรวมทตองสงซ าดวย lin lin
Buffer ของ link ทใชรวมกนซงมขนาดจ ากด
Host A
lin ขอมลตนฉบบ
Host B
lout lin ขอมลตนฉบบบวกกบ ขอมลทตองสงซ า
lsquo
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-88
ในอดมคต สมมตผสงรความเปนไปในเครอขาย ผสงสงเฉพาะตอนทเราเตอรม buffer เหลออย
Buffer ของ link ทแชรอยางจ ากด
lout copy
ม buffer วาง
R2
R2
lou
t
lin
Host B
A
ตนเหตและผลของความคบคง เหตการณ 2
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-89
lout copy
no buffer space
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
A
Host B
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
เมอสงขอมลท R2 บาง packets ถกสงซ า แต goodput ยงคงมคาลเขาหา R2 (ท าไม)
A
Host B
ตนเหตและผลของความคบคง เหตการณ 2
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Host B
ในความเปนจรง มการสงซ า packets หายหรอตกหลนระหวาง
เสนทางเนองจาก buffers เตม แตบางครง Timer ของผสงหมดเวลาลง
กอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-92
R2
lou
t
ldquoผลrdquo ของความคบคง เพอใหไดขอมลในอตราทตองการ (goodput) ตองท างานมากขน (สงซ า) เมอตองสง packets ซ าโดยทไมจ าเปน link จะตองล าเลยงหลาย copy ของ
ขอมลเดยวกน ท าให goodput ลดลง
R2 lin
ตนเหตและผลของความคบคง เหตการณ 2
ในความเปนจรง มการสงซ า 1 packets หายหรอตกหลนระหวางเสนทางเนองจาก buffers เตม 2 แตบางครง Timer ของผสงหมดเวลาลงกอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Transport Layer 3-93
มผสงขอมลทง 4 โฮสต เสนทางตองผานหลายจด หมดเวลาสงไปขอมลซ า
Q เกดอะไรขนเมอ λin และ λinrsquo เพมขน
Buffer ของเสนทางการสงขอมลทใชรวมกนมขนาดจ ากด
Host A lout
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
Host B
Host C Host D
A เมอ λinrsquo ของขอมลเสนสแดงมขนาดเพมขน ขอมลใน
เสนสน าเงนกจะถก drop ท าให throughput ของ connection สน าเงนเหลอ 0
lin ขอมลตนฉบบ lin ขอมลตนฉบบ บวกกบ
ขอมลทตองสงซ า
Transport Layer 3-94
อกหนง ldquoผลเสยrdquo ของความคบคง เมอแพกเกจถกทงไป นนกเทากบวา ทรยากรเครอขาย (ทใชสงขอมลกอน
หนาทขอมลนจะถกทง) ถกใชไปอยางไรคา
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
แนวทางในการควบคมความคบคงของขอมล
2 แนวทางในการควบคมความคบคง
การควบคมความคบคงโดยใชแคเครองปลายทาง (end-end)
ไมมการแจงกลบ (feedback) จากเครอขาย
ความคบคงของเครอขายจะถกเดาโดยเครองทอยปลายทางทคอยสงเกต loss delay
เปนวธของ TCP
การควบคมความคบคงโดยใหอปกรณเครอขายชวย
routers จะท าการแจง feedback ไปทระบบปลายทาง ใช bit 1 bit เพอระบถงความ
แออด (SNA DECbit TCPIP ECN ATM) หรอ ระบอตราการสงทชดเจน
ส าหรบผสง
Transport Layer 3-96
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
ABR available bit rate ldquoบรการทมความยดหยนrdquo ถาเสนทางของผสง ldquoมขอมลนอยกวา
ความจะมากrdquo ผสงจะใชประโยชนจาก
bandwidth ทเหลออย ถา path ของผสงแออด
ผสงจะคอย ๆ ลดอตราสงใหเหลอเทาอตราการสงขนต าทรบประกนไว
RM (resource management) cells สงโดยผสง แทรก ๆ ไปกบ cell ทเปนขอมล bits ใน RM cell ถกตงคาโดย switches
(ldquoเครอขายคอยชวยrdquo) NI bit ไมเพมอตราการสง (ความแออด
ระดบกลาง) CI bit การบงบอกถงความแออด
ผรบไมแกคาใน bit นของ RM cells และสงไปใหผสง
Transport Layer 3-97
field ขอมล ER (explicit rate) ขนาด 2 byte ใน cell RM switch ทแออดอาจลดคา ER ใน cell ดงนน อตราทผสงจะสงขอมลจะเปนอตราการสงมากทสดท link ในเสนทางจะรองรบได
bit EFCI ใน cell ขอมล ถกตงคาไวท 1 ใน switch ทมขอมลแออด ถา cell ขอมลกอนหนา RM cell ถกตงคา EFCI ผรบจะตงคา bit CI ใน cell RM ท
สงกลบใหผสง
RM cell data cell
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
Transport Layer 3-98
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-99
การควบคมความคบคงของ TCP additive increase (เพมแบบบวก) multiplicative decrease (ลดแบบเทาตว)
วธ ผสงเพมอตราสง (window size) ควานหา bandwidth ทมใหใชได จนกวาการสญหายจะเกดขน additive increase เพม cwnd ทละ 1 MSS ทก ๆ RTT จนกวาจะ pkt จะหาย multiplicative decrease ตดลด cwnd เหลอครงเดยวหลงจากการสญหาย
cwnd
ขนา
ดของ co
nges
tion
wind
ow ของผส
งแบบ
TCP
พฤตกรรมของ AIMD เปน ลกษณะฟนเลอย หา bandwidth
ขนาด window เพมแบบบวก hellip hellip จนกวาจะเกดการสญหาย (จากนน ตดลงเหลอครงนง)
time
Transport Layer 3-100
ผสงจ ากดการสง
ขนาด cwnd จะเปลยนแปลงไปมา ขนกบความคบคงของเครอขายทผสงไดรมา
อตราการสง TCP อยางคราว ๆ สงขอมลจ านวน
cwnd bytes รอ ACKS เพอประมาณคา RTT จากนนสงไบตขอมลเพม
byte สดทายท ถก ACKed สง แตยงไมถก
ACK (ldquoอยระหวางการเดนทางrdquo)
byte สดทายทสงไป
cwnd
LastByteSent-
LastByteAcked lt cwnd
ชวงเลข sequence number ของผสง
rate ~ ~ cwnd
RTT bytessec
การควบคมความคบคงของ TCP รายละเอยด
Transport Layer 3-101
TCP Slow Start
เมอเรมการเชอมตอ เพมอตราการสงแบบยกก าลง (exponentially) จนกวาจะเจอกบ loss ครงแรก เรมตนขนาด cwnd = 1 MSS เพมขนาด cwnd หนงเทาตวทก ๆ RTT นนคอ โดยเพมขนาด cwnd ไป 1 MSS
ส าหรบทก ๆ ACK ทไดรบ
สรป อตราสงเรมแรกจะชาแตคาจะเพมแบบกระโดดขนอยางรวดเรว
Host A
RTT
Host B
time
Transport Layer 3-102
TCP การหา loss และการตอบสนอง
ถา loss ถกระบโดย timeout cwnd ถกตงไวท 1 MSS จากนนหนาตางจะเพมขนเปนเลขยกก าลง (exponential เหมอนใน slow start)
จนไปถงคา threshold จากนนจะเพมขนเปนเชงเสน
ถา loss ถกระบโดยไดรบ ACK ซ า 3 ACKs (3 duplicate acks) TCP RENO
ACKs ซ า ระบถงความสามารถการสง segments ของเครอขาย
cwnd ถกตดเหลอครงนงจากนนเพมขนแบบเชงเสน
TCP Tahoe จะตงคา cwnd เปน 1 เสมอ (ไมวาจะ timeout หรอ 3 dup acks)
Transport Layer 3-103
Q เมอไร TCP ควรจะเปลยนจากการเพมขนแบบ exponential เปนแบบเชงเสน
A เมอ cwnd ถกเพมเปน 12 ของ ldquoคาทมากทสดrdquo ของมนกอนจะเกด timeout
การด าเนนการ ตวแปร ssthresh ขณะเกด Loss ssthresh จะถก
ตงคาท 12 ของคา cwnd กอนเกดเหตแปปเดยว (คา cwnd ทมากทสดกอนเกดเหตการณ)
TCP จาก slow start เปน CA (Congestion Avoidance)
Transport Layer 3-104
สรป TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput ของ TCP
คาเฉลย throughput ของ TCP เปน function ของขนาดของ window และ RTT ไมสนใจ slow start สมมตวาขอมลถกสงตลอด
W ขนาดของ window (หนวยเปน bytes) การสญเสยทเกดขน คาเฉลยขนาดของ window (จ านวน byte ทเดนทางอย) คอ frac34 W คาเฉลยของ throughput คอ 34W ตอ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP ในอนาคต TCP ใน ldquopipes ทยาวและมความจสงrdquo
ตวอยาง 1500 byte segments 100ms RTT ตองการชองทางการสงขนาด 10 Gbps
requires W = 83333 in-flight segments ความเปนไปไดของการสญหายของในชองทางการสงขอมล L [Mathis 1997]
เพอทจะมชองทางการสงขนาด 10Gbps ตองมการสญหายของขอมลเพยงแค =
210-10 ndash นอยมาก ดงนน ตองม TCP รนใหมส าหรบการสงแบบความเรวสง
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
เปาหมายของ fairness ถาม TCP session จ านวน K session ใชทรพยากร bandwidth R รวมกน แตละ session ควรจะเฉลยทรพยากรเหมอนกนท RK
TCP connection 1
router คอขวด มความจ R
ความเสมอภาค (Fairness) ของ TCP
TCP connection 2
Transport Layer 3-108
ความเสมอภาคของ TCP คออะไร session 2 session แขงกนใชทรพยากร additive increase ใหความชนเสนเทากบ 1 (session ทง 2 คอย ๆ ได throughput เพมทละ
นด) multiplicative decrease ลด throughput ไปครงหนง
R
R
เสนระบแบนดวธทใชรวมเทากน
Throuput ของ การเชอมตอท 1
congestion avoidance (CA) additive increase สญเสย ลดขนาดของ window ลงไปครงนง
congestion avoidance (CA) additive increase
สญเสย ลดขนาดของ window ลงไปครงนง
Transport Layer 3-109
ความเสมอภาค (ตอ)
ความเสมอภาค และ UDP มลตมเดยแอพพลเคชนบอยครงไม
ใช TCP ไมตองการใหอตราการสงลดลงเพราะ
การควบคมความคบคง
มลตมเดยแอพพลเคชนจงใช UDP แทน สงเสยงวดโอดวยความเรวคงท ทน
ตอการสญเสยขอมล
ความเสมอภาค การเชอมตอ TCP แบบขนาน แอพพลเคชนสามารถทจะเปดหลายการ
เชอมตอระหวางเครอง 2 เครองแบบขนานได
เวบบราวเซอรท าแบบน ตวอยางเชน link ทมความจ R ซงม 9 การ
เชอมตอ ถาแอพใหมตองการ 1 TCP จะไดรบท rate
R10 ถาแอพใหมตองการ 11 TCPs จะไดรบท R2
Transport Layer 3-110
Chapter 3 บทสรป
หลกการเบองหลงการใหบรการชนtransport multiplexing demultiplexing การสงขอมลแบบไวใจได การควบคมการไหลของขอมล การควบคมความคบคงของขอมล
กรณศกษาและการปฏบตบน internet UDP TCP
ถดไป ออกจากปลายทางของระบบ
เครอขาย (application transport layers)
เขาไปยงสแกนของเครอขาย
Transport Layer 3-20
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-21
Principles of reliable data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
หลกการของความนาเชอถอ data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
หลกการของความนาเชอถอ data transfer
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
ส าคญในชน application transport link ตด top-10 ของหวขอทางดานเครอขาย
Transport Layer 3-24
Reliable data transfer เรมตน
ดานผสง ดานผรบ
rdt_send() ถกเรยกจากชนดานบน (เชน โดย app) ท าหนาทผานขอมลเพอใหขอมลถกสงไป
ยงชนดานบนของผรบ
udt_send() ถกเรยกโดย rdt เพอทจะโอนถาย packet ผานชองการ
สอสารท unreliable ไปยงผรบ
rdt_rcv() ถกเรยกโดย OS เมอ OS ไดรบ packet ทมาถงชองการสอสารดานผรบ
deliver_data() ถกเรยกโดย rdt เพอใหสงขอมลไปยงชนดานบน
Transport Layer 3-25
เราจะ คอย ๆ พฒนา protocol ส าหรบการโอนถายขอมลแบบ reliable หรอ reliable
data transfer protocol (rdt) ตอนน พจารณาเฉพาะการโอนถายขอมลแบบทางเดยวกอน
แตขอมลส าหรบการควบคม (control info) จะถกสงไปกลบทงสองทาง
ใช finite state machines (FSM) เพอก าหนดการกระท าของผสงและผรบ
state 1
state 2
เหตการณทท าใหเกดการเปลยนผานของ State การกระท าขณะเปลยนผาน State
สถานะ (state) เมออยใน state ปจจบน state ถดไปจะขนอยกบเหตการณทจะ
เกดขน ณ state ปจจบน
เหตการณ การกระท า
Reliable data transfer เรมตน
Transport Layer 3-26
rdt10 การโอนถายขอมลแบบ reliable ผานชองสญญาณแบบ reliable
สมมตให ชองทางทอยขางใตเปนชองทางทเชอถอได ไมมการผดพลาดของบต ไมมขอมลสญหาย
FSMs ส าหรบผสง และ ส าหรบผ รบ ผสงสงขอมลไปยงชนดานลาง ผรบรบขอมลจากชนดานลาง
รอรบการเรยกจากชน
ดานบน packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
รอรบการเรยกจากชน
ดานลาง
rdt_rcv(packet)
ผสง ผรบ
Transport Layer 3-27
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร
acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK
negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors
sender retransmits pkt on receipt of NAK
new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 ชองทางการสอสารทม bit errors
ปกตแลว มนษยใชวธการใดในการแกไข ldquoerrorsrdquo ระหวางการสนทนา
Transport Layer 3-28
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร การตอบรบ (acknowledgements (ACKs)) ผรบแจงผสงวาไดรบ packet แลว การตอบปฏเสธ (negative acknowledgements (NAKs)) ผรบแจงผสงวา packet ม
errors sender สงขอมลซ าอกครง เมอไดรบ NAK
กลไกทเพมขน in rdt20 (เพมจาก rdt10) การตรวจจบความผดพลาด การแจงกลบ (feedback) ขอมลส าหรบการควบคม (ACKNAK) จากผรบไปยงผสง
rdt20 ชองทางการสอสารทม bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 ขอก าหนดของ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
จะเกดอะไรขนถา ACKNAK เกดเสยหาย ผสงไมรวาผรบรบ pkt ครบถวน
หรอไม ไมควรสง pkt ซ าอกครง เพราะ
pkt ซ ากน
การจดการกบขอมลทซ าซอน ผสงจะสง packet อกครงถา
ACKNAK เกดเสยหาย เตมหมายเลข sequence ใหแตละ
packet ผรบตองทง packet ทซ ากน
stop and wait ผสงท าการสงpacketและรอใหผรบตอบกลบดวย ACKNAK กอนทจะสง packet ตอไป
Transport Layer 3-33
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Transport Layer 3-35
rdt21 อภปราย
ผสง ใสหมายเลข seq ในpacket หมายเลข seq (01) กพอ
นกสท าไม ตองตรวจสอบวา ACKNAK ท
ไดรบเสยไปหรอไม จ านวนหมายเลข seq ตองเปนสอง
เทาของจ านวนสถานะ เพราะผสงตองเกบสถานะเพอldquoจ าrdquo
วา pkt ถดไปจะตองมเลข seq 0 หรอ 1
ผรบ ตองตรวจสอบวา pkt ทไดรบซ ากบ
pkt ทไดรบกอนหนาหรอไม ผรบจะเกบสถานะทระบวา 0 หรอ 1
คอหมายเลข seq ทคาดวาจะได
ขอสงเกต ผรบไมสามารถรวา ACKNAK สดทายทผสงไดรบถกตองหรอไม
Transport Layer 3-36
rdt22 protocol ทไมตองใช NAK
ท างานเหมอนกบ rdt21 แตใชแค ACKs แทนทจะสง NAK ผรบสง ACK ส าหรบ pkt สดทายทไดรบถกตอง
ฝงรบจะตองรวมหมายเลข seq ของ pkt ทก าลงถก ACK ไปดวย
จะสง ACK ซ าไปทผสงถาไมไดรบ pkt ทมหมายเลข seq ทคาดหวง ผลลพธจะออกมาเหมอนกรณทสง NAK ผสงตองสง pkt ตวลาสดไปใหมอกครง
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 ชองสญญาณทมความผดพลาดและ pkt สญหาย
เพมขอสนนษฐาน ชองสญญาณสามารถสญเสยแพคเกจ (ไมวาจะเปนขอมลหรอ ACKs) ได กลไก checksum หมายเลข seq
ACKs และ การสงซ า สามารถชวย แตมนกยงไมใชทางออก
วธ ผสงรอ ACK กลบมาในชวงเวลาท ldquoสมเหตสมผลrdquo
สง pkt เดมไปใหมอกครงถาไมไดรบ ACK ภายในชวงเวลาน
ถา pkt (หรอ ACK) มาถงลาชา (ไมใชหายไป) การสงใหมกจะเปนการสงซ า ซง seq
ไดจดการเรองเกยวกบขอมลซ าได ผรบตองระบเลข seq ของ pkt ทก าลง
ถก ACKed
ตองใชการนบเวลาถอยหลง (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
ขณะ rdt30 ด าเนนการ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
ขณะ rdt30 ด าเนนการ
Transport Layer 3-42
ประสทธภาพของ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
บตแรกของแพคเกจกถกสง t = 0
ผสง ผรบ
RTT
บตสดทายของแพคเกจถกสง t = L R
บตแรกของแพคเกจมาถง บตสดทายของแพคเกจมาถง สง ACK
ไดรบ ACK สงแพคเกจตอไป t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols แบบ pipelined
pipelining ผสงสงหลาย packet ไปยงผรบทง ๆ ท pkt เหลานนยงไมไดรบการยนยนตอบรบ (not yet acked) ชวงของหมายเลข sequence จะตองเพมขน ตองพกขอมล (buffer) ทผสงและผรบ
protocols แบบ pipelined แบบทวไปมสองแบบ go-Back-N selective repeat
Transport Layer 3-45
Pipelining ชวยเพม utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols แบบ pipeline ภาพรวม
Go-back-N ผสงสามารถสงแพคเกจทไมยงถก
ack ไดไมเกน N แพคเกจใน pipeline
ผรบแคสง cumulative ack ไม ack packet ถามนกอใหเกด gap
ผสงจบเวลาส าหรบแพคเกจทสงไป
นานทสดทยงไมได ack เมอเวลาหมด ผสงจะสงแพคเกจ
ทงหมดทยงไมไดรบ ack อกครง
Selective Repeat ผสงสามารถสงแพคเกจทไมยงถก ack ได
ไมเกน N แพคเกจใน pipeline
ผรบจะตองสง ack กลบใหแตละแพคเกจ
ผสงจะจบเวลาส าหรบแตละแพคเกจท
ไมได ack เมอเวลาส าหรบแพคเกจใดหมด ผสงจะสง
เฉพาะแพคเกจนนเทานน
Transport Layer 3-47
Go-Back-N ผสง
หมายเลข seq (k bit) จะอยใน header ของ packet อนญาตใหขนาด ldquowindowrdquo (ของ pkt ทตดกนและยงไมถก ack) ไมเกน N
ACK(n) จะ ack แพคเกจทงหมดไปจนถงทมหมายเลข seq เทากบ n - ldquoการ ACK แบบรวม (cumulative ACK)rdquo อาจมการไดรบ ACKs หมายเลข seq เดมซ า (ดรายละเอยดดาน receiver)
มการจบเวลาส าหรบแพคเกจทเดนทางอย ซงเดนทางนานทสดและยงไมได ACK (pkt ทมหมายเลข seq นอยทสดใน window)
timeout(n) เวลาหมดท pkt n ผสงจะสง pkt n และ pkt ทงหมดใน window (ซงมหมายเลข seq สงกวา n) อกครง
Transport Layer 3-48
GBN FSM ดานผสงทเพมจากของเดม
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum
out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM ดานผรบทเพมจากของเดม
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
ผ รบ Ack แตละแพคเกจทไดรบมาถกตอง เกบ (buffer) แพคเกจ เทาทจ าเปน เพอทจะสงขอมลทเรยงล าดบแลว ไปยง layer
บนไดในทายทสด
ผสงแคสงแพคเกจซ าเฉพาะแพคเกจทไมไดรบ Ack เทานน ตวจบเวลา (ทางฝงผสง) จะจบเวลาของแตละแพคเกจทไมไดรบ Ack
Window ของผสง มหมายเลข seq อย N หมายเลขตดกน จ ากดหมายเลข seq ของแพตเกจทสงไปแลว และไมไดรบ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
ขอมลมาจาก layer ดานบน ถามหมายเลข seq วางใน window ให
สง pkt ได
timeout(n) สง pkt n ซ า จบเวลาใหม
ACK(n) in [sendbase sendbase+N] รวา ผรบไดรบ pkt n แลว ถา n เกดเปนหมายเลขแรกสดในหนาตาง
(n เทากบ sendbase) ทไมได ถก ack เลอน window ไปทางดานขวา โดยเลอนไปยงหมายเลขทไมไดถก ack
ผสง pkt n in [rcvbase rcvbase+N-1] สง ACK(n) ถาไมเรยงตามล าดบ buffer ถาตามล าดบ สง (รวมถงใหสง pkt ท
เรยงตามล าดบและอยในบฟเฟอร) เลอน window ไปทหมายเลข seq ถดไปของ pkt ทยงไมไดรบจากผสง
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise ทงไปไมตองสนใจ
ผรบ
Transport Layer 3-54
ขณะ Selective repeat ด าเนนการ
สง pkt0
sender receiver
รบ pkt0 สง ack0
รบ pkt1 สง ack1
รบ pkt3 buffer สง ack3 รบ ack0 สง pkt4
รบ ack1 สง pkt5
pkt 2 timeout send pkt2
X loss
รบ pkt4 buffer สง ack4
รบ pkt5 buffer สง ack5
รบ pkt2 deliver pkt2
pkt3 pkt4 pkt5 สง ack2
บนทก ack3 มาถงแลว
sender window (N=4)
บนทก ack4 มาถงแลว บนทก ack4 มาถงแลว
Q เกดอะไรขนเมอ ack2 มาถง
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
สง pkt1 สง pkt2
สง pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
ตวอยาง หมายเลข seq 0 1 2 3 ขนาดของ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
ผรบไมสามารถเหนดานผสงได พฤตกรรมผรบจะเหมอนกนทง 2 สถานการณ
มบางอยางทผด (มาก)
ผรบไมเหนถงความแตกตางของทง 2 เหตการณจ าลองน
ในเหตการณจ าลอง (b) ขอมลเกาทถกสงซ า เมอผรบรบมา จะนกวาเปนขอมลใหม
Q ขนาดของ seq กบขนาดของ
window เกยวของกนยงไงเพอทจะหลกเลยงปญหาในตวอยาง (b)
Transport Layer 3-56
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-57
TCP ภาพรวม RFCs 79311221323 2018 2581
ขอมลแบบสองทศทาง มการสงขอมลทงไปและกลบในการ
เชอมตอ (connection) เดยวกน MSS ขนาด segment ทใหญสดท
TCP จะรบได (Max Segment Size)
connection-oriented handshaking (การแลกเปลยนของ
ขอความควบคม) ตงคาสถานะตงตนใหผสงและผรบ กอนการแลกเปลยนขอความ
flow controlled ผสงจะไมสงขอมลเกนกวาทผรบจะรบ
ได
point-to-point (สถานทนง-ไป-สถานทนง) ผสงหนงคน ผรบหนงคน
สายขอมลเปนไบตทเรยงล าดบและขอมลไมสญหาย (reliable in-order byte steam) ไมม ldquoขอบเขตrdquo ของขอความ
(ขอความจะมาถงผรบตอเนองกน)
pipelined การควบคมความคบคงและการควบคม
อตราการไหลของ TCP จะก าหนดขนาดของ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG ขอมลเรงดวน (โดยทว ๆ ไป ไมถกใช)
ACK ACK valid
PSH ผลกขอมลใหชน app (โดยทว ๆ ไป ไมถกใช)
RST SYN FIN สรางการเชอตอ
(ค าสง setup teardown)
จ านวน bytes ท ผรบเตมใจจะรบ
นบโดยใช byte ของขอมล (ไมใช segment)
Internet checksum
(เหมอนใน UDP)
Transport Layer 3-59
TCP seq numbers ACKs
หมายเลข sequence เลขของ byte stream จะเปน byte
แรกของขอมลของ segment น acknowledgements เลข seq ของ byte ถดไปทอกดานหนง
คาดหวงวาจะได cumulative ACK (ACK แบบรวม)
Q ผรบจดการกบ segment ทมาถงไมเรยงล าดบอยางไร A TCP ไมมรายละเอยดสวนน ndash ขนอย
กบคนทจะมาเขยนโปรแกรม TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาเขามาถงผสง
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาออกจากผสง
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
เหตการณจ าลอง telnet อยางงาย
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q เราควรจะก าหนด time out ไวทเทาใด
มากกวาเวลาของ RTT แตเวลาของ RTT นนแปรปรวน
ก าหนดไวนอยเกนไป timeout กอนก าหนด ท าใหมการ retransmissions โดยไมจ าเปน
ก าหนดไวมากเกนไป ระบบตอบสนองตอการสญหายของ segment ชาเกนไป
Q จะประมาณเวลาของ RTT อยางไร
SampleRTT วดจากระยะเวลาตงแตเรมสง sengment จนกระทงไดรบACK ไมสนใจการ retransmissions
SampleRTT มคาแปรปรวน เราตองการประมาณเวลาของ RTT ให smooth กวา ใชคาเฉลยของคาหลาย ๆ คา ไมใชแค
เวลาของ SampleRTT ปจจบน
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
คาเฉลยของการเคลอนทถวงน าหนกแบบ exponential คา SampleRTT ทในอดตจะมผลตอ EstimatedRTT ลดลงแบบ exponentially โดยทวไปจะก าหนดคา = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
ชวงเวลาของ timeout EstimatedRTT บวกกบระยะเวลาทเผอเอาไว ยงคาของ EstimatedRTT ทแปรปรวนมากเทาไร -gt ระยะเวลาทเผอความมากขนตาม
มประเมนคาการเปลยนแปลงของ SampleRTT จาก EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoชวงเวลาทเผอrdquo
Transport Layer 3-64
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP สรางบรการแบบ reliable อยบนบรการของ IP ทเปนแบบ unreliable segments ถกสงแบบ pipeline cumulative acks ม timer ส าหรบสงใหมคาตวเดยว
TCP สง segment ใหมเมอ เหตการณ timeout ไดรบ acks ซ า ๆ กน
เรามาเรมตนพจารณาทางดานผสงของ TCP อยางงายกอน ยงไมตองสนใจ acks ซ า ยงไมตองสนใจการควบคม flow และ
ความคบคง
Transport Layer 3-66
เหตการณของ TCP sender
เมอไดขอมลจาก app สราง segment ดวยหมายเลข seq เลข seq คอหมายเลขของไบตแรก
ของขอมลในแตละ segment หาก timer ยงไมเคยถกตง จะเรม
ตงเวลา การตงเวลาเพอจบเวลาส าหรบ
segment เกาทสดยงไมไดรบ ack ชวงเวลาทหมดอาย
TimeOutInterval
timeout สงใหมเฉพาะ segment ทเกด
timeout ตงเวลานบใหม เมอไดรบ ack ถา ack เปน ack ของ segment
กอนหนายงไมไดรบ ack Update สงทรวา ถก ACK แลว เรมตงเวลานบ ถายงคงม segment
ทยงไมไดรบ acked
Transport Layer 3-67
ดานผสงของ TCP (อยางงาย)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
การสราง ACK ของ TCP [RFC 1122 RFC 2581]
เหตการณทผรบ เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ) โดยขอมลทงหมดจนถงเลข seq ทคาดหวงไว ถก ACK หมดแลว
เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ ท าให ไมม gap ใน segment ทไดมา) แตมบาง segment ยงไมได ACK
Segment มาถงแบบไมเรยงตามล าดบ โดยมเลข seq สงกวาทตองการ ท าใหม gap (ชองโหว) เกดขน Segment ท ามาถง ทจะเตมบางสวนหรอเตมเตมชองโหว
TCP receiver action อยาเพงสง ACK รออก segment นง โดยรอสก 500ms หากยงไมม segment มา กสง ACK สง ACK แบบรวม (cumulative) ไปทนทในครงเดยว ซงจะเปนการ Ack segment ทมาแบบเรยงตามล าดบทงสอง segments สง ACK ซ า ไปทนท โดยใสเลข seq ของ byte ทตองการ สง ACK แบบรวมทนท โดย segment ทจะ Ack เรมจากดานทนอยกวาของ gap
Transport Layer 3-71
TCP fast retransmit
ระยะเวลาในการ time-out มกจะคอนขางยาว (โดยเปรยบเทยบ) ท าใหใชเวลาคอนขางนานกอนทจะ
สง packet อกครง
แกโดย ตรวจสอบการสญเสย pack โดยดท ACKs ทซ า ๆ กน ผสงมกสง segment ตด ๆ กน ดงนน ถา segment หนงหายไป จง
เปนไปไดทจะม ACKs ซ า ๆ กนจ านวนมาก
ถาผสงไดรบ ACKs ส าหรบขอมลเดยวกน 3 ACKS (ACKs ทซ ากนสามครง) ผสงตองสง seq ทยงไมถก acked (ระบเลข seq ทเลกทสด) มแนวโนมวา segment ทยงไมถก
ack จะหายไปเลย ดงนน จงไมตองรอใหหมดเวลา
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-74
TCP flow control application
process
buffer ดานผรบ ของ TCP socket
TCP code
IP code
application
OS
protocol stack ดานผรบ
application ลบขอมลจาก buffer ของ TCP socket hellip
hellip ชากวา TCP สงขอมล ขนไป (ขณะทผสงก าลงจะสง)
from sender
ผรบสามารถควบคมผสงได ดงนน ผสงจะไมสงขอมลเรวไป หรอ มากเกนไปจนลน (Overflow) buffer ของผรบ
flow control
Transport Layer 3-75
การควบคมการไหลขอมลของ TCP
ขอมลทอย buffer
buffer สวนทยงวาง rwnd
RcvBuffer
สวนของขอมล (payload) ใน segment ของ TCP
ไปยง process ของ application
ผรบระบขนาดของ buffer ทวางไวใน field rwnd ทอยในสวนหวของ TCP ทจะสงไปยงผสง ผเขยนโปรแกรมระบขนาดของ RcvBuffer ได
โดยใช API ตงคา option ของ socket (คาเรมตนทวไปคอ 4096 ไบต)
ทกระบบปฏบตการจะปรบขนาด RcvBuffer อตโนมต
ผสงจ ากดจ านวนของขอมลทยงไมถก acked (ldquoอยในระหวางการเดนทางrdquo) ใหเทากบคา rwnd ของขอมลผรบ
เปนการรบประกนวา buffer ของผรบจะไมลน
การbuffer ในดานของผรบ
Transport Layer 3-76
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-77
การจดการกบการเชอมตอ กอนทจะมการแลกเปลยนขอมลกน ผสงและผรบตองตกลงกนกอน ตกลงรวมในการสรางการเชอมตอ (แตละคนจะรวาอกฝายอยากจะเชอมตอหรอไม) ตกลงคาพารามเตอรส าหรบการเชอมตอ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake จะท างานไดเสมอไปหรอไมบน network
ความลาชาอาจเปลยนไป ขอความอาจถกสงซ าตวอยาง (เชน
req_conn(x)) เนองจากการสญหายของขอมล
ขอมลอาจสลบกน ไมสามารถรไดวาอกฝงไดรบหรอไม
ไดรบขอมลอะไร
2-way handshake
มาคยกนเถอะ
ตกลง ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-79
เหตการณผดพลาดของ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-80
3-way handshake ของ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM ของ 3-way handshake ของ TCP
Transport Layer 3-82
TCP การหยดการเชอมตอ
client server เลกเชอมตอทแตละดานของการเชอมตอ โดยแตละดานจะสง TCP segment ดวย FIN bit = 1
ตอบกลบ FIN ดวย ACK ในขณะทรบ FIN ACK กสามารถรวมอยในแพคเกจทสง FIN มาไดดวย
แตละดานสามารถสง FIN ไดพรอม ๆ กน
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP การหยดการเชอมตอ
Transport Layer 3-84
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-85
ความคบคง ความหมายไมเปนทางการ ldquoเมอจ านวนคนสงมากเกนไป ก าลงสงขอมลมาก
เกนไปดวยอตราการสงเรวเกนกวาท Network จะรบไหวrdquo แตกตางจาก flow control ผลทอาจทเกดขนจากความคบคง
packets หาย (buffer ลนท routers) ลาชามาก (เขาควใน buffers ของ router)
เปนปญหาทคนสนใจตด 10 อนดบตนๆ
หลกการของการควบคมความคบคงของเครอขาย
Transport Layer 3-86
ตนเหตและผลของความคบคง เหตการณ 1
มผสงและผรบอยางละสองคน Router 1 ตว ไมจ ากด buffers ความจของ link R ไมมการสงขอมลซ า
อตราขอมลทสงส าเรจตอหนงการเชอมตอ R2
buffer ท link ขาออกม buffer ไมจกด
Host A
อตราการสงขอมลตนฉบบ lin
Host B
อตราขอมลทสงส าเรจ lout
R2
R2
lou
t
lin R2 de
lay
lin
ดเลยจะมากขนเมออตราสงขอมลตนฉบบเขาใกลความจของ link
Transport Layer 3-87
Router 1 ตว Buffer แตมขนาด buffer จ ากด ตองสง pkt ไปซ าถา pkt นน timeout
ขอมลเขาของชน application = ขอมลออกจากชน application lin = lout
ขอมลเขาของชน transport จะรวมทตองสงซ าดวย lin lin
Buffer ของ link ทใชรวมกนซงมขนาดจ ากด
Host A
lin ขอมลตนฉบบ
Host B
lout lin ขอมลตนฉบบบวกกบ ขอมลทตองสงซ า
lsquo
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-88
ในอดมคต สมมตผสงรความเปนไปในเครอขาย ผสงสงเฉพาะตอนทเราเตอรม buffer เหลออย
Buffer ของ link ทแชรอยางจ ากด
lout copy
ม buffer วาง
R2
R2
lou
t
lin
Host B
A
ตนเหตและผลของความคบคง เหตการณ 2
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-89
lout copy
no buffer space
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
A
Host B
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
เมอสงขอมลท R2 บาง packets ถกสงซ า แต goodput ยงคงมคาลเขาหา R2 (ท าไม)
A
Host B
ตนเหตและผลของความคบคง เหตการณ 2
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Host B
ในความเปนจรง มการสงซ า packets หายหรอตกหลนระหวาง
เสนทางเนองจาก buffers เตม แตบางครง Timer ของผสงหมดเวลาลง
กอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-92
R2
lou
t
ldquoผลrdquo ของความคบคง เพอใหไดขอมลในอตราทตองการ (goodput) ตองท างานมากขน (สงซ า) เมอตองสง packets ซ าโดยทไมจ าเปน link จะตองล าเลยงหลาย copy ของ
ขอมลเดยวกน ท าให goodput ลดลง
R2 lin
ตนเหตและผลของความคบคง เหตการณ 2
ในความเปนจรง มการสงซ า 1 packets หายหรอตกหลนระหวางเสนทางเนองจาก buffers เตม 2 แตบางครง Timer ของผสงหมดเวลาลงกอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Transport Layer 3-93
มผสงขอมลทง 4 โฮสต เสนทางตองผานหลายจด หมดเวลาสงไปขอมลซ า
Q เกดอะไรขนเมอ λin และ λinrsquo เพมขน
Buffer ของเสนทางการสงขอมลทใชรวมกนมขนาดจ ากด
Host A lout
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
Host B
Host C Host D
A เมอ λinrsquo ของขอมลเสนสแดงมขนาดเพมขน ขอมลใน
เสนสน าเงนกจะถก drop ท าให throughput ของ connection สน าเงนเหลอ 0
lin ขอมลตนฉบบ lin ขอมลตนฉบบ บวกกบ
ขอมลทตองสงซ า
Transport Layer 3-94
อกหนง ldquoผลเสยrdquo ของความคบคง เมอแพกเกจถกทงไป นนกเทากบวา ทรยากรเครอขาย (ทใชสงขอมลกอน
หนาทขอมลนจะถกทง) ถกใชไปอยางไรคา
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
แนวทางในการควบคมความคบคงของขอมล
2 แนวทางในการควบคมความคบคง
การควบคมความคบคงโดยใชแคเครองปลายทาง (end-end)
ไมมการแจงกลบ (feedback) จากเครอขาย
ความคบคงของเครอขายจะถกเดาโดยเครองทอยปลายทางทคอยสงเกต loss delay
เปนวธของ TCP
การควบคมความคบคงโดยใหอปกรณเครอขายชวย
routers จะท าการแจง feedback ไปทระบบปลายทาง ใช bit 1 bit เพอระบถงความ
แออด (SNA DECbit TCPIP ECN ATM) หรอ ระบอตราการสงทชดเจน
ส าหรบผสง
Transport Layer 3-96
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
ABR available bit rate ldquoบรการทมความยดหยนrdquo ถาเสนทางของผสง ldquoมขอมลนอยกวา
ความจะมากrdquo ผสงจะใชประโยชนจาก
bandwidth ทเหลออย ถา path ของผสงแออด
ผสงจะคอย ๆ ลดอตราสงใหเหลอเทาอตราการสงขนต าทรบประกนไว
RM (resource management) cells สงโดยผสง แทรก ๆ ไปกบ cell ทเปนขอมล bits ใน RM cell ถกตงคาโดย switches
(ldquoเครอขายคอยชวยrdquo) NI bit ไมเพมอตราการสง (ความแออด
ระดบกลาง) CI bit การบงบอกถงความแออด
ผรบไมแกคาใน bit นของ RM cells และสงไปใหผสง
Transport Layer 3-97
field ขอมล ER (explicit rate) ขนาด 2 byte ใน cell RM switch ทแออดอาจลดคา ER ใน cell ดงนน อตราทผสงจะสงขอมลจะเปนอตราการสงมากทสดท link ในเสนทางจะรองรบได
bit EFCI ใน cell ขอมล ถกตงคาไวท 1 ใน switch ทมขอมลแออด ถา cell ขอมลกอนหนา RM cell ถกตงคา EFCI ผรบจะตงคา bit CI ใน cell RM ท
สงกลบใหผสง
RM cell data cell
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
Transport Layer 3-98
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-99
การควบคมความคบคงของ TCP additive increase (เพมแบบบวก) multiplicative decrease (ลดแบบเทาตว)
วธ ผสงเพมอตราสง (window size) ควานหา bandwidth ทมใหใชได จนกวาการสญหายจะเกดขน additive increase เพม cwnd ทละ 1 MSS ทก ๆ RTT จนกวาจะ pkt จะหาย multiplicative decrease ตดลด cwnd เหลอครงเดยวหลงจากการสญหาย
cwnd
ขนา
ดของ co
nges
tion
wind
ow ของผส
งแบบ
TCP
พฤตกรรมของ AIMD เปน ลกษณะฟนเลอย หา bandwidth
ขนาด window เพมแบบบวก hellip hellip จนกวาจะเกดการสญหาย (จากนน ตดลงเหลอครงนง)
time
Transport Layer 3-100
ผสงจ ากดการสง
ขนาด cwnd จะเปลยนแปลงไปมา ขนกบความคบคงของเครอขายทผสงไดรมา
อตราการสง TCP อยางคราว ๆ สงขอมลจ านวน
cwnd bytes รอ ACKS เพอประมาณคา RTT จากนนสงไบตขอมลเพม
byte สดทายท ถก ACKed สง แตยงไมถก
ACK (ldquoอยระหวางการเดนทางrdquo)
byte สดทายทสงไป
cwnd
LastByteSent-
LastByteAcked lt cwnd
ชวงเลข sequence number ของผสง
rate ~ ~ cwnd
RTT bytessec
การควบคมความคบคงของ TCP รายละเอยด
Transport Layer 3-101
TCP Slow Start
เมอเรมการเชอมตอ เพมอตราการสงแบบยกก าลง (exponentially) จนกวาจะเจอกบ loss ครงแรก เรมตนขนาด cwnd = 1 MSS เพมขนาด cwnd หนงเทาตวทก ๆ RTT นนคอ โดยเพมขนาด cwnd ไป 1 MSS
ส าหรบทก ๆ ACK ทไดรบ
สรป อตราสงเรมแรกจะชาแตคาจะเพมแบบกระโดดขนอยางรวดเรว
Host A
RTT
Host B
time
Transport Layer 3-102
TCP การหา loss และการตอบสนอง
ถา loss ถกระบโดย timeout cwnd ถกตงไวท 1 MSS จากนนหนาตางจะเพมขนเปนเลขยกก าลง (exponential เหมอนใน slow start)
จนไปถงคา threshold จากนนจะเพมขนเปนเชงเสน
ถา loss ถกระบโดยไดรบ ACK ซ า 3 ACKs (3 duplicate acks) TCP RENO
ACKs ซ า ระบถงความสามารถการสง segments ของเครอขาย
cwnd ถกตดเหลอครงนงจากนนเพมขนแบบเชงเสน
TCP Tahoe จะตงคา cwnd เปน 1 เสมอ (ไมวาจะ timeout หรอ 3 dup acks)
Transport Layer 3-103
Q เมอไร TCP ควรจะเปลยนจากการเพมขนแบบ exponential เปนแบบเชงเสน
A เมอ cwnd ถกเพมเปน 12 ของ ldquoคาทมากทสดrdquo ของมนกอนจะเกด timeout
การด าเนนการ ตวแปร ssthresh ขณะเกด Loss ssthresh จะถก
ตงคาท 12 ของคา cwnd กอนเกดเหตแปปเดยว (คา cwnd ทมากทสดกอนเกดเหตการณ)
TCP จาก slow start เปน CA (Congestion Avoidance)
Transport Layer 3-104
สรป TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput ของ TCP
คาเฉลย throughput ของ TCP เปน function ของขนาดของ window และ RTT ไมสนใจ slow start สมมตวาขอมลถกสงตลอด
W ขนาดของ window (หนวยเปน bytes) การสญเสยทเกดขน คาเฉลยขนาดของ window (จ านวน byte ทเดนทางอย) คอ frac34 W คาเฉลยของ throughput คอ 34W ตอ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP ในอนาคต TCP ใน ldquopipes ทยาวและมความจสงrdquo
ตวอยาง 1500 byte segments 100ms RTT ตองการชองทางการสงขนาด 10 Gbps
requires W = 83333 in-flight segments ความเปนไปไดของการสญหายของในชองทางการสงขอมล L [Mathis 1997]
เพอทจะมชองทางการสงขนาด 10Gbps ตองมการสญหายของขอมลเพยงแค =
210-10 ndash นอยมาก ดงนน ตองม TCP รนใหมส าหรบการสงแบบความเรวสง
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
เปาหมายของ fairness ถาม TCP session จ านวน K session ใชทรพยากร bandwidth R รวมกน แตละ session ควรจะเฉลยทรพยากรเหมอนกนท RK
TCP connection 1
router คอขวด มความจ R
ความเสมอภาค (Fairness) ของ TCP
TCP connection 2
Transport Layer 3-108
ความเสมอภาคของ TCP คออะไร session 2 session แขงกนใชทรพยากร additive increase ใหความชนเสนเทากบ 1 (session ทง 2 คอย ๆ ได throughput เพมทละ
นด) multiplicative decrease ลด throughput ไปครงหนง
R
R
เสนระบแบนดวธทใชรวมเทากน
Throuput ของ การเชอมตอท 1
congestion avoidance (CA) additive increase สญเสย ลดขนาดของ window ลงไปครงนง
congestion avoidance (CA) additive increase
สญเสย ลดขนาดของ window ลงไปครงนง
Transport Layer 3-109
ความเสมอภาค (ตอ)
ความเสมอภาค และ UDP มลตมเดยแอพพลเคชนบอยครงไม
ใช TCP ไมตองการใหอตราการสงลดลงเพราะ
การควบคมความคบคง
มลตมเดยแอพพลเคชนจงใช UDP แทน สงเสยงวดโอดวยความเรวคงท ทน
ตอการสญเสยขอมล
ความเสมอภาค การเชอมตอ TCP แบบขนาน แอพพลเคชนสามารถทจะเปดหลายการ
เชอมตอระหวางเครอง 2 เครองแบบขนานได
เวบบราวเซอรท าแบบน ตวอยางเชน link ทมความจ R ซงม 9 การ
เชอมตอ ถาแอพใหมตองการ 1 TCP จะไดรบท rate
R10 ถาแอพใหมตองการ 11 TCPs จะไดรบท R2
Transport Layer 3-110
Chapter 3 บทสรป
หลกการเบองหลงการใหบรการชนtransport multiplexing demultiplexing การสงขอมลแบบไวใจได การควบคมการไหลของขอมล การควบคมความคบคงของขอมล
กรณศกษาและการปฏบตบน internet UDP TCP
ถดไป ออกจากปลายทางของระบบ
เครอขาย (application transport layers)
เขาไปยงสแกนของเครอขาย
Transport Layer 3-21
Principles of reliable data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
หลกการของความนาเชอถอ data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
หลกการของความนาเชอถอ data transfer
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
ส าคญในชน application transport link ตด top-10 ของหวขอทางดานเครอขาย
Transport Layer 3-24
Reliable data transfer เรมตน
ดานผสง ดานผรบ
rdt_send() ถกเรยกจากชนดานบน (เชน โดย app) ท าหนาทผานขอมลเพอใหขอมลถกสงไป
ยงชนดานบนของผรบ
udt_send() ถกเรยกโดย rdt เพอทจะโอนถาย packet ผานชองการ
สอสารท unreliable ไปยงผรบ
rdt_rcv() ถกเรยกโดย OS เมอ OS ไดรบ packet ทมาถงชองการสอสารดานผรบ
deliver_data() ถกเรยกโดย rdt เพอใหสงขอมลไปยงชนดานบน
Transport Layer 3-25
เราจะ คอย ๆ พฒนา protocol ส าหรบการโอนถายขอมลแบบ reliable หรอ reliable
data transfer protocol (rdt) ตอนน พจารณาเฉพาะการโอนถายขอมลแบบทางเดยวกอน
แตขอมลส าหรบการควบคม (control info) จะถกสงไปกลบทงสองทาง
ใช finite state machines (FSM) เพอก าหนดการกระท าของผสงและผรบ
state 1
state 2
เหตการณทท าใหเกดการเปลยนผานของ State การกระท าขณะเปลยนผาน State
สถานะ (state) เมออยใน state ปจจบน state ถดไปจะขนอยกบเหตการณทจะ
เกดขน ณ state ปจจบน
เหตการณ การกระท า
Reliable data transfer เรมตน
Transport Layer 3-26
rdt10 การโอนถายขอมลแบบ reliable ผานชองสญญาณแบบ reliable
สมมตให ชองทางทอยขางใตเปนชองทางทเชอถอได ไมมการผดพลาดของบต ไมมขอมลสญหาย
FSMs ส าหรบผสง และ ส าหรบผ รบ ผสงสงขอมลไปยงชนดานลาง ผรบรบขอมลจากชนดานลาง
รอรบการเรยกจากชน
ดานบน packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
รอรบการเรยกจากชน
ดานลาง
rdt_rcv(packet)
ผสง ผรบ
Transport Layer 3-27
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร
acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK
negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors
sender retransmits pkt on receipt of NAK
new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 ชองทางการสอสารทม bit errors
ปกตแลว มนษยใชวธการใดในการแกไข ldquoerrorsrdquo ระหวางการสนทนา
Transport Layer 3-28
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร การตอบรบ (acknowledgements (ACKs)) ผรบแจงผสงวาไดรบ packet แลว การตอบปฏเสธ (negative acknowledgements (NAKs)) ผรบแจงผสงวา packet ม
errors sender สงขอมลซ าอกครง เมอไดรบ NAK
กลไกทเพมขน in rdt20 (เพมจาก rdt10) การตรวจจบความผดพลาด การแจงกลบ (feedback) ขอมลส าหรบการควบคม (ACKNAK) จากผรบไปยงผสง
rdt20 ชองทางการสอสารทม bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 ขอก าหนดของ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
จะเกดอะไรขนถา ACKNAK เกดเสยหาย ผสงไมรวาผรบรบ pkt ครบถวน
หรอไม ไมควรสง pkt ซ าอกครง เพราะ
pkt ซ ากน
การจดการกบขอมลทซ าซอน ผสงจะสง packet อกครงถา
ACKNAK เกดเสยหาย เตมหมายเลข sequence ใหแตละ
packet ผรบตองทง packet ทซ ากน
stop and wait ผสงท าการสงpacketและรอใหผรบตอบกลบดวย ACKNAK กอนทจะสง packet ตอไป
Transport Layer 3-33
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Transport Layer 3-35
rdt21 อภปราย
ผสง ใสหมายเลข seq ในpacket หมายเลข seq (01) กพอ
นกสท าไม ตองตรวจสอบวา ACKNAK ท
ไดรบเสยไปหรอไม จ านวนหมายเลข seq ตองเปนสอง
เทาของจ านวนสถานะ เพราะผสงตองเกบสถานะเพอldquoจ าrdquo
วา pkt ถดไปจะตองมเลข seq 0 หรอ 1
ผรบ ตองตรวจสอบวา pkt ทไดรบซ ากบ
pkt ทไดรบกอนหนาหรอไม ผรบจะเกบสถานะทระบวา 0 หรอ 1
คอหมายเลข seq ทคาดวาจะได
ขอสงเกต ผรบไมสามารถรวา ACKNAK สดทายทผสงไดรบถกตองหรอไม
Transport Layer 3-36
rdt22 protocol ทไมตองใช NAK
ท างานเหมอนกบ rdt21 แตใชแค ACKs แทนทจะสง NAK ผรบสง ACK ส าหรบ pkt สดทายทไดรบถกตอง
ฝงรบจะตองรวมหมายเลข seq ของ pkt ทก าลงถก ACK ไปดวย
จะสง ACK ซ าไปทผสงถาไมไดรบ pkt ทมหมายเลข seq ทคาดหวง ผลลพธจะออกมาเหมอนกรณทสง NAK ผสงตองสง pkt ตวลาสดไปใหมอกครง
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 ชองสญญาณทมความผดพลาดและ pkt สญหาย
เพมขอสนนษฐาน ชองสญญาณสามารถสญเสยแพคเกจ (ไมวาจะเปนขอมลหรอ ACKs) ได กลไก checksum หมายเลข seq
ACKs และ การสงซ า สามารถชวย แตมนกยงไมใชทางออก
วธ ผสงรอ ACK กลบมาในชวงเวลาท ldquoสมเหตสมผลrdquo
สง pkt เดมไปใหมอกครงถาไมไดรบ ACK ภายในชวงเวลาน
ถา pkt (หรอ ACK) มาถงลาชา (ไมใชหายไป) การสงใหมกจะเปนการสงซ า ซง seq
ไดจดการเรองเกยวกบขอมลซ าได ผรบตองระบเลข seq ของ pkt ทก าลง
ถก ACKed
ตองใชการนบเวลาถอยหลง (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
ขณะ rdt30 ด าเนนการ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
ขณะ rdt30 ด าเนนการ
Transport Layer 3-42
ประสทธภาพของ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
บตแรกของแพคเกจกถกสง t = 0
ผสง ผรบ
RTT
บตสดทายของแพคเกจถกสง t = L R
บตแรกของแพคเกจมาถง บตสดทายของแพคเกจมาถง สง ACK
ไดรบ ACK สงแพคเกจตอไป t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols แบบ pipelined
pipelining ผสงสงหลาย packet ไปยงผรบทง ๆ ท pkt เหลานนยงไมไดรบการยนยนตอบรบ (not yet acked) ชวงของหมายเลข sequence จะตองเพมขน ตองพกขอมล (buffer) ทผสงและผรบ
protocols แบบ pipelined แบบทวไปมสองแบบ go-Back-N selective repeat
Transport Layer 3-45
Pipelining ชวยเพม utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols แบบ pipeline ภาพรวม
Go-back-N ผสงสามารถสงแพคเกจทไมยงถก
ack ไดไมเกน N แพคเกจใน pipeline
ผรบแคสง cumulative ack ไม ack packet ถามนกอใหเกด gap
ผสงจบเวลาส าหรบแพคเกจทสงไป
นานทสดทยงไมได ack เมอเวลาหมด ผสงจะสงแพคเกจ
ทงหมดทยงไมไดรบ ack อกครง
Selective Repeat ผสงสามารถสงแพคเกจทไมยงถก ack ได
ไมเกน N แพคเกจใน pipeline
ผรบจะตองสง ack กลบใหแตละแพคเกจ
ผสงจะจบเวลาส าหรบแตละแพคเกจท
ไมได ack เมอเวลาส าหรบแพคเกจใดหมด ผสงจะสง
เฉพาะแพคเกจนนเทานน
Transport Layer 3-47
Go-Back-N ผสง
หมายเลข seq (k bit) จะอยใน header ของ packet อนญาตใหขนาด ldquowindowrdquo (ของ pkt ทตดกนและยงไมถก ack) ไมเกน N
ACK(n) จะ ack แพคเกจทงหมดไปจนถงทมหมายเลข seq เทากบ n - ldquoการ ACK แบบรวม (cumulative ACK)rdquo อาจมการไดรบ ACKs หมายเลข seq เดมซ า (ดรายละเอยดดาน receiver)
มการจบเวลาส าหรบแพคเกจทเดนทางอย ซงเดนทางนานทสดและยงไมได ACK (pkt ทมหมายเลข seq นอยทสดใน window)
timeout(n) เวลาหมดท pkt n ผสงจะสง pkt n และ pkt ทงหมดใน window (ซงมหมายเลข seq สงกวา n) อกครง
Transport Layer 3-48
GBN FSM ดานผสงทเพมจากของเดม
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum
out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM ดานผรบทเพมจากของเดม
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
ผ รบ Ack แตละแพคเกจทไดรบมาถกตอง เกบ (buffer) แพคเกจ เทาทจ าเปน เพอทจะสงขอมลทเรยงล าดบแลว ไปยง layer
บนไดในทายทสด
ผสงแคสงแพคเกจซ าเฉพาะแพคเกจทไมไดรบ Ack เทานน ตวจบเวลา (ทางฝงผสง) จะจบเวลาของแตละแพคเกจทไมไดรบ Ack
Window ของผสง มหมายเลข seq อย N หมายเลขตดกน จ ากดหมายเลข seq ของแพตเกจทสงไปแลว และไมไดรบ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
ขอมลมาจาก layer ดานบน ถามหมายเลข seq วางใน window ให
สง pkt ได
timeout(n) สง pkt n ซ า จบเวลาใหม
ACK(n) in [sendbase sendbase+N] รวา ผรบไดรบ pkt n แลว ถา n เกดเปนหมายเลขแรกสดในหนาตาง
(n เทากบ sendbase) ทไมได ถก ack เลอน window ไปทางดานขวา โดยเลอนไปยงหมายเลขทไมไดถก ack
ผสง pkt n in [rcvbase rcvbase+N-1] สง ACK(n) ถาไมเรยงตามล าดบ buffer ถาตามล าดบ สง (รวมถงใหสง pkt ท
เรยงตามล าดบและอยในบฟเฟอร) เลอน window ไปทหมายเลข seq ถดไปของ pkt ทยงไมไดรบจากผสง
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise ทงไปไมตองสนใจ
ผรบ
Transport Layer 3-54
ขณะ Selective repeat ด าเนนการ
สง pkt0
sender receiver
รบ pkt0 สง ack0
รบ pkt1 สง ack1
รบ pkt3 buffer สง ack3 รบ ack0 สง pkt4
รบ ack1 สง pkt5
pkt 2 timeout send pkt2
X loss
รบ pkt4 buffer สง ack4
รบ pkt5 buffer สง ack5
รบ pkt2 deliver pkt2
pkt3 pkt4 pkt5 สง ack2
บนทก ack3 มาถงแลว
sender window (N=4)
บนทก ack4 มาถงแลว บนทก ack4 มาถงแลว
Q เกดอะไรขนเมอ ack2 มาถง
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
สง pkt1 สง pkt2
สง pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
ตวอยาง หมายเลข seq 0 1 2 3 ขนาดของ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
ผรบไมสามารถเหนดานผสงได พฤตกรรมผรบจะเหมอนกนทง 2 สถานการณ
มบางอยางทผด (มาก)
ผรบไมเหนถงความแตกตางของทง 2 เหตการณจ าลองน
ในเหตการณจ าลอง (b) ขอมลเกาทถกสงซ า เมอผรบรบมา จะนกวาเปนขอมลใหม
Q ขนาดของ seq กบขนาดของ
window เกยวของกนยงไงเพอทจะหลกเลยงปญหาในตวอยาง (b)
Transport Layer 3-56
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-57
TCP ภาพรวม RFCs 79311221323 2018 2581
ขอมลแบบสองทศทาง มการสงขอมลทงไปและกลบในการ
เชอมตอ (connection) เดยวกน MSS ขนาด segment ทใหญสดท
TCP จะรบได (Max Segment Size)
connection-oriented handshaking (การแลกเปลยนของ
ขอความควบคม) ตงคาสถานะตงตนใหผสงและผรบ กอนการแลกเปลยนขอความ
flow controlled ผสงจะไมสงขอมลเกนกวาทผรบจะรบ
ได
point-to-point (สถานทนง-ไป-สถานทนง) ผสงหนงคน ผรบหนงคน
สายขอมลเปนไบตทเรยงล าดบและขอมลไมสญหาย (reliable in-order byte steam) ไมม ldquoขอบเขตrdquo ของขอความ
(ขอความจะมาถงผรบตอเนองกน)
pipelined การควบคมความคบคงและการควบคม
อตราการไหลของ TCP จะก าหนดขนาดของ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG ขอมลเรงดวน (โดยทว ๆ ไป ไมถกใช)
ACK ACK valid
PSH ผลกขอมลใหชน app (โดยทว ๆ ไป ไมถกใช)
RST SYN FIN สรางการเชอตอ
(ค าสง setup teardown)
จ านวน bytes ท ผรบเตมใจจะรบ
นบโดยใช byte ของขอมล (ไมใช segment)
Internet checksum
(เหมอนใน UDP)
Transport Layer 3-59
TCP seq numbers ACKs
หมายเลข sequence เลขของ byte stream จะเปน byte
แรกของขอมลของ segment น acknowledgements เลข seq ของ byte ถดไปทอกดานหนง
คาดหวงวาจะได cumulative ACK (ACK แบบรวม)
Q ผรบจดการกบ segment ทมาถงไมเรยงล าดบอยางไร A TCP ไมมรายละเอยดสวนน ndash ขนอย
กบคนทจะมาเขยนโปรแกรม TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาเขามาถงผสง
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาออกจากผสง
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
เหตการณจ าลอง telnet อยางงาย
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q เราควรจะก าหนด time out ไวทเทาใด
มากกวาเวลาของ RTT แตเวลาของ RTT นนแปรปรวน
ก าหนดไวนอยเกนไป timeout กอนก าหนด ท าใหมการ retransmissions โดยไมจ าเปน
ก าหนดไวมากเกนไป ระบบตอบสนองตอการสญหายของ segment ชาเกนไป
Q จะประมาณเวลาของ RTT อยางไร
SampleRTT วดจากระยะเวลาตงแตเรมสง sengment จนกระทงไดรบACK ไมสนใจการ retransmissions
SampleRTT มคาแปรปรวน เราตองการประมาณเวลาของ RTT ให smooth กวา ใชคาเฉลยของคาหลาย ๆ คา ไมใชแค
เวลาของ SampleRTT ปจจบน
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
คาเฉลยของการเคลอนทถวงน าหนกแบบ exponential คา SampleRTT ทในอดตจะมผลตอ EstimatedRTT ลดลงแบบ exponentially โดยทวไปจะก าหนดคา = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
ชวงเวลาของ timeout EstimatedRTT บวกกบระยะเวลาทเผอเอาไว ยงคาของ EstimatedRTT ทแปรปรวนมากเทาไร -gt ระยะเวลาทเผอความมากขนตาม
มประเมนคาการเปลยนแปลงของ SampleRTT จาก EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoชวงเวลาทเผอrdquo
Transport Layer 3-64
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP สรางบรการแบบ reliable อยบนบรการของ IP ทเปนแบบ unreliable segments ถกสงแบบ pipeline cumulative acks ม timer ส าหรบสงใหมคาตวเดยว
TCP สง segment ใหมเมอ เหตการณ timeout ไดรบ acks ซ า ๆ กน
เรามาเรมตนพจารณาทางดานผสงของ TCP อยางงายกอน ยงไมตองสนใจ acks ซ า ยงไมตองสนใจการควบคม flow และ
ความคบคง
Transport Layer 3-66
เหตการณของ TCP sender
เมอไดขอมลจาก app สราง segment ดวยหมายเลข seq เลข seq คอหมายเลขของไบตแรก
ของขอมลในแตละ segment หาก timer ยงไมเคยถกตง จะเรม
ตงเวลา การตงเวลาเพอจบเวลาส าหรบ
segment เกาทสดยงไมไดรบ ack ชวงเวลาทหมดอาย
TimeOutInterval
timeout สงใหมเฉพาะ segment ทเกด
timeout ตงเวลานบใหม เมอไดรบ ack ถา ack เปน ack ของ segment
กอนหนายงไมไดรบ ack Update สงทรวา ถก ACK แลว เรมตงเวลานบ ถายงคงม segment
ทยงไมไดรบ acked
Transport Layer 3-67
ดานผสงของ TCP (อยางงาย)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
การสราง ACK ของ TCP [RFC 1122 RFC 2581]
เหตการณทผรบ เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ) โดยขอมลทงหมดจนถงเลข seq ทคาดหวงไว ถก ACK หมดแลว
เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ ท าให ไมม gap ใน segment ทไดมา) แตมบาง segment ยงไมได ACK
Segment มาถงแบบไมเรยงตามล าดบ โดยมเลข seq สงกวาทตองการ ท าใหม gap (ชองโหว) เกดขน Segment ท ามาถง ทจะเตมบางสวนหรอเตมเตมชองโหว
TCP receiver action อยาเพงสง ACK รออก segment นง โดยรอสก 500ms หากยงไมม segment มา กสง ACK สง ACK แบบรวม (cumulative) ไปทนทในครงเดยว ซงจะเปนการ Ack segment ทมาแบบเรยงตามล าดบทงสอง segments สง ACK ซ า ไปทนท โดยใสเลข seq ของ byte ทตองการ สง ACK แบบรวมทนท โดย segment ทจะ Ack เรมจากดานทนอยกวาของ gap
Transport Layer 3-71
TCP fast retransmit
ระยะเวลาในการ time-out มกจะคอนขางยาว (โดยเปรยบเทยบ) ท าใหใชเวลาคอนขางนานกอนทจะ
สง packet อกครง
แกโดย ตรวจสอบการสญเสย pack โดยดท ACKs ทซ า ๆ กน ผสงมกสง segment ตด ๆ กน ดงนน ถา segment หนงหายไป จง
เปนไปไดทจะม ACKs ซ า ๆ กนจ านวนมาก
ถาผสงไดรบ ACKs ส าหรบขอมลเดยวกน 3 ACKS (ACKs ทซ ากนสามครง) ผสงตองสง seq ทยงไมถก acked (ระบเลข seq ทเลกทสด) มแนวโนมวา segment ทยงไมถก
ack จะหายไปเลย ดงนน จงไมตองรอใหหมดเวลา
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-74
TCP flow control application
process
buffer ดานผรบ ของ TCP socket
TCP code
IP code
application
OS
protocol stack ดานผรบ
application ลบขอมลจาก buffer ของ TCP socket hellip
hellip ชากวา TCP สงขอมล ขนไป (ขณะทผสงก าลงจะสง)
from sender
ผรบสามารถควบคมผสงได ดงนน ผสงจะไมสงขอมลเรวไป หรอ มากเกนไปจนลน (Overflow) buffer ของผรบ
flow control
Transport Layer 3-75
การควบคมการไหลขอมลของ TCP
ขอมลทอย buffer
buffer สวนทยงวาง rwnd
RcvBuffer
สวนของขอมล (payload) ใน segment ของ TCP
ไปยง process ของ application
ผรบระบขนาดของ buffer ทวางไวใน field rwnd ทอยในสวนหวของ TCP ทจะสงไปยงผสง ผเขยนโปรแกรมระบขนาดของ RcvBuffer ได
โดยใช API ตงคา option ของ socket (คาเรมตนทวไปคอ 4096 ไบต)
ทกระบบปฏบตการจะปรบขนาด RcvBuffer อตโนมต
ผสงจ ากดจ านวนของขอมลทยงไมถก acked (ldquoอยในระหวางการเดนทางrdquo) ใหเทากบคา rwnd ของขอมลผรบ
เปนการรบประกนวา buffer ของผรบจะไมลน
การbuffer ในดานของผรบ
Transport Layer 3-76
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-77
การจดการกบการเชอมตอ กอนทจะมการแลกเปลยนขอมลกน ผสงและผรบตองตกลงกนกอน ตกลงรวมในการสรางการเชอมตอ (แตละคนจะรวาอกฝายอยากจะเชอมตอหรอไม) ตกลงคาพารามเตอรส าหรบการเชอมตอ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake จะท างานไดเสมอไปหรอไมบน network
ความลาชาอาจเปลยนไป ขอความอาจถกสงซ าตวอยาง (เชน
req_conn(x)) เนองจากการสญหายของขอมล
ขอมลอาจสลบกน ไมสามารถรไดวาอกฝงไดรบหรอไม
ไดรบขอมลอะไร
2-way handshake
มาคยกนเถอะ
ตกลง ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-79
เหตการณผดพลาดของ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-80
3-way handshake ของ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM ของ 3-way handshake ของ TCP
Transport Layer 3-82
TCP การหยดการเชอมตอ
client server เลกเชอมตอทแตละดานของการเชอมตอ โดยแตละดานจะสง TCP segment ดวย FIN bit = 1
ตอบกลบ FIN ดวย ACK ในขณะทรบ FIN ACK กสามารถรวมอยในแพคเกจทสง FIN มาไดดวย
แตละดานสามารถสง FIN ไดพรอม ๆ กน
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP การหยดการเชอมตอ
Transport Layer 3-84
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-85
ความคบคง ความหมายไมเปนทางการ ldquoเมอจ านวนคนสงมากเกนไป ก าลงสงขอมลมาก
เกนไปดวยอตราการสงเรวเกนกวาท Network จะรบไหวrdquo แตกตางจาก flow control ผลทอาจทเกดขนจากความคบคง
packets หาย (buffer ลนท routers) ลาชามาก (เขาควใน buffers ของ router)
เปนปญหาทคนสนใจตด 10 อนดบตนๆ
หลกการของการควบคมความคบคงของเครอขาย
Transport Layer 3-86
ตนเหตและผลของความคบคง เหตการณ 1
มผสงและผรบอยางละสองคน Router 1 ตว ไมจ ากด buffers ความจของ link R ไมมการสงขอมลซ า
อตราขอมลทสงส าเรจตอหนงการเชอมตอ R2
buffer ท link ขาออกม buffer ไมจกด
Host A
อตราการสงขอมลตนฉบบ lin
Host B
อตราขอมลทสงส าเรจ lout
R2
R2
lou
t
lin R2 de
lay
lin
ดเลยจะมากขนเมออตราสงขอมลตนฉบบเขาใกลความจของ link
Transport Layer 3-87
Router 1 ตว Buffer แตมขนาด buffer จ ากด ตองสง pkt ไปซ าถา pkt นน timeout
ขอมลเขาของชน application = ขอมลออกจากชน application lin = lout
ขอมลเขาของชน transport จะรวมทตองสงซ าดวย lin lin
Buffer ของ link ทใชรวมกนซงมขนาดจ ากด
Host A
lin ขอมลตนฉบบ
Host B
lout lin ขอมลตนฉบบบวกกบ ขอมลทตองสงซ า
lsquo
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-88
ในอดมคต สมมตผสงรความเปนไปในเครอขาย ผสงสงเฉพาะตอนทเราเตอรม buffer เหลออย
Buffer ของ link ทแชรอยางจ ากด
lout copy
ม buffer วาง
R2
R2
lou
t
lin
Host B
A
ตนเหตและผลของความคบคง เหตการณ 2
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-89
lout copy
no buffer space
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
A
Host B
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
เมอสงขอมลท R2 บาง packets ถกสงซ า แต goodput ยงคงมคาลเขาหา R2 (ท าไม)
A
Host B
ตนเหตและผลของความคบคง เหตการณ 2
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Host B
ในความเปนจรง มการสงซ า packets หายหรอตกหลนระหวาง
เสนทางเนองจาก buffers เตม แตบางครง Timer ของผสงหมดเวลาลง
กอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-92
R2
lou
t
ldquoผลrdquo ของความคบคง เพอใหไดขอมลในอตราทตองการ (goodput) ตองท างานมากขน (สงซ า) เมอตองสง packets ซ าโดยทไมจ าเปน link จะตองล าเลยงหลาย copy ของ
ขอมลเดยวกน ท าให goodput ลดลง
R2 lin
ตนเหตและผลของความคบคง เหตการณ 2
ในความเปนจรง มการสงซ า 1 packets หายหรอตกหลนระหวางเสนทางเนองจาก buffers เตม 2 แตบางครง Timer ของผสงหมดเวลาลงกอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Transport Layer 3-93
มผสงขอมลทง 4 โฮสต เสนทางตองผานหลายจด หมดเวลาสงไปขอมลซ า
Q เกดอะไรขนเมอ λin และ λinrsquo เพมขน
Buffer ของเสนทางการสงขอมลทใชรวมกนมขนาดจ ากด
Host A lout
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
Host B
Host C Host D
A เมอ λinrsquo ของขอมลเสนสแดงมขนาดเพมขน ขอมลใน
เสนสน าเงนกจะถก drop ท าให throughput ของ connection สน าเงนเหลอ 0
lin ขอมลตนฉบบ lin ขอมลตนฉบบ บวกกบ
ขอมลทตองสงซ า
Transport Layer 3-94
อกหนง ldquoผลเสยrdquo ของความคบคง เมอแพกเกจถกทงไป นนกเทากบวา ทรยากรเครอขาย (ทใชสงขอมลกอน
หนาทขอมลนจะถกทง) ถกใชไปอยางไรคา
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
แนวทางในการควบคมความคบคงของขอมล
2 แนวทางในการควบคมความคบคง
การควบคมความคบคงโดยใชแคเครองปลายทาง (end-end)
ไมมการแจงกลบ (feedback) จากเครอขาย
ความคบคงของเครอขายจะถกเดาโดยเครองทอยปลายทางทคอยสงเกต loss delay
เปนวธของ TCP
การควบคมความคบคงโดยใหอปกรณเครอขายชวย
routers จะท าการแจง feedback ไปทระบบปลายทาง ใช bit 1 bit เพอระบถงความ
แออด (SNA DECbit TCPIP ECN ATM) หรอ ระบอตราการสงทชดเจน
ส าหรบผสง
Transport Layer 3-96
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
ABR available bit rate ldquoบรการทมความยดหยนrdquo ถาเสนทางของผสง ldquoมขอมลนอยกวา
ความจะมากrdquo ผสงจะใชประโยชนจาก
bandwidth ทเหลออย ถา path ของผสงแออด
ผสงจะคอย ๆ ลดอตราสงใหเหลอเทาอตราการสงขนต าทรบประกนไว
RM (resource management) cells สงโดยผสง แทรก ๆ ไปกบ cell ทเปนขอมล bits ใน RM cell ถกตงคาโดย switches
(ldquoเครอขายคอยชวยrdquo) NI bit ไมเพมอตราการสง (ความแออด
ระดบกลาง) CI bit การบงบอกถงความแออด
ผรบไมแกคาใน bit นของ RM cells และสงไปใหผสง
Transport Layer 3-97
field ขอมล ER (explicit rate) ขนาด 2 byte ใน cell RM switch ทแออดอาจลดคา ER ใน cell ดงนน อตราทผสงจะสงขอมลจะเปนอตราการสงมากทสดท link ในเสนทางจะรองรบได
bit EFCI ใน cell ขอมล ถกตงคาไวท 1 ใน switch ทมขอมลแออด ถา cell ขอมลกอนหนา RM cell ถกตงคา EFCI ผรบจะตงคา bit CI ใน cell RM ท
สงกลบใหผสง
RM cell data cell
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
Transport Layer 3-98
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-99
การควบคมความคบคงของ TCP additive increase (เพมแบบบวก) multiplicative decrease (ลดแบบเทาตว)
วธ ผสงเพมอตราสง (window size) ควานหา bandwidth ทมใหใชได จนกวาการสญหายจะเกดขน additive increase เพม cwnd ทละ 1 MSS ทก ๆ RTT จนกวาจะ pkt จะหาย multiplicative decrease ตดลด cwnd เหลอครงเดยวหลงจากการสญหาย
cwnd
ขนา
ดของ co
nges
tion
wind
ow ของผส
งแบบ
TCP
พฤตกรรมของ AIMD เปน ลกษณะฟนเลอย หา bandwidth
ขนาด window เพมแบบบวก hellip hellip จนกวาจะเกดการสญหาย (จากนน ตดลงเหลอครงนง)
time
Transport Layer 3-100
ผสงจ ากดการสง
ขนาด cwnd จะเปลยนแปลงไปมา ขนกบความคบคงของเครอขายทผสงไดรมา
อตราการสง TCP อยางคราว ๆ สงขอมลจ านวน
cwnd bytes รอ ACKS เพอประมาณคา RTT จากนนสงไบตขอมลเพม
byte สดทายท ถก ACKed สง แตยงไมถก
ACK (ldquoอยระหวางการเดนทางrdquo)
byte สดทายทสงไป
cwnd
LastByteSent-
LastByteAcked lt cwnd
ชวงเลข sequence number ของผสง
rate ~ ~ cwnd
RTT bytessec
การควบคมความคบคงของ TCP รายละเอยด
Transport Layer 3-101
TCP Slow Start
เมอเรมการเชอมตอ เพมอตราการสงแบบยกก าลง (exponentially) จนกวาจะเจอกบ loss ครงแรก เรมตนขนาด cwnd = 1 MSS เพมขนาด cwnd หนงเทาตวทก ๆ RTT นนคอ โดยเพมขนาด cwnd ไป 1 MSS
ส าหรบทก ๆ ACK ทไดรบ
สรป อตราสงเรมแรกจะชาแตคาจะเพมแบบกระโดดขนอยางรวดเรว
Host A
RTT
Host B
time
Transport Layer 3-102
TCP การหา loss และการตอบสนอง
ถา loss ถกระบโดย timeout cwnd ถกตงไวท 1 MSS จากนนหนาตางจะเพมขนเปนเลขยกก าลง (exponential เหมอนใน slow start)
จนไปถงคา threshold จากนนจะเพมขนเปนเชงเสน
ถา loss ถกระบโดยไดรบ ACK ซ า 3 ACKs (3 duplicate acks) TCP RENO
ACKs ซ า ระบถงความสามารถการสง segments ของเครอขาย
cwnd ถกตดเหลอครงนงจากนนเพมขนแบบเชงเสน
TCP Tahoe จะตงคา cwnd เปน 1 เสมอ (ไมวาจะ timeout หรอ 3 dup acks)
Transport Layer 3-103
Q เมอไร TCP ควรจะเปลยนจากการเพมขนแบบ exponential เปนแบบเชงเสน
A เมอ cwnd ถกเพมเปน 12 ของ ldquoคาทมากทสดrdquo ของมนกอนจะเกด timeout
การด าเนนการ ตวแปร ssthresh ขณะเกด Loss ssthresh จะถก
ตงคาท 12 ของคา cwnd กอนเกดเหตแปปเดยว (คา cwnd ทมากทสดกอนเกดเหตการณ)
TCP จาก slow start เปน CA (Congestion Avoidance)
Transport Layer 3-104
สรป TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput ของ TCP
คาเฉลย throughput ของ TCP เปน function ของขนาดของ window และ RTT ไมสนใจ slow start สมมตวาขอมลถกสงตลอด
W ขนาดของ window (หนวยเปน bytes) การสญเสยทเกดขน คาเฉลยขนาดของ window (จ านวน byte ทเดนทางอย) คอ frac34 W คาเฉลยของ throughput คอ 34W ตอ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP ในอนาคต TCP ใน ldquopipes ทยาวและมความจสงrdquo
ตวอยาง 1500 byte segments 100ms RTT ตองการชองทางการสงขนาด 10 Gbps
requires W = 83333 in-flight segments ความเปนไปไดของการสญหายของในชองทางการสงขอมล L [Mathis 1997]
เพอทจะมชองทางการสงขนาด 10Gbps ตองมการสญหายของขอมลเพยงแค =
210-10 ndash นอยมาก ดงนน ตองม TCP รนใหมส าหรบการสงแบบความเรวสง
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
เปาหมายของ fairness ถาม TCP session จ านวน K session ใชทรพยากร bandwidth R รวมกน แตละ session ควรจะเฉลยทรพยากรเหมอนกนท RK
TCP connection 1
router คอขวด มความจ R
ความเสมอภาค (Fairness) ของ TCP
TCP connection 2
Transport Layer 3-108
ความเสมอภาคของ TCP คออะไร session 2 session แขงกนใชทรพยากร additive increase ใหความชนเสนเทากบ 1 (session ทง 2 คอย ๆ ได throughput เพมทละ
นด) multiplicative decrease ลด throughput ไปครงหนง
R
R
เสนระบแบนดวธทใชรวมเทากน
Throuput ของ การเชอมตอท 1
congestion avoidance (CA) additive increase สญเสย ลดขนาดของ window ลงไปครงนง
congestion avoidance (CA) additive increase
สญเสย ลดขนาดของ window ลงไปครงนง
Transport Layer 3-109
ความเสมอภาค (ตอ)
ความเสมอภาค และ UDP มลตมเดยแอพพลเคชนบอยครงไม
ใช TCP ไมตองการใหอตราการสงลดลงเพราะ
การควบคมความคบคง
มลตมเดยแอพพลเคชนจงใช UDP แทน สงเสยงวดโอดวยความเรวคงท ทน
ตอการสญเสยขอมล
ความเสมอภาค การเชอมตอ TCP แบบขนาน แอพพลเคชนสามารถทจะเปดหลายการ
เชอมตอระหวางเครอง 2 เครองแบบขนานได
เวบบราวเซอรท าแบบน ตวอยางเชน link ทมความจ R ซงม 9 การ
เชอมตอ ถาแอพใหมตองการ 1 TCP จะไดรบท rate
R10 ถาแอพใหมตองการ 11 TCPs จะไดรบท R2
Transport Layer 3-110
Chapter 3 บทสรป
หลกการเบองหลงการใหบรการชนtransport multiplexing demultiplexing การสงขอมลแบบไวใจได การควบคมการไหลของขอมล การควบคมความคบคงของขอมล
กรณศกษาและการปฏบตบน internet UDP TCP
ถดไป ออกจากปลายทางของระบบ
เครอขาย (application transport layers)
เขาไปยงสแกนของเครอขาย
Transport Layer 3-22
หลกการของความนาเชอถอ data transfer ส าคญในชน application transport link
ตด top-10 ของหวขอทางดานเครอขาย
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
หลกการของความนาเชอถอ data transfer
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
ส าคญในชน application transport link ตด top-10 ของหวขอทางดานเครอขาย
Transport Layer 3-24
Reliable data transfer เรมตน
ดานผสง ดานผรบ
rdt_send() ถกเรยกจากชนดานบน (เชน โดย app) ท าหนาทผานขอมลเพอใหขอมลถกสงไป
ยงชนดานบนของผรบ
udt_send() ถกเรยกโดย rdt เพอทจะโอนถาย packet ผานชองการ
สอสารท unreliable ไปยงผรบ
rdt_rcv() ถกเรยกโดย OS เมอ OS ไดรบ packet ทมาถงชองการสอสารดานผรบ
deliver_data() ถกเรยกโดย rdt เพอใหสงขอมลไปยงชนดานบน
Transport Layer 3-25
เราจะ คอย ๆ พฒนา protocol ส าหรบการโอนถายขอมลแบบ reliable หรอ reliable
data transfer protocol (rdt) ตอนน พจารณาเฉพาะการโอนถายขอมลแบบทางเดยวกอน
แตขอมลส าหรบการควบคม (control info) จะถกสงไปกลบทงสองทาง
ใช finite state machines (FSM) เพอก าหนดการกระท าของผสงและผรบ
state 1
state 2
เหตการณทท าใหเกดการเปลยนผานของ State การกระท าขณะเปลยนผาน State
สถานะ (state) เมออยใน state ปจจบน state ถดไปจะขนอยกบเหตการณทจะ
เกดขน ณ state ปจจบน
เหตการณ การกระท า
Reliable data transfer เรมตน
Transport Layer 3-26
rdt10 การโอนถายขอมลแบบ reliable ผานชองสญญาณแบบ reliable
สมมตให ชองทางทอยขางใตเปนชองทางทเชอถอได ไมมการผดพลาดของบต ไมมขอมลสญหาย
FSMs ส าหรบผสง และ ส าหรบผ รบ ผสงสงขอมลไปยงชนดานลาง ผรบรบขอมลจากชนดานลาง
รอรบการเรยกจากชน
ดานบน packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
รอรบการเรยกจากชน
ดานลาง
rdt_rcv(packet)
ผสง ผรบ
Transport Layer 3-27
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร
acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK
negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors
sender retransmits pkt on receipt of NAK
new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 ชองทางการสอสารทม bit errors
ปกตแลว มนษยใชวธการใดในการแกไข ldquoerrorsrdquo ระหวางการสนทนา
Transport Layer 3-28
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร การตอบรบ (acknowledgements (ACKs)) ผรบแจงผสงวาไดรบ packet แลว การตอบปฏเสธ (negative acknowledgements (NAKs)) ผรบแจงผสงวา packet ม
errors sender สงขอมลซ าอกครง เมอไดรบ NAK
กลไกทเพมขน in rdt20 (เพมจาก rdt10) การตรวจจบความผดพลาด การแจงกลบ (feedback) ขอมลส าหรบการควบคม (ACKNAK) จากผรบไปยงผสง
rdt20 ชองทางการสอสารทม bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 ขอก าหนดของ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
จะเกดอะไรขนถา ACKNAK เกดเสยหาย ผสงไมรวาผรบรบ pkt ครบถวน
หรอไม ไมควรสง pkt ซ าอกครง เพราะ
pkt ซ ากน
การจดการกบขอมลทซ าซอน ผสงจะสง packet อกครงถา
ACKNAK เกดเสยหาย เตมหมายเลข sequence ใหแตละ
packet ผรบตองทง packet ทซ ากน
stop and wait ผสงท าการสงpacketและรอใหผรบตอบกลบดวย ACKNAK กอนทจะสง packet ตอไป
Transport Layer 3-33
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Transport Layer 3-35
rdt21 อภปราย
ผสง ใสหมายเลข seq ในpacket หมายเลข seq (01) กพอ
นกสท าไม ตองตรวจสอบวา ACKNAK ท
ไดรบเสยไปหรอไม จ านวนหมายเลข seq ตองเปนสอง
เทาของจ านวนสถานะ เพราะผสงตองเกบสถานะเพอldquoจ าrdquo
วา pkt ถดไปจะตองมเลข seq 0 หรอ 1
ผรบ ตองตรวจสอบวา pkt ทไดรบซ ากบ
pkt ทไดรบกอนหนาหรอไม ผรบจะเกบสถานะทระบวา 0 หรอ 1
คอหมายเลข seq ทคาดวาจะได
ขอสงเกต ผรบไมสามารถรวา ACKNAK สดทายทผสงไดรบถกตองหรอไม
Transport Layer 3-36
rdt22 protocol ทไมตองใช NAK
ท างานเหมอนกบ rdt21 แตใชแค ACKs แทนทจะสง NAK ผรบสง ACK ส าหรบ pkt สดทายทไดรบถกตอง
ฝงรบจะตองรวมหมายเลข seq ของ pkt ทก าลงถก ACK ไปดวย
จะสง ACK ซ าไปทผสงถาไมไดรบ pkt ทมหมายเลข seq ทคาดหวง ผลลพธจะออกมาเหมอนกรณทสง NAK ผสงตองสง pkt ตวลาสดไปใหมอกครง
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 ชองสญญาณทมความผดพลาดและ pkt สญหาย
เพมขอสนนษฐาน ชองสญญาณสามารถสญเสยแพคเกจ (ไมวาจะเปนขอมลหรอ ACKs) ได กลไก checksum หมายเลข seq
ACKs และ การสงซ า สามารถชวย แตมนกยงไมใชทางออก
วธ ผสงรอ ACK กลบมาในชวงเวลาท ldquoสมเหตสมผลrdquo
สง pkt เดมไปใหมอกครงถาไมไดรบ ACK ภายในชวงเวลาน
ถา pkt (หรอ ACK) มาถงลาชา (ไมใชหายไป) การสงใหมกจะเปนการสงซ า ซง seq
ไดจดการเรองเกยวกบขอมลซ าได ผรบตองระบเลข seq ของ pkt ทก าลง
ถก ACKed
ตองใชการนบเวลาถอยหลง (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
ขณะ rdt30 ด าเนนการ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
ขณะ rdt30 ด าเนนการ
Transport Layer 3-42
ประสทธภาพของ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
บตแรกของแพคเกจกถกสง t = 0
ผสง ผรบ
RTT
บตสดทายของแพคเกจถกสง t = L R
บตแรกของแพคเกจมาถง บตสดทายของแพคเกจมาถง สง ACK
ไดรบ ACK สงแพคเกจตอไป t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols แบบ pipelined
pipelining ผสงสงหลาย packet ไปยงผรบทง ๆ ท pkt เหลานนยงไมไดรบการยนยนตอบรบ (not yet acked) ชวงของหมายเลข sequence จะตองเพมขน ตองพกขอมล (buffer) ทผสงและผรบ
protocols แบบ pipelined แบบทวไปมสองแบบ go-Back-N selective repeat
Transport Layer 3-45
Pipelining ชวยเพม utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols แบบ pipeline ภาพรวม
Go-back-N ผสงสามารถสงแพคเกจทไมยงถก
ack ไดไมเกน N แพคเกจใน pipeline
ผรบแคสง cumulative ack ไม ack packet ถามนกอใหเกด gap
ผสงจบเวลาส าหรบแพคเกจทสงไป
นานทสดทยงไมได ack เมอเวลาหมด ผสงจะสงแพคเกจ
ทงหมดทยงไมไดรบ ack อกครง
Selective Repeat ผสงสามารถสงแพคเกจทไมยงถก ack ได
ไมเกน N แพคเกจใน pipeline
ผรบจะตองสง ack กลบใหแตละแพคเกจ
ผสงจะจบเวลาส าหรบแตละแพคเกจท
ไมได ack เมอเวลาส าหรบแพคเกจใดหมด ผสงจะสง
เฉพาะแพคเกจนนเทานน
Transport Layer 3-47
Go-Back-N ผสง
หมายเลข seq (k bit) จะอยใน header ของ packet อนญาตใหขนาด ldquowindowrdquo (ของ pkt ทตดกนและยงไมถก ack) ไมเกน N
ACK(n) จะ ack แพคเกจทงหมดไปจนถงทมหมายเลข seq เทากบ n - ldquoการ ACK แบบรวม (cumulative ACK)rdquo อาจมการไดรบ ACKs หมายเลข seq เดมซ า (ดรายละเอยดดาน receiver)
มการจบเวลาส าหรบแพคเกจทเดนทางอย ซงเดนทางนานทสดและยงไมได ACK (pkt ทมหมายเลข seq นอยทสดใน window)
timeout(n) เวลาหมดท pkt n ผสงจะสง pkt n และ pkt ทงหมดใน window (ซงมหมายเลข seq สงกวา n) อกครง
Transport Layer 3-48
GBN FSM ดานผสงทเพมจากของเดม
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum
out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM ดานผรบทเพมจากของเดม
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
ผ รบ Ack แตละแพคเกจทไดรบมาถกตอง เกบ (buffer) แพคเกจ เทาทจ าเปน เพอทจะสงขอมลทเรยงล าดบแลว ไปยง layer
บนไดในทายทสด
ผสงแคสงแพคเกจซ าเฉพาะแพคเกจทไมไดรบ Ack เทานน ตวจบเวลา (ทางฝงผสง) จะจบเวลาของแตละแพคเกจทไมไดรบ Ack
Window ของผสง มหมายเลข seq อย N หมายเลขตดกน จ ากดหมายเลข seq ของแพตเกจทสงไปแลว และไมไดรบ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
ขอมลมาจาก layer ดานบน ถามหมายเลข seq วางใน window ให
สง pkt ได
timeout(n) สง pkt n ซ า จบเวลาใหม
ACK(n) in [sendbase sendbase+N] รวา ผรบไดรบ pkt n แลว ถา n เกดเปนหมายเลขแรกสดในหนาตาง
(n เทากบ sendbase) ทไมได ถก ack เลอน window ไปทางดานขวา โดยเลอนไปยงหมายเลขทไมไดถก ack
ผสง pkt n in [rcvbase rcvbase+N-1] สง ACK(n) ถาไมเรยงตามล าดบ buffer ถาตามล าดบ สง (รวมถงใหสง pkt ท
เรยงตามล าดบและอยในบฟเฟอร) เลอน window ไปทหมายเลข seq ถดไปของ pkt ทยงไมไดรบจากผสง
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise ทงไปไมตองสนใจ
ผรบ
Transport Layer 3-54
ขณะ Selective repeat ด าเนนการ
สง pkt0
sender receiver
รบ pkt0 สง ack0
รบ pkt1 สง ack1
รบ pkt3 buffer สง ack3 รบ ack0 สง pkt4
รบ ack1 สง pkt5
pkt 2 timeout send pkt2
X loss
รบ pkt4 buffer สง ack4
รบ pkt5 buffer สง ack5
รบ pkt2 deliver pkt2
pkt3 pkt4 pkt5 สง ack2
บนทก ack3 มาถงแลว
sender window (N=4)
บนทก ack4 มาถงแลว บนทก ack4 มาถงแลว
Q เกดอะไรขนเมอ ack2 มาถง
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
สง pkt1 สง pkt2
สง pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
ตวอยาง หมายเลข seq 0 1 2 3 ขนาดของ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
ผรบไมสามารถเหนดานผสงได พฤตกรรมผรบจะเหมอนกนทง 2 สถานการณ
มบางอยางทผด (มาก)
ผรบไมเหนถงความแตกตางของทง 2 เหตการณจ าลองน
ในเหตการณจ าลอง (b) ขอมลเกาทถกสงซ า เมอผรบรบมา จะนกวาเปนขอมลใหม
Q ขนาดของ seq กบขนาดของ
window เกยวของกนยงไงเพอทจะหลกเลยงปญหาในตวอยาง (b)
Transport Layer 3-56
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-57
TCP ภาพรวม RFCs 79311221323 2018 2581
ขอมลแบบสองทศทาง มการสงขอมลทงไปและกลบในการ
เชอมตอ (connection) เดยวกน MSS ขนาด segment ทใหญสดท
TCP จะรบได (Max Segment Size)
connection-oriented handshaking (การแลกเปลยนของ
ขอความควบคม) ตงคาสถานะตงตนใหผสงและผรบ กอนการแลกเปลยนขอความ
flow controlled ผสงจะไมสงขอมลเกนกวาทผรบจะรบ
ได
point-to-point (สถานทนง-ไป-สถานทนง) ผสงหนงคน ผรบหนงคน
สายขอมลเปนไบตทเรยงล าดบและขอมลไมสญหาย (reliable in-order byte steam) ไมม ldquoขอบเขตrdquo ของขอความ
(ขอความจะมาถงผรบตอเนองกน)
pipelined การควบคมความคบคงและการควบคม
อตราการไหลของ TCP จะก าหนดขนาดของ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG ขอมลเรงดวน (โดยทว ๆ ไป ไมถกใช)
ACK ACK valid
PSH ผลกขอมลใหชน app (โดยทว ๆ ไป ไมถกใช)
RST SYN FIN สรางการเชอตอ
(ค าสง setup teardown)
จ านวน bytes ท ผรบเตมใจจะรบ
นบโดยใช byte ของขอมล (ไมใช segment)
Internet checksum
(เหมอนใน UDP)
Transport Layer 3-59
TCP seq numbers ACKs
หมายเลข sequence เลขของ byte stream จะเปน byte
แรกของขอมลของ segment น acknowledgements เลข seq ของ byte ถดไปทอกดานหนง
คาดหวงวาจะได cumulative ACK (ACK แบบรวม)
Q ผรบจดการกบ segment ทมาถงไมเรยงล าดบอยางไร A TCP ไมมรายละเอยดสวนน ndash ขนอย
กบคนทจะมาเขยนโปรแกรม TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาเขามาถงผสง
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาออกจากผสง
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
เหตการณจ าลอง telnet อยางงาย
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q เราควรจะก าหนด time out ไวทเทาใด
มากกวาเวลาของ RTT แตเวลาของ RTT นนแปรปรวน
ก าหนดไวนอยเกนไป timeout กอนก าหนด ท าใหมการ retransmissions โดยไมจ าเปน
ก าหนดไวมากเกนไป ระบบตอบสนองตอการสญหายของ segment ชาเกนไป
Q จะประมาณเวลาของ RTT อยางไร
SampleRTT วดจากระยะเวลาตงแตเรมสง sengment จนกระทงไดรบACK ไมสนใจการ retransmissions
SampleRTT มคาแปรปรวน เราตองการประมาณเวลาของ RTT ให smooth กวา ใชคาเฉลยของคาหลาย ๆ คา ไมใชแค
เวลาของ SampleRTT ปจจบน
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
คาเฉลยของการเคลอนทถวงน าหนกแบบ exponential คา SampleRTT ทในอดตจะมผลตอ EstimatedRTT ลดลงแบบ exponentially โดยทวไปจะก าหนดคา = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
ชวงเวลาของ timeout EstimatedRTT บวกกบระยะเวลาทเผอเอาไว ยงคาของ EstimatedRTT ทแปรปรวนมากเทาไร -gt ระยะเวลาทเผอความมากขนตาม
มประเมนคาการเปลยนแปลงของ SampleRTT จาก EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoชวงเวลาทเผอrdquo
Transport Layer 3-64
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP สรางบรการแบบ reliable อยบนบรการของ IP ทเปนแบบ unreliable segments ถกสงแบบ pipeline cumulative acks ม timer ส าหรบสงใหมคาตวเดยว
TCP สง segment ใหมเมอ เหตการณ timeout ไดรบ acks ซ า ๆ กน
เรามาเรมตนพจารณาทางดานผสงของ TCP อยางงายกอน ยงไมตองสนใจ acks ซ า ยงไมตองสนใจการควบคม flow และ
ความคบคง
Transport Layer 3-66
เหตการณของ TCP sender
เมอไดขอมลจาก app สราง segment ดวยหมายเลข seq เลข seq คอหมายเลขของไบตแรก
ของขอมลในแตละ segment หาก timer ยงไมเคยถกตง จะเรม
ตงเวลา การตงเวลาเพอจบเวลาส าหรบ
segment เกาทสดยงไมไดรบ ack ชวงเวลาทหมดอาย
TimeOutInterval
timeout สงใหมเฉพาะ segment ทเกด
timeout ตงเวลานบใหม เมอไดรบ ack ถา ack เปน ack ของ segment
กอนหนายงไมไดรบ ack Update สงทรวา ถก ACK แลว เรมตงเวลานบ ถายงคงม segment
ทยงไมไดรบ acked
Transport Layer 3-67
ดานผสงของ TCP (อยางงาย)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
การสราง ACK ของ TCP [RFC 1122 RFC 2581]
เหตการณทผรบ เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ) โดยขอมลทงหมดจนถงเลข seq ทคาดหวงไว ถก ACK หมดแลว
เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ ท าให ไมม gap ใน segment ทไดมา) แตมบาง segment ยงไมได ACK
Segment มาถงแบบไมเรยงตามล าดบ โดยมเลข seq สงกวาทตองการ ท าใหม gap (ชองโหว) เกดขน Segment ท ามาถง ทจะเตมบางสวนหรอเตมเตมชองโหว
TCP receiver action อยาเพงสง ACK รออก segment นง โดยรอสก 500ms หากยงไมม segment มา กสง ACK สง ACK แบบรวม (cumulative) ไปทนทในครงเดยว ซงจะเปนการ Ack segment ทมาแบบเรยงตามล าดบทงสอง segments สง ACK ซ า ไปทนท โดยใสเลข seq ของ byte ทตองการ สง ACK แบบรวมทนท โดย segment ทจะ Ack เรมจากดานทนอยกวาของ gap
Transport Layer 3-71
TCP fast retransmit
ระยะเวลาในการ time-out มกจะคอนขางยาว (โดยเปรยบเทยบ) ท าใหใชเวลาคอนขางนานกอนทจะ
สง packet อกครง
แกโดย ตรวจสอบการสญเสย pack โดยดท ACKs ทซ า ๆ กน ผสงมกสง segment ตด ๆ กน ดงนน ถา segment หนงหายไป จง
เปนไปไดทจะม ACKs ซ า ๆ กนจ านวนมาก
ถาผสงไดรบ ACKs ส าหรบขอมลเดยวกน 3 ACKS (ACKs ทซ ากนสามครง) ผสงตองสง seq ทยงไมถก acked (ระบเลข seq ทเลกทสด) มแนวโนมวา segment ทยงไมถก
ack จะหายไปเลย ดงนน จงไมตองรอใหหมดเวลา
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-74
TCP flow control application
process
buffer ดานผรบ ของ TCP socket
TCP code
IP code
application
OS
protocol stack ดานผรบ
application ลบขอมลจาก buffer ของ TCP socket hellip
hellip ชากวา TCP สงขอมล ขนไป (ขณะทผสงก าลงจะสง)
from sender
ผรบสามารถควบคมผสงได ดงนน ผสงจะไมสงขอมลเรวไป หรอ มากเกนไปจนลน (Overflow) buffer ของผรบ
flow control
Transport Layer 3-75
การควบคมการไหลขอมลของ TCP
ขอมลทอย buffer
buffer สวนทยงวาง rwnd
RcvBuffer
สวนของขอมล (payload) ใน segment ของ TCP
ไปยง process ของ application
ผรบระบขนาดของ buffer ทวางไวใน field rwnd ทอยในสวนหวของ TCP ทจะสงไปยงผสง ผเขยนโปรแกรมระบขนาดของ RcvBuffer ได
โดยใช API ตงคา option ของ socket (คาเรมตนทวไปคอ 4096 ไบต)
ทกระบบปฏบตการจะปรบขนาด RcvBuffer อตโนมต
ผสงจ ากดจ านวนของขอมลทยงไมถก acked (ldquoอยในระหวางการเดนทางrdquo) ใหเทากบคา rwnd ของขอมลผรบ
เปนการรบประกนวา buffer ของผรบจะไมลน
การbuffer ในดานของผรบ
Transport Layer 3-76
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-77
การจดการกบการเชอมตอ กอนทจะมการแลกเปลยนขอมลกน ผสงและผรบตองตกลงกนกอน ตกลงรวมในการสรางการเชอมตอ (แตละคนจะรวาอกฝายอยากจะเชอมตอหรอไม) ตกลงคาพารามเตอรส าหรบการเชอมตอ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake จะท างานไดเสมอไปหรอไมบน network
ความลาชาอาจเปลยนไป ขอความอาจถกสงซ าตวอยาง (เชน
req_conn(x)) เนองจากการสญหายของขอมล
ขอมลอาจสลบกน ไมสามารถรไดวาอกฝงไดรบหรอไม
ไดรบขอมลอะไร
2-way handshake
มาคยกนเถอะ
ตกลง ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-79
เหตการณผดพลาดของ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-80
3-way handshake ของ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM ของ 3-way handshake ของ TCP
Transport Layer 3-82
TCP การหยดการเชอมตอ
client server เลกเชอมตอทแตละดานของการเชอมตอ โดยแตละดานจะสง TCP segment ดวย FIN bit = 1
ตอบกลบ FIN ดวย ACK ในขณะทรบ FIN ACK กสามารถรวมอยในแพคเกจทสง FIN มาไดดวย
แตละดานสามารถสง FIN ไดพรอม ๆ กน
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP การหยดการเชอมตอ
Transport Layer 3-84
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-85
ความคบคง ความหมายไมเปนทางการ ldquoเมอจ านวนคนสงมากเกนไป ก าลงสงขอมลมาก
เกนไปดวยอตราการสงเรวเกนกวาท Network จะรบไหวrdquo แตกตางจาก flow control ผลทอาจทเกดขนจากความคบคง
packets หาย (buffer ลนท routers) ลาชามาก (เขาควใน buffers ของ router)
เปนปญหาทคนสนใจตด 10 อนดบตนๆ
หลกการของการควบคมความคบคงของเครอขาย
Transport Layer 3-86
ตนเหตและผลของความคบคง เหตการณ 1
มผสงและผรบอยางละสองคน Router 1 ตว ไมจ ากด buffers ความจของ link R ไมมการสงขอมลซ า
อตราขอมลทสงส าเรจตอหนงการเชอมตอ R2
buffer ท link ขาออกม buffer ไมจกด
Host A
อตราการสงขอมลตนฉบบ lin
Host B
อตราขอมลทสงส าเรจ lout
R2
R2
lou
t
lin R2 de
lay
lin
ดเลยจะมากขนเมออตราสงขอมลตนฉบบเขาใกลความจของ link
Transport Layer 3-87
Router 1 ตว Buffer แตมขนาด buffer จ ากด ตองสง pkt ไปซ าถา pkt นน timeout
ขอมลเขาของชน application = ขอมลออกจากชน application lin = lout
ขอมลเขาของชน transport จะรวมทตองสงซ าดวย lin lin
Buffer ของ link ทใชรวมกนซงมขนาดจ ากด
Host A
lin ขอมลตนฉบบ
Host B
lout lin ขอมลตนฉบบบวกกบ ขอมลทตองสงซ า
lsquo
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-88
ในอดมคต สมมตผสงรความเปนไปในเครอขาย ผสงสงเฉพาะตอนทเราเตอรม buffer เหลออย
Buffer ของ link ทแชรอยางจ ากด
lout copy
ม buffer วาง
R2
R2
lou
t
lin
Host B
A
ตนเหตและผลของความคบคง เหตการณ 2
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-89
lout copy
no buffer space
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
A
Host B
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
เมอสงขอมลท R2 บาง packets ถกสงซ า แต goodput ยงคงมคาลเขาหา R2 (ท าไม)
A
Host B
ตนเหตและผลของความคบคง เหตการณ 2
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Host B
ในความเปนจรง มการสงซ า packets หายหรอตกหลนระหวาง
เสนทางเนองจาก buffers เตม แตบางครง Timer ของผสงหมดเวลาลง
กอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-92
R2
lou
t
ldquoผลrdquo ของความคบคง เพอใหไดขอมลในอตราทตองการ (goodput) ตองท างานมากขน (สงซ า) เมอตองสง packets ซ าโดยทไมจ าเปน link จะตองล าเลยงหลาย copy ของ
ขอมลเดยวกน ท าให goodput ลดลง
R2 lin
ตนเหตและผลของความคบคง เหตการณ 2
ในความเปนจรง มการสงซ า 1 packets หายหรอตกหลนระหวางเสนทางเนองจาก buffers เตม 2 แตบางครง Timer ของผสงหมดเวลาลงกอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Transport Layer 3-93
มผสงขอมลทง 4 โฮสต เสนทางตองผานหลายจด หมดเวลาสงไปขอมลซ า
Q เกดอะไรขนเมอ λin และ λinrsquo เพมขน
Buffer ของเสนทางการสงขอมลทใชรวมกนมขนาดจ ากด
Host A lout
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
Host B
Host C Host D
A เมอ λinrsquo ของขอมลเสนสแดงมขนาดเพมขน ขอมลใน
เสนสน าเงนกจะถก drop ท าให throughput ของ connection สน าเงนเหลอ 0
lin ขอมลตนฉบบ lin ขอมลตนฉบบ บวกกบ
ขอมลทตองสงซ า
Transport Layer 3-94
อกหนง ldquoผลเสยrdquo ของความคบคง เมอแพกเกจถกทงไป นนกเทากบวา ทรยากรเครอขาย (ทใชสงขอมลกอน
หนาทขอมลนจะถกทง) ถกใชไปอยางไรคา
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
แนวทางในการควบคมความคบคงของขอมล
2 แนวทางในการควบคมความคบคง
การควบคมความคบคงโดยใชแคเครองปลายทาง (end-end)
ไมมการแจงกลบ (feedback) จากเครอขาย
ความคบคงของเครอขายจะถกเดาโดยเครองทอยปลายทางทคอยสงเกต loss delay
เปนวธของ TCP
การควบคมความคบคงโดยใหอปกรณเครอขายชวย
routers จะท าการแจง feedback ไปทระบบปลายทาง ใช bit 1 bit เพอระบถงความ
แออด (SNA DECbit TCPIP ECN ATM) หรอ ระบอตราการสงทชดเจน
ส าหรบผสง
Transport Layer 3-96
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
ABR available bit rate ldquoบรการทมความยดหยนrdquo ถาเสนทางของผสง ldquoมขอมลนอยกวา
ความจะมากrdquo ผสงจะใชประโยชนจาก
bandwidth ทเหลออย ถา path ของผสงแออด
ผสงจะคอย ๆ ลดอตราสงใหเหลอเทาอตราการสงขนต าทรบประกนไว
RM (resource management) cells สงโดยผสง แทรก ๆ ไปกบ cell ทเปนขอมล bits ใน RM cell ถกตงคาโดย switches
(ldquoเครอขายคอยชวยrdquo) NI bit ไมเพมอตราการสง (ความแออด
ระดบกลาง) CI bit การบงบอกถงความแออด
ผรบไมแกคาใน bit นของ RM cells และสงไปใหผสง
Transport Layer 3-97
field ขอมล ER (explicit rate) ขนาด 2 byte ใน cell RM switch ทแออดอาจลดคา ER ใน cell ดงนน อตราทผสงจะสงขอมลจะเปนอตราการสงมากทสดท link ในเสนทางจะรองรบได
bit EFCI ใน cell ขอมล ถกตงคาไวท 1 ใน switch ทมขอมลแออด ถา cell ขอมลกอนหนา RM cell ถกตงคา EFCI ผรบจะตงคา bit CI ใน cell RM ท
สงกลบใหผสง
RM cell data cell
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
Transport Layer 3-98
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-99
การควบคมความคบคงของ TCP additive increase (เพมแบบบวก) multiplicative decrease (ลดแบบเทาตว)
วธ ผสงเพมอตราสง (window size) ควานหา bandwidth ทมใหใชได จนกวาการสญหายจะเกดขน additive increase เพม cwnd ทละ 1 MSS ทก ๆ RTT จนกวาจะ pkt จะหาย multiplicative decrease ตดลด cwnd เหลอครงเดยวหลงจากการสญหาย
cwnd
ขนา
ดของ co
nges
tion
wind
ow ของผส
งแบบ
TCP
พฤตกรรมของ AIMD เปน ลกษณะฟนเลอย หา bandwidth
ขนาด window เพมแบบบวก hellip hellip จนกวาจะเกดการสญหาย (จากนน ตดลงเหลอครงนง)
time
Transport Layer 3-100
ผสงจ ากดการสง
ขนาด cwnd จะเปลยนแปลงไปมา ขนกบความคบคงของเครอขายทผสงไดรมา
อตราการสง TCP อยางคราว ๆ สงขอมลจ านวน
cwnd bytes รอ ACKS เพอประมาณคา RTT จากนนสงไบตขอมลเพม
byte สดทายท ถก ACKed สง แตยงไมถก
ACK (ldquoอยระหวางการเดนทางrdquo)
byte สดทายทสงไป
cwnd
LastByteSent-
LastByteAcked lt cwnd
ชวงเลข sequence number ของผสง
rate ~ ~ cwnd
RTT bytessec
การควบคมความคบคงของ TCP รายละเอยด
Transport Layer 3-101
TCP Slow Start
เมอเรมการเชอมตอ เพมอตราการสงแบบยกก าลง (exponentially) จนกวาจะเจอกบ loss ครงแรก เรมตนขนาด cwnd = 1 MSS เพมขนาด cwnd หนงเทาตวทก ๆ RTT นนคอ โดยเพมขนาด cwnd ไป 1 MSS
ส าหรบทก ๆ ACK ทไดรบ
สรป อตราสงเรมแรกจะชาแตคาจะเพมแบบกระโดดขนอยางรวดเรว
Host A
RTT
Host B
time
Transport Layer 3-102
TCP การหา loss และการตอบสนอง
ถา loss ถกระบโดย timeout cwnd ถกตงไวท 1 MSS จากนนหนาตางจะเพมขนเปนเลขยกก าลง (exponential เหมอนใน slow start)
จนไปถงคา threshold จากนนจะเพมขนเปนเชงเสน
ถา loss ถกระบโดยไดรบ ACK ซ า 3 ACKs (3 duplicate acks) TCP RENO
ACKs ซ า ระบถงความสามารถการสง segments ของเครอขาย
cwnd ถกตดเหลอครงนงจากนนเพมขนแบบเชงเสน
TCP Tahoe จะตงคา cwnd เปน 1 เสมอ (ไมวาจะ timeout หรอ 3 dup acks)
Transport Layer 3-103
Q เมอไร TCP ควรจะเปลยนจากการเพมขนแบบ exponential เปนแบบเชงเสน
A เมอ cwnd ถกเพมเปน 12 ของ ldquoคาทมากทสดrdquo ของมนกอนจะเกด timeout
การด าเนนการ ตวแปร ssthresh ขณะเกด Loss ssthresh จะถก
ตงคาท 12 ของคา cwnd กอนเกดเหตแปปเดยว (คา cwnd ทมากทสดกอนเกดเหตการณ)
TCP จาก slow start เปน CA (Congestion Avoidance)
Transport Layer 3-104
สรป TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput ของ TCP
คาเฉลย throughput ของ TCP เปน function ของขนาดของ window และ RTT ไมสนใจ slow start สมมตวาขอมลถกสงตลอด
W ขนาดของ window (หนวยเปน bytes) การสญเสยทเกดขน คาเฉลยขนาดของ window (จ านวน byte ทเดนทางอย) คอ frac34 W คาเฉลยของ throughput คอ 34W ตอ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP ในอนาคต TCP ใน ldquopipes ทยาวและมความจสงrdquo
ตวอยาง 1500 byte segments 100ms RTT ตองการชองทางการสงขนาด 10 Gbps
requires W = 83333 in-flight segments ความเปนไปไดของการสญหายของในชองทางการสงขอมล L [Mathis 1997]
เพอทจะมชองทางการสงขนาด 10Gbps ตองมการสญหายของขอมลเพยงแค =
210-10 ndash นอยมาก ดงนน ตองม TCP รนใหมส าหรบการสงแบบความเรวสง
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
เปาหมายของ fairness ถาม TCP session จ านวน K session ใชทรพยากร bandwidth R รวมกน แตละ session ควรจะเฉลยทรพยากรเหมอนกนท RK
TCP connection 1
router คอขวด มความจ R
ความเสมอภาค (Fairness) ของ TCP
TCP connection 2
Transport Layer 3-108
ความเสมอภาคของ TCP คออะไร session 2 session แขงกนใชทรพยากร additive increase ใหความชนเสนเทากบ 1 (session ทง 2 คอย ๆ ได throughput เพมทละ
นด) multiplicative decrease ลด throughput ไปครงหนง
R
R
เสนระบแบนดวธทใชรวมเทากน
Throuput ของ การเชอมตอท 1
congestion avoidance (CA) additive increase สญเสย ลดขนาดของ window ลงไปครงนง
congestion avoidance (CA) additive increase
สญเสย ลดขนาดของ window ลงไปครงนง
Transport Layer 3-109
ความเสมอภาค (ตอ)
ความเสมอภาค และ UDP มลตมเดยแอพพลเคชนบอยครงไม
ใช TCP ไมตองการใหอตราการสงลดลงเพราะ
การควบคมความคบคง
มลตมเดยแอพพลเคชนจงใช UDP แทน สงเสยงวดโอดวยความเรวคงท ทน
ตอการสญเสยขอมล
ความเสมอภาค การเชอมตอ TCP แบบขนาน แอพพลเคชนสามารถทจะเปดหลายการ
เชอมตอระหวางเครอง 2 เครองแบบขนานได
เวบบราวเซอรท าแบบน ตวอยางเชน link ทมความจ R ซงม 9 การ
เชอมตอ ถาแอพใหมตองการ 1 TCP จะไดรบท rate
R10 ถาแอพใหมตองการ 11 TCPs จะไดรบท R2
Transport Layer 3-110
Chapter 3 บทสรป
หลกการเบองหลงการใหบรการชนtransport multiplexing demultiplexing การสงขอมลแบบไวใจได การควบคมการไหลของขอมล การควบคมความคบคงของขอมล
กรณศกษาและการปฏบตบน internet UDP TCP
ถดไป ออกจากปลายทางของระบบ
เครอขาย (application transport layers)
เขาไปยงสแกนของเครอขาย
Transport Layer 3-23
หลกการของความนาเชอถอ data transfer
ชองทางทไมนาเชอถอมลกษณะทจะเปนตวก าหนดความซบซอนของ protocol โอนอายขอมลท reliable (reliable data transfer protocol rdt)
ส าคญในชน application transport link ตด top-10 ของหวขอทางดานเครอขาย
Transport Layer 3-24
Reliable data transfer เรมตน
ดานผสง ดานผรบ
rdt_send() ถกเรยกจากชนดานบน (เชน โดย app) ท าหนาทผานขอมลเพอใหขอมลถกสงไป
ยงชนดานบนของผรบ
udt_send() ถกเรยกโดย rdt เพอทจะโอนถาย packet ผานชองการ
สอสารท unreliable ไปยงผรบ
rdt_rcv() ถกเรยกโดย OS เมอ OS ไดรบ packet ทมาถงชองการสอสารดานผรบ
deliver_data() ถกเรยกโดย rdt เพอใหสงขอมลไปยงชนดานบน
Transport Layer 3-25
เราจะ คอย ๆ พฒนา protocol ส าหรบการโอนถายขอมลแบบ reliable หรอ reliable
data transfer protocol (rdt) ตอนน พจารณาเฉพาะการโอนถายขอมลแบบทางเดยวกอน
แตขอมลส าหรบการควบคม (control info) จะถกสงไปกลบทงสองทาง
ใช finite state machines (FSM) เพอก าหนดการกระท าของผสงและผรบ
state 1
state 2
เหตการณทท าใหเกดการเปลยนผานของ State การกระท าขณะเปลยนผาน State
สถานะ (state) เมออยใน state ปจจบน state ถดไปจะขนอยกบเหตการณทจะ
เกดขน ณ state ปจจบน
เหตการณ การกระท า
Reliable data transfer เรมตน
Transport Layer 3-26
rdt10 การโอนถายขอมลแบบ reliable ผานชองสญญาณแบบ reliable
สมมตให ชองทางทอยขางใตเปนชองทางทเชอถอได ไมมการผดพลาดของบต ไมมขอมลสญหาย
FSMs ส าหรบผสง และ ส าหรบผ รบ ผสงสงขอมลไปยงชนดานลาง ผรบรบขอมลจากชนดานลาง
รอรบการเรยกจากชน
ดานบน packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
รอรบการเรยกจากชน
ดานลาง
rdt_rcv(packet)
ผสง ผรบ
Transport Layer 3-27
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร
acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK
negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors
sender retransmits pkt on receipt of NAK
new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 ชองทางการสอสารทม bit errors
ปกตแลว มนษยใชวธการใดในการแกไข ldquoerrorsrdquo ระหวางการสนทนา
Transport Layer 3-28
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร การตอบรบ (acknowledgements (ACKs)) ผรบแจงผสงวาไดรบ packet แลว การตอบปฏเสธ (negative acknowledgements (NAKs)) ผรบแจงผสงวา packet ม
errors sender สงขอมลซ าอกครง เมอไดรบ NAK
กลไกทเพมขน in rdt20 (เพมจาก rdt10) การตรวจจบความผดพลาด การแจงกลบ (feedback) ขอมลส าหรบการควบคม (ACKNAK) จากผรบไปยงผสง
rdt20 ชองทางการสอสารทม bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 ขอก าหนดของ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
จะเกดอะไรขนถา ACKNAK เกดเสยหาย ผสงไมรวาผรบรบ pkt ครบถวน
หรอไม ไมควรสง pkt ซ าอกครง เพราะ
pkt ซ ากน
การจดการกบขอมลทซ าซอน ผสงจะสง packet อกครงถา
ACKNAK เกดเสยหาย เตมหมายเลข sequence ใหแตละ
packet ผรบตองทง packet ทซ ากน
stop and wait ผสงท าการสงpacketและรอใหผรบตอบกลบดวย ACKNAK กอนทจะสง packet ตอไป
Transport Layer 3-33
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Transport Layer 3-35
rdt21 อภปราย
ผสง ใสหมายเลข seq ในpacket หมายเลข seq (01) กพอ
นกสท าไม ตองตรวจสอบวา ACKNAK ท
ไดรบเสยไปหรอไม จ านวนหมายเลข seq ตองเปนสอง
เทาของจ านวนสถานะ เพราะผสงตองเกบสถานะเพอldquoจ าrdquo
วา pkt ถดไปจะตองมเลข seq 0 หรอ 1
ผรบ ตองตรวจสอบวา pkt ทไดรบซ ากบ
pkt ทไดรบกอนหนาหรอไม ผรบจะเกบสถานะทระบวา 0 หรอ 1
คอหมายเลข seq ทคาดวาจะได
ขอสงเกต ผรบไมสามารถรวา ACKNAK สดทายทผสงไดรบถกตองหรอไม
Transport Layer 3-36
rdt22 protocol ทไมตองใช NAK
ท างานเหมอนกบ rdt21 แตใชแค ACKs แทนทจะสง NAK ผรบสง ACK ส าหรบ pkt สดทายทไดรบถกตอง
ฝงรบจะตองรวมหมายเลข seq ของ pkt ทก าลงถก ACK ไปดวย
จะสง ACK ซ าไปทผสงถาไมไดรบ pkt ทมหมายเลข seq ทคาดหวง ผลลพธจะออกมาเหมอนกรณทสง NAK ผสงตองสง pkt ตวลาสดไปใหมอกครง
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 ชองสญญาณทมความผดพลาดและ pkt สญหาย
เพมขอสนนษฐาน ชองสญญาณสามารถสญเสยแพคเกจ (ไมวาจะเปนขอมลหรอ ACKs) ได กลไก checksum หมายเลข seq
ACKs และ การสงซ า สามารถชวย แตมนกยงไมใชทางออก
วธ ผสงรอ ACK กลบมาในชวงเวลาท ldquoสมเหตสมผลrdquo
สง pkt เดมไปใหมอกครงถาไมไดรบ ACK ภายในชวงเวลาน
ถา pkt (หรอ ACK) มาถงลาชา (ไมใชหายไป) การสงใหมกจะเปนการสงซ า ซง seq
ไดจดการเรองเกยวกบขอมลซ าได ผรบตองระบเลข seq ของ pkt ทก าลง
ถก ACKed
ตองใชการนบเวลาถอยหลง (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
ขณะ rdt30 ด าเนนการ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
ขณะ rdt30 ด าเนนการ
Transport Layer 3-42
ประสทธภาพของ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
บตแรกของแพคเกจกถกสง t = 0
ผสง ผรบ
RTT
บตสดทายของแพคเกจถกสง t = L R
บตแรกของแพคเกจมาถง บตสดทายของแพคเกจมาถง สง ACK
ไดรบ ACK สงแพคเกจตอไป t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols แบบ pipelined
pipelining ผสงสงหลาย packet ไปยงผรบทง ๆ ท pkt เหลานนยงไมไดรบการยนยนตอบรบ (not yet acked) ชวงของหมายเลข sequence จะตองเพมขน ตองพกขอมล (buffer) ทผสงและผรบ
protocols แบบ pipelined แบบทวไปมสองแบบ go-Back-N selective repeat
Transport Layer 3-45
Pipelining ชวยเพม utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols แบบ pipeline ภาพรวม
Go-back-N ผสงสามารถสงแพคเกจทไมยงถก
ack ไดไมเกน N แพคเกจใน pipeline
ผรบแคสง cumulative ack ไม ack packet ถามนกอใหเกด gap
ผสงจบเวลาส าหรบแพคเกจทสงไป
นานทสดทยงไมได ack เมอเวลาหมด ผสงจะสงแพคเกจ
ทงหมดทยงไมไดรบ ack อกครง
Selective Repeat ผสงสามารถสงแพคเกจทไมยงถก ack ได
ไมเกน N แพคเกจใน pipeline
ผรบจะตองสง ack กลบใหแตละแพคเกจ
ผสงจะจบเวลาส าหรบแตละแพคเกจท
ไมได ack เมอเวลาส าหรบแพคเกจใดหมด ผสงจะสง
เฉพาะแพคเกจนนเทานน
Transport Layer 3-47
Go-Back-N ผสง
หมายเลข seq (k bit) จะอยใน header ของ packet อนญาตใหขนาด ldquowindowrdquo (ของ pkt ทตดกนและยงไมถก ack) ไมเกน N
ACK(n) จะ ack แพคเกจทงหมดไปจนถงทมหมายเลข seq เทากบ n - ldquoการ ACK แบบรวม (cumulative ACK)rdquo อาจมการไดรบ ACKs หมายเลข seq เดมซ า (ดรายละเอยดดาน receiver)
มการจบเวลาส าหรบแพคเกจทเดนทางอย ซงเดนทางนานทสดและยงไมได ACK (pkt ทมหมายเลข seq นอยทสดใน window)
timeout(n) เวลาหมดท pkt n ผสงจะสง pkt n และ pkt ทงหมดใน window (ซงมหมายเลข seq สงกวา n) อกครง
Transport Layer 3-48
GBN FSM ดานผสงทเพมจากของเดม
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum
out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM ดานผรบทเพมจากของเดม
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
ผ รบ Ack แตละแพคเกจทไดรบมาถกตอง เกบ (buffer) แพคเกจ เทาทจ าเปน เพอทจะสงขอมลทเรยงล าดบแลว ไปยง layer
บนไดในทายทสด
ผสงแคสงแพคเกจซ าเฉพาะแพคเกจทไมไดรบ Ack เทานน ตวจบเวลา (ทางฝงผสง) จะจบเวลาของแตละแพคเกจทไมไดรบ Ack
Window ของผสง มหมายเลข seq อย N หมายเลขตดกน จ ากดหมายเลข seq ของแพตเกจทสงไปแลว และไมไดรบ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
ขอมลมาจาก layer ดานบน ถามหมายเลข seq วางใน window ให
สง pkt ได
timeout(n) สง pkt n ซ า จบเวลาใหม
ACK(n) in [sendbase sendbase+N] รวา ผรบไดรบ pkt n แลว ถา n เกดเปนหมายเลขแรกสดในหนาตาง
(n เทากบ sendbase) ทไมได ถก ack เลอน window ไปทางดานขวา โดยเลอนไปยงหมายเลขทไมไดถก ack
ผสง pkt n in [rcvbase rcvbase+N-1] สง ACK(n) ถาไมเรยงตามล าดบ buffer ถาตามล าดบ สง (รวมถงใหสง pkt ท
เรยงตามล าดบและอยในบฟเฟอร) เลอน window ไปทหมายเลข seq ถดไปของ pkt ทยงไมไดรบจากผสง
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise ทงไปไมตองสนใจ
ผรบ
Transport Layer 3-54
ขณะ Selective repeat ด าเนนการ
สง pkt0
sender receiver
รบ pkt0 สง ack0
รบ pkt1 สง ack1
รบ pkt3 buffer สง ack3 รบ ack0 สง pkt4
รบ ack1 สง pkt5
pkt 2 timeout send pkt2
X loss
รบ pkt4 buffer สง ack4
รบ pkt5 buffer สง ack5
รบ pkt2 deliver pkt2
pkt3 pkt4 pkt5 สง ack2
บนทก ack3 มาถงแลว
sender window (N=4)
บนทก ack4 มาถงแลว บนทก ack4 มาถงแลว
Q เกดอะไรขนเมอ ack2 มาถง
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
สง pkt1 สง pkt2
สง pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
ตวอยาง หมายเลข seq 0 1 2 3 ขนาดของ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
ผรบไมสามารถเหนดานผสงได พฤตกรรมผรบจะเหมอนกนทง 2 สถานการณ
มบางอยางทผด (มาก)
ผรบไมเหนถงความแตกตางของทง 2 เหตการณจ าลองน
ในเหตการณจ าลอง (b) ขอมลเกาทถกสงซ า เมอผรบรบมา จะนกวาเปนขอมลใหม
Q ขนาดของ seq กบขนาดของ
window เกยวของกนยงไงเพอทจะหลกเลยงปญหาในตวอยาง (b)
Transport Layer 3-56
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-57
TCP ภาพรวม RFCs 79311221323 2018 2581
ขอมลแบบสองทศทาง มการสงขอมลทงไปและกลบในการ
เชอมตอ (connection) เดยวกน MSS ขนาด segment ทใหญสดท
TCP จะรบได (Max Segment Size)
connection-oriented handshaking (การแลกเปลยนของ
ขอความควบคม) ตงคาสถานะตงตนใหผสงและผรบ กอนการแลกเปลยนขอความ
flow controlled ผสงจะไมสงขอมลเกนกวาทผรบจะรบ
ได
point-to-point (สถานทนง-ไป-สถานทนง) ผสงหนงคน ผรบหนงคน
สายขอมลเปนไบตทเรยงล าดบและขอมลไมสญหาย (reliable in-order byte steam) ไมม ldquoขอบเขตrdquo ของขอความ
(ขอความจะมาถงผรบตอเนองกน)
pipelined การควบคมความคบคงและการควบคม
อตราการไหลของ TCP จะก าหนดขนาดของ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG ขอมลเรงดวน (โดยทว ๆ ไป ไมถกใช)
ACK ACK valid
PSH ผลกขอมลใหชน app (โดยทว ๆ ไป ไมถกใช)
RST SYN FIN สรางการเชอตอ
(ค าสง setup teardown)
จ านวน bytes ท ผรบเตมใจจะรบ
นบโดยใช byte ของขอมล (ไมใช segment)
Internet checksum
(เหมอนใน UDP)
Transport Layer 3-59
TCP seq numbers ACKs
หมายเลข sequence เลขของ byte stream จะเปน byte
แรกของขอมลของ segment น acknowledgements เลข seq ของ byte ถดไปทอกดานหนง
คาดหวงวาจะได cumulative ACK (ACK แบบรวม)
Q ผรบจดการกบ segment ทมาถงไมเรยงล าดบอยางไร A TCP ไมมรายละเอยดสวนน ndash ขนอย
กบคนทจะมาเขยนโปรแกรม TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาเขามาถงผสง
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาออกจากผสง
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
เหตการณจ าลอง telnet อยางงาย
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q เราควรจะก าหนด time out ไวทเทาใด
มากกวาเวลาของ RTT แตเวลาของ RTT นนแปรปรวน
ก าหนดไวนอยเกนไป timeout กอนก าหนด ท าใหมการ retransmissions โดยไมจ าเปน
ก าหนดไวมากเกนไป ระบบตอบสนองตอการสญหายของ segment ชาเกนไป
Q จะประมาณเวลาของ RTT อยางไร
SampleRTT วดจากระยะเวลาตงแตเรมสง sengment จนกระทงไดรบACK ไมสนใจการ retransmissions
SampleRTT มคาแปรปรวน เราตองการประมาณเวลาของ RTT ให smooth กวา ใชคาเฉลยของคาหลาย ๆ คา ไมใชแค
เวลาของ SampleRTT ปจจบน
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
คาเฉลยของการเคลอนทถวงน าหนกแบบ exponential คา SampleRTT ทในอดตจะมผลตอ EstimatedRTT ลดลงแบบ exponentially โดยทวไปจะก าหนดคา = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
ชวงเวลาของ timeout EstimatedRTT บวกกบระยะเวลาทเผอเอาไว ยงคาของ EstimatedRTT ทแปรปรวนมากเทาไร -gt ระยะเวลาทเผอความมากขนตาม
มประเมนคาการเปลยนแปลงของ SampleRTT จาก EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoชวงเวลาทเผอrdquo
Transport Layer 3-64
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP สรางบรการแบบ reliable อยบนบรการของ IP ทเปนแบบ unreliable segments ถกสงแบบ pipeline cumulative acks ม timer ส าหรบสงใหมคาตวเดยว
TCP สง segment ใหมเมอ เหตการณ timeout ไดรบ acks ซ า ๆ กน
เรามาเรมตนพจารณาทางดานผสงของ TCP อยางงายกอน ยงไมตองสนใจ acks ซ า ยงไมตองสนใจการควบคม flow และ
ความคบคง
Transport Layer 3-66
เหตการณของ TCP sender
เมอไดขอมลจาก app สราง segment ดวยหมายเลข seq เลข seq คอหมายเลขของไบตแรก
ของขอมลในแตละ segment หาก timer ยงไมเคยถกตง จะเรม
ตงเวลา การตงเวลาเพอจบเวลาส าหรบ
segment เกาทสดยงไมไดรบ ack ชวงเวลาทหมดอาย
TimeOutInterval
timeout สงใหมเฉพาะ segment ทเกด
timeout ตงเวลานบใหม เมอไดรบ ack ถา ack เปน ack ของ segment
กอนหนายงไมไดรบ ack Update สงทรวา ถก ACK แลว เรมตงเวลานบ ถายงคงม segment
ทยงไมไดรบ acked
Transport Layer 3-67
ดานผสงของ TCP (อยางงาย)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
การสราง ACK ของ TCP [RFC 1122 RFC 2581]
เหตการณทผรบ เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ) โดยขอมลทงหมดจนถงเลข seq ทคาดหวงไว ถก ACK หมดแลว
เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ ท าให ไมม gap ใน segment ทไดมา) แตมบาง segment ยงไมได ACK
Segment มาถงแบบไมเรยงตามล าดบ โดยมเลข seq สงกวาทตองการ ท าใหม gap (ชองโหว) เกดขน Segment ท ามาถง ทจะเตมบางสวนหรอเตมเตมชองโหว
TCP receiver action อยาเพงสง ACK รออก segment นง โดยรอสก 500ms หากยงไมม segment มา กสง ACK สง ACK แบบรวม (cumulative) ไปทนทในครงเดยว ซงจะเปนการ Ack segment ทมาแบบเรยงตามล าดบทงสอง segments สง ACK ซ า ไปทนท โดยใสเลข seq ของ byte ทตองการ สง ACK แบบรวมทนท โดย segment ทจะ Ack เรมจากดานทนอยกวาของ gap
Transport Layer 3-71
TCP fast retransmit
ระยะเวลาในการ time-out มกจะคอนขางยาว (โดยเปรยบเทยบ) ท าใหใชเวลาคอนขางนานกอนทจะ
สง packet อกครง
แกโดย ตรวจสอบการสญเสย pack โดยดท ACKs ทซ า ๆ กน ผสงมกสง segment ตด ๆ กน ดงนน ถา segment หนงหายไป จง
เปนไปไดทจะม ACKs ซ า ๆ กนจ านวนมาก
ถาผสงไดรบ ACKs ส าหรบขอมลเดยวกน 3 ACKS (ACKs ทซ ากนสามครง) ผสงตองสง seq ทยงไมถก acked (ระบเลข seq ทเลกทสด) มแนวโนมวา segment ทยงไมถก
ack จะหายไปเลย ดงนน จงไมตองรอใหหมดเวลา
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-74
TCP flow control application
process
buffer ดานผรบ ของ TCP socket
TCP code
IP code
application
OS
protocol stack ดานผรบ
application ลบขอมลจาก buffer ของ TCP socket hellip
hellip ชากวา TCP สงขอมล ขนไป (ขณะทผสงก าลงจะสง)
from sender
ผรบสามารถควบคมผสงได ดงนน ผสงจะไมสงขอมลเรวไป หรอ มากเกนไปจนลน (Overflow) buffer ของผรบ
flow control
Transport Layer 3-75
การควบคมการไหลขอมลของ TCP
ขอมลทอย buffer
buffer สวนทยงวาง rwnd
RcvBuffer
สวนของขอมล (payload) ใน segment ของ TCP
ไปยง process ของ application
ผรบระบขนาดของ buffer ทวางไวใน field rwnd ทอยในสวนหวของ TCP ทจะสงไปยงผสง ผเขยนโปรแกรมระบขนาดของ RcvBuffer ได
โดยใช API ตงคา option ของ socket (คาเรมตนทวไปคอ 4096 ไบต)
ทกระบบปฏบตการจะปรบขนาด RcvBuffer อตโนมต
ผสงจ ากดจ านวนของขอมลทยงไมถก acked (ldquoอยในระหวางการเดนทางrdquo) ใหเทากบคา rwnd ของขอมลผรบ
เปนการรบประกนวา buffer ของผรบจะไมลน
การbuffer ในดานของผรบ
Transport Layer 3-76
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-77
การจดการกบการเชอมตอ กอนทจะมการแลกเปลยนขอมลกน ผสงและผรบตองตกลงกนกอน ตกลงรวมในการสรางการเชอมตอ (แตละคนจะรวาอกฝายอยากจะเชอมตอหรอไม) ตกลงคาพารามเตอรส าหรบการเชอมตอ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake จะท างานไดเสมอไปหรอไมบน network
ความลาชาอาจเปลยนไป ขอความอาจถกสงซ าตวอยาง (เชน
req_conn(x)) เนองจากการสญหายของขอมล
ขอมลอาจสลบกน ไมสามารถรไดวาอกฝงไดรบหรอไม
ไดรบขอมลอะไร
2-way handshake
มาคยกนเถอะ
ตกลง ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-79
เหตการณผดพลาดของ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-80
3-way handshake ของ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM ของ 3-way handshake ของ TCP
Transport Layer 3-82
TCP การหยดการเชอมตอ
client server เลกเชอมตอทแตละดานของการเชอมตอ โดยแตละดานจะสง TCP segment ดวย FIN bit = 1
ตอบกลบ FIN ดวย ACK ในขณะทรบ FIN ACK กสามารถรวมอยในแพคเกจทสง FIN มาไดดวย
แตละดานสามารถสง FIN ไดพรอม ๆ กน
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP การหยดการเชอมตอ
Transport Layer 3-84
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-85
ความคบคง ความหมายไมเปนทางการ ldquoเมอจ านวนคนสงมากเกนไป ก าลงสงขอมลมาก
เกนไปดวยอตราการสงเรวเกนกวาท Network จะรบไหวrdquo แตกตางจาก flow control ผลทอาจทเกดขนจากความคบคง
packets หาย (buffer ลนท routers) ลาชามาก (เขาควใน buffers ของ router)
เปนปญหาทคนสนใจตด 10 อนดบตนๆ
หลกการของการควบคมความคบคงของเครอขาย
Transport Layer 3-86
ตนเหตและผลของความคบคง เหตการณ 1
มผสงและผรบอยางละสองคน Router 1 ตว ไมจ ากด buffers ความจของ link R ไมมการสงขอมลซ า
อตราขอมลทสงส าเรจตอหนงการเชอมตอ R2
buffer ท link ขาออกม buffer ไมจกด
Host A
อตราการสงขอมลตนฉบบ lin
Host B
อตราขอมลทสงส าเรจ lout
R2
R2
lou
t
lin R2 de
lay
lin
ดเลยจะมากขนเมออตราสงขอมลตนฉบบเขาใกลความจของ link
Transport Layer 3-87
Router 1 ตว Buffer แตมขนาด buffer จ ากด ตองสง pkt ไปซ าถา pkt นน timeout
ขอมลเขาของชน application = ขอมลออกจากชน application lin = lout
ขอมลเขาของชน transport จะรวมทตองสงซ าดวย lin lin
Buffer ของ link ทใชรวมกนซงมขนาดจ ากด
Host A
lin ขอมลตนฉบบ
Host B
lout lin ขอมลตนฉบบบวกกบ ขอมลทตองสงซ า
lsquo
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-88
ในอดมคต สมมตผสงรความเปนไปในเครอขาย ผสงสงเฉพาะตอนทเราเตอรม buffer เหลออย
Buffer ของ link ทแชรอยางจ ากด
lout copy
ม buffer วาง
R2
R2
lou
t
lin
Host B
A
ตนเหตและผลของความคบคง เหตการณ 2
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-89
lout copy
no buffer space
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
A
Host B
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
เมอสงขอมลท R2 บาง packets ถกสงซ า แต goodput ยงคงมคาลเขาหา R2 (ท าไม)
A
Host B
ตนเหตและผลของความคบคง เหตการณ 2
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Host B
ในความเปนจรง มการสงซ า packets หายหรอตกหลนระหวาง
เสนทางเนองจาก buffers เตม แตบางครง Timer ของผสงหมดเวลาลง
กอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-92
R2
lou
t
ldquoผลrdquo ของความคบคง เพอใหไดขอมลในอตราทตองการ (goodput) ตองท างานมากขน (สงซ า) เมอตองสง packets ซ าโดยทไมจ าเปน link จะตองล าเลยงหลาย copy ของ
ขอมลเดยวกน ท าให goodput ลดลง
R2 lin
ตนเหตและผลของความคบคง เหตการณ 2
ในความเปนจรง มการสงซ า 1 packets หายหรอตกหลนระหวางเสนทางเนองจาก buffers เตม 2 แตบางครง Timer ของผสงหมดเวลาลงกอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Transport Layer 3-93
มผสงขอมลทง 4 โฮสต เสนทางตองผานหลายจด หมดเวลาสงไปขอมลซ า
Q เกดอะไรขนเมอ λin และ λinrsquo เพมขน
Buffer ของเสนทางการสงขอมลทใชรวมกนมขนาดจ ากด
Host A lout
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
Host B
Host C Host D
A เมอ λinrsquo ของขอมลเสนสแดงมขนาดเพมขน ขอมลใน
เสนสน าเงนกจะถก drop ท าให throughput ของ connection สน าเงนเหลอ 0
lin ขอมลตนฉบบ lin ขอมลตนฉบบ บวกกบ
ขอมลทตองสงซ า
Transport Layer 3-94
อกหนง ldquoผลเสยrdquo ของความคบคง เมอแพกเกจถกทงไป นนกเทากบวา ทรยากรเครอขาย (ทใชสงขอมลกอน
หนาทขอมลนจะถกทง) ถกใชไปอยางไรคา
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
แนวทางในการควบคมความคบคงของขอมล
2 แนวทางในการควบคมความคบคง
การควบคมความคบคงโดยใชแคเครองปลายทาง (end-end)
ไมมการแจงกลบ (feedback) จากเครอขาย
ความคบคงของเครอขายจะถกเดาโดยเครองทอยปลายทางทคอยสงเกต loss delay
เปนวธของ TCP
การควบคมความคบคงโดยใหอปกรณเครอขายชวย
routers จะท าการแจง feedback ไปทระบบปลายทาง ใช bit 1 bit เพอระบถงความ
แออด (SNA DECbit TCPIP ECN ATM) หรอ ระบอตราการสงทชดเจน
ส าหรบผสง
Transport Layer 3-96
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
ABR available bit rate ldquoบรการทมความยดหยนrdquo ถาเสนทางของผสง ldquoมขอมลนอยกวา
ความจะมากrdquo ผสงจะใชประโยชนจาก
bandwidth ทเหลออย ถา path ของผสงแออด
ผสงจะคอย ๆ ลดอตราสงใหเหลอเทาอตราการสงขนต าทรบประกนไว
RM (resource management) cells สงโดยผสง แทรก ๆ ไปกบ cell ทเปนขอมล bits ใน RM cell ถกตงคาโดย switches
(ldquoเครอขายคอยชวยrdquo) NI bit ไมเพมอตราการสง (ความแออด
ระดบกลาง) CI bit การบงบอกถงความแออด
ผรบไมแกคาใน bit นของ RM cells และสงไปใหผสง
Transport Layer 3-97
field ขอมล ER (explicit rate) ขนาด 2 byte ใน cell RM switch ทแออดอาจลดคา ER ใน cell ดงนน อตราทผสงจะสงขอมลจะเปนอตราการสงมากทสดท link ในเสนทางจะรองรบได
bit EFCI ใน cell ขอมล ถกตงคาไวท 1 ใน switch ทมขอมลแออด ถา cell ขอมลกอนหนา RM cell ถกตงคา EFCI ผรบจะตงคา bit CI ใน cell RM ท
สงกลบใหผสง
RM cell data cell
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
Transport Layer 3-98
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-99
การควบคมความคบคงของ TCP additive increase (เพมแบบบวก) multiplicative decrease (ลดแบบเทาตว)
วธ ผสงเพมอตราสง (window size) ควานหา bandwidth ทมใหใชได จนกวาการสญหายจะเกดขน additive increase เพม cwnd ทละ 1 MSS ทก ๆ RTT จนกวาจะ pkt จะหาย multiplicative decrease ตดลด cwnd เหลอครงเดยวหลงจากการสญหาย
cwnd
ขนา
ดของ co
nges
tion
wind
ow ของผส
งแบบ
TCP
พฤตกรรมของ AIMD เปน ลกษณะฟนเลอย หา bandwidth
ขนาด window เพมแบบบวก hellip hellip จนกวาจะเกดการสญหาย (จากนน ตดลงเหลอครงนง)
time
Transport Layer 3-100
ผสงจ ากดการสง
ขนาด cwnd จะเปลยนแปลงไปมา ขนกบความคบคงของเครอขายทผสงไดรมา
อตราการสง TCP อยางคราว ๆ สงขอมลจ านวน
cwnd bytes รอ ACKS เพอประมาณคา RTT จากนนสงไบตขอมลเพม
byte สดทายท ถก ACKed สง แตยงไมถก
ACK (ldquoอยระหวางการเดนทางrdquo)
byte สดทายทสงไป
cwnd
LastByteSent-
LastByteAcked lt cwnd
ชวงเลข sequence number ของผสง
rate ~ ~ cwnd
RTT bytessec
การควบคมความคบคงของ TCP รายละเอยด
Transport Layer 3-101
TCP Slow Start
เมอเรมการเชอมตอ เพมอตราการสงแบบยกก าลง (exponentially) จนกวาจะเจอกบ loss ครงแรก เรมตนขนาด cwnd = 1 MSS เพมขนาด cwnd หนงเทาตวทก ๆ RTT นนคอ โดยเพมขนาด cwnd ไป 1 MSS
ส าหรบทก ๆ ACK ทไดรบ
สรป อตราสงเรมแรกจะชาแตคาจะเพมแบบกระโดดขนอยางรวดเรว
Host A
RTT
Host B
time
Transport Layer 3-102
TCP การหา loss และการตอบสนอง
ถา loss ถกระบโดย timeout cwnd ถกตงไวท 1 MSS จากนนหนาตางจะเพมขนเปนเลขยกก าลง (exponential เหมอนใน slow start)
จนไปถงคา threshold จากนนจะเพมขนเปนเชงเสน
ถา loss ถกระบโดยไดรบ ACK ซ า 3 ACKs (3 duplicate acks) TCP RENO
ACKs ซ า ระบถงความสามารถการสง segments ของเครอขาย
cwnd ถกตดเหลอครงนงจากนนเพมขนแบบเชงเสน
TCP Tahoe จะตงคา cwnd เปน 1 เสมอ (ไมวาจะ timeout หรอ 3 dup acks)
Transport Layer 3-103
Q เมอไร TCP ควรจะเปลยนจากการเพมขนแบบ exponential เปนแบบเชงเสน
A เมอ cwnd ถกเพมเปน 12 ของ ldquoคาทมากทสดrdquo ของมนกอนจะเกด timeout
การด าเนนการ ตวแปร ssthresh ขณะเกด Loss ssthresh จะถก
ตงคาท 12 ของคา cwnd กอนเกดเหตแปปเดยว (คา cwnd ทมากทสดกอนเกดเหตการณ)
TCP จาก slow start เปน CA (Congestion Avoidance)
Transport Layer 3-104
สรป TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput ของ TCP
คาเฉลย throughput ของ TCP เปน function ของขนาดของ window และ RTT ไมสนใจ slow start สมมตวาขอมลถกสงตลอด
W ขนาดของ window (หนวยเปน bytes) การสญเสยทเกดขน คาเฉลยขนาดของ window (จ านวน byte ทเดนทางอย) คอ frac34 W คาเฉลยของ throughput คอ 34W ตอ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP ในอนาคต TCP ใน ldquopipes ทยาวและมความจสงrdquo
ตวอยาง 1500 byte segments 100ms RTT ตองการชองทางการสงขนาด 10 Gbps
requires W = 83333 in-flight segments ความเปนไปไดของการสญหายของในชองทางการสงขอมล L [Mathis 1997]
เพอทจะมชองทางการสงขนาด 10Gbps ตองมการสญหายของขอมลเพยงแค =
210-10 ndash นอยมาก ดงนน ตองม TCP รนใหมส าหรบการสงแบบความเรวสง
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
เปาหมายของ fairness ถาม TCP session จ านวน K session ใชทรพยากร bandwidth R รวมกน แตละ session ควรจะเฉลยทรพยากรเหมอนกนท RK
TCP connection 1
router คอขวด มความจ R
ความเสมอภาค (Fairness) ของ TCP
TCP connection 2
Transport Layer 3-108
ความเสมอภาคของ TCP คออะไร session 2 session แขงกนใชทรพยากร additive increase ใหความชนเสนเทากบ 1 (session ทง 2 คอย ๆ ได throughput เพมทละ
นด) multiplicative decrease ลด throughput ไปครงหนง
R
R
เสนระบแบนดวธทใชรวมเทากน
Throuput ของ การเชอมตอท 1
congestion avoidance (CA) additive increase สญเสย ลดขนาดของ window ลงไปครงนง
congestion avoidance (CA) additive increase
สญเสย ลดขนาดของ window ลงไปครงนง
Transport Layer 3-109
ความเสมอภาค (ตอ)
ความเสมอภาค และ UDP มลตมเดยแอพพลเคชนบอยครงไม
ใช TCP ไมตองการใหอตราการสงลดลงเพราะ
การควบคมความคบคง
มลตมเดยแอพพลเคชนจงใช UDP แทน สงเสยงวดโอดวยความเรวคงท ทน
ตอการสญเสยขอมล
ความเสมอภาค การเชอมตอ TCP แบบขนาน แอพพลเคชนสามารถทจะเปดหลายการ
เชอมตอระหวางเครอง 2 เครองแบบขนานได
เวบบราวเซอรท าแบบน ตวอยางเชน link ทมความจ R ซงม 9 การ
เชอมตอ ถาแอพใหมตองการ 1 TCP จะไดรบท rate
R10 ถาแอพใหมตองการ 11 TCPs จะไดรบท R2
Transport Layer 3-110
Chapter 3 บทสรป
หลกการเบองหลงการใหบรการชนtransport multiplexing demultiplexing การสงขอมลแบบไวใจได การควบคมการไหลของขอมล การควบคมความคบคงของขอมล
กรณศกษาและการปฏบตบน internet UDP TCP
ถดไป ออกจากปลายทางของระบบ
เครอขาย (application transport layers)
เขาไปยงสแกนของเครอขาย
Transport Layer 3-24
Reliable data transfer เรมตน
ดานผสง ดานผรบ
rdt_send() ถกเรยกจากชนดานบน (เชน โดย app) ท าหนาทผานขอมลเพอใหขอมลถกสงไป
ยงชนดานบนของผรบ
udt_send() ถกเรยกโดย rdt เพอทจะโอนถาย packet ผานชองการ
สอสารท unreliable ไปยงผรบ
rdt_rcv() ถกเรยกโดย OS เมอ OS ไดรบ packet ทมาถงชองการสอสารดานผรบ
deliver_data() ถกเรยกโดย rdt เพอใหสงขอมลไปยงชนดานบน
Transport Layer 3-25
เราจะ คอย ๆ พฒนา protocol ส าหรบการโอนถายขอมลแบบ reliable หรอ reliable
data transfer protocol (rdt) ตอนน พจารณาเฉพาะการโอนถายขอมลแบบทางเดยวกอน
แตขอมลส าหรบการควบคม (control info) จะถกสงไปกลบทงสองทาง
ใช finite state machines (FSM) เพอก าหนดการกระท าของผสงและผรบ
state 1
state 2
เหตการณทท าใหเกดการเปลยนผานของ State การกระท าขณะเปลยนผาน State
สถานะ (state) เมออยใน state ปจจบน state ถดไปจะขนอยกบเหตการณทจะ
เกดขน ณ state ปจจบน
เหตการณ การกระท า
Reliable data transfer เรมตน
Transport Layer 3-26
rdt10 การโอนถายขอมลแบบ reliable ผานชองสญญาณแบบ reliable
สมมตให ชองทางทอยขางใตเปนชองทางทเชอถอได ไมมการผดพลาดของบต ไมมขอมลสญหาย
FSMs ส าหรบผสง และ ส าหรบผ รบ ผสงสงขอมลไปยงชนดานลาง ผรบรบขอมลจากชนดานลาง
รอรบการเรยกจากชน
ดานบน packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
รอรบการเรยกจากชน
ดานลาง
rdt_rcv(packet)
ผสง ผรบ
Transport Layer 3-27
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร
acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK
negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors
sender retransmits pkt on receipt of NAK
new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 ชองทางการสอสารทม bit errors
ปกตแลว มนษยใชวธการใดในการแกไข ldquoerrorsrdquo ระหวางการสนทนา
Transport Layer 3-28
ชองสญญาณอาจกลบคาบาง bit ใน packet ใชวธการ checksum เพอตรวจสอบ bit errors
ค าถาม จะสามารถแกไขขอมลใหถกตองไดอยางไร การตอบรบ (acknowledgements (ACKs)) ผรบแจงผสงวาไดรบ packet แลว การตอบปฏเสธ (negative acknowledgements (NAKs)) ผรบแจงผสงวา packet ม
errors sender สงขอมลซ าอกครง เมอไดรบ NAK
กลไกทเพมขน in rdt20 (เพมจาก rdt10) การตรวจจบความผดพลาด การแจงกลบ (feedback) ขอมลส าหรบการควบคม (ACKNAK) จากผรบไปยงผสง
rdt20 ชองทางการสอสารทม bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 ขอก าหนดของ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
จะเกดอะไรขนถา ACKNAK เกดเสยหาย ผสงไมรวาผรบรบ pkt ครบถวน
หรอไม ไมควรสง pkt ซ าอกครง เพราะ
pkt ซ ากน
การจดการกบขอมลทซ าซอน ผสงจะสง packet อกครงถา
ACKNAK เกดเสยหาย เตมหมายเลข sequence ใหแตละ
packet ผรบตองทง packet ทซ ากน
stop and wait ผสงท าการสงpacketและรอใหผรบตอบกลบดวย ACKNAK กอนทจะสง packet ตอไป
Transport Layer 3-33
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 ผสงจดการกบ ACKNAKs ทไมถกตอง
Transport Layer 3-35
rdt21 อภปราย
ผสง ใสหมายเลข seq ในpacket หมายเลข seq (01) กพอ
นกสท าไม ตองตรวจสอบวา ACKNAK ท
ไดรบเสยไปหรอไม จ านวนหมายเลข seq ตองเปนสอง
เทาของจ านวนสถานะ เพราะผสงตองเกบสถานะเพอldquoจ าrdquo
วา pkt ถดไปจะตองมเลข seq 0 หรอ 1
ผรบ ตองตรวจสอบวา pkt ทไดรบซ ากบ
pkt ทไดรบกอนหนาหรอไม ผรบจะเกบสถานะทระบวา 0 หรอ 1
คอหมายเลข seq ทคาดวาจะได
ขอสงเกต ผรบไมสามารถรวา ACKNAK สดทายทผสงไดรบถกตองหรอไม
Transport Layer 3-36
rdt22 protocol ทไมตองใช NAK
ท างานเหมอนกบ rdt21 แตใชแค ACKs แทนทจะสง NAK ผรบสง ACK ส าหรบ pkt สดทายทไดรบถกตอง
ฝงรบจะตองรวมหมายเลข seq ของ pkt ทก าลงถก ACK ไปดวย
จะสง ACK ซ าไปทผสงถาไมไดรบ pkt ทมหมายเลข seq ทคาดหวง ผลลพธจะออกมาเหมอนกรณทสง NAK ผสงตองสง pkt ตวลาสดไปใหมอกครง
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 ชองสญญาณทมความผดพลาดและ pkt สญหาย
เพมขอสนนษฐาน ชองสญญาณสามารถสญเสยแพคเกจ (ไมวาจะเปนขอมลหรอ ACKs) ได กลไก checksum หมายเลข seq
ACKs และ การสงซ า สามารถชวย แตมนกยงไมใชทางออก
วธ ผสงรอ ACK กลบมาในชวงเวลาท ldquoสมเหตสมผลrdquo
สง pkt เดมไปใหมอกครงถาไมไดรบ ACK ภายในชวงเวลาน
ถา pkt (หรอ ACK) มาถงลาชา (ไมใชหายไป) การสงใหมกจะเปนการสงซ า ซง seq
ไดจดการเรองเกยวกบขอมลซ าได ผรบตองระบเลข seq ของ pkt ทก าลง
ถก ACKed
ตองใชการนบเวลาถอยหลง (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
ขณะ rdt30 ด าเนนการ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
ขณะ rdt30 ด าเนนการ
Transport Layer 3-42
ประสทธภาพของ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
บตแรกของแพคเกจกถกสง t = 0
ผสง ผรบ
RTT
บตสดทายของแพคเกจถกสง t = L R
บตแรกของแพคเกจมาถง บตสดทายของแพคเกจมาถง สง ACK
ไดรบ ACK สงแพคเกจตอไป t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols แบบ pipelined
pipelining ผสงสงหลาย packet ไปยงผรบทง ๆ ท pkt เหลานนยงไมไดรบการยนยนตอบรบ (not yet acked) ชวงของหมายเลข sequence จะตองเพมขน ตองพกขอมล (buffer) ทผสงและผรบ
protocols แบบ pipelined แบบทวไปมสองแบบ go-Back-N selective repeat
Transport Layer 3-45
Pipelining ชวยเพม utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols แบบ pipeline ภาพรวม
Go-back-N ผสงสามารถสงแพคเกจทไมยงถก
ack ไดไมเกน N แพคเกจใน pipeline
ผรบแคสง cumulative ack ไม ack packet ถามนกอใหเกด gap
ผสงจบเวลาส าหรบแพคเกจทสงไป
นานทสดทยงไมได ack เมอเวลาหมด ผสงจะสงแพคเกจ
ทงหมดทยงไมไดรบ ack อกครง
Selective Repeat ผสงสามารถสงแพคเกจทไมยงถก ack ได
ไมเกน N แพคเกจใน pipeline
ผรบจะตองสง ack กลบใหแตละแพคเกจ
ผสงจะจบเวลาส าหรบแตละแพคเกจท
ไมได ack เมอเวลาส าหรบแพคเกจใดหมด ผสงจะสง
เฉพาะแพคเกจนนเทานน
Transport Layer 3-47
Go-Back-N ผสง
หมายเลข seq (k bit) จะอยใน header ของ packet อนญาตใหขนาด ldquowindowrdquo (ของ pkt ทตดกนและยงไมถก ack) ไมเกน N
ACK(n) จะ ack แพคเกจทงหมดไปจนถงทมหมายเลข seq เทากบ n - ldquoการ ACK แบบรวม (cumulative ACK)rdquo อาจมการไดรบ ACKs หมายเลข seq เดมซ า (ดรายละเอยดดาน receiver)
มการจบเวลาส าหรบแพคเกจทเดนทางอย ซงเดนทางนานทสดและยงไมได ACK (pkt ทมหมายเลข seq นอยทสดใน window)
timeout(n) เวลาหมดท pkt n ผสงจะสง pkt n และ pkt ทงหมดใน window (ซงมหมายเลข seq สงกวา n) อกครง
Transport Layer 3-48
GBN FSM ดานผสงทเพมจากของเดม
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum
out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM ดานผรบทเพมจากของเดม
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
ผ รบ Ack แตละแพคเกจทไดรบมาถกตอง เกบ (buffer) แพคเกจ เทาทจ าเปน เพอทจะสงขอมลทเรยงล าดบแลว ไปยง layer
บนไดในทายทสด
ผสงแคสงแพคเกจซ าเฉพาะแพคเกจทไมไดรบ Ack เทานน ตวจบเวลา (ทางฝงผสง) จะจบเวลาของแตละแพคเกจทไมไดรบ Ack
Window ของผสง มหมายเลข seq อย N หมายเลขตดกน จ ากดหมายเลข seq ของแพตเกจทสงไปแลว และไมไดรบ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
ขอมลมาจาก layer ดานบน ถามหมายเลข seq วางใน window ให
สง pkt ได
timeout(n) สง pkt n ซ า จบเวลาใหม
ACK(n) in [sendbase sendbase+N] รวา ผรบไดรบ pkt n แลว ถา n เกดเปนหมายเลขแรกสดในหนาตาง
(n เทากบ sendbase) ทไมได ถก ack เลอน window ไปทางดานขวา โดยเลอนไปยงหมายเลขทไมไดถก ack
ผสง pkt n in [rcvbase rcvbase+N-1] สง ACK(n) ถาไมเรยงตามล าดบ buffer ถาตามล าดบ สง (รวมถงใหสง pkt ท
เรยงตามล าดบและอยในบฟเฟอร) เลอน window ไปทหมายเลข seq ถดไปของ pkt ทยงไมไดรบจากผสง
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise ทงไปไมตองสนใจ
ผรบ
Transport Layer 3-54
ขณะ Selective repeat ด าเนนการ
สง pkt0
sender receiver
รบ pkt0 สง ack0
รบ pkt1 สง ack1
รบ pkt3 buffer สง ack3 รบ ack0 สง pkt4
รบ ack1 สง pkt5
pkt 2 timeout send pkt2
X loss
รบ pkt4 buffer สง ack4
รบ pkt5 buffer สง ack5
รบ pkt2 deliver pkt2
pkt3 pkt4 pkt5 สง ack2
บนทก ack3 มาถงแลว
sender window (N=4)
บนทก ack4 มาถงแลว บนทก ack4 มาถงแลว
Q เกดอะไรขนเมอ ack2 มาถง
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
สง pkt1 สง pkt2
สง pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
ตวอยาง หมายเลข seq 0 1 2 3 ขนาดของ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
ผรบไมสามารถเหนดานผสงได พฤตกรรมผรบจะเหมอนกนทง 2 สถานการณ
มบางอยางทผด (มาก)
ผรบไมเหนถงความแตกตางของทง 2 เหตการณจ าลองน
ในเหตการณจ าลอง (b) ขอมลเกาทถกสงซ า เมอผรบรบมา จะนกวาเปนขอมลใหม
Q ขนาดของ seq กบขนาดของ
window เกยวของกนยงไงเพอทจะหลกเลยงปญหาในตวอยาง (b)
Transport Layer 3-56
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-57
TCP ภาพรวม RFCs 79311221323 2018 2581
ขอมลแบบสองทศทาง มการสงขอมลทงไปและกลบในการ
เชอมตอ (connection) เดยวกน MSS ขนาด segment ทใหญสดท
TCP จะรบได (Max Segment Size)
connection-oriented handshaking (การแลกเปลยนของ
ขอความควบคม) ตงคาสถานะตงตนใหผสงและผรบ กอนการแลกเปลยนขอความ
flow controlled ผสงจะไมสงขอมลเกนกวาทผรบจะรบ
ได
point-to-point (สถานทนง-ไป-สถานทนง) ผสงหนงคน ผรบหนงคน
สายขอมลเปนไบตทเรยงล าดบและขอมลไมสญหาย (reliable in-order byte steam) ไมม ldquoขอบเขตrdquo ของขอความ
(ขอความจะมาถงผรบตอเนองกน)
pipelined การควบคมความคบคงและการควบคม
อตราการไหลของ TCP จะก าหนดขนาดของ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG ขอมลเรงดวน (โดยทว ๆ ไป ไมถกใช)
ACK ACK valid
PSH ผลกขอมลใหชน app (โดยทว ๆ ไป ไมถกใช)
RST SYN FIN สรางการเชอตอ
(ค าสง setup teardown)
จ านวน bytes ท ผรบเตมใจจะรบ
นบโดยใช byte ของขอมล (ไมใช segment)
Internet checksum
(เหมอนใน UDP)
Transport Layer 3-59
TCP seq numbers ACKs
หมายเลข sequence เลขของ byte stream จะเปน byte
แรกของขอมลของ segment น acknowledgements เลข seq ของ byte ถดไปทอกดานหนง
คาดหวงวาจะได cumulative ACK (ACK แบบรวม)
Q ผรบจดการกบ segment ทมาถงไมเรยงล าดบอยางไร A TCP ไมมรายละเอยดสวนน ndash ขนอย
กบคนทจะมาเขยนโปรแกรม TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาเขามาถงผสง
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment ขาออกจากผสง
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
เหตการณจ าลอง telnet อยางงาย
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q เราควรจะก าหนด time out ไวทเทาใด
มากกวาเวลาของ RTT แตเวลาของ RTT นนแปรปรวน
ก าหนดไวนอยเกนไป timeout กอนก าหนด ท าใหมการ retransmissions โดยไมจ าเปน
ก าหนดไวมากเกนไป ระบบตอบสนองตอการสญหายของ segment ชาเกนไป
Q จะประมาณเวลาของ RTT อยางไร
SampleRTT วดจากระยะเวลาตงแตเรมสง sengment จนกระทงไดรบACK ไมสนใจการ retransmissions
SampleRTT มคาแปรปรวน เราตองการประมาณเวลาของ RTT ให smooth กวา ใชคาเฉลยของคาหลาย ๆ คา ไมใชแค
เวลาของ SampleRTT ปจจบน
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
คาเฉลยของการเคลอนทถวงน าหนกแบบ exponential คา SampleRTT ทในอดตจะมผลตอ EstimatedRTT ลดลงแบบ exponentially โดยทวไปจะก าหนดคา = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
ชวงเวลาของ timeout EstimatedRTT บวกกบระยะเวลาทเผอเอาไว ยงคาของ EstimatedRTT ทแปรปรวนมากเทาไร -gt ระยะเวลาทเผอความมากขนตาม
มประเมนคาการเปลยนแปลงของ SampleRTT จาก EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoชวงเวลาทเผอrdquo
Transport Layer 3-64
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP สรางบรการแบบ reliable อยบนบรการของ IP ทเปนแบบ unreliable segments ถกสงแบบ pipeline cumulative acks ม timer ส าหรบสงใหมคาตวเดยว
TCP สง segment ใหมเมอ เหตการณ timeout ไดรบ acks ซ า ๆ กน
เรามาเรมตนพจารณาทางดานผสงของ TCP อยางงายกอน ยงไมตองสนใจ acks ซ า ยงไมตองสนใจการควบคม flow และ
ความคบคง
Transport Layer 3-66
เหตการณของ TCP sender
เมอไดขอมลจาก app สราง segment ดวยหมายเลข seq เลข seq คอหมายเลขของไบตแรก
ของขอมลในแตละ segment หาก timer ยงไมเคยถกตง จะเรม
ตงเวลา การตงเวลาเพอจบเวลาส าหรบ
segment เกาทสดยงไมไดรบ ack ชวงเวลาทหมดอาย
TimeOutInterval
timeout สงใหมเฉพาะ segment ทเกด
timeout ตงเวลานบใหม เมอไดรบ ack ถา ack เปน ack ของ segment
กอนหนายงไมไดรบ ack Update สงทรวา ถก ACK แลว เรมตงเวลานบ ถายงคงม segment
ทยงไมไดรบ acked
Transport Layer 3-67
ดานผสงของ TCP (อยางงาย)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
การสราง ACK ของ TCP [RFC 1122 RFC 2581]
เหตการณทผรบ เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ) โดยขอมลทงหมดจนถงเลข seq ทคาดหวงไว ถก ACK หมดแลว
เมอ Segment ทมาถงเรยงตามล าดบ (นนคอ มหมายเลข seq ทตองการ ท าให ไมม gap ใน segment ทไดมา) แตมบาง segment ยงไมได ACK
Segment มาถงแบบไมเรยงตามล าดบ โดยมเลข seq สงกวาทตองการ ท าใหม gap (ชองโหว) เกดขน Segment ท ามาถง ทจะเตมบางสวนหรอเตมเตมชองโหว
TCP receiver action อยาเพงสง ACK รออก segment นง โดยรอสก 500ms หากยงไมม segment มา กสง ACK สง ACK แบบรวม (cumulative) ไปทนทในครงเดยว ซงจะเปนการ Ack segment ทมาแบบเรยงตามล าดบทงสอง segments สง ACK ซ า ไปทนท โดยใสเลข seq ของ byte ทตองการ สง ACK แบบรวมทนท โดย segment ทจะ Ack เรมจากดานทนอยกวาของ gap
Transport Layer 3-71
TCP fast retransmit
ระยะเวลาในการ time-out มกจะคอนขางยาว (โดยเปรยบเทยบ) ท าใหใชเวลาคอนขางนานกอนทจะ
สง packet อกครง
แกโดย ตรวจสอบการสญเสย pack โดยดท ACKs ทซ า ๆ กน ผสงมกสง segment ตด ๆ กน ดงนน ถา segment หนงหายไป จง
เปนไปไดทจะม ACKs ซ า ๆ กนจ านวนมาก
ถาผสงไดรบ ACKs ส าหรบขอมลเดยวกน 3 ACKS (ACKs ทซ ากนสามครง) ผสงตองสง seq ทยงไมถก acked (ระบเลข seq ทเลกทสด) มแนวโนมวา segment ทยงไมถก
ack จะหายไปเลย ดงนน จงไมตองรอใหหมดเวลา
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-74
TCP flow control application
process
buffer ดานผรบ ของ TCP socket
TCP code
IP code
application
OS
protocol stack ดานผรบ
application ลบขอมลจาก buffer ของ TCP socket hellip
hellip ชากวา TCP สงขอมล ขนไป (ขณะทผสงก าลงจะสง)
from sender
ผรบสามารถควบคมผสงได ดงนน ผสงจะไมสงขอมลเรวไป หรอ มากเกนไปจนลน (Overflow) buffer ของผรบ
flow control
Transport Layer 3-75
การควบคมการไหลขอมลของ TCP
ขอมลทอย buffer
buffer สวนทยงวาง rwnd
RcvBuffer
สวนของขอมล (payload) ใน segment ของ TCP
ไปยง process ของ application
ผรบระบขนาดของ buffer ทวางไวใน field rwnd ทอยในสวนหวของ TCP ทจะสงไปยงผสง ผเขยนโปรแกรมระบขนาดของ RcvBuffer ได
โดยใช API ตงคา option ของ socket (คาเรมตนทวไปคอ 4096 ไบต)
ทกระบบปฏบตการจะปรบขนาด RcvBuffer อตโนมต
ผสงจ ากดจ านวนของขอมลทยงไมถก acked (ldquoอยในระหวางการเดนทางrdquo) ใหเทากบคา rwnd ของขอมลผรบ
เปนการรบประกนวา buffer ของผรบจะไมลน
การbuffer ในดานของผรบ
Transport Layer 3-76
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-77
การจดการกบการเชอมตอ กอนทจะมการแลกเปลยนขอมลกน ผสงและผรบตองตกลงกนกอน ตกลงรวมในการสรางการเชอมตอ (แตละคนจะรวาอกฝายอยากจะเชอมตอหรอไม) ตกลงคาพารามเตอรส าหรบการเชอมตอ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake จะท างานไดเสมอไปหรอไมบน network
ความลาชาอาจเปลยนไป ขอความอาจถกสงซ าตวอยาง (เชน
req_conn(x)) เนองจากการสญหายของขอมล
ขอมลอาจสลบกน ไมสามารถรไดวาอกฝงไดรบหรอไม
ไดรบขอมลอะไร
2-way handshake
มาคยกนเถอะ
ตกลง ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-79
เหตการณผดพลาดของ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
ตกลงทจะสรางการเชอมตอ
Transport Layer 3-80
3-way handshake ของ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM ของ 3-way handshake ของ TCP
Transport Layer 3-82
TCP การหยดการเชอมตอ
client server เลกเชอมตอทแตละดานของการเชอมตอ โดยแตละดานจะสง TCP segment ดวย FIN bit = 1
ตอบกลบ FIN ดวย ACK ในขณะทรบ FIN ACK กสามารถรวมอยในแพคเกจทสง FIN มาไดดวย
แตละดานสามารถสง FIN ไดพรอม ๆ กน
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP การหยดการเชอมตอ
Transport Layer 3-84
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-85
ความคบคง ความหมายไมเปนทางการ ldquoเมอจ านวนคนสงมากเกนไป ก าลงสงขอมลมาก
เกนไปดวยอตราการสงเรวเกนกวาท Network จะรบไหวrdquo แตกตางจาก flow control ผลทอาจทเกดขนจากความคบคง
packets หาย (buffer ลนท routers) ลาชามาก (เขาควใน buffers ของ router)
เปนปญหาทคนสนใจตด 10 อนดบตนๆ
หลกการของการควบคมความคบคงของเครอขาย
Transport Layer 3-86
ตนเหตและผลของความคบคง เหตการณ 1
มผสงและผรบอยางละสองคน Router 1 ตว ไมจ ากด buffers ความจของ link R ไมมการสงขอมลซ า
อตราขอมลทสงส าเรจตอหนงการเชอมตอ R2
buffer ท link ขาออกม buffer ไมจกด
Host A
อตราการสงขอมลตนฉบบ lin
Host B
อตราขอมลทสงส าเรจ lout
R2
R2
lou
t
lin R2 de
lay
lin
ดเลยจะมากขนเมออตราสงขอมลตนฉบบเขาใกลความจของ link
Transport Layer 3-87
Router 1 ตว Buffer แตมขนาด buffer จ ากด ตองสง pkt ไปซ าถา pkt นน timeout
ขอมลเขาของชน application = ขอมลออกจากชน application lin = lout
ขอมลเขาของชน transport จะรวมทตองสงซ าดวย lin lin
Buffer ของ link ทใชรวมกนซงมขนาดจ ากด
Host A
lin ขอมลตนฉบบ
Host B
lout lin ขอมลตนฉบบบวกกบ ขอมลทตองสงซ า
lsquo
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-88
ในอดมคต สมมตผสงรความเปนไปในเครอขาย ผสงสงเฉพาะตอนทเราเตอรม buffer เหลออย
Buffer ของ link ทแชรอยางจ ากด
lout copy
ม buffer วาง
R2
R2
lou
t
lin
Host B
A
ตนเหตและผลของความคบคง เหตการณ 2
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-89
lout copy
no buffer space
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
A
Host B
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
เมอสงขอมลท R2 บาง packets ถกสงซ า แต goodput ยงคงมคาลเขาหา R2 (ท าไม)
A
Host B
ตนเหตและผลของความคบคง เหตการณ 2
ในอดมคต สมมตวาผสงรวาขอมลใดหายจากการถก drop ท router เมอ buffer เตม ผสงสงขอมลซ ากตอเมอรวาม
Packet สญหาย
lin ขอมลตนฉบบ lin ขอมลตนฉบบบวกกบ
ขอมลทตองสงซ า
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Host B
ในความเปนจรง มการสงซ า packets หายหรอตกหลนระหวาง
เสนทางเนองจาก buffers เตม แตบางครง Timer ของผสงหมดเวลาลง
กอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
ตนเหตและผลของความคบคง เหตการณ 2
Transport Layer 3-92
R2
lou
t
ldquoผลrdquo ของความคบคง เพอใหไดขอมลในอตราทตองการ (goodput) ตองท างานมากขน (สงซ า) เมอตองสง packets ซ าโดยทไมจ าเปน link จะตองล าเลยงหลาย copy ของ
ขอมลเดยวกน ท าให goodput ลดลง
R2 lin
ตนเหตและผลของความคบคง เหตการณ 2
ในความเปนจรง มการสงซ า 1 packets หายหรอตกหลนระหวางเสนทางเนองจาก buffers เตม 2 แตบางครง Timer ของผสงหมดเวลาลงกอนเวลาอนควร ผสงจงสงขอมลซ าไปอกหนง packets ซง packet ทงคกจะถกสงไปถงผรบ
เมอก าลงสงทอตรา R2 บาง packet จะถกสงซ า ในทนรวมการสงขอมลซ า ทขอมลไมไดหาย แต timeout กอนเวลาดวย
Transport Layer 3-93
มผสงขอมลทง 4 โฮสต เสนทางตองผานหลายจด หมดเวลาสงไปขอมลซ า
Q เกดอะไรขนเมอ λin และ λinrsquo เพมขน
Buffer ของเสนทางการสงขอมลทใชรวมกนมขนาดจ ากด
Host A lout
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
Host B
Host C Host D
A เมอ λinrsquo ของขอมลเสนสแดงมขนาดเพมขน ขอมลใน
เสนสน าเงนกจะถก drop ท าให throughput ของ connection สน าเงนเหลอ 0
lin ขอมลตนฉบบ lin ขอมลตนฉบบ บวกกบ
ขอมลทตองสงซ า
Transport Layer 3-94
อกหนง ldquoผลเสยrdquo ของความคบคง เมอแพกเกจถกทงไป นนกเทากบวา ทรยากรเครอขาย (ทใชสงขอมลกอน
หนาทขอมลนจะถกทง) ถกใชไปอยางไรคา
ตนเหตและผลของความคบคง เหตการณจ าลองท 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
แนวทางในการควบคมความคบคงของขอมล
2 แนวทางในการควบคมความคบคง
การควบคมความคบคงโดยใชแคเครองปลายทาง (end-end)
ไมมการแจงกลบ (feedback) จากเครอขาย
ความคบคงของเครอขายจะถกเดาโดยเครองทอยปลายทางทคอยสงเกต loss delay
เปนวธของ TCP
การควบคมความคบคงโดยใหอปกรณเครอขายชวย
routers จะท าการแจง feedback ไปทระบบปลายทาง ใช bit 1 bit เพอระบถงความ
แออด (SNA DECbit TCPIP ECN ATM) หรอ ระบอตราการสงทชดเจน
ส าหรบผสง
Transport Layer 3-96
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
ABR available bit rate ldquoบรการทมความยดหยนrdquo ถาเสนทางของผสง ldquoมขอมลนอยกวา
ความจะมากrdquo ผสงจะใชประโยชนจาก
bandwidth ทเหลออย ถา path ของผสงแออด
ผสงจะคอย ๆ ลดอตราสงใหเหลอเทาอตราการสงขนต าทรบประกนไว
RM (resource management) cells สงโดยผสง แทรก ๆ ไปกบ cell ทเปนขอมล bits ใน RM cell ถกตงคาโดย switches
(ldquoเครอขายคอยชวยrdquo) NI bit ไมเพมอตราการสง (ความแออด
ระดบกลาง) CI bit การบงบอกถงความแออด
ผรบไมแกคาใน bit นของ RM cells และสงไปใหผสง
Transport Layer 3-97
field ขอมล ER (explicit rate) ขนาด 2 byte ใน cell RM switch ทแออดอาจลดคา ER ใน cell ดงนน อตราทผสงจะสงขอมลจะเปนอตราการสงมากทสดท link ในเสนทางจะรองรบได
bit EFCI ใน cell ขอมล ถกตงคาไวท 1 ใน switch ทมขอมลแออด ถา cell ขอมลกอนหนา RM cell ถกตงคา EFCI ผรบจะตงคา bit CI ใน cell RM ท
สงกลบใหผสง
RM cell data cell
กรณศกษา การควบคมความคบคงของ ATM แบบ ABR
Transport Layer 3-98
Chapter 3 Outline
31 บรการในขน Transport 32 การรวมและการแยกขอมล
(multiplexing and demultiplexing)
33 การสงขอมลทไมตองมการเชอมตอ (connectionless transport) UDP
34 หลกการตาง ๆ ของการสงขอมลทไวใจได (principles of reliable data transfer)
35 การสงขอมลทตองมการเชอมตอกอน (connection-oriented transport) TCP โครงสรางสวนขอมล (segment) การสงขอมลทนาเชอถอนาไวใจได
(reliable data transfer) การควบคมการไหล (flow control) การจดการการเชอมตอ (connection
management)
36 หลกการของการควบคมความคบคง (congestion control)
37 congestion control ของ TCP
Transport Layer 3-99
การควบคมความคบคงของ TCP additive increase (เพมแบบบวก) multiplicative decrease (ลดแบบเทาตว)
วธ ผสงเพมอตราสง (window size) ควานหา bandwidth ทมใหใชได จนกวาการสญหายจะเกดขน additive increase เพม cwnd ทละ 1 MSS ทก ๆ RTT จนกวาจะ pkt จะหาย multiplicative decrease ตดลด cwnd เหลอครงเดยวหลงจากการสญหาย
cwnd
ขนา
ดของ co
nges
tion
wind
ow ของผส
งแบบ
TCP
พฤตกรรมของ AIMD เปน ลกษณะฟนเลอย หา bandwidth
ขนาด window เพมแบบบวก hellip hellip จนกวาจะเกดการสญหาย (จากนน ตดลงเหลอครงนง)
time
Transport Layer 3-100
ผสงจ ากดการสง
ขนาด cwnd จะเปลยนแปลงไปมา ขนกบความคบคงของเครอขายทผสงไดรมา
อตราการสง TCP อยางคราว ๆ สงขอมลจ านวน
cwnd bytes รอ ACKS เพอประมาณคา RTT จากนนสงไบตขอมลเพม
byte สดทายท ถก ACKed สง แตยงไมถก
ACK (ldquoอยระหวางการเดนทางrdquo)
byte สดทายทสงไป
cwnd
LastByteSent-
LastByteAcked lt cwnd
ชวงเลข sequence number ของผสง
rate ~ ~ cwnd
RTT bytessec
การควบคมความคบคงของ TCP รายละเอยด
Transport Layer 3-101
TCP Slow Start
เมอเรมการเชอมตอ เพมอตราการสงแบบยกก าลง (exponentially) จนกวาจะเจอกบ loss ครงแรก เรมตนขนาด cwnd = 1 MSS เพมขนาด cwnd หนงเทาตวทก ๆ RTT นนคอ โดยเพมขนาด cwnd ไป 1 MSS
ส าหรบทก ๆ ACK ทไดรบ
สรป อตราสงเรมแรกจะชาแตคาจะเพมแบบกระโดดขนอยางรวดเรว
Host A
RTT
Host B
time
Transport Layer 3-102
TCP การหา loss และการตอบสนอง
ถา loss ถกระบโดย timeout cwnd ถกตงไวท 1 MSS จากนนหนาตางจะเพมขนเปนเลขยกก าลง (exponential เหมอนใน slow start)
จนไปถงคา threshold จากนนจะเพมขนเปนเชงเสน
ถา loss ถกระบโดยไดรบ ACK ซ า 3 ACKs (3 duplicate acks) TCP RENO
ACKs ซ า ระบถงความสามารถการสง segments ของเครอขาย
cwnd ถกตดเหลอครงนงจากนนเพมขนแบบเชงเสน
TCP Tahoe จะตงคา cwnd เปน 1 เสมอ (ไมวาจะ timeout หรอ 3 dup acks)
Transport Layer 3-103
Q เมอไร TCP ควรจะเปลยนจากการเพมขนแบบ exponential เปนแบบเชงเสน
A เมอ cwnd ถกเพมเปน 12 ของ ldquoคาทมากทสดrdquo ของมนกอนจะเกด timeout
การด าเนนการ ตวแปร ssthresh ขณะเกด Loss ssthresh จะถก
ตงคาท 12 ของคา cwnd กอนเกดเหตแปปเดยว (คา cwnd ทมากทสดกอนเกดเหตการณ)
TCP จาก slow start เปน CA (Congestion Avoidance)
Transport Layer 3-104
สรป TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput ของ TCP
คาเฉลย throughput ของ TCP เปน function ของขนาดของ window และ RTT ไมสนใจ slow start สมมตวาขอมลถกสงตลอด
W ขนาดของ window (หนวยเปน bytes) การสญเสยทเกดขน คาเฉลยขนาดของ window (จ านวน byte ทเดนทางอย) คอ frac34 W คาเฉลยของ throughput คอ 34W ตอ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP ในอนาคต TCP ใน ldquopipes ทยาวและมความจสงrdquo
ตวอยาง 1500 byte segments 100ms RTT ตองการชองทางการสงขนาด 10 Gbps
requires W = 83333 in-flight segments ความเปนไปไดของการสญหายของในชองทางการสงขอมล L [Mathis 1997]
เพอทจะมชองทางการสงขนาด 10Gbps ตองมการสญหายของขอมลเพยงแค =
210-10 ndash นอยมาก ดงนน ตองม TCP รนใหมส าหรบการสงแบบความเรวสง
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
เปาหมายของ fairness ถาม TCP session จ านวน K session ใชทรพยากร bandwidth R รวมกน แตละ session ควรจะเฉลยทรพยากรเหมอนกนท RK
TCP connection 1
router คอขวด มความจ R
ความเสมอภาค (Fairness) ของ TCP
TCP connection 2
Transport Layer 3-108
ความเสมอภาคของ TCP คออะไร session 2 session แขงกนใชทรพยากร additive increase ใหความชนเสนเทากบ 1 (session ทง 2 คอย ๆ ได throughput เพมทละ
นด) multiplicative decrease ลด throughput ไปครงหนง
R
R
เสนระบแบนดวธทใชรวมเทากน
Throuput ของ การเชอมตอท 1
congestion avoidance (CA) additive increase สญเสย ลดขนาดของ window ลงไปครงนง
congestion avoidance (CA) additive increase
สญเสย ลดขนาดของ window ลงไปครงนง
Transport Layer 3-109
ความเสมอภาค (ตอ)
ความเสมอภาค และ UDP มลตมเดยแอพพลเคชนบอยครงไม
ใช TCP ไมตองการใหอตราการสงลดลงเพราะ
การควบคมความคบคง
มลตมเดยแอพพลเคชนจงใช UDP แทน สงเสยงวดโอดวยความเรวคงท ทน
ตอการสญเสยขอมล
ความเสมอภาค การเชอมตอ TCP แบบขนาน แอพพลเคชนสามารถทจะเปดหลายการ
เชอมตอระหวางเครอง 2 เครองแบบขนานได
เวบบราวเซอรท าแบบน ตวอยางเชน link ทมความจ R ซงม 9 การ
เชอมตอ ถาแอพใหมตองการ 1 TCP จะไดรบท rate
R10 ถาแอพใหมตองการ 11 TCPs จะไดรบท R2
Transport Layer 3-110
Chapter 3 บทสรป
หลกการเบองหลงการใหบรการชนtransport multiplexing demultiplexing การสงขอมลแบบไวใจได การควบคมการไหลของขอมล การควบคมความคบคงของขอมล
กรณศกษาและการปฏบตบน internet UDP TCP
ถดไป ออกจากปลายทางของระบบ
เครอขาย (application transport layers)
เขาไปยงสแกนของเครอขาย