所谓TCP/IP协议族,一般来说不仅仅指TCP/IP两种协议,而是指一系列网络协议:包括IP/ICMP、TCP/UDP、FTP/TELENT等利用IP通信时需要用到的协议;
TCP/IP协议的标准化流程大致分为以下几个阶段:首先是互联网草案阶段;其次,如果IETF认为可以进行标准化,就记入RFC(request for comment)进入提议标准阶段;第三,是草案标准阶段;最后,才进入真正的标准阶段。
通常TCP/IP协议模型为应用层、传输层、网络层、数据链路层;以一个快递发送做比喻说明大致流程:
如果用户A要发一个快递给B;
1、应用层相当于用户A对于发送的东西进行一次包装,包住了快递并指定对象B;然后交给快递员C;
2、传输层相当于快递员C对于快递进行二次包装,指明了发送的具体收件人B地址和发件人A信息; 然后交给快递公司D;
3、网络层相当于快递公司D,对于快递在进行三次信息匹配,指定了发送地点B的地址和发送路线,详细到每一个中转点,交给送货车群E;
4、数据链路层相当于送货车群E,对于快递还要进行一个中转处理,没到一个新的中继点进行一次中转标识;最后交给收获B当地的快递中心F;当地快递中心进行各种效验后交给B;
这个比喻只是说明一个大致流程,但一层的作用事实上有更多,而且网络上的交互比现实有更多的不确定性;
硬件层面主要提供一些物理上的连接比如网线、无线连接;网络的带宽、可靠性、安全性、延迟都会受到这些影响,但这一般不是TCP/IP的主要考量点,上层的各种协议都是再改层可以互联基础下提出的;
数据链路层,也叫网络接口层;也是上层网络传输的一个工具,将上层的包通过操作系统层面来实现一个处理,使其能够通过下层设备来进行传输;
网络层,用于对于上层发送的数据进行一个路由指定,比如路由器工作于磁层,但交换机却常常作为二层设备而位于数据链路层,因为路由器需要实现网络的转发分组;ip协议(网际协议)位于这层,它使用ip地址来作为各个主机的标识;规定了各个ip地址的分类,规定了数据包的格式;简单来说,它是负责进行网络数据包的定向最大努力交付;与其配套使用的三个协议:地址解析协议ARP用于解析出ip地址中的物理地址,网际控制报文协议ICMP,常用于诊断ip数据包的发送情况;网际组管理协议IGMP;
传输层,主要用于让用用程序间能够进行通信,需要能够识别那些程序的进程并确定端口号,对于应用层提供的数据包提供一个可传输的包装;常见的两个代表协议是TCP与UDP,TCP是一种面向有连接的传输层协议。它可以保证两端通信主机之间的通信可达。TCP能够正确处理在传输过程中丢包、传输顺序乱掉等异常情况。此外,TCP还能够有效利用带宽,缓解网络拥堵。UDP有别于TCP,它是一种面向无连接的传输层协议。UDP不会关注对端是否真的收到了传送过去的数据,如果需要检查对端是否收到分组数据包,或者对端是否连接到网络,则需要在应用程序中实现。两种协议用途不同,TCP专注于进行一个可靠的信息传输,用于一些需要保证质量的过程,而它每次建立和断开连接都比较费时费资源;UDP则是尽最大努力进行一个数据报的传输,而且支持广播,适用于大部分分组数据少,广播通信领域;
应用层,负责对应用需要传输的信息进行一个简单的封装,它可以由一个或多个程序实现传输信息的一个表达组装;常用的协议,超文本传输协议HTTP,邮件传输协议SMTP、文件传输协议FTP、远程登录协议TELNET和SSH,简单网络管理协议SNMP,这些协议将数据规定为某种格式并加上一些首部文件组装好传给下层进行传输;
发送过程:应用程序处理产生数据包 -> 传输层加上传输层协议首部 ->网络层加上网络层协议首部 ->数据链路层+物理层进行数据发送;
接受过程:从下层的数据链路层得到数据包->网络层通过保重MAC地址确认是自己的包->传输层确认数据包的是否正确和端口号应用程序确定,如果是TCP还会有序号检验等其他操作->应用程序解析数据并作出处理;
通过应用层协议我们可以利用应用程序进行网络上的信息传输,包括Web 浏览器、电子邮件、远程登录、文件传输、网络管理等。通常一个应用层协议只需要考虑自身需要发送的数据即可,这得意于下面基层的功能实现;应用层包含了通信连接、数据格式转换、端对端的主机交互等功能;
基于TCP连接,通过这一条连接向主机发送文字命令,并再主机上执行。从而达到远程操作对面系统的Shell;即通过某一个端口进行一个指令传输;远程系统监听端口并获得指令;
它可以分为两类基本服务。一是仿真终端功能、一个是协商选项的功能;TELNET经常用于登录路由器或高性能交换机等网络设备进行相应的设置;常见的一个使用方法,通过Windows上的Telnet客户端;telnet主机名 TCP端口号
;如下面的一个控制交换机窗口
SSH是加密的远程登录系统。TELNET中登录时无需输入密码就可以发送,容易造成通信窃听和非法入侵的危险。使用SSH后可以加密通信内容。即使信息被窃听也无法破解所发送的密码、具体命令以及命令返回的结果是什么。此外SSH还提供了端口转发、文件转发等功能;常见于一些远程登录场景;如linux的远程ssh登录,git中的ssh连接;
FTP是在两个相连的计算机之间进行文件传输时使用的协议,通过使用两条TCP连接:一条用来控制,另一条用于数据(文件)的传输;
用于控制的TCP连接主要进行文件传输相关信息的控制。如登录用户名和密码的验证、发送文件的名称、发送方式的设置;常见的一些文件操作 PUT\GET\LIST;这些操作会建立一个数据传输的连接,按控制传输的反方向建立,传输数据完毕后断开。控制用的连接,在用户要求断开之前会一直保持连接状态。
SMTP(Simple Mail Transfer Protocol),主要用于高速传输邮件内容,基于TCP;POP则为了接受邮件;
邮件内容包括数字内容和文本信息,如果通过TCP连接直接传输邮件,需要客户端和服务段双方都处于一个在线状态,这是一个明显的缺点;TCP如果发送过区邮件而此时对方不在线,TCP可能会一致重传,这显然是不太有好的;为此主要做了以下优化:
SMTP改变了TCP连接机制,选择网关处建立一个SMTP邮件服务器,这个服务器基本不会断电,发送和接收端通过邮件服务器进行收发邮件。接收端从邮件服务器接收邮件时使用POP3(Post Office Protocol)协议。POP协议是一种用于接收电子邮件的协议。发送端的邮件根据SMTP协议将被转发给一直处于插电状态的POP服务器。客户端再根据POP协议从POP服务器接收对方发来的邮件。在这个过程中,为了防止他人盗窃邮件内容,还要进行用户验证。
电子邮件的发送地址由DNS进行管理。DNS中注册有邮件地址及其作为发送地址时对应的邮件服务器的域名。
主要用于HTML等web信息的传输;
当用户在浏览器的地址栏里输入所要访问Web页的URI以后,HTTP的处理即会开始。HTTP中默认使用80端口。它的工作机制,首先是客户端向服务器的80端口建立一个TCP连接,然后在这个TCP连接上进行请求和应答以及数据报文的发送;
SNMP(Simple Network Management Protocol)收集信息进行网络管理。它是一款基于UDP/IP的协议。
在网络管理终端和路由器交换机之间工作。用于定时的记录网络拥堵传输情况,以及检查设备异常;并能够进行网络地址管理;
MIB(Management Information Base)。主要用于SNMP信息的表线,它是将一些网络操作信息翻译成对应的格式进行传输;RMON(Remote Monitoring MIB),NIB用于在设备上进行信息表达,RMON则是网络上链路的信息; 举个例子:路由器上的信息展示使用MIB,而RMON则是展示各个端口正在交换的信息内容及协议使用;
RTP(Real-Time Protocol)主要用于保证UDP的信息正确传输;UDP传输信息是不可靠的,RTP加一个表示报文顺序的序列号字段,还对报文发送时间进行管理。RTP为每个报文附加时间戳和序列号。接收报文的应用,根据时间戳决定数据重构的时机。RTCP(RTP Control Protocol)是辅助RTP的一种协议。通过丢包率等线路质量的管理,对RTP的数据传送率进行控制;
一些比较常见的场景:如音乐视频的边下边播都可以使用RTP协议,也可以引入RTSP(Real-Time S团eaming Protocol),流协议可以更方便的进行多媒体信息的处理,如快退、快进等功能;
应用层包好数据后,传输层主要用于将数据确定好传输的具体应用程序和端口,传输协议TCP、UDP通过接收数据中的目标端口号识别目标处理程序。
TCP用于在传输层有必要实现可靠传输的情况。由于它是面向有连接并具备顺序控制、重发控制等机制的,所以它可以为应用提供可靠传输。
它的特点是需要建立连接,传输可靠,以字节流形式传输数据,传输效率低,所需资源多,首部字节20-60;
TCP通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。
如果需要传输一个数据:
传输目标:三次握手四次挥手的机制使得TCP建立的连接能够建立稳定的数据可传输连接;
从传输结果上:
(User Datagram Protocol)UDP主要用于那些对高速传输和实时性有较高要求的通信或广播通信。我们举一个通过IP电话进行通话的例子。如果使用TCP,数据在传送途中如果丢失会被重发,但这样无法流畅地传输通话人的声音,会导致无法进行正常交流。而采用UDP,它不会进行重发处理。从而也就不会有声音大幅度延迟到达的问题。
它的特点:无连接,数据不可靠,以数据报文段为基本单位,传输效率快,所需资源小,首部8个字节,4个字段。
TCP扩展,解决TCP的一些问题
特点:
- 以消息为单位收发
TCP中接收端并不知道发送端应用所决定的消息大小。在SCTP中却可以。- 支持多重宿主
在有多个NIC的主机中,即使其中能够使用的NIC发生变化,也仍然可以继续通信(这与TCP相比提高了故障应对能力。) 。- 支持多数据流通信
TCP中建立多个连接以后才能进行通信的效果,在SCTP中一个连接就可以。(吞吐量得到有效提升。)- 可以定义消息的生存期限
超过生存期限的消息,不会被重发。
UDP扩展,支持拥塞控制;
DCCP具有如下几个特点:
- 与UDP一样,不能提供发送数据的可靠性传输。 它面向连接,具备建立连接与断开连接的处理。在建立和断开连接上是具有可靠性。
- 能够根据网络拥堵情况进行拥塞控制。使用DCCP(RFC4340)应用可以根据自身特点选择两种方法进行拥塞控制。它们分别是“类似TCP(TCP-Like)拥塞控制”和“TCP友好升级控制”(TCP-FriendlyRate Control)(流控制的一种。它根据单位时间内能够发送的比特数(字节数)进行流控制。相比TCP的窗口控制,可以说TFRC是针对声频和视频等多媒体的一种控制机制.(RFC4341)。
- 为了进行拥塞控制,接收端收到包以后返回确认应答(ACK)。该确认应答将被用于重发与否的判断。
网络层这要实现一个节点间的通信;通过ip地址来实现一个定向传输,即跨越不同数据链路到指向终点;
相当于指定一个大致的最终方向;
IP协议主要规定了地址的标识方式;
IP地址(IPv4地址)由32位正整数来表示。TCP/IP通信要求将这样的IP地址分配给每一个参与通信的主机。通过ip地址协议划分给每个主机;
IP地址由网络号和主机号两部分组成;网络号表明了数据链路层中的配置,而主机号则是主机的身份标识;
IP地址表示方式:
1)分类的IP地址,IP地址通过网络号与主机号的位数对32位进行划分
A类地址:0+网络号+24位主机号
可容纳主机数:2^24-2,去除了全零网络号,和全一的主机广播号;
B类地址:10+网络号+16位主机号
可容纳2^16-2主机
C类地址:110+网络号+8位主机号
可容纳2^16-2主机
D类地址:1110+多播地址
E类地址:1111+保留字
IP地址指明了主机的网络和主机位;
IP地址管理机构只需要管理网络号;路由器仅根据网络号来转发分组;但想ip地址被其他层使用,还需要结合以下协议:如应用层的DNS域名解析协议,将域名解析为IP地址;
数据链路层使用的是MAC地址,ARP协议主要用途使将网络层的IP地址解析位数据链路层使用的物理地址;
要从ip地址中获取物理MAC地址,APR做的事情是,
通常每次请求完后,对于MAC地址最好做一个缓存映射表,避免重复的去广播查询,当时也需要保证时效性;而且对于这个MAC地址,不一定是最终的MAC地址,他一般指下一跳的路由地址;
ICMP验证该网络的设置是否正确,一般用于网络刚刚搭建好的时候;ICMP的主要功能包括,确认IP包是否成功送达目标地址,通知在发送过程当中IP包被废弃的具体原因,改善网络设置等。如最常见的PING命令,用于对于网络进行一个连接的探测;ICMP报文分为ICMP差错报告报文和ICMP询问报文;
1、ICMP差错报告报文分类
终点不可达、时间超过、参数问题、改变路由;
2、ICMP询问报文分类
回送请求和回答;
时间戳请求和回答;
常见应用
1、 PING,用于分组网络间的探测,用于测试两台主机连通性。(回送请求回答)
2、traceroute路由追踪,用于查询ip报文的路由路径信息;(时间超过和重点不可达)
DHCP(Dynamic Host Configuration Protocol)协议。有了DHCP,计算机只要连接到网络,就可以进行TCP/IP通信。
主要解决的是ip地址的自动分配,当有一台新主机时不必要去手动的进行一个网络分配;
它的实现基于一台DHCP服务器(很多时候用该网段的路由器充当DHCP服务器。) 。然后将DHCP所要分配的IP地址设置到服务器上。此外,还需要将相应的子网掩码、路由控制信息以及DNS服务器的地址等设置到服务器上。
NAT(Network Address Translator)是用于在本地网络中使用私有地址,在连接互联网时转而使用全局IP地址的技术。通过这个全局IP进而实现多态主机间的通信;
主要对一些常见的协议做了一个简单的功能介绍,详细内容需要更多学习,文中失误望指出;谢谢