一、网络协议和常用的网络工具

1.计算机概论

1.1 计算机网络是什么?

利用通信线路将地理上分散的、具有独立功能的计算机系统和通信设备按不同的形式连接起来,以功能完善的网络软件及协议实现资源共享和信息传递的系统。

主要的网络有哪些?

  1. 局域网
  2. 城域网
  3. 广域网
1.2 计算机网络的层次结构
  • 应用层(Http协议)
    • 应用层 作用:为应用程序提供服务
    • 表示层 作用:数据格式转换、数据加密
    • 会话层 作用:建立、管理和维护回话
  • 传输层(TCP)
    • 传输层 作用:建立、管理和维护端对端的连接
  • 网络层(IP)
    • 网络层 作用:IP选址及路由选择
  • 链路层(网卡、驱动程序)
    • 链路层 作用:提供介质访问和链路管理
    • 物理层 作用:物理传输

OSI参考模型分为7层,而TCP/IP模型分为4

各层之间的关系:
每一个抽象层建立在低一层提供的服务之上,并且为高一层提供服务。

2.TCP/IP详解

2.1 TCP/IP协议族

全称:Transmission Control Protocol/Internet Protocol
概念:中文名为传输控制协议/英特网互联协议,是Internet最基本的协议、Internet国际互联网络协议,由网络层的IP协议和传输层的TCP协议组成。协议采用了4层的层次结构。然后在很多情况下,它是利用IP进行通信时所必须用到的协议群的统称。

TCP/IP概念层模型 功能 TCP/IP协议族
应用层 文件传输、电子邮件、文件服务、虚拟终端 HTTPFTPDNS、Talnet、TFTP、SNMP、
传输层 提供端对端的接口 TCPUDP
网络层 为数据包选择路由 IP、ICMP、RIP、OSFP、BGP、IGMP
链路层 以二进制数据形式在物理媒体上传输数据 ISO2110IEEE802、IEEE802.2
2.2 网络传输中的数据
  • 包:是全能性术语;
  • 帧:用于表示数据链路层中包的单位;
  • 片:是IP中数据的单位;
  • 段:则表示TCP数据流中的信息;
  • 消息:是指应用协议中数据的单位。

从一个应用程序A,传递数据给另外一个应用程序B,会经历如下步骤:

  • 程序A
    • 应用层,发送数据给程序B
    • 传输层,打包TCP包头部信息,得到数据+TCP包首部
    • 网络层,打包IP包头部信息,打包得到数据+TCP包首部+IP包首部
    • 数据链路层,打包以太网头部信息,得到数据+TCP包首部+IP包首部+以太网包首部
    • 物理层,将数据以二进制形式传递给另外一个应用程序
  • 程序B
    • 物理层,接收到程序A传递过来的二进制数据
    • 数据链路层,拆包以太网包首部,得到数据+TCP包首部+IP包首部
    • 网络层,拆包IP包首部,得到数据+TCP包首部
    • 传输层,拆包TCP包首部,得到数据
    • 应用层,得到程序A发送的数据

TCP、UDP和IP

  • TCP:
    • 面向连接的、可靠的流协议
  • UDP:
    • 面向无连接的通讯协议
    • 使用场景:QQ、视频直播、音频直播,允许丢包的场景
  • IP:
    • 在源地址和目的地址之间传送的数据包

扩展知识:
移动通信中的4G、5G在哪一层?
答案:在数据链路层。

2.3 网路通信中的地址和端口号

MAC地址:(链路层)
也可以称为物理地址、局域网地址、以太网地址;MAC地址是写在物理设备内部的。

扫描二维码关注公众号,回复: 15332501 查看本文章

IP地址:(网络层)
IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

端口号:(传输层)
用来识别同一台计算机中通信的不同应用程序。因此,它也被称为程序地址。

TCP:(传输层)
面向连接的可靠的协议。
特征:

  • 面向连接
    • 3次握手
  • 可靠性
    • 超时重传和应答确认
  • RTT(往返延时,Round-Trip Time)和TTO(重传超时,Transmission TimeOut)
    • 协调好一个超时重传的时间
  • 数据排序
    • 保证接收到的数据片顺序正确
  • 流量控制
    • 通过发送方与接收方进行协商,利用了滑动窗口的作用,实现不会因为发送端发送过于频繁或者数据量过大,导致接收端不能及时处理。
  • 全双工
    • 发送端发送数据的同时可以作为接收端接收数据,接收端接收数据的同时也可以作为发送端发送数据。
2.4 TCP三次握手建立连接

建立一个TCP连接时,需要客户端与服务端总共发送3个包以确认连接的建立。

  • 第一次握手
    • 客户端请求建立连接
  • 第二次握手
    • 服务器应答客户端,并请求建立连接
  • 第三次握手
    • 客户端针对服务端的请求确认应答

为什么需要3次握手?
TCP是面向连接的,所以需要双方都确认连接的建立。

