一、网络层是为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的通信。
运输层一个很重要的功能:复用和分用。
两种运输协议:面向连接的TCP协议和无连接的UDP。
使用TCP协议:全双工可靠信道。
使用UDP协议:不可靠信道
进程通信模式:客户-服务器模式
TCP报文段和UDP报文段
端口:应用层与传输层之间接口的抽象,16位端口号,只有本地意义。分为熟知端口、登记端口和动态端口。
二、用户数据报协议UDP:无连接、尽最大努力交付、没有拥塞控制(实时)、面向报文。
UDP报文包括数据字段和首部字段。首部字段包括源端口、目的端口、长度和检验和。
三、传输控制协议TCP:
面向连接、可靠交付、全双工通信、面向字节流
TCP报文段包括首部和数据部分。首部前20个字节是固定的,后面有4N字节是可选项。
TCP的可靠数据传输:
1、数据编号与确认。TCP采取累积确认。确认号表示接收方期望下次收到的数据中第一个数据字节序号。
如已收到1-700号、801-1000号,则发送的确认号是701。
发送确认信息不必专门发送,TCP全双工通信,传送数据时捎带。
2、以字节为单位的滑动窗口
TCP发送方已发送的未被确认的字节数不可超过发送窗口的大小。收到确认后,滑动窗口右移,直到窗口左沿正好包含确认序号字节。
3、超时重传时间的选择
当前报文段往返时延RTT。
计时器设置的超时重传时间RTO略大于平均往返时延RTTs。
Karn提出:在计算平均RTT时,只要报文段重传了,就不采用其往返时延样本。对Karn算法的修正:报文段每重传一次,就将RTO增大一些。
4、快速重传
发送方只要一连收到三个重复的确认,就应该立即重传丢失的报文段。
流量控制:
TCP为应用程序提供流量控制服务以解决因发送方发送数据太快而导致接收方来不及接收使接收方缓存溢出的问题。
TCP采用接收方控制发送方发送窗口大小的方法来实现在TCP连接上的流量控制。接收窗口值<=可用接收缓存。这是发送窗口上限值。
TCP的连接管理
目的是为了为接下来的通信做好准备,最重要的是分配相应资源。
三个阶段:连接建立、数据传送和连接释放。
1、TCP的连接建立(客户服务器模式)
第一次握手:客户端的应用进程主动打开,并向客户端发出请求报文段。其首部中:SYN=1,seq=x。
第二次握手:服务器应用进程被动打开。若同意客户端的请求,则发回确认报文,其首部中:SYN=1,ACK=1,ack=x+1,seq=y。
第三次握手:客户端收到确认报文之后,通知上层应用进程连接已建立,并向服务器发出确认报文,其首部:ACK=1,ack=y+1。当服务器收到客户端的确认报文之后,也通知其上层应用进程连接已建立。
在这个过程中,通信双方的状态如下图:
其其中CLOSED:关闭状态
LISTEN:收听状态
SYN-SENT:同步已发送
SYN-RCVD:同步收到
ESTAB-LISHED:连接已建立。
然后连接建立,为什么要进行三次握手呢(两次确认)。
2、TCP的连接释放(四次挥手)
第一次挥手:数据传输结束以后,客户端的应用进程发出连接释放报文段,并停止发送数据,其首部:FIN=1,seq=u。
第二次挥手:服务器端收到连接释放报文段之后,发出确认报文,其首部:ack=u+1,seq=v。此时本次连接就进入了半关闭状态,客户端不再向服务器发送数据。而服务器端仍会继续发送。
第三次挥手:若服务器已经没有要向客户端发送的数据,其应用进程就通知服务器释放TCP连接。这个阶段服务器所发出的最后一个报文的首部应为:FIN=1,ACK=1,seq=w,ack=u+1。
第四次挥手:客户端收到连接释放报文段之后,必须发出确认:ACK=1,seq=u+1,ack=w+1。 再经过2MSL(最长报文端寿命)后,本次TCP连接真正结束,通信双方完成了他们的告别。
在这个过程中,通信双方的状态如下图,其中:
ESTAB-LISHED:连接建立状态
FIN-WAIT-1:终止等待1状态
FIN-WAIT-2:终止等待2状态
CLOSE-WAIT:关闭等待状态
LAST-ACK:最后确认状态
TIME-WAIT:时间等待状态
CLOSED:关闭状态
本文深入解析了TCP与UDP这两种传输层协议的特点与工作机制,涵盖了它们在网络通信中的作用、数据传输方式、连接管理流程等关键内容。
3711

被折叠的 条评论
为什么被折叠?



