1, 概述

1.1 网络概述(补充)

1.1.1 网络的发展

在1946世界上第一台计算机ENIAC诞生之后的20多年里,计算机技术一直在寻找关于与通信技术相结合方面的道路,在之后的一些时间里,美国在本土和加拿大境内,建立了一个半自动地面防控系统,简称SAGE(赛其)系统(始于1942年,并在1959年由Rand的一个独立子公司SDC继续开发),可以说是网络的雏形。

受美苏争霸的影响, 美国在1958年2月组建了ARPA(Advanced Research Project Agency/美国国防部高级研究计划局)科研部门。1961年美国国防部授权 APRA 研究一种 “分布式“ 的指挥系统。它由无数的节点组成,当若干节点被摧毁后,其它节点仍能相互通信。

经过ARPA下的信息处理技术办公室/IPTO(Information Processing Techniques Office)不断推动和探索, 并且在建立一系列设计概念和基础理论之后,1968年,美国国防部高级研究计划局/ARPA对ARPANET /阿帕网建设进行招标; 在1969年BBN公司中标之后, 在加州大学洛杉矶分校和斯坦福研究所的协同下, 进行互联的落地实现和测试,随后扩展为四校,加入加州大学圣巴巴分校,犹他大学。随后发展成15个站点,23台主机, 人类社会开始进入 “网络时代”。

在运行ARPANET不久后,为了在不同主机上实现通信数据信号的操作规范统一(用协议来规范信息传输): 拉里·罗伯茨&史蒂夫·克罗克实现了最初的ARPANET通信协议,称为NCP。

1973年,针对NCP协议存在的诸多问题(只能在同构环境中运行,即:网络上的所有计算机都运行着相同的操作系统, 并且NCP支持的主机数量有限,等等...),鲍伯·卡恩和温顿.瑟夫一起试图研究一个更具有通用性的协议标准,并在不久就共同提出了TCP传输协议。并且在1977 年,APRA改建的DARPA(美国国防部高级研究计划局)与BBN公司、斯坦福大学和伦敦大学学院签订商业合同,正式开始在不同的CPU硬件和软件平台上开发TCP协议的验证版本:TCPV1 和 TCPV2。

1978 年,温顿·瑟夫、鲍伯·卡恩、丹尼·科恩(Danny Cohen)和约翰·普斯特尔(Jon Postel)合力将 TCP 协议从分层思想的角度划分为2个协议,即:1,传输层的TCP协议,负责可靠传输。 2,网络层的IP协议,负责在不同的网络之间进行互联。并且不久之后将其演进为稳定版本 TCP/IPv4。

1981年,DARPA资助BBN公司和加州大学伯克利分校,把TCP/IP协议实现到UNIX操作系统。加州大学伯克利分校的学生Bill Joy在BSD UNIX发行版中实现了一个高性能的TCP/IP协议栈(BSD Socket)。

1982年,ARPANET开始采用TCP/IP协议替代NCP协议。1984年,TCP/IP协议得到美国国防部的肯定,成为计算机领域共同遵守的一个主流标准。至此, 基于IP协议标准的Internet诞生了。

值得一提的是, 其中TCP/IP最大的竞争对手就是国际标准化组织(ISO)。ISO在制定国际化标准上经验十足,在1981年提出了OSI七层模型,并大力推广。面对挑战温顿.瑟夫劝说 IBM、DEC、HP 等主机大厂支持TCP/IP协议,但都遭到了拒绝。因为在他们看来 TCP/IP未来将无力与在商业社会中获得过巨大成功的 ISO 抗衡。这种情况下, 美国国防部将 TCP/IP 协议与 UNIX 系统、C 语言捆绑在一起,并由 AT&T 向美国各个大学发放非商业许可证。迫使这些跟 UNIX 系统有紧密联系的企业转向TCP/IP。这为 UNIX 系统、C 语言、TCP/IP 协议的发展拉开了序幕,它们分别在操作系统、编程语言、网络协议这 3 个关键领域影响至今。

1985之后, 几乎所有的操作系统都开始支持TCP/IP协议。经典的TCP/IP五层模型已成实际网络标准。

1986年, 由美国国家科学基金会(NSF)自己出资, 并且基于 TCP/IP 协议,建立完全属于自己的NSFnet广域网。NSFnet 的快速发展非常迅速的占领市场。1990 年 6 月 1 日,ARPANET 正式退出历史舞台。