TCP三次握手详细流程:

  1. 客户端向服务端发送建立连接的数据包
    SYN=1,seq=10086
    客户端进入SYN_SENT状态
  2. 服务端接收到客户端发送的数据包,并向客户端发送建立连接的数据包
    ACK=1,ack=10087;SYN=1,seq=12345
    服务端进入SYN_RCVD状态
  3. 客户端接收到服务端发送的数据包,并向服务端发送响应的数据包
    ACK=1,ack=12346
    客户端进入ESTABLISHED状态,表示客户端知晓与服务端已建立连接;
    服务端在接收到客户端发送来的数据包后,也进入到ESTABLISHED状态,表示服务端知晓与客户端建立连接。

至此,客户端与服务端通过发送3次数据包建立起连接,数据包也可以是从服务端开始发送,不过通常情况下是由客户端开始向服务端发送数据包。

扩展知识:
① SYN(synchronous建立连接)
② ACK(acknowledgement确认)
③ PSH(push传送)
④ FIN(finish结束)
⑤ RST(reset重置)
⑥ URG(urgent紧急)

三次握手流程图如下:
在这里插入图片描述

TCP3次握手的漏洞-SYN洪泛攻击
定义:
通过网络服务所在的端口发送大量伪造原地址的攻击报文,发送到服务器,造成服务端上的半开连接队列被占满,从而阻止其他用户进行访问。

原理:
攻击者客户端利用伪造的IP地址向服务端发出请求(第一次握手),而服务端的响应(第二次握手)的报文将永远发送不到真实的客户端,服务端在等待客户端的第三次握手(永远都不会有),服务端在等待这种半开的连接过程中消耗了资源,如果有成千上万的这种连接,主机资源将被耗尽,从而达到攻击的目的。

解决方案:

  • 无效的连接监控释放
  • 延缓TCB分配方法
  • 防火墙
2.5 TCP四次挥手建立连接

定义
断开一个TCP连接,需要客户端与服务端总共发送4个包来确认连接的断开。

过程

  • 第一次挥手,客户端发送关闭请求
  • 第二次挥手,服务端响应客户端关闭请求
  • 第三次挥手,服务端发送关闭请求
  • 第四次挥手,客户端发送关闭确认请求

为什么需要四次挥手?
TCP是全双工(即客户端与服务端可以相互发送和接收请求),所以需要双方都确认关闭连接。

为什么需要TIME_WAITING状态而不是直接是CLOSED状态,并且需要2分钟左右才变成CLOSED状态?

  1. 如果当前应用程序占用的端口号没有TIME_WAITING状态,直接进入CLOSED状态,可能存在服务端还有数据包没有向客户端发送完成的情况,如果此时应用程序直接进入CLOSED状态,别的应用程序便可以申请当前应用程序的端口号,且会接收到服务端本应该发送给关闭的应用程序的数据包。
  2. 如果客户端没有TIME_WATING状态,而是直接进入到CLOSED状态,服务端给客户端发送了数据包后,客户端没有发送数据包响应服务端,间隔一段时间后,服务端会重新给客户端发送数据包,而此时客户端已经关闭了。

TCP四次挥手详细流程:

  1. 客户端向服务端发送断开连接的数据包
    FIN=1,seq=520
    客户端进入FIN_WAIT_1状态

  2. 服务端接收到客户端发送来的数据包,服务端向客户端发送响应的数据包
    ACK=1,ack=521 我感觉这里应该是ack而不是seq
    服务端进入CLOSE_WAIT状态
    客户端收到服务端发送来的数据包,客户端进入FIN_WAIT_2状态

  3. 服务端再次向客户端发送断开连接的数据包
    FIN=1,seq=1314
    服务端进入CLOSE状态
    客户端接收到服务端发送来的数据包,客户端进入TIME_WAITING状态

  4. 客户端向服务端发送相应数据包
    ACK=1,ack=1315
    客户端间隔2分钟左右进入CLOSED状态(2*MSL)
    服务端接收到客户端发送来的数据包后进入CLOSED状态

3.网络工具Wireshark和tcpdump

可以通过第三方工具来查看TCP三次握手和四次分手的具体细节。

4.一次完整的Http请求过程

  1. 首先进行DNS域名解析(可以通过本地浏览器缓存、操作系统缓存和DNS服务器进行解析)
  2. 三次握手建立TCP连接
  3. 客户端发起Http请求(重复使用)
  4. 服务器响应Http请求(重复使用)
  5. 客户端解析Html代码,并请求Html代码中的资源(重复使用)
  6. 客户端渲染展示的内容(重复使用)
  7. 关闭TCP连接

DNS劫持和Http劫持
DNS劫持就是在我们通过域名访问进行域名解析的时候,通过入侵我们的路由器或者是劫持DNS服务器,将我们访问的域名对应的ip地址进行篡改后返回,使得我们访问了一个不正确的ip地址。

Http劫持就是当我们在通过Http的域名进行访问的时候,直接对Http域名进行劫持从而导致访问一个错误的网站,或者是对返回的内容进行恶意修改等,比如:插入广告的js代码,导致访问的网站出现广告,目前很多运营商就是通过这种方式对我们访问的网站插入广告。
解决方式:

  • 采用Https的域名,因为Https的域名会对请求和响应的报文进行加密,使得不容易对内容进行篡改
  • 对请求的url进行加密处理,但是无法解决对响应的数据插入js代码产生广告。

猜你喜欢

转载自blog.csdn.net/tangkunTKTK/article/details/131233817