【Netty学习】1.网络协议


1.网络协议

1.1 计算机网络

  • 定义

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

  • 分类
    • 按覆盖范围划分
      • 局域网LAN(作用范围一般为几米到几十公里)
      • 城域网MAN(界于 WAN 与 LAN 之间)
      • 广域网WAN(作用 范围一般为几十到几千公里)
    • 按拓扑结构划分
      • 总线型
      • 环型
      • 星型
      • 网状
    • 按信息的交换方式
      • 电路交换
      • 报文交换
      • 报文分组交换

2.计算机网络体系结构

2.1 OSI七层模型

开放系统互连参考模型 (Open System Interconnect 简称 OSI) 采用了分层的结构化技术,共分七层,物理层数据链路层网络层传输层会话层表示层应用层

OSI七层模型
  • 各层的作用及对应的协议(简化)
网络硬件与数据传输层七层的协议 - 随意的世界

2.2 TCP/IP 四层模型

OSI模型比较复杂且学术化,所以我们实际使用的 TCP/IP 模型,共分 4 层,链路层网络层传输层应用层

  • 两个模型之间的对应关系如图所示:
对应关系

2.3 五层模型

五层模型只出现在计算机网络学习教学过程中,他是对七层模型和四层模型的一个折中,及综合了OSITCP/IP 体系结构的优点,这样既简洁又能将概念阐述清楚。

五层模型

2.4 TCP/IP 协议族

TCP/IP 协议族

2.5 TCP/IP 网络传输中的数据

TCP/IP 网络传输中的数据

2.6 地址和端口号

2.6.1 MAC地址

MAC 地址全称叫做媒体访问控制地址(Media Access Control),也称为局域网地址(LAN Address)MAC 位址以太网地址(Ethernet Address)物理地址(Physical Address),由网络设备制造商生产时写在硬件内部。

  • MAC 地址与网络无关。
  • 共48位(6 个字节)。前24位由IEEE(电气和电子工程师协会)决定如何分配,后24位由实际生产该网络设备的厂商自行制定。
    输入图片说明

2.7 IP 地址

IP 地址(Internet Protocol Address)的全称叫作互联网协议地址,它的本义是为互联网上的每一个网络和每一台主机配置一个唯一的逻辑地址,用来与物理地址作区分。

所以 IP 地址用来识别 TCP/IP 网络中互连的主机和路由器。IP 地址基于逻辑,比较灵活,不受硬件限制,也容易记忆。

IP 地址分为:

  • IPv4
  • IPv6

我们这里着重讲的是 IPv4 地址,IP 地址是由 32 位的二进制数组成,它们通常被分为 4 个“8 位二进制数”,我们可以把它理解为 4 个字节,格式表示为:

A.B.C.D

其中,A,B,C,D 这四个英文字母表示为 0-255 的十进制的整数。例: 192.168.1.1

Tips: IP 地址和 MAC 地址之间的区别

  • 1、对于网络中的一些设备,路由器或者是 PC 及而言,IP 地址的设计是出于拓扑设计出来的,只要在不重复 IP 地址的情况下,它是可以随意更改的;而 MAC 地址是根据生产厂商烧录好的,它一般不能改动的,一般来说,当一台 PC 机的网卡坏了之后,更换了网卡之后 MAC 地址就会变了。
  • 2、在前面的介绍里面,它们最明显的区别就是长度不同,IP 地址的长度为 32 位,而 MAC 地址为 48 位
  • 3、它们的寻址协议层不同。IP 地址应用于 OSI 模型的网络层,而 MAC 地址应用在 OSI 模型的数据链路层。 数据链路层协议可以使数据从一个节点传递到相同链路的另一个节点上(通过 MAC 地址),而网络层协议使数据可以从一个网络传递到另一个网络上(ARP 根据目的 IP 地址,找到中间节点的 MAC 地址,通过中间节点传送,从而最终到达目的网络)。
  • 4、分配依据不同。IP 地址的分配是基于我们自身定义的网络拓扑,MAC 地址的分配是基于制造商。

2.8 端口号

  • 用来识别同一台计算机中进行通信的不同应用程序。
  • 标准既定的端口号,即知名端口号,分布在0 ~ 1023 之间。比如HTTP(80)、FTP(22)。
  • 正式注册的端口号,它们分布在1024 ~ 49151 之间。
  • 操作系统分配,动态分配的端口号范围在49152~65535 之间。

2.9 五元素识别唯一一个网络通信

五元素:源IP地址、目标IP地址、协议号(协议类型)、源端口号以及目标端口号。

五元素

3.TCP概述

TCP(Transmission Control Protocol)面向连接的通信协议,通过三次握手建立连接, 然后才能开始数据的读写,通讯完成时要拆除连接(四次挥手),由于 TCP 是面向连接的所以只能用于端到端的通讯。