1990 年 9 月,由 Merit、IBM 和 MCI 公司联合建立了一个非盈利的组织 ANS(Advanced Network&Science Inc,先进网络科学公司)。ANS 的目的是建立一个全美范围的 T3 级主干网,1991 年底,NSFnet 主干网与 ANS T3 级主干网进行互联互通。

 

--> 1989 -1994: Tim Berners-Lee(蒂姆·伯纳斯·李)

--> HTML: 文件的格式,-> 网络中传输

--> 浏览器: 显示HTML格式论文

 

1989 年,当时在瑞士日内瓦CERN(核子研究中心)工作的Tim Berners-Lee(蒂姆·伯纳斯·李)构建超链接文档的技术,即HTTP/Web技术。

1994 年,举办互联网大会。Tim Berners-Lee 推动创建了非营利性的 W3C(World Wide Web Consortium,万维网联盟),邀集 Microsoft、 Netscape、 Sun、Apple、IBM 等共 155 家互联网上的著名公司。致力推动 WWW 协议的标准化,并进一步推动 Web 技术的发展。 ---> 标志着广义上民用互联网产生了.

 

1997年4月,中国建设了四大网络(中国公用互联网,中国教育科研网,中国科学技术网,中国金桥网)。

1998 年,美国成立非营利性民间组织 ICANN(Internet Corporation for Assigned Names and Numbers,互联网名称与数字地址分配机构),它由商务部的国家电信和信息管理局监督,负责全球互联网域名系统、根服务器系统、IP 地址资源的协调、管理和分配。由 ICANN 的下属机构 IANA(Internet Assigned Numbers Authority,互联网号码分配机构)负责管理全球互联网域名的根服务器。

...

1.1.2 网络的基础

从组成部分上看: 一个完整的计算机网络主要由硬件、软件、协议三部分构成。硬件是网络互联的物理构成(双绞线/光纤/路由器/交换机/网卡/主机...); 软件是硬件正常运行的驱动(操作系统/聊天软件/APP...); 协议是数据传输时, 数据在硬件之间流转的约定和规范。

从范围分类上: 计算机网络的构成有 广域网、城域网、局域网、...

从拓扑结构上: 计算机中的网络节点和线路的集合关系, 有常见的总线、星型、环状、网状...

1.1.3 网络通信的物理实体

我们说一个完整的计算机网络主要由硬件、软件、协议三部分构成。

那么在硬件组成方面到底有那些常见的硬件构成?

参考图示

  • 计算机中存在网卡, 网卡可以完成帧的封装和解封装,其对应数据链路层的功能。

  • 网线、网卡和协议栈构成了最小的网络单元。网线起着物理介质的作用,以传输比特流/电信号。网卡将信号/比特流转换数据,例如,它将计算机存储的数据转换为网线的比特流/电信号, 或者网线上将比特流/电信号转换为数据在计算机存储。

  • 但是两个主机之间的网线不可以无线延申, 因为网线上的信号存在衰弱问题。所以我们引入放大器/中继器来重新放大信息以实现信息在网线上的更远距离传输。

  • 如果我们有多个主机需要联通, 如果以直连的方式n个主机就需要(n-1)*n/2条全双工线路。而集线器是一种多接口中继器,它不仅可以中继和放大信息,还具有多个连接端口, 集线器可以允许多条网线接入, 并且任何网线传入接口的数据都将被集线器发送到所有其他接口(广播发送)。

  • 通过集线器广播的信息只对两个通信双方的主机有意义, 而对其它主机来说是冗余信息。尤其当同一个集线器链接的主机越多, 这种情况越严重。

  • 所以我们可以通过网桥, 把两个/多个集线器隔为多个网段(一般是两个), 用以隔离冲突域。网桥的工作原理是维护一个"MAC地址和网桥接入端口"的映射表, 所有发送到网桥上的数据帧, 网桥都要从数据帧中取出目的MAC地址, 然后对照映射表, 转发到对应网段。

  • 本质上讲交换机是一个多端口的网桥(转发和路径识别性能远高于网桥), 交换机端口足够多,可以让每隔端口与单个主机相连; 并且交换机和交换机之间可以做到级联; 等....

  • 从理论上交换机可以满足一个人数有限的公司或者组织的内部通信, 但是我们为了做到更远距离和复杂链接的通信(eg:北京的zs<->深圳的ls), 我们需要引入更强大的、两个处于不同局部位置的网络的信息转发机制, 即路由器。

  • 路由器通过路由表和路由以及数据的存储转发策略, 可以让数据在不同网络间转发。并在多次转发之后,到达目的网络位置。

  • 而路由器的互联也构成了广义上的互联网。

