背景
计算机模式的变化
起初计算机主要以单机的形式存在,计算机之间没有通信,而网络的出现才让计算机有了生命,信息的共享和交流让计算机成为了划时代的产物。大致可分为:
- 局域网(LAN)
某一区域内由多台计算机互连成的计算机组,一般在几公里范围之内。
- 广域网(WAN)
范围较大的区域,可以是一个单一个区域也可以是整个国家的计算机。
- 无线局域网(WLAN)
LAN的一种
协议分类
协议的重要性
不同的计算机之间通信需要协议的支持。
常用的协议
| 网络体系结构 | 协议 | 主要用途 |
|---|---|---|
| TCP/IP | IP,ICMP,TCP,UDP,HTTP,SNMP,SMTP,TELNET | 互联网,局域网 |
| IPX/SPX | IPX,SPX,NPC... | 个人电脑局域网 |
| AppleTalk | DDP,RTMP,AEP,ATP,ZIP | 苹果公司 |
| DECnet | DRP,NSP,SCP | 前DEC小型机 |
| XNS | IDP,SPP,PEP | 施乐公司网络 |
| OSI | FTAM,MOTIS,VT,CMIS/CMIP,CLNP,CONP |
协议的标准
ISO制定的OSI,该标准对协议进行分层,每个分层可以独立使用,通过分层可以细分通信功能,更易于单独实现每个分层的协议,界定每个分层的责任和义务。
注:Tcp/Ip 由IETF制定
OSI模型
| 顺序 | 分层名称 | 大概功能 |
|---|---|---|
| 7 | 应用层 | 针对特定应用的协议 |
| 6 | 表示层 | 设备固有数据格式和网络标准数据格式的转换 |
| 5 | 会话层 | 通信管理,负责建立和新开通信连接 |
| 4 | 传输层 | 管理两个节点之间的数据传输(确保数据被可靠地传输到目的地) |
| 3 | 网络层 | 地址管理与路由选择 |
| 2 | 数据链路层 | 互联设备之间传送和识别数据帧 |
| 1 | 物理层 | 以 0 1 代表电压的高低、灯光闪灭。界定连接器和网线的规格。 |
TCP/IP
| 顺序 | 分层名称 | 大概功能 | 例子 |
|---|---|---|---|
| 5 | 应用层 | 网络应用程序以及应用曾协议存留的地方,应用层的信息分组称为报文 | HTTP,DNS,SMTP,FTP |
| 4. | 传输层 | 在应用层程序端点间传送应用层报文 | TCP,UDP |
| 3. | 网络层 | 负责将称为数据包的网络层分组从一台主机移动到另一台主机(包括IP协议) | IP |
| 2. | 数据链路层 | 网络层通过源和目的之间的一些列路由器和路由数据包,为了将分组从一个结点移动到路径的下一个结点,网络层依靠数据链路层。链路层分组称为帧。 | |
| 1. | 物理层 | 该层的任务是将帧中的一个一个比特从一个结点移动到下一个结点 | 双胶铜线,铜轴电缆,光纤(传输媒体) |
网络层协议 IP
作用模块:IP寻址、路由以及IP分包与组包。
| IP | 概述 | |
|---|---|---|
| IP地址 | 在计算机通信中为了识别通信对端,必须要有一个类似于地址的识别码进行标识;网络层的IP,一般称为IP地址;IPv4由32位正整数表示 | |
| IP地址组成 | 网络和主机两部分标识组成 | |
| IP地址分类 | ABCD类,分别对应的是以0,10,110,1110开头 | |
| 广播地址 | ||
| IP多播 | ||
| 子网掩码 |
| 路由 | 概述 |
|---|---|
| IP地址与路由控制 | |
| IP分包与组包 | |
| IPv6 | |
| DNS | |
| ARP | |
| ICMP | |
| DHCP | |
| NAT |
传输层中的协议TCP UDP
tcp与udp主要差异
| 协议 | 区别 | 使用场景 |
|---|---|---|
| TCP | 面向链接、可靠的流协议。具备:顺序控制、重发控制、流控制、拥塞控制、提高网络利用率等众多功能。 | 传输层有必要实现可靠传输的情况。 |
| UDP | 不具有可靠性的数据包协议,可以控制信息发送的大小,但不一定能保证信息一定会到达。 | 高速传输和实时性场景。 |
tcp三次握手
- 第一次握手:客户端发起,客户端将标志位SYN置为1,随机生成一个seq=J,并将该数据包发送给服务端,客户端进入SYN_SENT状态等待服务端确认。
- 第二次握手:服务端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器将SYN和ACK都设置为1,ack=J+1,随机产生一个值seq=K,将该数据包发送给客户端以确认连接请求,服务器进入SYN_RCVD状态。
- 第三次握手:客户端收到确认后,检查ack是否等于J+1,ACK是否为1,如果正确,将标志位ACk设置为1,ack=K+1,将数据包发送到服务端,服务端检查ack是否为K+1,ACK是否为1,正确则建立连接成功,客户端和服务端进入ESTABLISHED状态,开始传输数据。
tcp四次挥手
- 双方都可以发起关闭
- 第一次挥手:客户端发送FIN=M,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1的状态。
- 第二次挥手:服务端收到FIN后,先发送ack=M+1,客户端进入FIN_WAIT_2状态,继续等待服务端FIN报文。
- 第三次挥手:服务端数据已发送完成,向客户端发送FIN=N报文,通知客户端数据传输完成,准备关闭。服务端进入LAST_ACK状态。
- 第四次挥手:客户端收到FIN=N报文后,怕服务端不知道要关闭,发送ack=N+1后进入TIME_WAIT状态,若服务端没有收到ACK则重传,服务端收到ACK后断开连接。客户端等待2MSL后依然无回复,则证明服务器正常关闭,客户端也可以关闭连接。四挥完成。
应用层中的协议 HTTP
工作原理
HTTP协议采用了请求/相应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头和请求数据。服务器用状态行为作为相应,其内容包括协议的版本、成功或者错误代码、服务器信息、相应头部和相应数据。
步骤
- 客户端连接到Web服务器
- 发送HTTP请求
- 服务器接受请求并返回HTTP响应
- 释放TCP连接
- 客户端浏览器解析HTML内容
请求方法
按照HTTP版本以及方法不同划分
| HTTP版本 | 方法 | 具体 |
|---|---|---|
| HTTP0.9 | GET | 1.拼接在URL后,不安全;2.数据较少1024B;3.只能进行URL编码;4.get有缓存;5.get产生一个数据包post产生两个 |
| HTTP1.0 | POST | 向指定资源提交数据进行处理请求。数据被包含在请求体中。POST请求kennel会导致新的资源的建立和已有资源的修改。 |
| HTTP1.0 | HEAD | 获取报头。 |
| HTTP1.1 | OPPTIONS | 请求web服务器告知其支持的各种功能。询问服务器通常支持那些方法,或者对某些特殊资源支撑哪些方法。 |
| HTTP1.1 | PUT | 从客户端向服务器传送的数据取代制定的文档内容。 |
| HTTP1.1 | DELETE | 请服务器删除请求URL所指定的资源。客户端应用程序无法保证删除操作一定会被执行。 |
| HTTP1.1 | TRACE | 诊断、验证请求是否穿过了请求/相应链。查看代理和其他应用程序对用户请求所产生的效果。 |
| HTTP1.1 | CONNECT | HTTP/1.1协议中预留给能够将连续改为管道方式的代理服务器。 |
HTTP协议版本变更
| HTTP版本 | 主要变更 |
|---|---|
| 0.9 | 1.只支持GET; |
| 2.仅能请求访问HTML格式的资源; | |
| 1.0 | 1.增加了POST和GET; |
| 2.增加text/html、image/jpeg等; | |
| 3.请求和回应格式改变不支持keep-alive; | |
| 1.1 | 1.增加了持久连接; |
| 2.增加管道机制-在同一个TCP里,允许多个请求同时发送,增加了并发行,改善了HTTP的效率(请求较多时对头阻塞); | |
| 3.分块传输编码-请求回应的头信息有Transfer-Encoding字段,由数量未定的数据块组成; | |
| 4.增加了PUT、PATCH、OPTIONS、DELETE | |
| 5.支持文件端点续传、新增24哥错误状态码 | |
| HTTP/2.0 | 1.增加双工模式-解决队头阻塞,增加服务器推送 |
| 2.二进制协议-头信息和数据体都是二进制,且称为帧:头信息帧和数据帧 | |
| 3.数据流-HTTP/2的数据包不是按顺序发的,用流ID来标识 | |
| 4.头信息压缩-使用gzip/copress压缩后再发送;客户端和服务端共同维护一张头信息表,所有字段存入此表,生成索引号,发送索引号而非字段 | |
| 5.服务器推送 |
特点
- 简单快速:客户端向服务器请求时只需传递请求方法和路径。
- 灵活:允许传输人意类型的数据对象。
- 无状态:该协议是无状态的,对于事务处理能力是没有记忆能力的。
WebSocket
特点
- 双向通信协议,基于TCP来传输数据。
- 握手后才能通讯,协议头部不是很大,数据格式比较轻量,性能开销小,通信高效。
- 可以发送文本,也可以发送二进制数据。
- 没有同源限制,客户端可以与任意服务器通信。
事件
- open
- message
- error
- close
方法
- send
- close
小结
网络协议最基本的还是基于OSI/TCP/IP模型,日常用的到的大概就是这些,了解清楚更助于工作效率,学到老活到老。