TCP/IP协议 | 四层模型

TCP/IP四层模型

在介绍时通常分为5层来叙述但TCP/IP模型实际上只有四层:应用层、传输层、网络层、网络接口层。
在这里插入图片描述
应用层:
  向用户提供一组常用的应用程序,比如电子邮件、文件传输访问、远程登录等。应用层常用协议:HTTP,FTP,SMTP,DNS,Telnet

DNS:域名系统DNS是因特网使用的命名系统,用来把便于人们使用的机器名字转换为IP地址。
FTP:文件传输协议FTP是因特网上使用得最广泛的文件传送协议。FTP提供交互式的访问,允许客户指明文件类型与格式,并允许文件具有存取权限。
telnet:telnet是一个简单的远程终端协议,它也是因特网的正式标准。
HTTP:超文本传送协议,是面向事务的应用层协议。http使用面向连接的TCP作为运输层协议,保证了数据的可靠传输。
SMTP:即简单邮件传送协议。SMTP规定了在两个相互通信的SMTP进程之间应如何交换信息。SMTP通信的三个阶段:建立连接、邮件传送、连接释放。
POP3:邮件读取协议,POP3(Post Office Protocol 3)协议通常被用来接收电子邮件。
SNMP:简单网络管理协议。由三部分组成:SNMP本身、管理信息结构SMI和管理信息MIB。

传输层:
  提供应用程序间的通信。其功能包括:一、格式化信息流;二、提供可靠传输。为实现后者,传输层协议规定接收端必须发回确认,并且假如分组丢失,必须重新发送。(TCP,UDP协议)

网络层 :
  负责相邻计算机之间的通信(IP,ARP,ICMP协议)。提供阻塞控制,路由选择(静态路由,动态路由)等。

数据链路层
  主要提供链路控制,差错控制(重发机制),流量控制(窗口机制)。数据链路层常用协议:ARQ、PPP
ARQ:自动重传请求协议,错误纠正协议之一,包括停止等待ARQ 协议和连续ARQ 协议,错误侦测、正面确认、逾时重传与负面确认继以重传等机制。
PPP(Point-to-Ponit Protocol):点对点协议面向字节,由三部分组成:一个将IP 数据报封装到串行链路的方法;一个用于建立、配置和测试数据链路连接的链路控制协议。

物理层
  物理层规定:为传输数据所需要的物理链路创建、维持、拆除,而提供具有机械的,电子的,功能的和规范的特性,确保原始的数据可在各种物理媒体上传输,为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境

TCP/IP格式

  TCP/IP 意味着 TCP 和 IP 在一起协同工作。TCP 负责应用软件和网络软件之间的通信。IP 负责计算机之间的通信。TCP 负责将数据分割并装入 IP 包,然后在它们到达的时候重新组合它们。IP 负责将包发送至接受者。

IP包格式

  IP数据包是一种可变长分组,它由首部和数据负载两部分组成。首部长度一般为20-60字节(Byte),其中后40字节是可选的,长度不固定,前20字节格式为固定。数据负载部分的长度一般可变,整个IP数据包的最大长度为65535B。

IP包格式
1、版本号(Version)
长度为4位(bit),IP v4的值为0100,IP v6的值为0110。

2、首部长度
指的是IP包头长度,用4位(bit)表示,十进制值就是[0,15],一个IP包前20个字节是必有的,后40个字节根据情况可能有可能没有。如果IP包头是20个字节,则该位应是20/4=5。

3、服务类型(Type of Service TOS)
长度为8位(bit),其组成:前3位为优先级(Precedence),后4位标志位,最后1位保留未用。优先级主要用于QoS,表示从0(普通级别)到7(网络控制分组)的优先级。标志位可分别表示D(Delay更低的时延)、T(Throughput 更高的吞吐量)、R(Reliability更高的可靠性)、C(Cost 更低费用的路由)。TOS只表示用户的请求,不具有强制性,实际应用中很少用,路由器通常忽略TOS字段。

4、总长度(Total Length)
指IP包总长度,用16位(bit)表示,即IP包最大长度可以达216=65535字节。在以太网中允许的最大包长为1500B,当超过网络允许的最大长度时需将过长的数据包分片。

5、标识符(Identifier)
长度为16位,用于数据包在分段重组时标识其序列号。将数据分段后,打包成IP包,IP包因走的路由上不同,会产生不同的到达目地的时间,到达目地的后再根据标识符进行重新组装还原。该字段要与标志、段偏移一起使用的才能达到分段组装的目标。

6、标志(Flags)
长度为3位,三位从左到右分别是MF、DF、未用。MF=1表示后面还有分段的数据包,MF=0表示没有更多分片(即最后一个分片)。DF=1表示路由器不能对该数据包分段,DF=0表示数据包可以被分段。