1.1.4 网络架构模式

在使用网络通信时,可以认为是由一端程序发起了请求而由另一端回复了一个响应。发起请求的那一端称作客户端,响应的那一端称作服务端, 这就是常见的C/S模式。在不同的网络应用,客户端和服务端的组织结构会 有一定的变化,有些应用可能会有固定的一个服务端来响应大量的客户端请求(绝大多数网络应用就是如此设计的), 类似的还有B/S架构,有些的应用可以让程序既充当客户端也充当服务端(比如P2P下 载软件)。

1.2 协议&网络模型

1.2.1 协议的作用

在实际的现实生活中, 计算机网络是由不同型号的计算机主机各种类型的硬件设备组合而成, 这些主机和硬件不仅型号/类型不同, 甚至软件逻辑都可能完全不同, 为了能够在这些不同的软硬件间完成互相通信和交换数据,我们需要一套在不同类型软硬件上通用的数据的组织方式和构成规则组织数据, 最终完成跨平台的信息传输和通信。

而用来定义这个在网络中数据传输的格式的规范, 就是网络协议, 当然也由于网络环境和数据远距离传输过程的复杂性, 所以我们需要的网络协议是需要很多协议组合在一起使用, 这些组合中不同的协议用以应对网络传输的不同情况下的问题。

我们要求这种数据的组织方式被各个机器识别, 也就意味着, 即使各个厂商生产的网络硬件在构成上, 以及软件驱动上可能各不相同, 但是在逻辑上都要遵循协议所规定的数据构成和传输标准

遵守协议, 是当先互联网各个主机进行信息通信的基石。

1.2.2 网络模型

在互联网的发展和演进中, 各个标准化组织和计算机产业相关的软硬件机构, 他们都意识到了互联网需要制定一套具有通用标准的网络数据传输协议。

但在实际发展中和探索中, 在不同的规范体系中,也延伸出了层次结构不同的网络标准模型。比较经典的即TCP/IP四层模型OSI七层模型。(虽然TCP/IP成为了事实网络标准, 但是OSI的历史指导意义也不可忽视)

无论是OSI参考模型还是TCP/IP参考模型都把他们各自的协议栈设计理念, 按照层级划分:

注意:

为什么要有这么多层级设计:(了解)(类似寄快递:自己检查地址, 收获贴条封装, 司机选车选路.....假如全都自己一个人做, 效率问题,通用性问题)

在上述网络模型中每一层的意义是什么:(了解)

1.2.4 数据单元转换

我们前面讲, 计算机网络从逻辑上按照层级进行划分, 每一个层级都在数据在网络上传输具有独立的意义. 那么我们以发送信息的主机和接收信息的目标主机为例, 在这两个主机上, 每一个层级具体做了什么事情? 每一网络层级对一份在网络上传输的数据到底执行力什么操作?

当数据从上层转移到下层时,下层的数据单元会把上层数据单元的所有内容包含进来,作为下层协议数据单元的有效载荷,除此还可能在头部或者是尾部增加控制信息。这些层级对信息做做的处理, 以及增加的信息, 有各种各种的作用, 整体来说是为了信息能在网络上有效的、准确的、迅速的传输到目的地。(每一个层级对信息的进一步处理意义和作用在1.3中展开)。

1.2.3 网络实体和模型对照

对照数据报文的转化, 物理硬件又在其中起到什么作用哪?

物理层

数据链路层

网络层

1.2.3 常见的协议

在实际的网络数据传输中, 数据传输需求类型繁多、网络情况也诸多变化, 所以产生了很多协议约定以供用户在不同情况下使用。在网络编程的学习过程中,最重要的参考资源是RFC文档。 RFC文档是一系列草案的集合, 所有的互联网协议和其他相关的内容都位于其中。访问rpc-editor网站(www.rfc-editor.org) 可以比较方便地查阅所有的RFC文档。

eg:

协议名协议功能占用端口 号  
HTTP 超文本传输协议应用层传输Web网站网页和其他资源80  
FTP文件传输协议应用层文件上传和下载20/21  
Telnet 远程连接协议应用层远程登录(无加密)23  
SSH安全外壳协议应用层远程登陆(加密)22  
SMTP 简单邮件传输协 议应用层电子邮件(邮件在服务器之间提交和传 送)25  
POP3 邮局协议版本3应用层电子邮件(邮件最终交付协议)110  
TCP传输层可靠的面向连接的传输层协议   
UDP传输层不可靠的基于数据报的传输层协议   
IP网络层网际互联协议   
ICMP网络层网络控制消息协议   
IGMP网络层网络组管理协议   
ARP数据链路 层地址转换协议   
RARP数据链路 层反向地址转换协议   

