chapter 3 transport layer - burapha university

110
Transport Layer 3-1 Chapter 3 Transport Layer Computer Networking: A Top Down Approach 6 th edition Jim Kurose, Keith Ross Addison-Wesley March 2012 การใช้สไลด์ : เนื้อหาในสไลด์เหล่านี้ถูกแปลมาจากสไลด์ต้นฉบับประกอบหนังสือของผู้แต่งชื่อ Kurose และ Ross ผู้แปลอนุญาตให้ทุกท่านสามารถใช้สไลด์ทั้งหมดได้ ดังนั้นท่านสามารถดูภาพเคลื่อนไหว สามารถเพิ่ม ,แก้ไข และ ลบสไลด์ (นับรวมข้อความนี้) และเนื้อหาของสไลด์เพื่อให้เหมาะกับความต้องการของท่าน สาหรับการแลกเปลี่ยน เราต้องการสิ่งต่อไปนี้เท่านั้น : ถ้าท่านใช้สไลด์เหล่านี้ (เป็นตัวอย่าง, ในห้องเรียน) อย่าลืมกล่าวถึงที่มาของสไลด์ (หลังจากนีเราต้องการให้ทุกคนอุดหนุนและใช้หนังสือของผู้แต่งด้านข้าง) ถ้าคุณโพสต์สไลด์ใด ๆ ในเวป, อย่าลืมกล่าวถึงว่า คุณแก้ไขจากสไลด์ต้นฉบับของเรา และ ระบุ ถึงลิขสิทธิ์ของเราด้วย ขอขอบคุณและขอให้สนุก! ณัฐนนท์ ลีลาตระกูล ผู้เรียบเรียง สงวนลิขสิทธิ์ 2013 เนื้อหาทั้งหมดเป็นลิขสิทธิ์ของคณะวิทยการสารสนเทศ

Upload: others

Post on 13-Feb-2022

7 views

Category:

Documents


0 download

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)

เขาไปยงสแกนของเครอขาย