7、偏移量(Fragment Offset)
也称段偏移,用于标识该数据段在上层初始数据报文中的偏移量。如果某个包含分段的上层报文的IP数据包在传送时丢失,则整个一系列包含分段的上层数据包的IP包都会要求重传。

8、生存时间(TTL)
长度为8位,初始值由操作系统设置,每经过一个路由器转发后其值就减1,减至0后丢弃该包。这种机制可以避免数据包找不到目地时不断被转发,堵塞网络。

9、协议(Protocol)
长度为8位,标识上层所使用的协议。

10、首部校验和(Header Checksum)
长度为16位,首部检验和只对IP数据包首部进行校验,不包含数据部分。数据包每经过一个中间节点都要重新计算首部校验和,对首都进行检验。

11、源IP地址(Source IP)
长度为32位,表示数据发送的主机IP。

12、目的IP地址(Destination IP)
长度为32位,表示数据要接收的主机IP。

13、选项字段(Options)
长度为0-40字节(Byte),主要有:安全和处理限制(Security)、记录路径(Record Route)、时间戳(Timestamps)、宽松源站选路(Loose Source Routing)、严格的源站选路(Strict Source Routing)等。

TCP报文

  TCP报文由首部和数据两部分组成。首部一般由20-60字节(Byte)构成,长度可变。其中前20B格式固定,后40B为可选。
  因为,TCP报文还得传给下层网络层,封装成IP包,而一个IP包最大长度为65535,同时IP包首部也包含最少20B,所以一个IP包或TCP包可以包含的数据部分最大长度为65535-20-20=65495B。
  TCP报文中数据部分是可选的,即TCP报文可以不包含数据(同理IP包也可以不包含数据)。不含数据的TCP报文通常是一些确认和控制信息类的报文,如TCP建立连接时的三次握手和TCP终止时的四次挥手等。
在这里插入图片描述
1、源端口号(Source Port)
长度为16位,指明发送数据的进程。

2、目的端口号(Destination Port)
长度为16位,指明目的主机接收数据的进程。

3、序号(Sequence Number)
也称为序列号,长度为32位,序号用来标识从TCP发送端向接入端发送的数据字节流进行编号,可以理解成对字节流的计数。

4、确认号(Acknowledgement Number)
长度为32位,确认号包含发送确认的一端所期望收到的下一个序号。确认号只有在ACK标志为1时才有效。

5、首部长度
长度为4位,用于表示TCP报文首部的长度。用4位(bit)表示,十进制值就是[0,15],一个TCP报文前20个字节是必有的,后40个字节根据情况可能有可能没有。如果TCP报文首部是20个字节,则该位应是20/4=5。

6、保留位(Reserved)
长度为6位,必须是0,它是为将来定义新用途保留的。

7、标志(Code Bits)
长度为6位,在TCP报文中不管是握手还是挥手还是传数据等,这6位标志都很重要。6位从左到右依次为:

  • URG:紧急标志位,说明紧急指针有效
  • ACK:确认标志位,多数情况下空,说明确认序号有效
  • PSH:推标志位,置位时表示接收方应立即请求将报文交给应用层
  • RST:复位标志,用于重建一个已经混乱的连接
  • SYN:同步标志,该标志仅在三次握手建立TCP连接时有效
  • FIN:结束标志,带该标志位的数据包用于结束一个TCP会话

8、窗口大小(Window Size)
长度为16位,TCP流量控制由连接的每一端通过声明的窗口大小来提供。

9、检验和(Checksum)
长度为16位,该字段覆盖整个TCP报文端,是个强制性的字段,是由发送端计算和存储,到接收端后,由接收端进行验证。

10、紧急指针(Urgent Pointer)
长度为16位,指向数据中优先部分的最后一个字节,通知接收方紧急数据的长度,该字段在URG标志置位时有效。

11、选项(Options)
长度为0-40B(字节),必须以4B为单位变化,必要时可以填充0。通常包含:最长报文大小(MaximumSegment Size,MSS)、窗口扩大选项、时间戳选项、选择性确认(Selective ACKnowlegement,SACK)等。

12、数据

UDP数据段

UDP数据段格式比较简单,如下:
在这里插入图片描述
UDP数据报由首部和数据两部分组成,其中首部只有8B(字节)。

1、源端口号(Source Port)
长度为16位,指明发送数据的进程。

2、目的端口号(Destination Port)
长度为16位,指明目的主机接收数据的进程。

3、长度
长度为16位,该字段值为报头和数据两部分的总字节数。

4、检验和(Checksum)
长度为16位,UDP检验和作用于UDP报头和UDP数据的所有位。由发送端计算和存储,由接收端校验。

