网络

网络

起男 1,231 2020-09-17

网络

网络7层架构

  1. 物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用的传输比特流(就是由1、0转化为电流强弱来进行传输,达到目的地后再转化为1、0,也就是我们常说的数据转换与数模转换)。这一层叫做比特。
  2. 数据链路层:主要将从物理层接收的数据进行mac地址(网卡的地址)的封装与解封。常把这一层的数据叫做帧。再这一层工作的设备是交换机,数据通过交换机来传输。
  3. 网络层:主要将从下层接收到的数据进行ip地址的封装和解封。在这一层工作的设备是路由器,常把这一层达到数据叫数据包。
  4. 传输层:定义了一些传输数据的协议和端口号,主要是将从下层接收的数据进行分段进行传输,到达目的地后再进行重组。常常把这一层数据叫做段
    • tcp:传输控制协议,面向连接、传输效率低,可靠性强,用于传输可靠性要求搞,数据量大的数据
    • udp:用户数据报协议,与tcp特性恰恰相反,面向无连接、用于传输可靠性要求不高,数据量小的数据
  5. 会话层:通过传输层建立数据传输的通路。主要在你的系统直接发起会话或接收会话请求(设备之间需要互相认识可以是ip也可以是mac或者是主机名)
  6. 表示层:主要是进行对接收的数据进行解释、加密与解密、压缩与解压等(也就是把计算机能够识别的东西转换成人能识别的东西)
  7. 应用层:主要是一些终端的应用,比如说ftp(各种文件下载)、web(ie浏览器)、qq之类的(你就把它理解成我们在电脑屏幕上可以看到的东西,就是终端应用)

TCP/IP原理

tcp/ip协议不是tcp和ip这两个协议的合称,而是指因特网整个tcp/ip协议簇。从协议分层模型方面来讲,tcp/ip由四个层次组成:网络接口层、网络层、传输层、应用层,

  1. 网络访问层:指出主机必须使用某种协议与网络相连

  2. 网络层:是整个体系结构的关键部分,其功能是使主机可以把分组发往任何网络,并使分组独立地传向目标。这些分组可能经由不同的网络,到达的顺序和发送的顺序也可能不同。高层如果需要顺序收发,那么就必须自行处理对分组的排序。网络层使用因特网协议

  3. 传输层:使源端和目的端机器上的对等实体可以进行会话。在这一层定义了两个端到端的协议:tcp和udp

  4. 应用层:包含所有的高层协议

数据包说明

  1. 源端口号(16位):它(连同源主机ip地址)标识源主机的一个应用进程

  2. 目的地端口号(16位):它(连同目的主机ip地址)标识目的主机的一个应用进程

    这两个值加上ip报头中的源主机up地址和目的主机ip地址唯一确定一个tcp连接

  3. 顺序号seq(32位):用来标识从tcp源端向tcp目的端发送的数据字节流,它表示在这个报文段中的第一个数据字节的顺序号。如果将字节流看作在两个应用程序间的单向流动,则tcp用顺序号对每个字节进行计数。序号是32bit的无符号数,需要到达2的32次方-1后又从0开始。当建立一个新的连接时,SYN标志变1,顺序号字段包含由这个主机选择的该连接的初始顺序号ISN(lnitial sequence number)

  4. 确认号ack(32位):包含发送确认的一端期望收到的下一个顺序和。因此,确认序号应当是上次已成功收到数据字节顺序号加1。只有ACK标志为1时确认序号字段才有效。tcp为应用层提供全双工服务,这意味数据能在两个方向上独立的进行传输。因此,连接的每一端必须保持每个方向上的传输数据顺序号

  5. tcp报头长度(4位):给出报头中32bit字的数目,它实际上指明数据从哪里开始。需要这个值是因为任选字段的长度是可变的。这个字段占4bit,因此tcp最多有60字节的首部。然而,没有任选字段,正常的长度是20字节

  6. 保留位(6位):保留给将来使用,目前必须置为0

  7. 控制位(6位):在tcp报头中有6个标志比特,它们中的多个可同时被设置为1

    1. URG:为1表示紧急指针有效,为0则忽略紧急指针
    2. ACK:为1表示确认号有效,为0表示报文中不包含确认信息,忽略确认字段
    3. PSH:为1表示是带有push标志的数据,指示接收方应该尽快将这个报文段提交给应用层而不用等待缓冲区装满
    4. RST:用于复位由于主机崩溃或其它原因而出现错误的连接。它还可以用于拒绝非法的报文和拒绝连接请求。一般情况下,如果收到一个rst为1的报文,那么一段发生了某些问题
    5. SYN:同步序号,为1表示连接请求,用于建立连接和使顺序号同步
    6. FIN:用于释放连接,为1表示发送方已经没有数据发送了,即关闭本方数据流
  8. 窗口大小(16位):数据字节数,表示从确认号开始,本报文的源方可以接收的字节数,即源方接收窗口大小。窗口大小是一个16bit字段,因而窗口大小最大为65535字节

  9. 校验和(16位):此校验和是对整个的tcp报文段,包括tcp头部和tcp数据,以16位字进行计算所得。这是一个强制性的字段,一段是由发送端计算和存储,并由接收端进行验证

  10. 紧急指针(16位):只有当urg标志置1时仅仅指针才有效。tcp的紧急方式的发送端向另一端发送紧急数据的一种方式

  11. 选项:最常见的可选字段是最长报文大小,又称为mss。每个连接方通常都在通信的第一个报文段(为建立连接而设置syn标志的那个段)中指明这个选项,它指明端所能接收的最大长度的报文段。选项长度不一定是32位字的整数倍,所有要叫填充位,使得报头长度位整字数

  12. 数据:tcp报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有tcp首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段

