浅谈网络原理

一、网络分层结构以及各层协议

网络有三种分层结构,分别是OSI七层模型、TCP/IP五层协议模型和四层模型。其中最重要的是五层协议模型,分别有应用层、传输层、网络层、数据链路层和物理层。

1.应用层

应用层的任务是通过应用进程建的交互来完成特定的网络应用,负责程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)等。应用层的协议定义的是应用进程(主机中正在运行的程序)间的通信和交互的规则。
常用的协议有:

  • 域名系统DNS协议
  • 支持万维网的HTTP协议
  • 支持电子邮件的SMTP协议
    简单介绍DNS协议:
    负责将IP地址和域名相互映射,这样人们不需要记住复杂的IP地址,而只需要记住方便记忆的域名即可。
    简单介绍HTTP协议:
  1. 所有的万维网(WWW)文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
  2. 支持客户端/服务器模式(C/S模式),客户端可以发送请求,服务端会响应请求并返回数据。

2.传输层

传输层的任务就是负责两台主机之间的数据传输,如传输控制协议(TCP),能够保证数据可靠的从源主机发送到目标主机。
常用协议:

  • **传输控制协议TCP:**面线连接,面向字节流,可靠的
  • **用户数据协议UDP:**买哪像无连接,面向数据报,不可靠的

3.网络层

网络层的任务是负责地址管理和路由选择,例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式选择两台主机之间合适的数据传输线路,确保数据及时传送。
常用协议:

  • IP协议

代表硬件:

  • 路由器

4.数据链路层

数据链路层的任务是负责设备之间的数据帧的传送和识别。例如网卡设备的驱动,数据差错校验等都在数据链路层,数据链路层传输的是数据帧。
常用协议:

  • **ARP:**建立IP与MAC的映射

代表硬件:

  • 交换机

5.物理层

物理层的任务是负责光/电信号的传递方式,实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽调具体传输介质和物理设备的差异。在物理层上传输的数据单位是比特。
代表硬件:

  • 集线器

二、重要的网络传输协议

1.HTTP

HTTP的基本介绍

  1. HTTP协议(超文本传输协议),它是一种详细规定了浏览器和万维网(WWW)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传输协议。
  2. HTTP是一个应用层协议,有请求和响应构成,是一个标准的客户端/服务器模型,HTTP是一个无状态的协议。
  3. HTTP的默认端口号是80,HTTPS的默认端口号为443.
  4. 浏览网页是HTTP的主要作用,但是这并不代表HTTP就能应用于网页的浏览。HTTP是一种协议,只要通信双方都遵循这个协议,HTTP就能有用武之地,主要实现方式是一问一答式的。

HTTP的特点

  1. 简单快速:客户想服务器发送请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同,由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
  2. 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型有Content-Type加以标记。
  3. 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理客户的请求,并收到客户的应答后,即断开连接,采用这种方式可以节省传输时间。
  4. 无状态:HTTP协议是无状态协议。无状态指的是对于事物处理没有记忆能力。缺少状态意味着如果后续的处理需要前面的信息,则它必须重传,这样可能会导致每次连接传送的数据量增大。另一方面,如果服务器不需要先前信息时他的应答就比较快。
  5. 支持B/S(浏览器/服务器模式)以及C/S(客户端/服务器模式)。

认识URL

HTTP使用统一资源标识符(URI)传输数据和建立连接。==URL(统一资源定位符)==是一种特殊类型的URI,包含了用于查找某个资源的足够的信息,我们常用的就是URL.
URL

  • 全称是统一资源定位符(UniformResourceLocator),是互联网上用来表示某一处资源的地址。
    通过一个例子来介绍URL的组成部分:
    http://www.nowcoder.com:8080/profile/87968057/badges?type=1
    从上面的URL可以看出,一个完整的URL包括以下几个部分:
  • 协议部分:该URL的协议部分是“https:”,这代表网页使用的是HTTP协议。在http后面的“//”为分隔符。
  • 域名部分:该URL的域名部分为“www.nowcoder.com”。一个URL中,也可以使用IP地址作为域名部分使用。
  • 端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是URL必须的部分,如果省略端口部分,将采用默认端口。
  • 虚拟目录部分:从域名后的第一个“/”开始到最后一“/”为止,是虚拟目录部分。虚拟目录部分也不是URL必须的部分。本例中的虚拟目录是“/news/”。
  • 文件名部分:从域名的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。文件名不分也不是URL必须的部分,如果省略该部分,则使用默认的文件名。本例中的文件名是“badges”。
  • 锚部分:从“#”开始到最后,都是锚部分。锚部分也不是URL必须的一个部分。
  • 参数部分:从“?”开始到“#”为止,之间的部分为参数部分,又称搜索部分、查询部分。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。