5、数据

TCP握手问题

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

HTTP协议

  HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
  HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。
  TCP/IP协议它们并不是一个协议,而是一个协议簇,这些协议的目的,就是使计算机之间可以进行信息交换,并且两大协议其中都包含其他的协议,虽然放在了一起,但它们的作用和工作是不一样的。
  HTTP协议定义了内容的格式,这是一个应用层的协议,应用层协议的内容需要通过传输层在浏览器和服务器之间传送,TCP/IP协议是ISO网络参考模型的一种实现。在TCP/IP协议中,与网络程序员相关的主要有两层:传输层和应用层。
  传输层协议负责解决数据传输问题,包括数据通行的可靠性问题。传输层依赖更底层的网络层来完成实际的数据传输,在TCP/IP网络协议中,负责可靠通信的传输层协议为TCP协议。在TCP/IP协议中,网络层的协议为IP协议。
TCP/UDP

ICMP协议

ICMP协议是一个网络层协议。ICMP协议的功能主要有:

  1. 确认IP包是否成功到达目标地址
  2. 通知在发送过程中IP包被丢弃的原因

ICMP的报文格式
  ICMP报文包含在IP数据报中,IP报头在ICMP报文的最前面。一个ICMP报文包括IP报头、ICMP报头和ICMP报文。当IP报头中的协议字段值为1时,就说明这是一个ICMP报文。ICMP报头如下图所示:
在这里插入图片描述
字段说明:

类型说明
类型占一字节,标识ICMP报文的类型,从类型值来看ICMP报文可以分为两大类。第一类是取值为1~127的差错报文,第2类是取值128以上的信息报文
代码占一字节,标识对应ICMP报文的代码。它与类型字段一起共同标识了ICMP报文的详细类型
校验和这是对包括ICMP报文数据部分在内的整个ICMP数据报的校验和,以检验报文在传输过程中是否出现了差错

ICMP大概分为两类报文:
一类是通知出错原因 ;一类是用于诊断查询
类型及含义如下:

类型(十进制)内容
0回送应答
3目标不可达
4原点抑制
5重定向或改变路由
8回送请求
9路由器公告
10路由器请求
11超时
17地址子网请求
18地址子网应答

常见的ICMP报文
相应请求
  PING 是DOS 命令,一般用于检测网络通与不通 。ping操作中就包括了相应请求(类型字段值为8)和应答(类型字段值为0)ICMP报文。Ping 发 送一个 ICMP 回声请求消息给目的地并报告是否收到所希望的 ICMP 回声应答。它所利用的原理是这样的:网络上 的机器都有唯一确定的 IP 地址,我们给目标 IP 地址发送一个数据包,对方就要返回一个同 样大小的数据包, 根据返回的数据包我们可以确定目标主机的存在,可以初步判断目标主机 的操作系统等。

ping命令的功能
(1)能验证网络的连通性
(2)会统计响应时间和TTL(IP包中的Time To Live,生存周期)

子网掩码

  子网掩码是一个32位的二进制数,其主作用就是将IP地址划分成网络地址和主机地址两部分。与IP地址进行一个逻辑与(AND)就可以迅速得到一个IP地址中的网络标识部分。对应于网络号部分,掩码中的值为1,而对应于主机号部分,掩码中的值为0。子网掩码有两个特殊地址,当子网掩码的主机地址全为0时,表示该网络地址,当子网掩码的主机地址全为1时,表示该网络的广播地址。
  通过计算机的子网掩码判断两台计算机是否属于同一网段的方法是,将计算机十进制的IP地址和子网掩码转换为二进制的形式,然后进行二进制“与”(AND)计算,如果得出的结果是相同的,那么这两台计算机就属于同一网段。

长连接与短连接的区别

  长连接指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接。
  短连接指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接。

应用场景:
  长连接多用于操作频繁(读写),点对点的通讯,而且连接数不能太多情况。每个TCP连接都需要3次握手,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,下次处理时直接发送数据包,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。
  在HTTP/1.0中,默认使用的是短连接。浏览器和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。但从 HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入这行代码:Connection:keep-alive。
  在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。

TCP Fast Open

  TFO(TCP fast open)允许服务器和客户端在连接建立握手阶段交换数据,从而使应用节省了一个RTT(Round Trip Time)的时延。

TFO过程
1、在使用TFO之前,client首先需要通过一个普通的三次握手连接获取FOC(Fast Open Cookie)

  • client发送一个带有Fast Open选项的SYN包,同时携带一个空的cookie域来请求一个cookie
  • server产生一个cookie,然后通过SYN-ACK包的Fast Open选项来返回给client
  • client缓存这个cookie以备将来使用TFO连接的时候使用