注意:

2, 网络

我们仅重点关注: 应用层的HTTP协议、传输层TCP/UDP协议、网络层IP协议、数据链路层的数据帧组装和ARP协议...

2.1 应用层

应用层在网络通信中扮演着至关重要的角色,为用户提供了与网络通信服务交互的接口。应用层允许开发者根据具体的应用需求实现特定的逻辑和功能,使得网络服务在封装了底层网络服务复杂性的情况下, 可以被定制化以满足各种特定场景的需求。

应用层存在各种高级网络通信协议,如HTTP(网页浏览)、SMTP(电子邮件发送)、FTP(文件传输)等。这些协议定义了数据交换的格式和规则,使不同的系统和程序能够以标准化的方式进行通信。而其中在开发中最常遇到的就是HTTP协议

2.1.1 HTTP

2.1.1.1 HTTP的概述

1989 年,当时在瑞士日内瓦CERN(核子研究中心)工作的Tim Berners-Lee(蒂姆·伯纳斯·李)构建了超链接文档的技术,即HTTP/Web技术。随后在1994 年的互联网大会上推动W3C(World Wide Web Consortium,万维网联盟)的建立更加剧了互联网的繁荣。

而作为互联网资源访问的三要素之一(HTTP, HTML, URL)。HTTP协议是学习 WEB开发的基石,不了解HTTP协议,就不能说理解了WEB。

作为一个及其重要的应用层协议, HTTP的核心功能就是在网络上的客户端和服务器之间传输超文本数据, 而这个传输过程最重要的就是构建HTTP请求和响应报文。(客户端发送给服务器的信息,称之为请求信息;服务器返回给客户端的信息称之为响应信息。一般情况下,我们也将发送的信息称之为报文。即HTTP请求报文和HTTP响应报文)

2.1.1.2 HTTP请求

发送的HTTP请求一般称之为HTTP请求报文,分为请求行请求头空行请求体/请求正文四部分.其中的一些消息头和正文都是可选的,消息头和正文内容之间要用空行隔开.

请求行

请求行的构成:请求方法 请求资源 请求协议

请求方法

了解: (除了GET和POST以外的请求方法)

URL

请求资源

请求协议

请求头

