计算机网络笔记
面试
什么是字节多路通道、数组选择通道和数组多路通道?
各类通道的定义如下:(1)字节多路通道含有多个子通道。每个子通道连接一台低速设备,以轮流方式共享主通道。一子通道交换完一个字节后就将主通道让给下一个子通道。(2)数组选择通道可连接多台告诉外设,具有较高的传输速度,它有一个分配型子通道,一段时间内只能执行一道通道程序,使一台设备独占通道以进行数据交换,直到交换完后才可让给其他的设备。(3)数组多路通道含有多个非分配型子通道。每个子通道连接一台高速外设,以轮流方式共享主通道。一子通道交换完若干字节后就将主通道让给下一个子通道。
dns
- 传输小于512字节时,查询使用udp
- 大于512字节时,使用tcp
http的keep-alive和tcp的keep-alive的区别
- http keep-alive是为了重用连接,以防每次请求都要三次握手
- tcp的keepalive是一种检查双方是否存活的机制
tcp如何保证可靠传输
- checksum机制,校验不通过,丢弃
- 用滑动窗口实现流量控制,双方都有一个固定的窗口大小
- 慢启动
- 超时重传
- 停止等待,发完一个分组,就等待确认,再发
Https
以前,直接是明文传输 第一个方案,采用对称加密,服务端告诉客户端密钥,通过这个密钥对消息加密,发送给客户端,客户端用同一个密钥解密。 第二个方案,为了防止服务端告诉客户端密钥的消息被黑客截取,先采用非对称加密对密钥传输过程进行处理,流程如下:
服务端将公钥key1发给客户端
客户端收到key1后,生成一个用于对称加密的密钥key2,并用key1对key2加密
服务端收到密文后,用自己的私钥解密,得到key2,然后后续的通信用key2进行加解密 第三个方案,为了防止第二个方案中的第一步,黑客替换了key1,采用第三方权威机构CA来做数字证书。
服务端把公钥key1发给CA,CA用自己的私钥对key1加密,并把服务端网址等信息生成一个签字,签字也用CA的私钥加密,2个加密的内容放进证书里面,发送回给服务端
服务端把证书发给客户端,由于主流浏览器和操作系统都维护了权威CA和他们的公钥,所以可以解密出来证书签名,根据同样的规则,客户可以生成服务端的签名,对比两个,就能验证真伪。
客户端再解密出来公钥key1,生成一个用于对称加密的密钥key2,并用key1加密,再将它发给服务端
服务端收到后,用自己的私钥解密,就得到了key2了,后面就用key2加解密通信
TCP/IP基础
首先,我们需要知道TCP在网络OSI的七层模型中的第四层——Transport层,IP在第三层——Network层,ARP在第二层——Data Link层,在第二层上的数据,我们叫Frame,在第三层上的数据叫Packet,第四层的数据叫Segment。
三次握手,四次挥手
- SYN,全称Synchronize Sequence Numbers
- 四次挥手时,客户端保持time-wait状态,因为,如果最后一个ack丢失了,服务端会再发一次fin,这样客户端才能重发ack,不然会让服务端一直认为未关闭,导致连接一直存在
IPV4的几类地址:
A类的范围:
0000 0000.0000 0000.0000 0000.0000 0000 0111 1111.1111 1111.1111 1111.1111 1111
=0.0.0.0127.255.255.255;
B类的范围:10000000.000000000.00000000.0000000010111111.11111111.11111111.11111111
=128.0.0.0191.255.255.255
C类的范围:11000000.000000000.00000000.0000000011011111.11111111.11111111.11111111
=192.0.0.0223.255.255.255
D类的范围:11100000.000000000.00000000.0000000011101111.11111111.11111111.11111111
=224.0.0.0239.255.255.255
E类的范围:11110000.000000000.00000000.0000000011111111.11111111.11111111.11111111
=240.0.0.0255.255.255.255
底层
FDMA是采用调频的多址技术。业务信道在不同的频段分配给不同的用户。如TACS系统、AMPS系统等。 TDMA是采用时分的多址技术。业务信道在不同的时间分配给不同的用户。如GSM、DAMPS等。 CDMA(码分多址)是采用扩频的码分多址技术。所有用户在同一时间、同一频段上,根据不同的编码获得业务信道。 基本的拓扑结构有:网状网、星形网、环形网、总线型网、复合型网等。
http基础
- URL
Uniform Resource Locator, 统一资源定位符
- URI
Uniform Resource Identifier, 统一资源标识符,例如
mailto:abc@abc.com
- HTML
HyperText Markup Language
发送端将http报文发给接收端,发送端应用层传输给传输层,加上Tcp首部,发给网络层,加上Ip首部,发给链路层,加上以太网首部。接收端,链路层发给网络层,删除以太网首部,网络层发给传输层,删除Ip首部,传输层发给应用层,删除Tcp首部。
- RFC
Request for comment, 互联网征求意见稿
HTTP
方法
- PUT
用于传输资源
- HEAD
只返回响应报文的头部,一般用于检查URL是否有效
- DELETE
用于删除资源
- OPTIONS
查询服务器支持哪些方法
- TRACE
可以查询客户端到服务端经过的路由,在头部加上Max-Forwards,最大多少跳,不过很多服务不支持,很少用
- CONNECT
实现用隧道协议通信
Keep-alive
在http/1.1中,一般所有的连接都是keep-alive的,一般为15s,可以重用连接,不用每个请求都建立连接
Cookie
登陆之后,服务器返回给客户端的http header中,会有一个Set-Cookie的字段,表示客户端要保存Cookie,并且在后续的请求中要自动在请求的header中加上Cookie字段,这样服务器就能检测出来是哪个客户端了。
状态码
1XX
信息性,正在处理
2XX
成功
- 204
No Content, 成功,但是没有主体
- 206
Partial Content, 成功,返回Content-Range指定的部分结果,经常用于文件部分上传
3XX
重定向
- 301
Moved Permanently, 永久性重定向了,响应报文里面的Location是新的地址
- 302
Found, 临时性重定向
- 303
See Other, 当使用POST请求一个url,如果返回303,说明资源存在着另外一个URI,应使用GET请求另一个URI
- 304
Not Modified, 找到资源,但是没有符合条件的。GET方法可以带一些条件: If-Match, If-Modified-Since等,比如浏览器一般有缓存功能,同时访问同一个资源会带上If-Modified-Since字段,如果返回304就不用传输body了。
- 307
Temporary Redirect, 跟302一样的意思,307不会把POST变成GET
4XX
客户端报错,服务器无法处理
- 400
Bad Request, 报文存在语法错误
- 401
Unauthorized, 认证失败, 当浏览器首次接收到401状态时,会弹出一个认证的对话框
- 403
Forbidden, 请求的资源被服务器拒绝
5XX
服务器错误
- 500
Internal Server Error, 服务器出现bug或临时故障
- 503
Service Unvaliable, 服务临时不可用
网关
- 网关
将http通信转化为非http通信的一个服务
header
header中如果字段重复,如何处理要看浏览器,有的浏览器以第一个为准,有的以最后一个为准
通用header
- Cache-Control 控制缓存的行为
指定一些指令:
Cache-Control: private, max-age=0, no-cache
服务端返回的http header中,如果Cache-Control中指定private,则这份缓存只能给这个客户端使用,其他客户端不能使用,如果是public就可以
no-cache:
如果客户端发过去的报文中有这个指令,表示它不会接受缓存信息, 缓存服务器必须要去源服务器获取
如果服务端发过去的报文中有这个指令,表示它告诉缓存服务器,不允许对这个报文进行缓存
no-store: 不缓存请求或响应的任何一部分
max-age: 缓存时间,单位秒,
- Connection 逐跳首部、连接的管理
- 控制不再转发的字段,比如
GET / HTTP/1.1
Upgrade: HTTP/1.1
Connection: Upgrade
这条报文发到代理服务器之后,代理服务器会把它变成:
GET / HTTP/1.1
- 管理持久连接
Http/1.1默认所有连接是keep-alive的,如果想断开,就传Connection: close
Date 创建报文的日期时间
Pragma 报文指令
兼容1.0版本的
Trailer 报文末端的首部一览
Transfer-Encoding 指定报文主体的传输编码方式
Upgrade 升级为其他协议
可升级为TLS
Via 代理服务器的相关信息
Warning 错误通知
[警告码][警告的主机:端口号][警告内容][日期时间]
请求header
- Accept
表示客户端接受的返回媒体类型
- Accept-Charset
字符集
- Accept-Encoding
内容编码: gzip, compress, deflate, identity
- Accept-Language
接受的自然语言集
- Authorization
认证信息
- Referer
填写发起请求的地址
响应header
- ETag
实体标识,
- Server
服务器上http服务的信息
实体header
- Allow
允许的方法
- Content-Encoding
gzip
- Content-Language
zh-CN
- Content-Length
长度
- Content-Location
资源的URI
- Content-MD5
报文主体的md5
- Content-Type
媒体类型
其他header
- X-XSS-Protection
防止XSS攻击,传1就是防止
- DNT
do not track, 传1,拒绝个人信息被收集
HTTPS
http的缺点
- 使用明文传输
所以https引入SSL层,以保证在这个通道上传输是安全的
- 不验证通信方的身份
所以https引入CA颁发证书,以确认通信方身份是可靠的
- 无法证明报文是完整的
加解密问题
- SSL
Secure Socket Layer
- TLS
Transport Layer Security
- 对称加密
加密算法公开,只有一把密钥,加密和解密都用同一把密钥,但是怎么把密钥传给对方用来解密呢?
- 非对称加密
加密算法公开,有两把密钥,一把公钥一把私钥,公钥是公开的。加密时使用公钥,解密时使用私钥
https两种加密方法都使用,在交换公开密钥的阶段,使用非对称加密,让两边都知道公开密钥的情况下,传输报文时,使用对称加密,即共享密钥的形式。为了证明两边传输过程中使用的密钥是之前服务器发出来的密钥,就要用到CA来颁发了。威瑞信(VeriSign)是著名的数字证书认证机构。
数字证书认证的流程
服务器把公钥发给CA
CA用私钥向服务器的公钥做数字签名,颁发公钥证书
主流浏览器已经加入了知名CA的公钥了
客户端(浏览器)拿到服务端的公钥证书之后,验证签名,看是否正确,这样客户端就拿到服务端的公钥了
客户端把共享密钥通过服务端的公钥加密,发给服务端,服务端用私钥解密,得到客户端发过来的共享密钥
现在两边都能用共享密钥对报文加密并传输,而黑客也不会知道共享的密钥
WebDAV
在HTTP协议基础上增加一些内容,比如方法名,状态码等,实现文件的同步,增删查改等,可以用这种协议实现云盘的功能。
Web攻击
CSRF
跨站请求伪造,Cross Site Request Forgeries
XSS
跨站脚本攻击,Cross Site Scripting