这篇文章是我自己对计算机网络一些题目的小结和重点的记录
1.OSI模型
开放式互联参考模型 逻辑上的定义
分为7层,每一层都有相关的物理设备,如路由器->网络层
交换机->数据链路层
解决异种网络互连时所遇到的兼容性问题、帮助不同类型的主机实现数据传输
将服务、接口、协议三个概念分开
服务:说明为上一层提供一些什么功能
接口:上一层怎么利用下一层的服务
协议:如何实现本层的功能
osi 包含 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层 七层
2.tcp/ip协议层次
tcp/ip 网络接口、网际层、运输、应用 四层
1.网络接口层又被称为主机到网络层,没有真正描述这一层的实现
2.网络互连层 tcp/ip 是tcp/ip 的核心,把分组发往目标网络或主机
实现分组格式和协议 -> ip协议
实现功能有路由选择、连接异构网络以及拥塞控制
3.传输层 该层主要实现源端主机和目标主机 === 对等=== 实体可以进行对话
4、应用层
3.TCP报文头部
l 序列号(Sequence Number,seq):该字段用来标识TCP源端设备向目的端设备发送的字节流,它表示在这个报文段中的第几个数据字节。序列号是一个32位的数。
l 确认号(Acknowledge Number,ack):TCP使用32位的确认号字段标识期望收到的下一个段的第一个字节,并声明此前的所有数据已经正确无误地收到,因此,确认号应该是上次已成功收到的数据字节序列号加1!!!!。
SYN(Synchronize sequence numbers,同步序列号):表示同步序号,用来建立连接。
FIN(No more data from sender):表示发送端已经发送到数据末尾,数据传送完成,发送FIN标志位的TCP段,连接将被断开。
4.TCP与UDP 的区别
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等),并且UDP速度更快
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
拥塞避免
进入拥塞避免说明cwnd值大约是上一次遇到拥塞是的一半,这时候不能翻倍,而是将cwnd的值每次增加一个MSS。结束的过程有两种可能:1、当出现超时时,将cwnd值设为1个MSS,并且将ssthresh阈值设为当前cwnd值的一半。2、当收到三个冗余ACK时,将ssthresh阈值设为当前cwnd值的一半,并且将cwnd值设为当前cwnd值的一半加3,即ssthresh阈值加3,并且进入快速恢复状态。
6. TCP滑动窗口与回退N针协议。
针对TCP流量控制:
第一种:比特滑动窗口协议(停等协议) 就是一个一个帧发送
第二种:回退n帧协议 就是不一定要等确认报文回来,延迟n帧再进行判断
第三种:选择重传协议
在后退n协议中,接收方若发现错误帧就不再接收后续的帧,即使是正确到达的帧,这显然是一种浪费。另一种效率更高的策略是当接收方发现某帧出错后,其后继续送来的正确的帧虽然不能立即递交给接收方的高层,但接收方仍可收下来,存放在一个缓冲区中,同时要求发送方重新传送出错的那一帧。一旦收到重新传来的帧后,就可以原已存于缓冲区中的其余帧一并按正确的顺序递交高层。这种方法称为选择重发(SELECTICE REPEAT),其工作过程如图所示。显然,选择重发减少了浪费,但要求接收方有足够大的缓冲区空间。
用缓存保存出错之后传来的帧
7. Http的报文结构
(1)HTTP 请求报文
请求行:请求行由方法字段、URL 字段 和HTTP 协议版本字段 3 个部分组成,他们之间使用空格隔开。常用的 HTTP 请求方法有 GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT;
GET:当客户端要从服务器中读取某个资源时,使用GET 方法。GET 方法要求服务器将URL 定位的资源放在响应报文的数据部分,回送给客户端,即向服务器请求某个资源。使用GET 方法时,请求参数和对应的值附加在 URL 后面,利用一个问号(“?”)代表URL 的结尾与请求参数的开始,传递参数长度受限制。例如,/index.jsp?id=100&op=bind
POST:当客户端给服务器提供信息较多时可以使用POST 方法,POST 方法向服务器提交数据,比如完成表单数据的提交,将数据提交给服务器处理。GET 一般用于获取/查询资源信息,POST 会附带用户数据,一般用于更新资源信息。
(2)HTTP 响应报文
HTTP 响应报文由状态行、响应头部、空行 和 响应包体 4 个部分组成
● 状态码由三位数字组成,第一位数字表示响应的类型,常用的状态码有五大类如下所示:
1xx:表示服务器已接收了客户端请求,客户端可继续发送请求;
2xx:表示服务器已成功接收到请求并进行处理;
3xx:表示服务器要求客户端重定向;
4xx:表示客户端的请求有非法内容;
5xx:表示服务器未能正常处理客户端的请求而出现意外错误;
8. Http和Https区别。https协议仅仅是在http和tcp之间新增了一个 tls/ssl加密层(中间层)
HTTPS和HTTP的区别主要如下:
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
9. Http1.1和Http1.0的区别
(1):Http1.0中每一个请求和响应使用的都是新的TCP连接,但是Http1.1中一次TCP连接中可以传送多个Http请求和响应,多个请求和响应可以重叠,---可以同时执行----;
(2):Http1.0中是---没有Host请求字段的----,Http1.1中在请求字段中加入了该字段,浏览器可以使用主机名来访问Web服务器;
(3):Http1.1中--支持长连接--,但是需要增加新的请求头来实现,也就是我们的Connection头部字段,当该字段的值为"Keep-Alive"的时候,表示客户端通知服务端在返回本次请求结果之后要继续保持连接,当Connection头部字段的值为"close"的时候,表示客户端通知服务端在返回本次请求结果之后断开连接,可见Http1.1的长连接功能也是需要头部字段支持的,而--Http1.0是短连接--;
(4):Http1.1还提供了与Cache有关的请求头和响应头;
最后注意一点的就是Http协议是无状态协议,即Http服务器端是不维护客户端状态信息的;
10.长连接和短连接
长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。存在一个问题,存活功能的探测周期太长
Client与server之间的连接如果一直不关闭的话,会存在一个问题,随着客户端连接越来越多,server早晚有扛不住的时候
可以限制最大长连接数
短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段。但如果客户请求频繁,将在TCP的建立和关闭操作上浪费时间和带宽。
长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况
WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源
11.Cokkie和Session
Cokkie 在浏览某些 网站 时,这些网站会把 一些数据存在 客户端 , 用于使用网站等跟踪用户,实现用户自定义功能
生命周期为浏览器会话期间 存储: 一般保存在内存,不在硬盘;
存储在硬盘上的Cookie可以在不同的浏览器进程间共享,比如两个IE窗口。
Session的概念
Session 是存放在服务器端的类似于HashTable结构(每一种web开发技术的实现可能不一样,下文直接称之为HashTable)来存放用户数据;
cookie 和session 的区别:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上.
由于数据是存储在服务器 上面,所以你不能伪造,但是如果你能够获取某个登录用户的session_id,用特殊的浏览器伪造该用户的请求也是能够成功的。
session_id是服务 器和客户端链接时候随机分配的,一般来说是不会有重复,但如果有大量的并发请求,也不是没有重复的可能性,我曾经就遇到过一次。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。(Session对象没有对存储的数据量的限制,其中可以保存更为复杂的数据类型)
12. ping和icmp报文
(1)ICMP协议
它 用于TCP/IP网络中发送控制消息,提供可能发生在通信环境中的各种问题反馈,通过这些信息,令管理者可以对所发生的问题作出诊断,然后采取适当的措施解决。它与传输协议最大的不同:它一般不用于在两点间传输数据,而常常 用于返回的错误信息或是分析路由。
ICMP控制的内容包括但不仅限于:echo响应(ping)、目标网络不可达、目标端口不可达、禁止访问的网络、拥塞控制、重定向、TTL超时...
它是TCP/IP协议族的一个子协议,属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等
13. 路由器和交换机的区别
(1)交换机(Switch)---*数据链路层
(2)路由器(Router)---*网络层
什么是管线化? 将多个HTTP请求整批提交的技术,在传送过程中无语等待服务器的回应。传统的请求是这样的请求1 -> 响应1 -> 请求2 -> 响应2 -> 请求3 -> 响应3
使用管线化就变成这样了请求1 -> 请求2 -> 请求3 -> 响应1 -> 响应2 -> 响应
14. HTTP缓存机制
缓存为了解决下面的几个问题:
- 冗余的数据传输:节约网络费用
- 带宽瓶颈:降低传输延时
- 瞬间阻塞:对于一些突发的事件,降低了对服务器的要求,避免了网络崩溃
- 距离延时:降低了传播延时
缓存结构
缓存分为下面两种:
- 私有缓存:浏览器的临时文件
- 共有缓存:特殊的代理服务器
缓存控制策略
服务器通过Cache-Control
和Expires
首部来控制客户端的缓存策略
no-Store
: 不允许存储本地缓存文件,每次从服务器下载no-Cache
: 允许存储缓存,但是每次都必须与原是服务器进行再验证max-age
: 表示新鲜度维持时间,=0类似于no-CacheExpires
: 依赖于服务器时间,不推荐使用must-revalidate
: 有些缓存允许返回过期资源副本,设置该头部后,缓存只允许提供新鲜的副本,过期副本必须验证
客户端新鲜度的控制
客户端也可以通过Cache-Control
请求来强化或者放松对过期时间的限制
Cache-Control: max-stale (=<s>)
缓存可以提供过期文件,如果有参数s,最多过期s时间Cache-Control: min-fresh = <s>
缓存在未来s秒内要保持新鲜Cache-Control: max-age = <s>
缓存无法返回缓存时间大于s的资源no-Cache
orno-Store
必须再验证 or 必须尽快删除存储only-if-cached
只有缓存存在副本,才获取一份副本
网络其实大体分为两块,一个TCP协议,一个HTTP协议,只要把这两块以及相关协议搞清楚,一般问题不大。