URI和URL的区别

URI(Uniform Resource Identifier):是统一资源标识符,用来唯一的标识一个资源,web上可用的每种资源如HTML文档、图像、视频片段、程序等都是由一个URI来定位的。

URI由三部分组成:访问资源的命名机制;存放资源的主机名;资源自身的名称,由路径表示,着重强调于资源。

URL(Uniform Resource Locator):是统一资源定位符,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何找到这个资源。

URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上。

URL一般由三部分组成:

  1. 协议
  2. 存有该资源的主机IP地址(有时包括端口号)
  3. 主机资源的具体地址。如目录和文件名等。

HTTP协议

作用:用于客户端和服务之间通信。请求访问文本或图像资源的一端为客户端,而提供资源响应的一端称为服务端。

2.UDP

UDP协议的格式

在这里插入图片描述

  • 16位UDP长度,表示整个数据报的首部+UDP数据的最大长度;
  • 如果校验和出错就会直接丢弃。

UDP的特点

  • 无连接: 知道对端的IP和端口号就直接进行传输,不需要建立连接;
  • 不可靠: 没有确认机制,没有重传机制;如果因为网络故障导致该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息;
  • 面向数据报: 不能够灵活的控制读写数据的次数和质量。

为什么UDP不可靠

面向数据报
应用层交给UDP多长的报文,UDP原样发送,既不拆分也不合并。
UDP的缓冲区

  • UDP没有真正意义上的发送缓冲区。调用sendto会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作。
  • UDP具有接收缓冲区。但是这个接收缓冲区不能保证收到的UDP报的顺序与发送的UDP报的数据一致;如果缓冲区满了,再到达的UDP数据就会被丢弃。

基于UDP的应用层协议

  • NFS:网络文件系统
  • TFTP:简单文件传输协议
  • DHCP:动态主机配置协议
  • DNS:域名解析协议

3.TCP

TCP全称为传输控制协议(Transmission Control Protocol)

TCP协议的格式

在这里插入图片描述

  • 源/目的端口号:表示数据是从哪个进程来,到哪个进程去;
  • 4位TCP报头长度:表示该TCP头部有多少个32位bit(有多少个4字节),所以TCP头部的最大长度是15*4=60
  • 6位标志位:
    • URG:紧急指针是否有效
    • ACK:确认号是否有效
    • PSH:提示接收端应用程序立刻从TCP缓冲区把数据读走
    • RST:对方要求重新建立连接,把携带RST标识的称为复位报文段
    • SYN:请求建立连接,把携带SYN标识的称为同步报文段
    • FIN:通知对方,本端要关闭了,把携带FIN标识的称为结束报文段
  • 16位校验和:发送端填充,CRC校验。接收端校验不通过,则认为数据有问题。此处的校验和不仅包含TCP首部,也包含TCP数据部分。
  • 16位紧急指针:标识部分数据是紧急数据

TCP的特点

  • 有连接:在进行数据传输前必须要先进行连接,双方成功建立连接才能传输数据
  • 可靠的:有确认应答(ACK)机制、连接管理机制、超时重传机制
  • 面向字节流:对收到的应用层传下来的报文会进行拆分和重组
  • 既有接收缓冲区也有发送缓冲区

为什么TCP是安全可靠的

校验和
检验收到的数据是否正确。
序列号
保证收到的数据时按序到达的。
确认应答(ACK)机制
通过序号+确认序号实现

  • TCP将每个字节的数据都进行了编号,即序列号。
  • 每一个ACK都带有对应的确认序列号,这样就可以告诉发送端,接收端已经收到了哪些数据,下一次应该从哪里开始发送。