三次握手

  1. 主机a发送位码为SYN=1,随机产生seq number=1234567的数据包到服务器,主机b由SYN=1知道,a要求建立联机
  2. 主机b收到请求后要确认联机信息,向a发送ack number=(主机a的seq+1),SYN=1,ACK=1,随机产生seq=7654321的包
  3. 主机a收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ACK是否为1,若正确,主机a会再发送ack number=(主机b的seq+1),ACK=1,主机b收到后确认seq值与ACK=1则连接建立成功

四次挥手

tcp建立连接要进行三次握手,而断开连接要进行四次。这是由于tcp的半关闭造成的。因为tcp连接是全双工的(即数据可再两个方向上同时传递)所以进行关闭时每个方向上都要单独进行关闭。这个单方向的关闭就叫半关闭。当一方完成它的数据发送任务,就发送一个fin来性另一方通告将要终止这个方向的连接

  1. 关闭客户端到服务器的连接:首先客户端a发送一个Fin,用来关闭客户端到服务器的数据传送,然后等待服务器的确认。其中终止标志位FIN=1,序列号seq=u
  2. 服务器收到这个FIN,它返回一个ACK=1,以及确认号ack为收到的序号加1
  3. 关闭服务器到客户端的连接:也是发送一个FIN给客户端
  4. 客户端收到FIN后,返回一个ACK报文确认,并将seq设置为收到的确认号,ack设置为收到的顺序号序号加1

HTTP原理

http是一个无状态的协议。无状态是指客户机(web浏览器)和服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器发出请求,然后服务器返回响应(response),连接就被关闭了,再服务器端不保留连接的有关信息。http遵循请求(request)/应答(response)模型。客户机(浏览器)向服务器发送请求,服务器处理请求并返回适当的应答。所有http连接都被构造成一套请求和应答

传输流程

  1. 地址解析:如果客户端浏览器请求这个页面:http://localhost.com:8080/index.html 从中分解出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析得到的结果如下:
    • 协议名:http
    • 主机名:localhost.com
    • 端口:8080
    • 对象路径:/index.html

在这一步,需要域名系统dns解析域名 localhost.com获得主机的ip地址

  1. 封装http请求数据包:把以上部分结合本机自己的信息,封装成一个http请求数据包
  2. 封装成tcp包并建立连接:tcp的三次握手
  3. 客户机发送请求命令:建立连接后客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(url)、协议版本号、后边是mime信息包括请求修饰符、客户机信息和可能内容
  4. 服务器响应:服务器接到请求后,给予相应的相应信息,其格式为一个状态行,包含信息的协议版本号、一个成功或错误的代码,后边是mime信息包括服务器信息、实体信息和可能的内容
  5. 服务器关闭tcp连接:一般情况下,一旦web服务器性浏览器发送了请求数据,它就要关闭tcp连接,然后如果浏览器或者服务器在其头信息加入这行代码Conection:keep-alive,tcp连接在发送后仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持邻居节省了为每个请求建立新连接所需的时间,还节约了网络带宽

HTTPS

https(全称:hypertext transfer protocol over secure socket layer 超文本传输协议在安全套接字层),是以安全为目标的http通道,简单讲是http的安全版。即http下加入ssl层,https的安全基础是ssl。其所用的端口号是443

  1. 建立连接获取证书:ssl客户端通过tcp和服务器建立连接后(443端口),并且在一般的tcp连接协商(握手)过程中请求证书。即客户端发出一个消息给服务器,这个消息里包含了自己可实现的算法列表和其它的一些需要的消息,ssl的服务器端会回应一个数据包,这里确定了这次通信所需要的算法,然后服务器向客户端返回证书。(证书里面包含了服务器信息:域名。申请整数的公司,公共密钥)
  2. 证书验证:客户端在收到服务器返回的证书后,判断签发这个证书的公共签发机构,并使用这个机构的公共密钥确认签名是否有效,客户端还会确保证书中列出的域名就是它正在连接的域名
  3. 数据加密和传输:如果确认证书有效,那么生成对称密钥并使用服务器的公共密钥进行加密。然后发送给服务器,服务器使用它的私钥对它进行解密,这样两台计算机可以开始进行对称加密进行通信