传输层
传输层的TCP和UDP,是为了识别自己所传输的数据部分究竟应该发给哪一个应用。如下图的过程
TCP/IP通信既是如此,传输层必须指出发送个哪个具体的程序,为了实现这个功能,使用端口号(此处的端口与路由器交换机等设备网卡的端口不同)这个识别码。
- 工作机制:
TCP,UDP传输协议,通过接受数据中的目标端口号识别目标处理程序。上图,传输协议的数据将被传递给HTTP等应用层协议。 - TCP 和 UDP:TCP是面向连接的、可靠地流协议,即不间断的数据结构,你可以把它想象乘排水管道中的水流。应用采用TCP发送消息,虽然可以保证发送的顺序,但还是犹如没有任何间隔的数据流发送给接收端。而UDP是不具有可靠性的数据报协议。细微的处理他会交给上层应用完成,UDP可以确保发送的大小,却不可以保证一定能到达。
- 套接字(Socket):应用在使用TCP或者UDP时,会用到套接字的API,应用程序利用套接字,可以设置对端的IP地址、端口号,并实现数据的发送与接收
端口号
- 端口号定义:数据链路和IP中的地址,指的是MAC地址和IP地址,前者用来识别同一链路不同的计算机,后者用来识别TCP/IP网络中互联的主机和路由。传输层中也有类似概念,就是端口号,用来识别同一台计算机中进行通信的不同应用。
- 一台计算机可以运行多个程序,例如WWW服务的浏览器,电邮客户端,远程登录的SSH客户端。
- 通过IP地址(源和目标)、协议号、端口号(源和目标)来识别一个通信
- 端口号确定 1.标准既定 2.时序端口(让操作系统分配)
- 端口号与协议: 数据到达IP层后,会先检查IP首部中的协议号,再传给相应协议的模块,即TCP传给TCP模块,UDP传给UDP模块,即使同一个端口号,由于协议是各自独立处理,因此不会互相影响。
UDP
User Datagram Protocol,需要考虑好上层协议类型并制作应用程序,也就是UDP按照“制作程序的那些用户的指示行事”
常用于
- 包总量较少的通信(DNS SNMP)
- 视频、音频(即时通信)
- 限定LAN等特定网络中的应用通信
- 广播通信(广播、多播)
TCP
TCP是一种面向有链接的协议,只有在确认通信对端存在时才会发送数据,从而可以通知通信流量浪费。
所以在IP这种无连接的网络上也能够实现高可靠性通信。
- 通过序列号与确认应答提高可靠性
TCP通过肯定的确认应答实现可靠地数据传输,当一定时间没有确认应答,发送端就可以认为数据已经丢失、并进行重发。
上述这些处理,都可以通过序列号实现。序列号是按顺序给发送数据的每一个字节(8位字节)都标上号码的编号。接收端查询接收数据TCP首部中的序列号和数据长度,将下一步应该接受的序号作为确认应答返送回去。
- 重发超时如何确定:最理想的是,找到一个最小时间,可以确保“确认应答一定在这个时间内返回”,然而随着网络环境变化,会改变。所以TCP,每次在发包时候都会计算往返时间和偏差,将这个时间和偏差相加,重发超时的时间就是这个值大一点的值
- 连接管理:使用TCP首部用于控制的字段来管理TCP连接。一个连接的建立与断开,正常过程至少需要来回发送七个包才能完成。
三次握手!:即上图连接建立部分,客户端发送SYN请求建立连接,服务端发送ACK包确认应答,并发送SYN请求连接,客户端ACK应答
TCP以段为单位发送数据
- 利用窗口控制提高速度,TCP以一个段为单位,每发一个段进行一个确认应答的处理,使得通信性能降低。
- 滑动窗口控制
- 窗口控制与重发控制
- 确认应答丢失:
使用窗口控制,未得到确认也不需要重发,如上图所示
报文段丢失:
当某一短报文丢失,发送端回一直收到序号为1001的确认应答,即在提醒发送端,我想接受的是从1001开始的数据,当发送端连续三次收到同一个确认应答,就会将所对应的数据进行重发,这叫做高速重发机制 - 流控制,TCP提供一直机制可以让发送端根据接收端的世界接收能力控制发送的数据量,即流控制。
- 拥塞控制
- Nagle算法