超时重传机制
系统基于TCP协议实现,会动态的计算报文的最大生存时间(MSL),超时时间就设置为2MSL。如果超过超时时间,则表示丢包(发送数据报,接收确认数据报),需要重新发送数据报(系统缓冲区中保存有数据,可以进行重发)。

  • 如果主机A发送数据给主机B之后,可能因为网络拥堵等原因,数据无法到达主机B,主机A在特定的时间间隔内未收到B发来的确认应答,A就会对数据进行重传。如果是接收确认数据报丢失,主机B就会收到很多重复的数据,那么TCP就需要依据序列号识别出哪些是重复的数据包,并把重复的数据包丢掉。

连接管理机制
TCP需要经过三次握手建立连接,四次挥手断开连接

  • 三次握手
    在这里插入图片描述
    • 第一次握手客户端向服务端发送建立连接的请求,首先客户端随机生成一个其实序列号ISN(比如100),那么客户端向服务端发送的报文段包含SYN标志位(也就是SYN=1),序列号seq=100.
    • 第二次握手服务端收到客户端发送过来的报文后,发现SYN=1,知道这是一个连接请求,于是将客户端的起始序列号seq=100保存起来,并且随机生成一个服务端的起始序列号(比如300),然后给客户端回复一段报文,回复报文包含SYN和ACK标志位(也就是SYN=1,ACK=1),序列号seq=300,确认号ack=101(客户端发过来的序列号+1)
    • 第三次握手客户端收到服务端的回复报文后,发现ACK=1并且ack=101,知道服务端收到了那段序列号为100的报文,同时发现SYN=1,知道服务端同意建立连接,于是将服务端的起始序列号300保存起来,并且给服务端回复一段报文,回复报文包含ACK标志位(ACK=1),ack=301(服务端的序列号+1),seq=101(因为客户端第一次发送的请求连接的报文占据一个序列号),告诉服务端客户端接收到了那段序列号为300的报文。
  • 四次挥手
    在这里插入图片描述
    • 第一次挥手当客户端的数据都传输完成后,客户端向服务端发送断开连接的请求(数据没有传输完成也可以发送断开连接的请求,并停止发送数据),断开连接的报文包含FIN标志位(FIN=1),序列号seq=1101(100+1+1000,其中1是建立连接时占用的一个序列号),客户端发送FIN后就不能在发送数据了,但是还可以接收数据,每一个FIN报文段即使不携带数据也要占一个序列号。
    • 第二次挥手服务端收到客户端发送的FIN报文段后给客户端发送回复确认报文,确认报文包含ACK标志位(ACK=1),确认号ack=1102(客户端发来的序列号+FIN占的一个序列号),序列号seq=2300(300+2000),此时服务端处于关闭等待状态,而不是直接给客户端发送FIN报文段,这个状态持续一段时间,因为服务端可能还有数据没发送完。
    • 第三次挥手服务端将数据发送完毕之后,服务端向客户端发送释放连接的报文,该报文包含FIN和ACK标志位(FIN=1,ACK=1),确认号ack=1102,序列号seq=2350(2300+50,假设服务端最后剩余发送的数据大小为50字节)。
    • 第四次挥手客户端收到服务端发送来的FIN报文段后,向服务端发送确认报文,告诉服务端客户端收到了断开连接(包含FIN标志)的报文段,服务端收到客户端的确认报文后就断开连接,此时客户端还未断开连接,需要等待2MSL之后才能断开连接,因此服务端比客户端要先断开连接。

流量控制
接收端通过TCP协议头中的窗口大小字段,告诉发送端,确认发送数据的大小。
目的: 接收端能力有限,为了防止接收缓冲区被打满,再接收数据就直接丢弃,接收端使用窗口大小可以告诉发送端发送数据的大小。
TCP使用滑动窗口实现流量控制
拥塞控制
当网络拥堵时,减少数据的发送。
原理: 拥塞窗口的初识值设为1,以慢启动指数级增长的方式,达到一定阈值之后转变为线性增长的方式,达到最大值之后再次使用慢启动的方式。

