tcp协议栈,tcp协议栈测试

首页 > 经验 > 作者:YD1662022-10-29 23:39:55

TCP/IP协议栈

TCP/IP协议是规范不同主机之间进行通信的一系列协议,其中涉及到数据的封装,传输,寻址等一系列内容,是计算机领域非常重要的基础知识,我们在Java中用到的Socket通信就是基于TCP/IP协议中的TCP协议,开发为一系列封装好的API供用户使用。为什么要制定这些协议呢?这些协议为通信领域指定了唯一的标准,为不同的网络供应商,设备制造商的生产和服务提供了一个统一的标准。TCP/IP协议栈就是一个类似数据结构中的栈的模型,它有很多层,每层承担着不同的功能,有不同的协议。我们一般可以把协议栈理解为一个四层的模型:应用层、传输层、网络层、链路层。应用层中有一些面向用户的与应用相关的协议,涉及到对数据的一些分析和处理,使得用户信息和数据流之间得到转换;传输层是负责执行数据流和数据段之间的转换,是数据信息的管理层面;网络层涉及到与其他主机的联系,对数据封装并找到合适的路径把信息发出去或者接收进来;链路层中主要是一系列为了实现相应功能的接口,是协议栈的最底层。一般来说,用户信息会从应用层开始,往下逐步被包装,当传到另一个主机的时候,再从下到上一步步打开包装,最终解析还原为用户信息。在这个过程中,各项协议确保了传输过程的实现以及数据的安全。
TCP/IP协议栈:

tcp协议栈,tcp协议栈测试(1)

协议栈之应用层

应用层包括的协议有:
1、文件传输类:HTTP(超文本传输协议)、FTP(文件传输协议)、TFTP(简单文件传输协议)
2、远程登录类:Telnet
3、电子邮件类:SMTP(简单邮件传输协议)
4、网络管理类:SNMP(简单网络管理协议)
5、域名解析类:DNS
接下来我们逐一介绍这些协议:
①HTTP协议:这是一种超文本链接协议,适用于分布式超媒体系统,它对应的客户端的连接对象是web服务器,也就是我们常见的“www”,我们在登录一个网页的时候必然需要经过这个协议,它是我们在网页设计以及网页数据的传输中的规范。
②FTP协议:这是一种文件传输协议,它是基于TCP协议(TCP协议位于传输层,我们之后会提到)实现的一种应用层的协议,使得用户可以在FTF服务器上下载大信息量的文件,FTP协议保障了文件的传输的可靠性。
③TFTP协议:简单文件传输协议,TFTP只能获得和写入文件,和前者不同之处是这种协议是基于UDP协议的,这是不是一种面向连接的协议。什么是面向连接呢?面向连接就是协议的目的是保障通信双方能够保持连接并进行数据的交互。而TFTP协议是一种无连接协议,发文件方只管文件发出去了而不会管对方是不是受到了文件。QQ传输文件使用的就是TFTP协议,那么既然它不可靠,为什么还要使用它呢?因为这种文件传输方式成本低,在小文件的传输中可以提高速度而不需要复杂的来回确认和验证,我们要想保障文件的传输,只要在应用层对UDP传输的数据做一些处理,依然能达到可靠传输的效果。
④Telnet协议:远程登录类协议,客户端需要通过这个协议去登录到服务器上。这里我们可以举个简单的例子来说明:主机1提出申请希望登录到某主机2的服务器上,这时TCP会为它分配一个源端口号(假设是1288),然后指定登录类的目标端口号为23(登录类的端口号在计算机上是确定且唯一的,这可以让主机2知道这个消息发给登录类的),当数据到达主机2的时候,如果23号端口的服务器是开启的,客户端便可以连接到服务器,主机2会生成一个远程端口1288号,如果主机1上的第二个Telnet用户向TCP提出登录申请,这时TCP会为它分配另一个(如1289)的端口号去和服务器连接。关于端口号的使用,小于255一般是公共应用,255 ~1023是特定应用商的特定端口号,我们一般使用大于1023的端口号。
⑤STMP协议:简单邮件传输协议,这也是基于UDP的一项应用,其实现类似于简单文件传输协议但这项协议是针对邮件的传输的。
⑥SNMP协议:简单网络管理协议,它的作用是管理员可以通过网络对那些位于不同物理空间的主机进行配置和管理。
⑦DNS协议:这是一系列关于网站域名和IP地址的映射,IP地址是由一系列数字组成,不便于记忆,而映射为域名去访问就会容易很多,在DNS中,这种映射也是唯一的。

协议栈之传输层

传输层我们的协议是TCP协议和UDP协议,这两个协议在整个TCP/IP协议栈中十分重要,下面我们来详细介绍这两种协议的特点和区别:
①TCP协议(传输控制协议):

TCP协议是一种面向连接的可靠的协议,它会确保数据可以安全的从一方传输到另一方,TCP的可靠性是如何实现的呢?
三次握手:基于TCP的通信在数据传输前需要先进行三次握手,然后建立连接,开始数据的传输,在传输结束的时候,会执行改进的三次握手实现断开连接,由此可以看出这个过程的可靠性。在传输层,主机之间的通信是端到端的,两主机之间相互发送数据。
三次握手:主机1发送自己的序列号SYN:X给主机2,主机2收到后会发一个应答号ACK:X 1给主机1,同时会把自己的序列号SYN:Y也发给主机1,主机1收到后,会发应答号ACK:Y 1及序列号SYN:X 1给主机2,这样三次握手就完成了,两主机就可以进行通信。
三次握手图示:

tcp协议栈,tcp协议栈测试(2)

在通信结束时,两主机执行改进的三次握手来实现通信的结束。主机1先发一个FIN报文段包给主机2,主机2收到后先发一个应答号ACK,然后开始关闭相关应用,待主机2的程序告诉主机,要彻底关闭应用时,主机2向主机1发送FIN报文段给主机1,主机1收到后发一个应答号ACK给主机2,表示彻底关闭了连接,结束了通信。在这个过程我们可以发现,三次握手使得双方可以可靠地实现对话,但这如果在小信息量的通信中,似乎效率有些低。

tcp协议栈,tcp协议栈测试(3)

改进的三次握手图示(四次挥手):

超时与重传:如果发送方在一定时间内没有接受到发送的数据段的应答,就会重新发送此数据段,直到接受到该数据段的应答后就会释放该数据段的缓存。另外,如果在数据段传输的过程中发生了网络堵塞,发送方迟迟没有收到应答,就会重传数据段,网络恢复后原先的数据段就会继续发送到接收方,这时接收方收到了两个相同的数据段,但它只会获取第一个接收到的数据包而丢弃第二个,这增加了TCP数据传输的可靠性。
窗口技术:窗口是限制同时接收的最大数据量,如果发送方一次性发出的数据段数量大于它的窗口限制,就会只接收最大限额的数据段而把剩下的数据段返还给发送方,并告诉发送方下次最大的同时发送的数据段数量,返还的数据段会在下一次发送的时候再次发出。窗口技术对数据的传输量提出了要求,可以防止网络的堵塞。
面向流:当发送方和接收方之间传输大量数据的时候,发送方的TCP会把数据流分段分组发送,接收方再根据分段上的信息对其重新整合还原。
多路复用技术:由端口号来实现。
全双工:在一条连接上可以同时传输两条相反的数据流。
TCP数据域头格式:

tcp协议栈,tcp协议栈测试(4)

首页 123下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.