网络层是为主机之间提供逻辑通信,而运输层为应用进程之间(socket:ip+端口)提供端到端的逻辑通信。
系统端口号/熟知端口号 (0-1023)FTP: 21
TELNET: 23
SMPT: 25
DNS: 53
TFTP: 69
HTTP: 80
SNMP: 161
SNMP(trap): 162
登记端口号 (1024-49151)
客户端使用的端口号 (49152-65535)
由于这类端口号仅在客户进程运行时才动态选择,因此也叫做短暂端口号
TCP (面向连接,可靠)
socket
socket = (IP地址: 端口号)
每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定。
同一个名词socket却可以表示多种不同的意思
允许应用程序访问连网协议的应用编程接口API,即运输层和应用层之间的一种接口,称为socket API,并简称为socket。
socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。
更多
在socket API中使用的一个函数名也叫做socket。
调用socket函数的端点成为socket,如“创建一个数据报socket”。
调用socket函数时,其返回值称为socket描述符,可简称为socket。
在操作系统内核中连网协议的Berkeley实现,称为socket实现。
上面的这些socket的意思都和(IP地址: 端口号)不同。
特点TCP时面向连接的运输层协议
每一条TCP连接只能有两个端点,每一条TCP连接只能时点对点的。
TCP提供可靠交付的服务。
TCP提供全双工通信。
面向字节流。TCP中的“流”(stream)指的是流入到进程或从进程流出的字节序列。
更多
面向字节流的含义是:
虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据看成仅仅是一连串的无结构的字节流。TCP不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块具有对应大小的关系(例如,发送方应用程序交给发送方的TCP共10个数据块,但接收方的TCP可能只用了4个数据块就把收到的字节流交付上层的应用程序)。TCP并不关心应用进程一次把多长的报文发送到TCP的缓存中,而是根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP发送的报文长度是应用进程给出的)。如果应用进程传送到TCP缓存的数据块太长,TCP就可以把它划分短一些再传送。如果应用进程一次只发来一个字节,TCP也可以等待积累有足够多的字节后再构成报文段发送出去。可靠传输的工作原理
TCP报文段的首部格式
TCP可靠传输的实现
TCP的流量控制
TCP的拥塞控制
TCP的运输连接管理(三次握手四次挥手)
UDP (无连接,不可靠)
用户数据报协议UDP只在IP的数据报服务之上增加了很少的一点功能,这就是复用和分用的功能以及差错检测的功能。
特点
UDP是无连接的
UDP使用尽最大努力交付
UDP是面向报文的,发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。
UDP对应用层交下来的报文,既不合并,也不拆分。因此,应用程序必须选择合适大小的报文。
若报文太长,UPD把它交给IP层后,IP层在传送时可能要进行分片,这会降低IP层的效率。
若报文太短,UDP把它交给IP层后,会使IP数据报的首部的相对长度太大,这也降低了IP层的效率。
UDP没有拥塞控制
UDP支持一对一/一对多/多对一和多对多的交互通信
UDP的首部开销小,只有8个字节,比TCP的20个字节的首部要短
首部
伪首部(12字节)是用来计算校验和的。
检验和
UDP计算检验和的方法和计算IP数据报首部检验和的方法类似。但不同的是:
IP数据报的检验和只检验IP数据报的首部,但UDP的检验和是把首部和数据部分一起都检验。
UDP的检验和即检查了UDP用户数据报的源端口和目的端口以及UDP用户数据报的数据部分,又检查了IP数据报的源IP地址和目的地址。
其他
如果接收方UDP发现收到的报文中的目的端口不存在对应的应用进程,就丢弃该报文,并由网际控制报文协议ICMP发送“端口不可达”差错报文给发送方。
traceroute就是让发送的UDP用户数据报故意使用一个非法的UDP端口,结果ICMP就返回“端口不可达”差错报文,因而达到了测试的目的。