4.IP

IP协议是TCP/IP协议簇中的核心协议,也是TCP/IP的载体,所有的TCP、UDP、ICMP及IGMP数据都是以IP数据报的格式传输。IP协议主要的作用就是在复杂的网络中寻找合适的传输路径。

IP协议的格式

在这里插入图片描述

  • 4位版本号:指定IP协议的版本,对于IPv4来说,它的版本号就是4
  • 4位头部长度:IP头部的长度是多少个32位bit,也就是length*4的字节数,4bit表示最大的数字是15,因此IP头部的最大长度是60字节
  • 8位服务类型:3位优先权字段(已经弃用),4位TOS字段,和一位保留字段(必须置为0),4位TOS分别表示最小延时、最大吞吐量、最高可靠性、最小成本。这四者相互冲突,只能选择一个。对于SSH这样的应用程序,最小延时比较重要,对于FTP这样的程序,最大吞吐量比较重要
  • 16位总长度:IP数据报整体占多少个字节
  • 16位标识:唯一标识主机发送的报文,如果IP报文在数据链路层被分片了,那么每一个片里的这个ID都是相同的
  • 3位标志字段:第一位保留(保留的意思是现在不用,但是说不定以后会用到),第二位置1表示禁止分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文,第三位表示“更多分片”,如果分片了的话,最后一个分片置为1,其他是0,类似于一个结束标志
  • 13位片偏移:是分片相对于原始IP报文开始处的偏移,其实就是表示当前分片在原始IP报文中处于那个位置、实际偏移的字节数就是这个值*8得到的。因此,除了最后一个报文之外,其他的报文长度必须是8的整数倍。
  • 8位生存时间(TTL):数据报到达目的地的最大报文跳数,一般是64,每次经过一个路由,TTL-=1,一直减到0还没到达,就将这个报文丢弃了,主要是为了防止路由循环
  • 16位头部校验和:使用CRC进行校验,鉴别头部是否损坏
  • 32位源IP地址和32位目的IP地址:表示发送端和接收端

IP协议的特点

  • 无连接:IP并不维护任何关于后续数据报的状态信息。
    每个数据报的处理是相互独立的。IP数据报可以不按顺序发送接收。如果一个信源想相同的两个信宿发送来年各个连续的数据报(先是A,然后是B)每个数据报都是独立的进行路由选择,可能选择不同的路线,因此B可能在A到达之前先到达。
  • 不可靠:它不能保证IP数据报能够成功的到达目的地。
    IP提供最好的传输服务。当发生某种错误时,如某个路由器暂时用完了缓冲区,IP有一个简单的错误处理算法:丢弃该数据报,然后发送ICMP消息给信源。任何要求的可靠性必须由上层来提供。
  • 面向数据报:对于上层传下来的数据报既不拆分,也不合并。

网段划分

为什么要进行网段划分?
我们寻找某台主机时,在同一个网段的主机网络号都是相同的,我们可以根据网络号确定一个区域,在通过主机号寻找目的主机。
因此,需要知道:

  1. IP地址分为两个部分:网络号和主机号;
  2. 网络号:保证相连的两个网段具有不同的标识;
  3. 主机号:同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号;
  4. 不同的子网其实是把网络号相同的主机放一起;
  5. 如果子网中新增一台主机,则这台主机的网络号和这个子网的网络号一致,但是主机号必须不能和子网中其他的主机重复;
  6. 主机号为1的一般为路由器接口。
    所以,通过合理设置网络号的主机号,就可以保证相互连接的网络中,每台主机的IP地址都不相同。但是手动管理子网内的IP是一个很麻烦的事情。
    因此出现了一种DHCP的技术,能够自动给子网内新增主机节点分配IP地址,避免了手动管理IP的不方便。且一般的路由器都带有DHCP功能。因此路由器也可以看做是一个DHCP服务器。

IP地址划分

所有的IP地址可以分为五类,分别是:
在这里插入图片描述

分类地址范围
A类0.0.0.0到127.255.255.255
B类128.0.0.0到191.255.255.255
C类192.0.0.0到223.255.255.255
D类224.0.0.0到239.255.255.255
E类240.0.0.0到247.255.255.255

