一.传输层基本服务
将主机间交付扩展到进程间交付,通过复用和分用实现。
发送端(复用):
传输层从多个套接字收集数据,交给网络层发送。
接收端(分用):
传输层将从网络层收到的数据,交付给正确的套接字。
二.如何进行复用和分用
1.为将报文段交付给套接字:
①主机中每个套接字应分配一个唯一的标识;
②报文段中包含接收套接字的标识。
2.复用:
发送方传输层将套接字标识置于报文段中,交给网络层。
3.分用:
接收方传输层根据报文段中的套接字标识,将报文段交付到正确的套接字。
三.套接字标识与端口号
1.端口号是套接字标识的一部分:
①每个套接字在本地关联一个端口号;
②端口号是一个16比特的数。
2.端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。
在互联网中,不同计算机的相同端口号是没有联系的。
3.端口号的分类
①熟知端口:0~1023,由公共域协议使用;
②注册端口:1024~49151,需要向IANA注册才能使用;
③动态和/或私有端口:
a.49152~65535,一般程序使用;
b.当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。
4.报文段中有两个字段携带端口号
①源端口号:与发送进程关联的本地端口号;
②目的端口号:与接收进程关联的本地端口号。
5.套接字端口号的分配
①自动分配
a.创建套接字时不指定端口号;
b.由操作系统从49152~65535中分配;
c.客户端通常使用这种方法。
②使用指定端口号创建套接字
a.创建套接字时指定端口号;
b.实现公共域协议的服务器应分配众所周知的端口号(0~1023)
c.服务器通常采用这种方法。
四.UDP分用的方法
1.UDP套接字使用 <IP地址, 端口号> 二元组进行标识。
2.接收方传输层收到一个UDP报文段后:
①检查报文段中的目的端口号,将UDP报文段交付到具有该端口号的套接字;
②<目的IP地址, 目的端口号> 相同的UDP报文段被交付给同一个套接字,与<源IP地址,源端口号>无关;
③报文段中的<源IP地址,源端口号>被接收进程用来发送响应报文。
五.TCP服务器使用的套接字
1.一个TCP服务器为了同时服务很多个客户,使用两种套接字。
2.监听套接字:
服务器平时在监听套接字上等待客户的连接请求,该套接字具有众所周知的端口号。
3.连接套接字:
①服务器在收到客户的连接请求后,创建一个连接套接字,使用临时分配的端口号;
②服务器同时创建一个新的进程,在该连接套接字上服务该客户;
③每个连接套接字只与一个客户通信,即只接收具有以下四元组的报文段:
- 源IP地址=客户IP地址,源端口号=客户套接字端口号;
- 目的IP地址=服务器IP地址,目的端口号=服务器监听套接字的端口号。
4.连接套接字需要使用<源IP地址,目的IP地址,源端口号,目的端口号>四元组进行标识,服务器使用该四元组将TCP报文段交付到正确的连接套接字。
六.小结
1.UDP套接字
a.使用<IP地址,端口号>二元组标识UDP套接字;
b.服务器使用一个套接字服务所有客户。
2.TCP套接字
a.使用<源IP地址,目的IP地址,源端口号,目的端口号>四元组标识连接套接字;
b.服务器使用一个监听套接字和多个连接套接字服务多个客户,每个连接套接字服务一个客户。