1.ip首部中用一个字段来标识上层即传输层采用哪种协议(tcp/udp)
传输层使用端口号识别在应用层中所要进行处理的具体程序
端口号(程序地址)与路由器交换机等设备网卡上的端口号有所不同
tcp/ip或udp/ip中通常采用5个信息来识别一个通信:源ip地址、目标ip地址、协议号、源端口号、目标端口号
只要其中某一项不同,就被认为是其他通信
确定端口号的两种方法:
1.标准既定的端口号(静态):HTTP、TELNET、FTP等广为使用的应用协议中所使用的端口号是固定的(知名端口号0-1023)还有一些1024-49151之间的端口号被注册
2.时序分配法(动态):服务端有必要确定监听端口号,客户端没必要确定监听端口号。客户端应用程序可以完全不用自己设置端口号,而交给操作系统进行分配。操作系统可以为每个应用程序分配互不冲突的端口号。
端口号与协议:端口号由其使用的传输层协议决定,不同的传输协议可以使用相同的端口号。tcp与udp使用同一端口号,数据到达ip层后会先检查协议号,如果是tcp就给tcp模块,udp就给udp模块,即使端口号相同由于传输协议是各自独立的进行处理,所以相互之间不会影响。
此外知名端口号与传输层协议无关,只要端口号一致都交给同一程序处理
2.tcp与udp区分
tcp面向连接、可靠性传输,实行“顺序控制”或“重发控制”机制,此外还具备“流控制(流量控制)”、“拥塞控制”、提高网络利用率等众多功能。通过校验和、序列号、确认应答、重发控制、连接管理以及窗口控制机制实现可靠性传输。
udp不具有可靠性,细微的处理会交给上层应用完成,可以确保发送消息的大小,不能保证消息一定到达,所以应用根据自己的需要进行重发。适用于:包总量较少的通信(DNS、SNMP等)、视频音频等多媒体通信(即时通信)、限定于LAN等特定网络中的应用通信、广播通信(广播、多播)
应用程序利用套接字可以设置对端的ip地址、端口号并实现数据的发送与接收
3.tcp
tcp当发送数据到达接收主机时,接收端主机会返回一个确认应答ACK,一定时间内发送端没收到ACK就会认为数据已经丢失,需要重发。当然ACK传输出现问题也会导致重发。加入序列号机制:按顺序给发送的每个字节标上序列号,接收端将自己下一步应该接受的序号作为应答返回给发送端。
tcp要求不论在何种网络环境下都要提供高性能通信。每次发包时都会计算往返时间及其偏差,将往返时间及其偏差相加,重发超时时间就是比这个总和稍大一点的值。
tcp的连接管理:一个连接的建立与断开,正常过程至少需要来会发送7个包才能完成
建立连接 连接请求SYN,授予连接ACK SYN,确认ACK
传输数据
断开连接
tcp以段为单位发送数据,MSS(Maximum Segment Size)最大数据长度,在三次握手的时候在两端主机之间计算得出MSS,取两端主机中较小的MSS。
利用窗口控制提升传输速度
以1个段为单位,每发一个段进行一次确认应答缺点:包的往返时间越长通信新性能越低
解决:引入窗口机制,确认应答以更大的单位进行确认,转发时间被大幅缩短。使用大量的缓冲区,通过对多个段同时进行确认应答。——滑动窗口控制,即便某些应答未收到也无需重发,可以通过下一个确认应答确认。
流控制:接收端主机向发送端主机通知自己可以接收数据的大小,发送端会发送不超过这个限度的数据,该限度就是窗口大小
拥塞控制:在网络拥堵是发送一个较大量的数据有可能导致整个网络的瘫痪,为了防止该问题出现,在通信一开始就会通过一个叫做慢启动的算法得出的数值,对发送数据量进行控制——最出将发送端的窗口设置为1,每收到一个ACK,窗口的值会增加1个段(MSS),在发送数据包时将当前拥塞窗口大小与接收主机通知的大小比较选较小的值发送比其还要小的数据。有效避免通信开始时连续发包导致的网络拥塞情况
提高网络利用率的规范
Nagle算法:只在下列任一条件下才发送数据:1.已发送的数据都已经收到确认应答时2可以发送最大段长度(MSS)的数据时
延迟确认应答:收到数据以后并不立即返回确认应答,而是延迟一段时间
捎带应答:tcp的确认应答和回执数据可以通过同一个包发送,减少收发的数据量
4.其他传输层协议
4.1 udp-Lite轻量级用户数据保协议,计算校验和的范围有应用自行决定,可以使首部和伪首部的校验和计算也可以是其他范围,这样可以只针对不允许发生错误的部分进行校验和的检查,至于其他部分即使发生了错误也不会被丢弃
4.2 SCTP流控制传输协议 提供数据到达是否相关可靠性检查的传输层协议
特点:以消息为单位收发、支持多重宿主、支持多数据流通信、可以定义消息的生存期限
4.3 DCCP数据报拥塞控制协议 辅助udp进行拥塞控制
特点:不能提供可靠性传输、面向连接,具备建立连接与断开连接的处理、根据网路拥堵进行拥塞控制、为了进行拥塞控制,接收端收到包以后返回确认应答
5.udp首部
包括源端口号、目标端口号、包长度、校验和
6.tcp首部
包括源端口号、目标端口号、序列号、确认应大号、数据偏移、保留、控制位、窗口大小、校验和、紧急指针、选项