8.1运输层概述•运输层提供的服务:•使通信子网用户得到一个统一的通信服务。•向高层用户提供端到端的透明传输。•运输协议可支持多进程连接。•运输层为用户提供廉价、可靠的运输服务。•运输协议的繁简。依网络层功能而定。应用层运输层网络层数据链路层物理层面向信息处理面向通信用户功能网络功能运输层在层次体系结构中的地位运输层提供端到端的可靠通信•通信子网和运输层一起执行网络功能。因此,根据网络不同,运输层协议也不一样。运输层AP2运输层AP6端到端通信运输层向互相通信的进程提供端到端的可靠通信AP1AP3AP2AP4AP5主机A主机B通信子网网络1网络2AP6运输层与其上下层之间的关系•两对等运输实体通信遵循运输层协议;•运输实体通过TSAP向应用层提供服务,提供服务时也使用了下层即网络层提供的网络(通过NSAP)服务;•一个运输层协议可支持多个进程连接;•和链路层相比,运输层环境复杂(原因是:即“分组存储”,“流量控制”和“拥塞控制”)主机A主机B运输服务用户(应用层实体)运输服务用户(应用层实体)运输实体运输实体应用层网络层(或网际层)运输协议TSAPNSAP层接口运输层层接口三种网络五类协议协议类网络类协议名称0A简单类1B基本错误恢复类2A多路复用类3B出错恢复和多路复用类4C出错检测和恢复类三类网络:A类网络:提供完善的服务,包括分组的丢失、错序、重复忽略不记;B类网络:单分组丢失少、但出现拥塞、故障、软件错时要重新同步,进行出错恢复等,X.25的虚电路服务就属此类;C类网络:提供不可靠数据传送服务,如数据报服务就属此类。若子网提供的服务越多,则运输层协议就越简单;但无论如何,运输都需要一个端到端的流量控制。OSI的运输层提出了三种网络五种协议。8.2TCP/IP体系中的运输层•用户数据报协议UDP•传输控制协议TCP•UDP在发送数据之前,不需要建立连接,远地主机收到数据报后,不作出应答;•TCP提供面向连接的服务。但不提供广播或多播服务。应用层UDPIP与各种网络接口TCPTCP/IP运输层的UDP与TCP1、TCP/IP的运输层有两个不同的协议:2、端口概念•客户:主动发起连接建立的进程称为客户。•服务器:被动等待连接建立的进程称为服务器。•端口:运输层与网络层之间的接口,称为端口(port),应用层通过相应端口,与运输层实体交互。•端口号:端口是一个16bit的地址,该地址用端口号标识。•熟知端口:一类专门分配给一些最常用的应用程序的端口,称为熟知端口。数值为0~255。•熟知:是指由TCP/IP体系所确定并公布的,所有应用进程都是熟知的。•一般端口:除去熟知端口以外的其他端口,用来分配给请求通信的客户进程。熟知端口和一般端口•1、熟知端口号:0~255•2、一般端口号:256~65535•3、熟知端口标识TCP/IP体系公布的端口;•4、一般端口标识请求通信的客户进程;•5、要想知道熟知端口对应的应用,请参考应用层协议。RPCSNMPTFTPSMTPFTPTELNETUDPTCPIP熟知端口应用层运输层网际层TransportLayerOverviewTransmissionControlProtocol(TCP)UserDatagramProtocol(UDP)ApplicationTransportInternetDataLinkPhysicalConnection-OrientedConnectionlessTCPSegmentFormatSourceport(16)Destinationport(16)Sequencenumber(32)Headerlength(4)Acknowledgementnumber(32)Reserved(6)Codebits(6)Window(16)Checksum(16)Urgent(16)Options(0or32ifany)Data(varies)20BytesBit0Bit15Bit16Bit31PortNumbersTCPPortNumbersFTPTransportLayerTELNETDNSSNMPTFTPSMTPUDPApplicationLayer2123255369161RIP520TCPPortNumbersSourcePortDest.Port…HostA102823…SPDPHostZTelnetZDest.port=23.SendpackettomyTelnetapplication.SendSYN(seq=100ctl=SYN)SYNreceivedHostAHostBTCPThreeWayHandshake/OpenConnection1SendSYN(seq=100ctl=SYN)SYNreceivedSendSYN,ACK(seq=300ack=101ctl=syn,ack)HostAHostBSYNreceived12TCPThreeWayHandshake/OpenConnectionSendSYN(seq=100ctl=SYN)SYNreceivedSendSYN,ACK(seq=300ack=101ctl=syn,ack)Established(seq=101ack=301ctl=ack)HostAHostB123SYNreceivedTCPThreeWayHandshake/OpenConnectionTCPSimpleAcknowledgment•Windowsize=1SenderReceiverTCPSimpleAcknowledgment•Windowsize=1SenderReceiverSend1Receive1TCPSimpleAcknowledgment•Windowsize=1SenderReceiverSend1Receive1ReceiveACK2SendACK2TCPSimpleAcknowledgment•Windowsize=1SenderReceiverSend1Receive1ReceiveACK2SendACK2Send2Receive2TCPSimpleAcknowledgment•Windowsize=1SenderReceiverSend1Receive1ReceiveACK2SendACK2Send2Receive2ReceiveACK3SendACK3TCPSimpleAcknowledgment•Windowsize=1SenderReceiverSend1Receive1ReceiveACK2SendACK2Send2Receive2ReceiveACK3SendACK3Send3Receive3•Windowsize=1SenderReceiverSend1Receive1ReceiveACK2SendACK2Send2Receive2ReceiveACK3SendACK3Send3Receive3ReceiveACK4SendACK4TCPSimpleAcknowledgmentTCPSequenceandAcknowledgmentNumbersSourcePortDest.Port…Sequence#Acknowledgement#SourceDest.Seq.Ack.102823101Ijustsent#10.TCPSequenceandAcknowledgmentNumbersIjustgot#10,nowIneed#11.SourcePortDest.Port…Sequence#Acknowledgement#102823SourceDest.10Seq.1Ack.102823SourceDest.11Seq.1Ack.Ijustsent#10.TCPSequenceandAcknowledgmentNumbersSourcePortDest.Port…Sequence#Acknowledgement#102823SourceDest.11Seq.2Ack.102823SourceDest.10Seq.1Ack.102823SourceDest.11Seq.1Ack.Ijustgot#10,nowIneed#11.Ijustsent#11.TCPSequenceandAcknowledgmentNumbersSourcePortDest.Port…Sequence#Acknowledgement#102823SourceDest.11Seq.101Ack.102823SourceDest.10Seq.100Ack.102823SourceDest.11Seq.100Ack.102823SourceDest.12Seq.101Ack.Ijustgot#11,nowIneed#12.Ijustsent#11.TCPWindowingSenderReceiverTCPWindowingWindowsize=3Send2SenderReceiverWindowsize=3Send1Windowsize=3Send3Windowsize=3Send2TCPWindowingSenderWindowsize=3Send1Windowsize=3Send3ACK3Windowsize=2Packet3isDroppedReceiverWindowsize=3Send2TCPWindowingSenderWindowsize=3Send1Windowsize=3Send3ACK3Windowsize=2Packet3isDroppedWindowsize=3Send4Windowsize=3Send3ReceiverWindowsize=3Send2TCPWindowingSenderWindowsize=3Send1Windowsize=3Send3ACK3Windowsize=2Packet3isDroppedWindowsize=3Send4Windowsize=3Send3ACK5Windowsize=2ReceiverWindowsize=3端口的作用:•主机A时延SMTP与主机C通信,为了找到目的主机C的SMTP,A与C连接建立时使用C的熟知端口(25),A给自己分配一个端口号(500);•A的另一个进程(使用501)也要和C的SMTP建立连接,这时C使用熟知端口号25;•B(使用500)也要和C的SMTP建立连接,C的熟知端口号也是25。IP=131.6.23.13端口500端口501IP=128.36.1.22端口500IP=130.42.85.15端口25BAC连接3连接2连接1一个连接由两个端点标识,这样的端点称为插口或套接字端口和API•主机IP地址和端口号一起使用,通信不会发生混乱。•插口:包括IP地址(32bit)和端口号(16bit)共48bit。对整个Internet而言,一对插口必须是唯一的如:(131.6.23.13.500)和(130.42.85.15.25)等。•对于无连接的UDP,也有一发送端口和接收端口,也使用插口概念。•应用编程接口API是运输层与应用层之间接口的通用名称。现在流行的有两大类:一类是我们上面提到的插口(BerkeleySocket),另一类是运输层接口TLI,由AT&T公司开发,有时也称为XTI(X/OPENtransportInterface)8.3用户数据协议UDP•用户数据报协议UDP是在IP数据报上只增加了端口功能;其首部有8个字节,4个字段,每字段2字节。•源端口字段,即源端口号;目的源端口字段,目的端口号;长度字段,UDP数据报的长度;检查和字段,用于UDP差错控制。源IP地址目的IP地址017UDP长度字节44112伪首部源端口目的端口长度检查和字节122222首部数据首部数据UDP数据报UDP数据报伪首部与检查和•伪首部:不是UDP的首部只是在计算检查和的时候才使用;它有5个字段12字节,第3字节是全0,第4字节是IP数据报首部的协议字段,对于UDP,其值是17。•检查和计算时包括伪首部、UDP