网络协议的第三层IP协议已经能够实现两个主机的通信
既然如此,为何还需要运输呢?
第一,主机之间的通信,最终是两个主机间的进程通信
第二,IP协议努力最大交付,但是不保证可靠性
因此,为解决上述两个问题,需要在IP协议之上再实现一层功能
这就是运输层的由来
于是,IP协议为主机间的通信提供服务
运输层协议为进程间的通信提供服务
目录
1、运输层的功能
复用与分用
为两个进程提供逻辑通信
(逻辑通信:即再逻辑上看,两个进程进行点对点的直接通信)
2、两个协议:UDP 和 TCP
UDP无面向连接,提供不可靠传输
TCP面向连接,提供可靠传输,属于双工通信
且TCP是点对点建立连接,因此不支持广播和多播
3、端口的理解
(1)为什么有端口?
不同的主机之间使用IP地址来识别
同理,对于进程的通信,首先要做的就是对进程进行标识
可是不同的进程用什么来唯一标识呢?
一个主机内部的进程有唯一的进程id来表示
可是,对于不同主机的不同进程很明显不能使用进程id来表示
不同的主机可能安装有不同的操作相同,实现方式不同,进程id也就不同,且可能存在歧义
因此,我们需要去差异化,寻找某一个共同的特征来标识进程
于是,我们采取一种叫做端口的技术标识进程
(2)端口如何唯一标识进程?
在运输层和进程之间,建立起一个个端口
每一个进程对应一个端口号
对进程:
当进程发送数据时,将数据发送给对应的端口
当进程接受数据时,从对应的端口读取数据(因此,端口要有缓存功能)
对运输层:
统一的转发本主机的所有进程数据,从对应端口中读取,这就叫做复用
统一的收取发送到该主机的所有数据,并将数据发送给合适的端口,这就叫做分用
端口号一共有16位,因此一个主机最多可以拥有2^16 - 1个进程,已经足够用
4、端口的分类
端口分两类:服务端口和客户端口
服务端口号是一些常用的进程端口
例如qq邮箱,微信等服务进程,我们很多人都要用,因此最好搞一个固定的端口,让每一个访问进程都熟知
客户端口是一些用户自己使用的
当时用户的操纵系统建立进程时,将会自动申请一个端口号
进程结束,端口号自动释放