一、简述
TCP/IP是一组协议的代名词,包括许多别的协议,这些协议就是TCP/IP协议簇。
TCP/IP协议簇是现在互联网流行的组网形式,其基于OSI七层模型演化而来的四层模型(有的资料称为五层,是在数据链路层下多出一个物理层),但是其又不完全符合OSI的七层参考模型。
OSI七层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
TCP/IP:[ 物理层 、] 数据链路层、网络层、传输层、应用层
TCP/IP常用协议:ARP、RARP、ICMP、IGMP、IP、TCP、UDP、FTP、DNS、SMTP、PPP、SLIP、OSPF、TELNET
二、详述
数据包文的封装
1.硬件设备对应的TCP/IP层
设备的工作在哪一层,关键是看它工作时利用哪一层的数据头部信息,例如:网桥工作时,是以MAC头部来决定转发端口的,因此易知道网桥是数据链路层设备。
集线器:物理层设备,采用广播的形式进行信息传播。
交换机:进行报文交换的机器,多为链路层设备(二层交换机),能够够进行地址学习,采用存储转发的形式来交换报文。
路由器:连通不同网络,选择信息传送线路(路由选择),选择合适的“线路”可以大大提高通信速度,减轻网络系统通信负载,节约网络系统资源,提高网路系统畅通率。
(各层设备具体区别请参考:https://blog.csdn.net/yaopeng_2005/article/details/7064869)
2.TCP/IP各层协议
2.1)各层功用
网络层
网络层是整个TCP/IP协议栈的核心,主要是把数据包分组发往目标网络或主机。发送时,为了尽快地发送包分组,其会选择不同路径同时进行分组传递。因此,分组到达的顺序和发送的顺序可能不同,所以就需要上层必须对分组进行排序。(路由、拥塞控制)
传输层
使源端主机和目标端主机上的对等实体可以进行会话,根据其服务质量分为TCP协议、UDP协议。
TCP协议:传输控制协议,是一个面向连接的、可靠的协议。它将一台主机发出的字节流无差错地发往互联网上的其他主机。在发送端,负责把上层传送下来的字节流分成报文段并传递给下层,在接收端,负责把接收到的报文进行重组后递交给上层。TCP还要处理端到端的流量控制,以避免缓慢接收的或接收方没有足够缓冲区接收发送方发送的大量数据问题。
UDP协议:用户数据报协议,是一个不可靠、无连接协议,主要使用于不需要对报文进行排序和流量控制的场合。
应用层
TCP/IP模型是将OSI七层模型中的会话层、表示层、应用层合并为了应用层。
2.2)协议介绍
网络层
IP:最重要的一个网络层协议。IP提供了无连接数据报传输和网际路由服务。
ICMP:互联网控制信息协议,为Internet控制报文协议,网关或主机用ICMP向源站发送所发数据包有关问题的报告。
ARP:地址解析协议。
RARP:反向地址解析协议,一个新接入网络的站通过RARP发出广播请求,得到RARP服务器给它分配的ip地址。
传输层
TCP:传输控制协议,最主要的协议,面线连接的。可靠性应用的选择
UDP:用户数据报协议,是主机和主机之间无连接的数据报协议。UDP使用IP提供的数据报服务,并对IP进行了扩充。高速传输应用的选择
应用层
可靠连接
FTP:文件传输协议,协议用于主机之间文件的交换。
HTTP:超文本传输协议,是基于请求/响应范式的。一个客户机与服务器建立连接后,发送一个请求给服务器,服务器再给出响应。
SMTP:简单邮件传输协议。
TELNET:远程通信协议,用户的终端能够很容易地通过此协议接入远程系统。
不可靠连接
NTP:网络时间协议,用来同步网络中各个计算机的时间。
DNS:域名服务,提供域名-->ip地址的转换
TFTP:简单文件传输协议。
SNMP:简单网络管理协议。
DHCP:动态主机配置协议,给内部网络或网络服务供应商自动分配ip地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。
3.常见应用层协议及其端口
3.1)TCP协议
服务 | 端口 |
---|---|
FTP | 命令传输:21 数据传输:20 |
Telnet | 23 |
SMTP | 25 |
DNS | 53(TCP/UDP) |
HTTP | 80 |
POP3 | 110 |
IMAP | 143 |
HTTPS | 443 |
PPTP | 1723 |
3.2)UDP协议
服务 | 端口 |
---|---|
DNS | 53(TCP/UDP) |
DHCP | 67 |
TFTP | 69 |
NTP | 123 |
SNMP | 161 |
ipsec | 500 |
RADIUS | 1645 |
L2TP | 1701 |
3.报文状况
3.1)以太网传输报文
1)源地址和目的地址是指网卡的硬件地址(MAC 地址),长度是48bit,是在网卡出厂时固化的。
2)注意网卡芯片(例如DM9000A)收到的数据就是如上所示的一长串数据;其中包括以太网帧头、IP报报头、传输层协议段头、应用层所需数据。
3)以太网帧中的数据长度规定最小46 字节,最大1500 字节,ARP 和RARP 数据包的长度不够46 字节,要在后面补填充位。最大值1500 称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU,如果一个数据包从以太网路由到拨号链路上,数据包度大于拨号链路的MTU了,则需要对数据包进行分片fragmentation)。ifconfig 命令的输出中也有“MTU:1500”。MTU 概念指数据帧中有效载荷的最大长度,不包括帧首部的长度。
4)CRC字段对帧内数据进行校验,保证数据传输的正确性,一般硬件实现。
3.2)IP协议报文
1)版本:占4位,指IP协议的版本。通信双方使用的IP协议版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。IPv6为6,
2)首部长度:占4位,可表示的最大十进制数值是15。请注意,这个字段所表示数的单位是32位字长(1个32位字长是4字节),因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此数据部分永远在4字节的整数倍开始,这样在实现IP协议时较为方便。首部长度限制为60字节的缺点是有时可能不够用。但这样做是希望用户尽量减少开销。最常用的首部长度就是20字节(即首部长度为0101),这时不使用任何选项。
3)区分服务:占8位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年IETF把这个字段改名为区分服务DS(Differentiated Services)。只有在使用区分服务时,这个字段才起作用。
4)总长度:总长度指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为216-1=65535字节。IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元MTU(Maximum Transfer Unit)。当一个数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值。
5)标识(identification):占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
6)标志(flag):占3位,但目前只有2位有意义。
标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个
标志字段中间的一位记为DF(Don’t Fragment),意思是“不能分片”。只有当DF=0时才允许分片。
7)片偏移:占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。
8)生存时间:占8位,生存时间字段常用的的英文缩写是TTL(Time To Live),表明是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源。最初的设计是以秒作为TTL的单位。每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把TTL值减1。当TTL值为0时,就丢弃这个数据报。
9)协议类型:占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。
协议类型的含义:
值1 ICMP
值2 IGMP
值6 TCP
值17 UDP
10)首部检验和:占16位。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。
11)源IP地址:占32位, 发送数据的主机或设备的IP地址。
12)目的IP地址:占32位,接收数据的主机或设备的IP地址。
3.3)ARP地址解析协议
1)以太网目的地址:是硬件地址,包含六个字节的地址。例如: 00 1f 3cd1 b6 7d
2)以太网源地址: 是发出给ARP包的主机地址。格式与目的地址相同
3)以太帧类型: 用来表明上层协议的类型,如果是ARP协议的话就为:0806 。
4)硬件类型:如果是以太网则硬件类型为:0001 。
5)协议类型:这里一般写的是:0800 表示IP类型,ARP是IP协议族中的一个。
6)硬件地址长度:指的是MAC地址的长度,长度为6 单位是字节 。
7)协议地址产度:如果是IP4则这个值为4,单位是字节 。
8)Op为操作方式:如果为1则为请求包;如果为2则为回应包。这里假设源主机为:A ,目的主机为:B 。其请求和回应这个都不变。
如果是请求包的话:
以太网首部的目的MAC地址为:FF:FF:FF:FF:FF:FF表示广播包。
ARP字段中的目的主机MAC地址字段为:00:00:00:00:00:00(十六进制表示) 起到填充的作用。
op操作符字段为:0001
如果是回应包的话:
以太网首部的目的MAC地址为:源主机的MAC地址。
ARP字段中的源主机MAC地址字段为:目的主机的MAC地址。
op操作符字段为:0002。
3.4)TCP/UDP协议
3.4.1)TCP协议
1)源、目标端口号字段:占16比特。TCP协议通过使用"端口"来标识源端和目标端的应用进程。端口号可以使用0到65535之间的任何数字。在收到服务请求时,操作系统动态地为客户端的应用程序分配端口号。在服务器端,每种服务在"众所周知的端口"(Well-KnowPort)为用户提供服务。
2)序号字段:占32比特。用来标识从TCP源端向TCP目标端发送的数据字节流,当tcp开始连接的时候,发送一个序列号给接收端,连接成功后,这个序列号作为初始序列号ISN,建立连接成功后发送的第一个字节的序列号为ISN+1。
3)确认号字段:占32比特。只有ACK标志为1时,确认号字段才有效。它包含目标端所期望收到源端的下一个数据字节。发送方对发送的字节进行了编号,当接收方成功接收后,发送回接收成功的序列号加1表示确认,发送方再次发送的时候从确认号开始。
4)头部长度字段:占4比特。给出头部占32比特的数目。没有任何选项字段的TCP头部长度为20字节;最多可以有60字节的TCP头部。
5)标志位字段(U、A、P、R、S、F):占6比特。各标志的含义如下:
URG:紧急指针(urgent pointer)有效。
ACK:确认序号有效。
PSH:接收方应该尽快将这个报文段交给应用层。
RST:重建连接。
SYN:发起一个连接。
FIN:释放一个连接。
6)窗口大小字段:占16比特。此字段用来进行流量控制。单位为字节数,这个值是本机期望一次接收的字节数。
7)TCP校验和字段:占16比特。对整个TCP报文段,即TCP头部和TCP数据进行校验和计算,并由目标端进行验证。
8)紧急指针字段:占16比特。它是一个偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。
9)选项字段:占32比特。可能包括"窗口扩大因子"、"时间戳"等选项。
3.4.2)UDP协议
1)UDP源端口和目标端口指定了2个16BIT的端口号。源端口号可选,如果指定了,则相应数据包发往该端口,如果没有指定,则设为0。
2)包长表示了整个UDP头部和UDP数据段的长度,单位为字节。由于UDP头部有8个字节,因此udp包长最小为8(数据可以为0)。UDP长度等于IP长度减去IP头部的长度
3)UDP校验和字段用以保证UDP数据包的完整性。该字段可选,没有计算校验和的UDP数据包应该将该字段设为0。(在可靠性很高的网络中,可以不计算校验和来减少主机的计算工作量)
(详细参考:https://blog.csdn.net/u011318165/article/details/48102939)
4.工作模式
4.1)TCP/IP三次握手,四次分手
重点标志位
ACK:确认序号有效
RST:重置连接
SYN:发起了一个新连接
FIN:释放一个连接
4.2)三次握手
1)建立连接时,客户端发送SYN包(SYN=i)到服务器,并进入到SYN-SEND状态,等待服务器确认。
2)服务器收到SYN包,必须确认客户的SYN(ack=i+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器进入SYN-RECV状态。
3)客户端收到服务器的SYN+ACK包,向服务器发送确认报ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
4.3)四次分手
1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(报文段4)。
2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。
3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6)。
4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。
(详细参考:https://blog.csdn.net/u011318165/article/details/48102939)
三、补充
SYN攻击,那么什么是SYN攻击?发生的条件是什么?怎么避免?
在三次握手过程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect),此时Server处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是 Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址 是不存在的,因此,Server需要不断重发直至超时,这些伪造的SYN包将产时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网 络堵塞甚至系统瘫痪。SYN攻击时一种典型的DDOS攻击,检测SYN攻击的方式非常简单,即当Server上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN攻击了,使用如下命令可以让之现行: ~]# netstat -nap | grep SYN_RECV