TCP 提供的是一种可靠的数据流服务,数据有可能被拆分后发送,那么采用超时重传机制应答确认机制是组成 TCP 可靠传输的关键设计。

3.1 三次握手-建立连接

三次握手

TCP 提供面向有连接的通信传输。

面向有连接是指在数据通信开始之前先做好两端之间的准备工作。

3.1.1 过程

所谓三次握手是指建立一个 TCP 连接时需要客户端和服务器端总共发送三个包以确认连接的建立。在 socket 编程中,这一过程由客户端执行 connect 来触发。

  • 第一次握手
    客户端将标志位 SYN 置为 1,随机产生一个值 seq=J,并将该数据包发送给服务器端,客户端进入 SYN_SENT状态,等待服务器端确认。

  • 第二次握手
    服务器端收到数据包后由标志位 SYN=1 知道客户端请求建立连接,服务器端将标志位 SYNACK 都置为 1,ack=J+1,随机产生一个值 seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入 SYN_RCVD 状态。

  • 第三次握手
    客户端收到确认后,检查 ack 是否为 J+1ACK 是否为 1,如果正确则将标志位 ACK 置为 1,ack=K+1,并将该数据包发送给服务器端,服务器端检查 ack 是否为 K+1ACK 是否为 1,如果正确则连接建立成功,客户端和服务器端进入 ESTABLISHED 状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。

三次握手是保证数据可靠传输又能提高传输效率的最小次数.
三次握手的过程即是通信双方相互告知序列号起始值,并确认对方已经收到了序列号起始值的必经步骤.

3.1.2 TCP 的三次握手的漏洞-SYN 洪泛攻击

三次握手中有一个第二次握手,服务端向客户端应答请求,应答请求是需要客户端IP 的,攻击者就伪造这个IP,往服务器端狂发送第一次握手的内容,当然第一次握手中的客户端IP 地址是伪造的,从而服务端忙于进行第二次握手但是第二次握手当然没有结果,所以导致服务器端被拖累,死机.

解决方案:

  • 无效连接监视释放(不推荐),不停监视所有的连接,包括三次握手的,还有握手一次的,当达到一定(与)阈值时拆除这些连接,从而释放系统资源,不管是正常的还是攻击的;
  • 延缓TCB 分配方法,一般的做完第一次握手之后,服务器就需要为该请求分配一个TCB(连接控制资源,要200多个字节),当正常连接建立起来后再分配TCB 则可以有效地减轻服务器资源的消耗;
  • 使用防火墙,防火墙在确认了连接的有效性后,才向内部的服务器(Listener)发起SYN 请求

3.2 四次挥手-断开连接

四次挥手
  • 为什么TCP 的挥手需要四次?TCP 是全双工的连接,必须两端同时关闭连接,连接才算真正关闭;
  • 为什么需要TIME-WAIT 状态?
    • 可靠的终止TCP 连接
    • 保证让迟来的TCP 报文有足够的时间被识别并丢弃

4.网络工具

  • WireShark
  • tcpdump

5.HTTP

HTTP 协议是 Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网 (WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

  • HTTP 是一个无状态的协议。

    无状态是指客户机(Web 浏览器)和服务器之间不需要建立持久的连接, 这意味着当一个客户端向服务器端发出请求,然后服务器返回响应(response),连接就被关闭了,在服 务器端不保留连接的有关信息。

  • HTTP 使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。

  • URL 是一种特殊类型的 URI,包含了用于查找某个资源的足够的信息。

    URL,全称是 Uniform Resource Locator, 中文叫统一资源定位符,是互联网上用来标识某一处资源的地址。

  • 传输流程

    • 地址解析
    • 封装 HTTP 请求数据包
    • 封装成 TCP 包并建立连接
    • 客户机发送请求命令
    • 服务器响应
    • 服务器关闭 TCP 连接

一套完整的网络的流程

完整的网络流程

5.1 HTTP 协议报文结构

用于 HTTP 协议交互的信息被称为 HTTP 报文

  • 请求端(客户端)的 HTTP 报文叫做 请求报文;
  • 响应端(服务器端)的叫做响应报文
    HTTP 报文本身是由多行(用 CR+LF 作换行符)数据构成的字符串文本。

HTTP 报文大致可分为报文首部报文主体两部分。两者由最初出现的空行(CR+LF) 来划分。通常,并不一定有报文主体。

5.1.1 请求报文

5.1.2 响应报文

请求/响应报文实例:

具体可参考 《图解 HTTP》《HTTP 权威指南》,以及霜神


文章作者: Kezade
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Kezade !
评论
  目录