1、基本介绍
TCP/IP协议,也称TCP/IP协议族或TCP/IP协议栈,其中:
TCP:Transmission Control Protocol 传输控制协议
IP: Internet Protocol 互联网协议
该协议是目前世界上应用最为广泛的协议,是以TCP和IP为基础的不同层次上多个协议的集合,两台主机要实现通讯,都必须遵守TCP/IP协议。
以下是ISO/OSI七层模型与TCP/IP四层模型对比:
相同点:
- ISO/OSI参考模型和TCP/IP参考模型都采用了层次结构的概念;
- 都能够提供面向连接(TCP协议)和无连接(UDP协议)两种通信服务机制。
不同点:
- 前者是七层模型结构,后者是四层模型结构;
- 对可靠性要求不同,TCP/IP参考模型的要求更高;
- ISO/OSI参考模型是在协议开发之前设计的,具有通用性;TCP/IP参考模型则是在协议集已有的情况下建立的,不适用非TCP/IP网络;
- 实际市场应用不同, ISO/OSI参考模型只是理论上的模型,并没有成熟的产品支持;而TCP/IP参考模型已经成为“实际上的国际标准”。
2、网络接口层
网络接口层与OSI参考模型中的物理层和数据链路层相对应,它负责监视数据在主机和网络之间的交换。实际上TCP/IP本身并未定义该层的协议,而由参与互联的各个网络使用其自己的物理层和数据链路层协议,然后与TCP/IP的网络接口层进行连接。
地址解析协议(ARP)工作在此层,即OSI参考模型中的数据链路层,负责将IP地址转译成MAC地址,可在系统的命令提示符中输入“arp -a”来查看:
3、网际互联层
网际互联层对应OSI参考模型的网络层,主要解决主机到主机的通信问题。
该层有3个主要协议:网际协议(IP)、互联网组管理协议(IGMP)、互联网控制报文协议(ICMP)。其中互联网控制报文协议(ICMP)可以用来查看当前计算机是否与某指定IP的计算机实现网络互通,利用该协议可以给指定IP发送一个数据包,当收到回复后,证明网络已经互相连通,可在系统的命令提示符中输入“ping 192.168.XXX.X(某IP地址)”来查看:
4、传输层
传输层对应OSI参考模型的传输层,为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。该层有两个最主要的功能,第一定义了两个主要的协议:传输控制协议(TCP)、用户数据报协议(UDP),其中TCP协议是可靠的、面向连接的协议;UDP协议是不可靠的,面向无连接的协议;第二,确定接收端的端口号即发送端的端口号。
<br />
1.端口
当我们发送或接受数据时,通过IP地址可以确定目标计算机,但该主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,主机如何区分并确定应该使用哪项服务来处理数据就是通过端口号。
端口号分为源端口和目的端口,各占16位,因此,总共可用的端口号总数为2^16,即从0开始至65535,共计65536个。端口分为以下三类:
-
周知端口
周知端口是众所周知的端口号,范围从0到1023,例如80端口分配给WWW服务,21端口分配给FTP服务等,其他常用端口号详见本篇第五部分“应用层”。 -
注册端口
端口1024到49151,分配给用户进程或应用程序;这些进程主要是用户选择安装的一些应用程序,而不是已经分配好了公认端口的常用程序;这些端口在没有被服务器资源占用的时候,可以用用户端动态选用为源端口。 -
动态端口
动态端口的范围是从49152到65535。之所以称为动态端口,是因为它 一般不固定分配某种服务,而是动态分配。
可在系统的命令提示符中输入“netstat -an”来查看,其中:
“-a”是查看所有连接和监听接口
“-n”是显示IP地址和端口号,而不显示域名和服务名
注意:
1.最下方红色方框圈起的表示本机的随机端口连接到对方的80端口,说明本机开启了网页服务;
2.关于常见的几种“状态”:LISTENING代表正在被监听,表明开启了一些本机服务,ESTABLISHED代表已连接,并且在持续连接的状态,CLOSE_WAIT、TIME_WAIT表示连接超时;
3.UDP协议不像TCP协议那样需要首先经过“三次握手”确认对方是否存在,而是直接传送数据,因此不需要监听,也就不会有状态;
4.此方法也可用于判断并确定对方的IP地址。
<br />
2.TCP协议
下面着重讲解TCP协议的“三次握手”,在此之前先来了解TCP报文及格式:当应用层向TCP层发送用于网间传输的、用8位字节表示的数据流时,TCP会把数据流分割成适当长度的报文段,之后TCP把数据包传给IP层,由它来通过网络将包传送给接收端实体的TCP层,TCP的报文格式如下:
上图中有几个字段需要重点介绍下:
- 序号:seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
- 确认序号:ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。
-
标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN,具体含义如下:
URG:紧急指针有效。
ACK:确认序号有效。
PSH:接收方应该尽快将这个报文交给应用层。
RST:重置连接。
SYN:发起一个新连接。
FIN:释放一个连接。
再来看三次握手(Three-Way Handshake),即建立TCP连接,指建立一个TCP连接时,需要连接双方总共发送3个包以确认连接的建立。TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传,整个流程如下图所示:
- 第一次握手:主机A将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给主机B,主机A进入SYN_SENT状态,等待主机B确认。
- 第二次握手:主机B收到数据包后由标志位SYN=1得知主机A请求建立连接,主机B将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给主机A以确认连接请求,主机B进入SYN_RCVD状态。
- 第三次握手:主机A收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给主机B,主机B检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,主机A和主机B进入ESTABLISHED状态,完成三次握手,随后就可以开始传输数据了。
关于“三次握手”的由来,可以参考这个经典的两军问题。
<br />
3.UDP协议
最后简单介绍一下UDP协议,报文格式如下:
跟之前的TCP协议报文格式相比,明显更加精简,这也意味着解析UDP包头所需要的资源更少,因此UDP协议传输的更快。
5、应用层
应用层对应OSI参考模型的高层,为用户提供所需要的各种服务,常用协议如下:
DNS:域名系统
端口号53
DNS是因特网使用的命名系统,用来把便于人们使用的机器名字转换为IP地址。FTP:文件传输协议
端口号21用于FTP的登陆认证,端口号20用于实际的数据传输
FTP是因特网上使用得最广泛的文件传送协议。FTP提供交互式的访问,允许客户指明文件类型与格式,并允许文件具有存取权限。Telnet:远程登录协议
端口号23
Telnet是一个简单的远程登录协议,它也是因特网的正式标准。
但是需要注意,现在默认不开启23端口,因为Telnet协议在后台使用明文传递,只要被截获就可以读取传递的数据,甚至不需要破解,因此要尽可能的不使用23端口而使用其他服务代替。HTTP:超文本传输协议
端口号80
HTTP是面向对象的应用层协议,它是万维网上能够可靠地交换文件的重要基础。HTTP使用面向连接的TCP作为运输层协议,保证了数据的可靠传输。SMTP:简单邮件传送协议
端口号25
SMTP规定了在两个相互通信的SMTP进程之间应如何交换信息。SMTP通信的三个阶段:建立连接、邮件传送、连接释放。POP3:邮件读取协议
端口号110
POP3(Post Office Protocol 3)协议通常被用来接收电子邮件。
6、数据的封装与街封装
通过示例可以更直观的了解数据的封装与解封装过程,同时为了便于阅读文字,动画切换间隔设置的比较长。
版权声明:欢迎转载,欢迎扩散,但转载时请标明作者以及原文出处,谢谢合作! ↓↓↓