1、主要功能
提供可靠的端到端的通信;向会话层提供独立于网络的运输服务。
运输层提供应用进程的逻辑通信,也就是说,运输层之间的通信并不是真正的两个运输层之间直接传送数据。运输层向应用层屏蔽了下层网络的细节,它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道。
唯一负责总体数据传输和控制的一层,运输层之上的会话层、表示层及应用层均不包含任何数据传输的功能,网络层又不一定需要保证发送站的数据可靠地送至目的站。
复用:发送方不同的应用进程都可以使用同一个传输层协议传送数据。
分用:接收方的传输层在剥去报文的首部后能够把这些数据正确交付目的应用进程。
消除网络层的不可靠性:
提供从源端到目的端主机的可靠地、与实际使用网络无关的信息传输:
2、运输层的协议:用户数据报协议UDP、传输控制协议TCP。
UDP和TCP都使用IP协议
3、端口:应用层的各种协议进程与运输实体进行层间交互的一种地址。
只具有本地意义,16位。
netstat -ano:列出所有端口的情况。
netstat -aon|findstr "8095":查看被占用端口对应的PID。
tasklist|findstr "1680":查看哪个进程或程序占用1680端口。
4、用户数据报协议UDP
用户数据报协议UDP只是在IP的数据报服务上增加了很少的功能,复用、分用、差错检测。
进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。
UDP特点:无连接的;尽最大努力交付;面向报文;没有阻塞控制;支持一对一、一对多、多对一、多对多的交互通信;首部开销小(8个字节)。
UDP首部格式:源端口、目的端口、长度、检验和。
伪首部临时的,检验和根据伪首部计算,检验和覆盖首部和数据。
5、传输控制协议TCP
TCP特点:
面向连接的:建立连接,断开连接。
点对点:每一条TCP连接只能有两个端点,一对一。
可靠交付:数据无差错、不丢失、不重复、按序到达。
全双工通信:任何时候都可以发送数据,并且设有缓存。
面向字节流:虽然应用程序与TCP交互一次一个数据块,TCP将应用程序的数据看做一连串的无结构字节流。
TCP连接:
每一条TCP连接唯一地被通信两端的两个端点(两个套接字)所确定。
套接字:端口号拼接到IP地址构成;IP地址:端口号;127.0.0.1:8095。
可靠传输原理:传输信道不产生差错;不管发送方以多块速度放松,接收方总来得及处理得到的数据。
停止等待协议:
无差错情况:
出现差错:保留已发送副本;分组和确认分组编号;超时计时器的设置。
确认丢失和确认迟到:
信道利用率:
连续ARQ协议:
发送方每收到一个确认,就把发送窗口向前滑动一个分组位置,但是不能向发送方反应出接收方已经正确收到的分组信息。
6、TCP报文段的首部格式
源端口和目的端口:
序号:在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。
确认号:期望收到对方下一个报文段的第一个数据字节的序号。
数据偏移:TCP报文段的数据起始处到TCP报文段的起始处距离。实际指TCP报文段首部长度。
保留:以后使用。
紧急URG:URG=1,表示此报文有紧急数据,优先级高。(Ctrl+C)
确认ACK:ACK=1确认号字段有效;ACK=0确认号无效。连接建立后ACK=1。
推送PSH:两个进程交互使用。PSH=1立即创建一个报文发送,接收方收到尽快交付应用进程。
复位RST:RST=1表明TCP连接出现严重错误,必须尽快释放连接,然后重新建立连接。
同步SYN:在建立连接时用来同步序号,SYN=1表示是连接请求或连接接受报文。
终止FIN:FIN=1表示次报文段发送方的数据发送完毕,要求释放运输连接。
窗口:作为接收方让发送方设置其发送窗口的依据。
检验和:与UDP相似。
紧急指针:仅在URG=1时有意义,指出本报文段中紧急数据的字节数。
选项:最大40字节。
7、TCP可靠传输的实现:以字节为单位的滑动窗口
8、TCP流量控制:滑动窗口
9、TCP的拥塞控制
防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。全局性的过程。
流量控制往往是指点对点通信量的控制,是个端到端的问题。流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。
控制方法:慢开始、拥塞避免、快重传、快恢复。
10、TCP建立、释放连接
三次握手:
A向B发送连接请求报文。同步位SYN=1,选择一个初始序号seq=x。
B收到连接请求报文,同意后向A发送确认。SYN=1,ACK=1,确认号ack=x+1,选择一个初始序号seq=y。
A收到B的确认后,向B给出确认。ACK=1,确认号ack=y+1,序号=x+1。
SYN报文段不能携带数据,但是要消耗序号;ACK报文段可以携带数据,不携带不消耗序号。
为什要三次握手:请求丢失;请求超时。
四次挥手:
A向B发出连接释放报文段,并停止发送数据,主动关闭连接。FIN=1,序号seq=u(传送过数据最后一个字节的序号+1)。
B收到连接释放报文段之后发出确认,确认号ack=u+1,ACK=1,序号seq=v。
A收到B的确认后,等待B发出连接释放报文段。A不发送数据,但仍可以接受B发送的数据。
B发送连接释放报文段。FIN=1,序号seq=w,重发发送上次确认号ack=u+1。
A收到B的释放连接报文段后,发送确认。ACK=1,确认号ack=w+1,序号seq=u+1。
FIN报文段需要消耗序号。