请求头是HTTP请求的客户端要告诉服务端的一些请求信息

  • Accept: 浏览器可接受的MIME类型写法为(大类型)/(小类型)。 MIME就是使用一种大类型/小类型的方式将互联网上面的资源进行分类。比如text/html,text/txt,image/jpeg,image/png,video/mp4,video/mp3等。因为客户端和服务器在相互通讯时,需要知晓对方传递的资源类型。

  • Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集。

  • Accept-Encoding: 浏览器能够进行解码的数据编码方式,比如gzip。请求头是给服务器看的,意思是指如果服务器返回响应时需要对数据进行压缩,设置编码方式,那么应当使用客户端可以支持的编码方式。

  • Accept-Language: 浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到,可以在浏览器中进行设置; eg: https://www.google.com/search?q=123

  • Referer: 包含一个URL,用户从该URL代表的页面出发访问当前请求的页面 (防盗链); 比如用户直接访问B页面,以及通过访问A页面,进而跳转至B页面,这两种方式都进入到B页面,那么两种方式在HTTP请求报文中有没有区别呢?(eg: http://www.cskaoyan.com/forum-280-1.html )

  • Content-Type: 一般就是MIME类型,因为服务器和客户端在相互传递数据时,需要让对方知晓资源的类型,是文本文件或者是二进制文件等。(用到不多)

  • Content-Length: 表示请求消息正文的长度。也就是请求体的长度

  • User-Agent: 浏览器类型

  • Date: Mon, 22 Aug 2023 01:55:39 GMT请求时间GMT

  • Connection: 表示是否需要持久连接。如果服务器看到这里的值为“Keep -Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接

  • If-Modified-Since: Wed, 02 Feb 2011 12:04:56 GMT 服务器利用这个头与服务器的文件进行比对,如果一致,则告诉浏览器从缓存中直接读取文件

  • Cookie: 这是最重要的请求头信息之一

  • Host: 初始URL中的主机和端口。

Host: www.cskaoyan.com ( 这句话, 代表找一个叫Host的主机 , 在这 主机 != 服务器/电脑)

空行

仅做标识使用

请求正文/请求体

请求体中一般用来传输客户端需要传递给服务器的数据信息等。该部分可以大量的存放数据,比如当客户端需要提交一个文件到服务器时, 比如用户需要传输给服务器一些安全保密的信息,那么就可以将文件的数据放置在请求体中。

2.1.1.3 HTTP响应

服务器发送的HTTP响应一般称之为HTTP响应报文,分为响应行响应头空行响应体四部分.其中的一些消息头和正文都是可选的,消息头和正文内容之间要用空行隔开.

响应行

版本协议: HTTP/1.1

状态码: 比较常见的: 200 400段 500段

原因短语

响应头
  • Location: http://www.cskaoyan.com/指示新的资源的位置。要搭配着重定向状态码一起使用。指引浏览器往改地址再次发起请求。

  • Server: apache tomcat 指示服务器的类型

  • Content-Encoding: gzip 服务器发送的数据采用的编码类型

  • Content-Type: text/html; 服务器发送的内容的MIME类型

  • Content-Length: 80 告诉浏览器正文的长度。响应体的长度。

  • Content-Language: zh-cn服务发送的文本的语言

  • Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT文件的最后修改时间

  • Content-Disposition: attachment; filename=aaa.zip指示客户端保存文件

  • Set-Cookie: SS=Q0=5Lb_nQ; path=/search服务器端发送的Cookie

  • Cache-Control: no-cache (1.1)

  • Connection: close/Keep-Alive

  • Date: Tue, 11 Jul 2000 18:23:51 GMT

空行

标识使用

响应正文/响应体

也叫作响应正文。可以是文本数据也可以是二进制类型数据。其中响应头中Content-Type指示了该资源的类型,比如文本类型资源时,Content-Type:text/html;图片资源时Content-Type:image/png;Content-Length指示了响应体的长度。

2.1.1.4 HTTPS:拓展

HTTP协议具有非常优秀的一面,但是也有很多不足之处,具体体现如下:

HTTPS分别引入了加密算法、证书、完整性保障来解决对应的问题

2.1.14 抓包: 重要/非常重要

抓包追踪一个http请求, 获取一些关键的信息

抓包: 就是通过分析用户发起的所有请求, 获得一些关键信息

使用Chrome浏览器OR抓包工具进行抓包非常重要.

2.2 传输层

在网络数据传输中传输层向他上面的应用层提供通信服务, 它属于面向通信部分的最高层,同时也是用户功能中的最底层。

在传输层中, 包含若干及其重要的协议(TCP、UDP、SPX、STCP、SCTP), 其中最重要的就是TCP(传输控制协议)和UDP(用户数据报协议)。TCP是一种面向连接的协议,提供可靠的有序的错误校验的数据传输方式,但传输效率相对较低。而UDP则是一种无连接的协议,传输效率较高但无法保证数据的可靠传输。

2.2.1 TCP

2.2.1.1 TCP的特点

传输控制协议(TCP)是整个四层模型当中最重要的协议,它工作在传输层,其目标是在不可靠的逐跳传输的网络层之上,构建一个可靠的 、面向连接的 、全双工的端到端协议。

为什么说是TCP是端到端的: 因为对于传输层协议而言, 通信的双方是两台主机之间的通信, 是两台主机的逻辑上的直达信息(这是其逻辑上和网络层路由传递以及数据链路层的帧转发不同的点)。

2.2.1.2 TCP报文头部

当应用层数据从上面转移到传输层时,下层的数据单元会把上层数据单元的所有内容包含进来,作为下层协议数据单元的有效载荷

以应用层TCP协议为例,当应用层数据从上面转移到传输层,TCP协议会在应用层数据的基础上拼接一个TCP头部信息,封装成一个TCP报文段。

TCP头部格式

各字段意义:(拓展)

可靠传输:TCP协议的可靠性和可靠传输是靠序号和确认机制,以及重传机制保证的。(拓展)

累积确认

累积确认意味着一个ACK报文段/确认报文, 会确认该确认号序号之前直到该序列号为止的所有字节。

快速重传&窗口机制

2.2.1.3 TCP连接的建立和断开

TCP是面向连接的协议:所以每个TCP连接都有三个阶段:建立连接,数据传送,连接释放。

建立TCP连接:三次握手

TCP的三次握手流程,如图所示

释放TCP连接:四次挥手

TCP的四次挥手流程,如图所示

思考,为什么是三次握手, 而不是四次握手?为什么是四次挥手,而不是三次挥手?

2.2.1.4 TCP的状态转换

TCP连接在建立连接、通信和关闭连接的过程中,随着通信双方的报文交换, TCP连接的状态也在一直变化。

ps: TIME_WAIT=2MSL: 什么是MSL?为什么客户端最后还要等待2MSL?

2.2.2 UDP

2.2.2.1 UDP的特点

UDP是一种保留消息边界的简单的面向数据报的传输层协议。

  1. 无连接:UDP是一种无连接协议。这意味着在数据包发送之前,发送方和接收方之间不需要建立连接。每个数据包之间独立发送,彼此之间没有依赖关系。

  2. 低开销:UDP协议头部较小,只有8字节,相比之下,TCP协议头部最少20字节。UDP的简单性使得它在传输数据时增加的开销更少。

  3. 不可靠传输:UDP不提供数据到达的保证。因为它不进行错误检查或者纠正,意味着网络上的数据包可能会丢失、重复或乱序到达,且发送方不会得到通知。

  4. 无拥塞控制:UDP不实现拥塞控制机制。它以相同的速度发送数据,不论网络条件如何。这可能导致在网络质量较差时数据包被丢弃。

  5. 快速传输:由于缺乏连接建立、确认响应、流量控制等机制,UDP可以更快速地传输数据(能不能到目的地是另外一件事)。

由于其特性,UDP通常用于那些对实时性要求高但对可靠性要求不高的应用,例如视频流、VoIP(语音通信)、在线游戏、早期的聊天软件等。

2.2.2.2 UDP报文头部

当应用层数据从上面转移到传输层时,下层的数据单元会把上层数据单元的所有内容包含进来,作为下层协议数据单元的有效载荷

以应用层UDP协议为例,当应用层数据从上面转移到传输层,UDP协议会在应用层数据的基础上拼接一个UDP头部信息,封装成一个UDP报文段。

UDP头部格式

ps: 这个UDP长度 = UDP头部长度+数据长度

2.3 网络层

网络层是计算机网络体系结构中的第三层,负责处理在多个网络之间发送数据包的任务。这一层解决了不同网络间的通信问题,确保数据能从源点到达目的地。

网络层的主要协议有ICMP、IGMP以及最重要的IP协议。

2.3.1 IP协议概述

IP协议是四层模型中的核心协议, TCP、UDP协议都是基于IP协议的, TCP和UDP数据都通过IP数据报传输。 IP提供一种尽力而为(即不可靠)、无连接的数据报交付服务。不可靠意味着如传递过程中出现差错, IP层可以选择丢弃数据, 而无重传机制;无连接意味着IP协议不会记录传递过程中的路径,那同样的两端发生的不同数据报可能会走不同的路径,并且有可能不按顺序到达。

2.3.2 IP地址:拓展

IPv4: IPv4广泛被使用 -> 局域网 -> nat转换 :

IPv6:

IP协议规定网络上所有的设备都必须有一个独一无二的IP地址, 一个IP地址共由32比特构成/4字节,IP地址是一个主机在计算机网络上的位置标识

当数据在网络上传输时, 数据包根据指定的IP地址, 才在互联网上的茫茫主机中能找到目标主机。

ipconfig&ifconfig

ipconfigifconfig都是用于配置和查看网络接口的工具。

在Windows系统中,我们可以通过ipconfig是用于显示当前主机的配置: 包括IP地址、子网掩码、默认网关等重要网络配置信息。

在Linux系统中,对应的工具是ifconfig: 可以查看主机的IP地址、掩码、广播地址、网关等。

IP地址分类

我们按照IPv4为例, IP的地址长度为32位,为了方便描述,通常将其按8位一组分隔,并用.号隔开,这种就是点分十进制,比如255.255.255.255210.168.10.2150.168.11.111117.32.255.10043.117.6.150.0.0.0...。

IP地址的组成是由两部分构成: <网络号>.<主机号>

我们可以把IP地址可分为五大类:

广播IP: 专门用于向该IP所在网络中所有IP主机进行发送广播数据行为的一个IP地址。广播地址的主机号全为1。

网络本身IP: 用于标识该网络号的网络本身, 主机号全为0。

认知练习: 如下各个IP地址的类型,网络号和主机号各是多少?

子网掩码&CIDR

随着Internet逐渐发展,以上述ABCDE类的形式划分IP, 这种死板的分类方式已经不适应人们的需求。 更新的子网和子网掩码以及CIDR(无分类域间路由选择)的出现逐渐取代了传统的ABC类划分IP.

子网掩码划分:

CIDR

一些特殊的IP地址

下面是一些常见的用于特殊用途的IP地址:

前缀用途
0.0.0.0作为源地址时表示本地主机||作为目的地址时,表示任意IP地址
127.X.X.X (127.0.0.0 127.0.0.1)回环地址(127.0.0.1是最常见以及最广泛的支持的回环地址)
169.254.0.0链路本地地址,通常出现在DHCP自动分配IP未完成时
255.255.255.255本地网络广播地址
10.X.X.X局域网IP地址
172.16.X.X~172.31.X.X局域网IP地址
192.168.0.X~192.168.255.X局域网IP地址

局域网

局域网是指在一个较小的范围内,将各个主机通过网络连接起来, 局域网有诸多好处(eg: 高带宽,低延时,方便广播....), 而我们如果从IP地址分配这个角度来看, 其中一个非常重要的好处就是节省IP地址. 而这个地方涉及到NAT地址转换.

前缀用途
10.X.X.X局域网IP地址
172.16.X.X~172.31.X.X局域网IP地址
192.168.0.X~192.168.255.X局域网IP地址

IPv4和IPv6

IPv4(Internet Protocol version 4)和IPv6(Internet Protocol version 6)是互联网使用的两个主要版本的互联网协议:

总的来说,IPv6是对IPv4的一种改进和扩展,它提供了更大的地址空间、更高的安全性、更简单的网络配置和管理以及改进的其他特性,以满足不断增长的互联网需求。

2.3.3 IP数据报格式

当应用层数据从上面转移到网络时,下层的数据单元会把上层数据单元的所有内容包含进来,作为下层协议数据单元的有效载荷

以网络层IP协议为例,当传输层数据(UDP报文/TCP报文)从上面转移到网络层,IP协议会在传输层数据(UDP报文/TCP报文)的基础上拼接一个IP头部信息,封装成一个IP数据报/IP分组。

IPv4头部格式

各字段意义:(拓展)

2.3.3 IP报文的分片重组

需要注意的是我们通过IP协议组装的IP数据报是网络层的行为,当我们把IP数据包交给数据链路层, 数据链路层在还需要把IP数据报组装程数据帧.

但是需要注意的是, 一个数据链路层数据帧能承载的数据部分(仅仅数据部分,不包含帧头部和CRC)最大传送单元(即MTU), 是有大小限制的。 (以以太网标砖来讲一般是1500字节)。

所以当一个IP数据报过大(帧内的IP数据报>1500), 我们需要把IP数据报进行拆分、分片发送,以满足数据在链路层传输要求;并且每隔经过分片的IP数据报在网络之间独立传输。 一旦到达 终点的目的主机之后(中间不会重组),目的主机的网络层会将分片重组/还原成一个大IP数据报。

Eg:如下图

了解:拓展

2.3.4 路由器&路由表&路由转发

在计算机网络上路由器具有多重重要的功能, 路由器之间的相互连通路由中转是构建互联网联通的基石。

路由器维护一个路由表,路由表存储着指向特定网络地址的路径, 当路由器收到一个数据包时,它检查该数据包的目的IP地址,并在路由表中查找一个路由器觉得最适合的路径,然后把这个数据包转发给下一个路由器或者主机, 这种逐跳传输信息的方式又被称为多跳。也就是一个路由器实际上只能决定数据报下一跳能转发到哪一个邻居,而不能直接和最终的目的地建立连接。在这种逐跳通信的网络之中寻找来源和目的之间一条合适的通路过程以及最终生成的通路称为路由

而路由器可以充当一个端到端通信系统当中的中间结点。部分主机也支持路由功能。

路由表:(拓展,可以不用了解)

路由表是路由器或任何可以执行路由功能的网络设备中的一个关键组成部分。它是一个路由信息的集合,它提供了数据包转发决策所需的信息。

了解: 查看主机上的路由表(部分主机也支持路由功能) (以Linux为例route -n ) (比如windows: route print)

路由器中路由表中一般包括:

路由器的路由表信息来源

路由器怎么根据路由表转发

路由器会修改MAC地址

2.3.5 NAT简述

NAT/Network Address Translation技术是在网络之间进行网络地址转化的一种网络技术, 而对于我们来讲, 这个技术比较常用的地方在与路由器进行局域网IP端口和公网IP端口的转换.

路由器具有NAT功能:

2.3.6 DHCP&ICMP:拓展

DHCP

DHCP/动态主机配置协议/Dynamic Host Configuration Protocol; 实际上是个基于UDP的应用层协议, 用于给加入网络的主机动态分配IP地址.

ps: DHCP服务器分配给DHCP客户主机的IP地址是临时的。这是因为DHCP服务器通常会为每个客户分配一个租约期,当租约期到期时,客户需要重新申请IP地址才能继续使用 (当然, DHCP也可以在自己的请求IP地址的报文里提出租期要求)。

ICMP

ICMP/报文控制协议/Internet Control Message Protocol; 用以提供与IP协议的诊断和控制信息; 以ICMP差错报文为例, 它可以让到达目标主机的路径上的路由器向源主机报告差错和异常情况.。 ICMP一般认为是网络层的一部分,但是它的实现却需要基于IP,

ICMP数据包是放置在IP数据报之中, 所以可以认为ICMP是一种位于网络层和传输层之间的 协议。

比如Ping就使用ICMP协议的请求和回答报文,分析连通性等信息.

比如traceroute操作(在Windows下为tracert), 就基于ICMP协议用来跟踪数据报的经过的路由.

2.4 以太网

TCP/IP协议套件主要集中在网络层(Eg:IP协议)和传输层(Eg:TCP和UDP协议)的定义上,以实现端到端的数据传输和路由。它假定底层的数据链路和物理层已经由底层的标准和技术定义好了,如以太网、Wi-Fi、光纤、电缆等。TCP/IP协议套件没有完整定义数据链路和物理层。

所以我们研究物理层和数据链路层, 就要参考以太网标准: 因为数据链路层和物理层通常由完全不同类型的硬件和驱动组成,这些硬件和驱动在不同类型的物理介质上提供了不同的连接和传输方法, IEEE 802.3这组以太网/Ethernet标准技术,它定义了局域网的数据传输, 比如数据链路层以太网帧格式, 比如物理层规范,包括传输媒体、电缆类型、传输速率和连接方式.

2.4.1 交换机

早期以太网的结构通常是共享的:多个主机共享一个网络介质传播数据,如果多个主机同时发送数据,则需要采用一些算法来避免碰撞。随着网络速度不断提升,共享以太网逐渐被一个星形拓扑接口的网络取代了:主机通过一条独享的网线和交换机连接,由交换机负责在为每个主机提供全双工通信。

网桥和交换机(就是高性能版网桥)是工作在数据链路层上的设备,它们可以用来将多个链路层网络连接起来,从而构成一个拓展的局域网。交换机拥有自己的MAC地址,并且有许多对外连接的接口,通过一段时间的“学习” ,交换机可以构建一个列表(端口地址表),里面存储了MAC地址和接口编号的对应关系。

交换机有效的拓展了网络的范围,隔离冲突域, 提升数据传输速度.

2.4.2 以太网帧

当应用层数据从上面转移到网络时,下层的数据单元会把上层数据单元的所有内容包含进来,作为下层协议数据单元的有效载荷

以太网中处理的协议数据单元是以太网帧。一个典型以太网帧如下图所示:

各字段意义:(拓展)

前导码:

2.4.3 ARP协议

在网络传输中,我们使用IP地址来定位主机的位置,通常来说IP地址并不是固定的(容易产生变化),但是网络设备在链路层上的MAC地址是由生产厂商分配是固定的。当我们为了传输数据构建以太网帧时,我们需要知道目的地址的MAC地址, 但是一开始我们可能仅具有目的地址的IP地址。

我们需要使用一种协议来执行地址解析,即IP地址和 MAC地址之间的映射转换 — —这就是ARP/地址解析协议/Address Resolution Protocol协议。ARP协议可以将32位的IPv4地址映射成48位的MAC地址。

Eg:

2.4.4 网络回环设备

在有些情况,通信的服务端和客户端会位于同一台主机之上,操作系统提供了一种环回网络接口来实现同一主机上两端通信,环回设备是一种虚拟的网络设备,通常来说环回数据会通过内核协议栈的部分层次, 一般是指传输层和网络层,但是不会走到物理层设备(网 卡)上。通常来说环回设备的通信不会受到MTU的限制。

2.4.5 网卡:拓展

当操作系统封装好以太网帧之后, 操作系统会把以太网帧发送给网卡, 交由网卡把数字信号转换为电信号,并通过物理媒介(如网线)发送出去。而对于一个主机而言, 封装数据帧和之后发送数据的整个过程,是由操作系统和网卡协同工作的。并且DMA(直接内存访问/DMA, DMA允许网卡直接从系统内存读取数据,而无需CPU的介入,这极大地提高了数据传输的效率)在这个过程中起着关键作用,因为它允许快速且高效的数据传输,减少了CPU的负担。

2.5 总结

以HTTP为例, 分析一个数据在网络上传输的流程