执行TFO

  • client发送一个带有数据的SYN包,同时在Fast Open选项中携带之前通过正常连接获取的cookie
  • server验证这个cookie。如果这个cookie是有效的,server会返回SYN-ACK报文,然后这个server把接收到的数据传递给应用层。如果这个cookie是无效的,server会丢掉SYN包中的数据,同时返回一个SYN-ACK包来确认SYN包中的系列号
  • 如果cookie有效,在连接完成之前server可以给client发送响应数据,携带的数据量受到TCP拥塞控制的限制
  • client发送ACK包来确认server的SYN和数据,如果client端SYN包中的数据没有被服务器确认,client会在这个ACK包中重传对应的数据
  • 剩下的连接处理就类似正常的TCP连接了,client一旦获取到FOC,可以重复Fast Open直到cookie过期。

TCP报文如何传输到目标端

以太网报文封装:
1、以太网报文结构:src_mac,dst_mac,vlan号(非必须),网络层协议号
2、dst_mac为网关mac是通过路由获取,a、arp学到目的ip地址所在的remote_mac地址,则证明客户端和服务器统一局域网内,报文直接通过交换机(通过MAC和接口的映射表)即可传输;b、arp没有学习到remote_mac地址,则通过路由查看目标ip的所在gw,将dst_mac=gw_mac即可
3、src_mac通过本机路由表查询,目的网段所在的出向接口ethX,src_mac=ethX_mac

报文路由发送:
1、本机客户端封装好以太网报文后通过src_mac将报文写入对应的网卡缓存中
2、下一跳gw即路由器收到该报文后,发现mac地址是自己,但是ip地址不是自己,根据路由表将dst_mac替换成路由器的下一 跳 gw1_mac; 同时将报文中的src_mac替换成自己的gw_mac
3、路由器重复第二步直至发送到目的ip所在的服务器,路由器不修改数据,仅作路由mac地址替换,服务器回复报文同理,可以通过ip层的TTL值可以判别出报文经过几跳

路由算法

分类方式一:

  • 静态路由:手工配置、路由更新慢、优先级高
  • 动态路由:路由更新快(定期更新、及时响应链路费用或网络拓扑变化)

分类方式二:

  • 全局式路由选择算法:所有路由器掌握完整的网络拓扑和链路费用信息。例如链路状态算法。
      链路状态路由算法要求每个参与该算法的结点都具有完全的网络拓扑信息,它们执行下述两项任务:第一,主动测试所有邻接结点的状态。两个共享一条链接的结点是相邻结点,它们连接到同一条链路,或者连接到同一广播型物理网络。第二,定期地将链路状态传播给所有其他结点。典型的链路状态算法是OSPF算法。在一个链路状态路由选择中,一个结点检查所有直接链路的状态,并将所得的状态信息发送给网上的所有其他结点,而不是仅送给那些直接相连的结点。每个结点都用这种方式从网上所有其他的结点接收包含直接链路状态的路由选择信息。每当链路状态报文到达时,路由结点便使用这些状态信息去更新自己的网络拓扑和状态“视野图”,一旦链路状态发生变化,结点就对更新的网络图利用Dijsktra最短路径算法重新计算路由,从单一的源出发计算到达所有目的结点的最短路径。
      链路状态路由算法的主要优点是,每个路由结点都使用同样的原始状态数据独立地计算路径,而不依赖中间结点的计算;链路状态报文不加改变地传播,因此采用该算法易于查找故障。当一个结点从所有其他结点接收到报文时,它可以在本地立即计算正确的通路,保证一步汇聚。最后,由于链路状态报文仅运载来自单个结点关于直接链路的信息,其大小与网络中的路径结点数目无关,因此链路状态算法比距离-向量算法有更好的规模可伸展性。
  • 分散式路由选择算法:路由器值掌握物理相连的邻居以及链路费用,邻居间信息交换、运算的迭代过程。例如距离向量算法。
      在距离-向量路由算法中,所有结点都定期地将它们的整个路由选择表传送给所有与之直接相邻的结点。这种路由选择表包含:每条路径的目的地;路径的代价。在这种算法中,所有结点都必须参与距离向量交换,以保证路由的有效性和一致性,也就是说,所有的结点都监听从其他结点传来的路由选择更新信息,并在下列情况下更新它们的路由选择表:被通告一条新的路由,该路由在本结点的路由表中不存在,此时本地系统加入这条新的路由。发来的路由信息中有一条到达某个目的地的路由,该路由与当前使用的路由相比,有较短的距离。此种情况下,就用经过发送路由信息的结点的新路由替换路由表中到达那个目的地的现有路由。
  • 1
    点赞
  • 6
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:黑客帝国 设计师:我叫白小胖 返回首页
评论

打赏作者

K. Bob

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值