运输层(传输层),解决计算机程序到计算机程序之间的通信问题,即端对端的通信,向高层屏蔽下面网络核心的细节
引入原因:增加复用和分用的功能,消除网络层的不可靠信,提供可靠的,与实际使用的网络无关的信息传输
tcp/ip运输层的两个协议:
面向数据报协议UDP( User Datagram Protocol):提供无连接服务
传输控制协议TCP(Transmission Control protocol):提供面向连接服务
以上协议都使用ip协议 两种协议在协议栈的位置
在osi术语中,两个对等传输肢体在通信时传送的数据单位叫做运输协议数据单元TPDU,在TCP/IP体系中,使用tcp udp分别称之为TCP报文段或udp用户数据报
使用UDP和TCP协议的各种应用和应用层协议
应用 应用层协议 运输层协议
名字转换 DNS UDP
文件传送 TFTP UDP
路由选择协议 RIP UDP
IP地址配置 BOOTP,DHCP UDP
网络管理 SNMP UDP
远程文件服务器 NFS UDP
IP电话 专用协议 UDP
流式多媒体通信 专用协议 UDP
多播 IGMP UDP
电子邮件 SMTP TCP
远程终端输入 TELNET TCP
万维网 HTTP TCP
文件传送 FTP TCP
运输层的端口
端口:用16位来表示,即一个主机共有65536个端口。序号小于256的端口称为通用端口,如FTP是21端口,WWW是80端口等。端口用来标识一个服务或应用。一台主机可以同时提供多个服务和建立多个连接。端口(port)就是传输层的应用程序接口。应用层的各个进程是通过相应的端口才能与运输实体进行交互。服务器一般都是通过人们所熟知的端口号来识别的。例如,对于每个TCP/IP实现来说,FTP服务器的TCP端口号都是21,每个Telnet服务器的TCP端口号都是23,每个TFTP(简单文件传输协议)服务器的UDP端口号都是69。任何TCP/IP实现所提供的服务都用众所周知的1-1023之间的端口号。这些人们所熟知的端口号由Internet端口号分配机构(Internet Assigned Numbers Authority, IANA)来管理。
用户数据报协议UDP
UDP只在IP数据报服务之上增加了很少一点的功能,复用和分用的功能以及差错检测的功能,主要的特点是:
1.UDP是面向无连接的,发送数据之前不需要建立连接
2.UDP使用 尽最大努力交付,即不保证可靠交付 因此主机不需要维持复杂的链接状态表
3.UDP面向报文。 应用程序交下来的报文,在添加首部后就交付IP层
4.UDP没有阻塞控制 网络阻塞不会使源程序发送速率降低
5.UDP支持一对一,多对一,一对多,多对多的交互通信
6.UDP的首部开销小,只有8个字节 tcp20字节
传输控制协议TCP
特点:
1. 面向连接的传输层协议
2. 每一条tcp只能有两个端点
3. 提供可靠交付的服务
4. 提供全双工通信
5. 面向字节流
TCP的连接
tcp把连接作为最基本的抽象 tcp连接的端点叫做 套接字(socket)或者插口,端口号拼接到ip地址即构成套接字
可靠传输的工作原理
停止等待协议
每发送完一个分组就停止发送,等待对方确认,收到确认后再发送下一个分组
超时重传
连续ARQ协议
流量控制(让发送方的发送速率不雅太快,要让接收方来得及接收)
拥塞控制(接受端控制发送端)
三次握手:
三次握手的目的:是使收发端的数据发送和接收同步,协调可以收发的数据量,建立虚连接
服务器进程就绪 等待客户端连接
1.客户端主动打开向服务端发送请求报文段
2.服务器被动打开,收到连接请求报文段后。如确认连接向客户端发送确认
3.客户端收到确认后,向服务器发送确认(防止已失效的连接请求报文端突然又传到了服务端)
整个过程如图
1)第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。
(2)第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。
(3)第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据。
确认号:其数值等于发送方的发送序号 +1(即接收方期望接收的下一个序列号)。
关闭链接:
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
CP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。
(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。
(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。
(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。
自己的话简单的说,客户机首先跟服务器说,我要走了,服务器说知道了(此时关闭客户机向服务器通信),服务器说,我也不理你了,客户机说知道了
四次挥手的实质:
简单说来是 “先关读,后关写”,一共需要四个阶段。以客户机发起关闭连接为例:
1.服务器读通道关闭
2.客户机写通道关闭
3.客户机读通道关闭
4.服务器写通道关闭