特殊的IP地址

  • 将IP地址中的主机地址全部设为0,就成了网络号,代表这个局域网。
  • 将IP地址中的主机地址全部设为1,就成了广播地址,用于给一个链路中相互连接的所有主机发送数据报。
  • 127.* 的IP地址用于本机环回测试。通常是127.0.0.1。

子网划分

IP地址是以网络号和主机号标识网络上的主机的,只有在同一个网络号下的主机才可以“直接”互通,不同网络号的主机要通过网关互通。
为了使同一个网络号下有多个子网,就产生了子网掩码。
子网掩码

  1. 区分网络号和主机号
  2. 是一个32位的正整数。通常用一串“0”来结尾
  3. 将IP地址和子网掩码进行“按位与”操作,得到的结果就是网络号
  4. 网络号与主机号的划分与这个IP地址是A类、B类还是C类无关

5.ARP

ARP协议是处于数据链路层和网络层之间的协议,只要用来将IP地址和MAC地址建立映射。
ARP协议只用于局域网中

ARP工作流程

  • 查询ARP缓存表,如果能够查到目的主机的MAC地址,则将MAC帧里面的目的地址替换成ARP缓存表中寻找到的MAC地址。
  • 如果没有在缓存表里面找到目的MAC地址,那么源主机就会发送ARP请求,并将这个请求广播到本地网段(将目的MAC地址置为FF.FF.FF.FF.FF.FF).
  • 在局域网内的所有主机都会收到ARP请求,但是只有当目的IP与自己的IP对应的时候才会接受请求,并处理请求内容,如果目的IP与自己的IP不对应,那么会自动丢弃请求报文。
  • 当获取到目的主机MAC地址之后,将目的MAC地址进行添加,将数据报发送至目的主机。
    RARP协议与ARP协议的工作正好相反,它是将MAC地址解析成为对应的IP地址,通常在DHCP中有集成。

三、网络通信中的基本概念

1 .网络互联(集线器)

  • 集线器的作用:只是做数据的转发
  • 冲突域:连接在同一导线上的所有工作站的集合,或者说是同一物理网段上所有节点的集合,或以太网上竞争同一宽带的节点集合。
  • 集线器网络互联中存在冲突域,交换机可以解决冲突域。

2 .五元组

  • IP:定位网络中某一台主机,在网络层包装IP地址
  • 端口号:绑定主机中的某一个应用程序,应用程序都是通过在传输层包装端口号发送/接收数据。
  • 五元组:源IP+源端口号+目的IP+目的端口号+协议号
  • IP+端口号:可以定位到网络上具体的某一个应用程序

3 .MAC地址

  • MAC地址是用来识别数据链路层中相连的节点,是一个网卡绑定的物理地址。
  • IP地址与MAC地址的区别:
  1. MAC地址描述的是路途上的没有区间的起点和终点
  2. IP地址描述的是路途总体的起点和终点

4 .局域网

  • 交换机+路由器
  • ARP请求数据包:通过目的IP查询目的MAC的请求,广播形式(数据包目的MAC为FF:FF:FF……)发送
  • 交换机连接:交换机没有进行数据的加工(交换机内部存在一个MAC地址转换表)

5 .广域网
传输流程:

  1. 封装数据包:HTTP应用层—>TCP传输层(有一个域名解析的过程:通过DNS将域名转换为IP)—>IP网络层(yuanIP,目的IP)—>以太网帧数据链路层(源MAC,目的MAC)
  2. 路由器解析数据包(分用后封装):数据链路层(源MAC修改为自己(路由器),通过目的IP在路由表查询到下一跳设备的MAC地址,将目的MAC修改为下个设备的MAC)(路由表可能不知道目的IP的地址,但是可以知道相连设备哪个方向更近) —>网络层(源IP由局域网IP改为路由器公网IP,NAT技术转换局域网IP和公网IP)—>传输层(源端口号由局域网端口修改为路由器映射端口,NAPT技术建立IP+端口(port)的局域网主机IP+主机程序端口 映射为 路由器公网IP+路由器公网端口)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值