OSI七层模型:
- 应用层:为应用程序提供服务并规定应用程序通信相关得细节。包括文件传输,电子邮件,远程登录等。
- 表示层:将应用处理的信息转换为适合网络传输的格式,或将来自下一层的数据转换为上层能够识别的数据格式。因此它主要负责数据格式的转换。具体来说,就是将数据固有的传输格式转换为标准的传输格式。不同的设备对同一比特流解释的结果可能会不同,因此,使他们保持一致这这一层的主要任务。
- 会话层:负责建立和断开通信连接,以及数据分割等数据传输相关的管理
- 运输层:起着可靠传输的作用(丢包重发),只在通信双发节点上进行处理,而无需在路由上进行处理。
- 网络层:将数据传输到目标地址,目标地址可以是多个网络由路由器连接而成的某一个地址。因此这一层主要负责寻址和路由选择
- 链路层:负责物理层面上互连的,节点之间的通信传输。例如与一个以太网相连的两个节点之间的传输。将0,1序列划分为具有意义的数据帧传送给对端(数据帧的生成与接收。
- 物理层:负责0,1比特流 与电压的高低与光的闪灭之间的转换
TCP/IP四层模型
- 应用测:负责处理特定的应用程序细节
- 运输层:主要为两台主机提供端到端的通信
- 网络层:处理分组在互联网中的活动,比如路由的选路
- 链路层:包括操作系统中的设备驱动程序,计算机中对应的网络接口卡
TCP/IP协议
TCP/IP协议是TCP, IP, HTTP等协议的集合
互联网协议就是TCP/IP协议
包,帧,数据包,消息
- 包可以说是全能术语。
- 帧表示数据链路层中包得单位。
- 数据报是IP和UDP等网络层以上的分层中包的单位。
- 段是表示TCP数据流中的消息。
- 消息是指应用协议中数据的单位。
一个数据包的发送
应用程序处理,对数据进行一些编码等操作,并建立TCP连接,TCP根据应用的指示,负责建立连接,发送数据以及断开连接,并添加TCP首部,交付给IP,IP添加对TCP处理过的数据添加首部。IP包生成后,参考路由控制表决定接受该IP包的路由或者主机,IP包将会发送给连接这些路由器或主机网络接口的驱动程序,已实现真正的数据传送,如果不知道MAC地址,利用ARP查找。
应用层
- 在操作系统中进行通信的是:进程
- 进程通过套接字(socket)进行通信
- socket是应用程序和网络之间的API
- 进程寻址方式:主机地址+端口号
- 可供应用程序使用的运输层服务(简单介绍)
- UDP
- 不可靠数据传送服务
- 没有拥塞控制
- TCP
- 面向连接的服务
- 可靠的数据传送服务
- 有拥塞控制
- UDP
各层对应的网络设备
原文内容:https://blog.csdn.net/qq_25606103/article/details/51288459
应用层:
运输层:
网络层:
- 路由器:
路由器(Router)工作在第三层(即网络层),它比交换机还要“聪明”一些,它能理解数据中的IP地址,如果它接收到一个数据包,就检查其中的IP地址,如果目标地址是本地网络的就不理会,如果是其他网络的,就将数据包转发出本地网络。
与工作在网络物理层,从物理上划分网段的交换机不同,路由器使用专门的软件协议从逻辑上对整个网络进行划分。
例如,一台支持IP协议的路由器可以把网络划分成多个子网段,只有指向特殊IP地址的网络流量才可以通过路由器。当IP子网中的一台主机发送IP分组给同一IP子网的另一台主机时,它将直接把IP分组送到网络上,对方就能收到。
而要送给不同IP于网上的主机时,它要选择一个能到达目的子网上的路由器,把IP分组送给该路由器,由路由器负责把IP分组送到目的地。
如果没有找到这样的路由器,主机就把IP分组送给一个称为“缺省网关(default gateway)”的路由器上。对于每一个接收到的数据包,路由器都会重新计算其校验值,并写入新的物理地址。
网络中的设备用它们的网络地址(TCP/IP网络中为IP地址)互相通信。
IP地址是与硬件地址无关的“逻辑”地址。目前TCP/IP网络,全部是通过路由器互连起来的,Internet就是成千上万个IP子网通过路由器互连起来的国际性网络。
路由器用于连接多个逻辑上分开的网络,几个使用不同协议和体系结构的网络。
路由器利用网络层定义的“逻辑”上的网络地址(即IP地址)来区别不同的网络,实现网络的互连和隔离,保持各个网络的独立性。
当一个子网传输到另外一个子网时,可以用路由器完成。它具有判断网络地址和选择路径的功能,过滤和分隔网络信息流。
一方面能够跨越不同的物理网络类型(DDN、FDDI、以太网等等),另一方面在逻辑上将整个互连网络分割成逻辑上独立的网络单位,使网络具有一定的逻辑结构。
总结:路由器的主要工作就是为经过路由器的每个IP数据包寻找一条最佳传输路径,并将该数据有效地传送到目的站点。 路由器的基本功能是,把数据(IP报文)传送到正确的网络。
- 网关:
网关(Gateway)又称网间连接器、协议转换器。
网关在**网络层以上**实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。
网关是一种充当转换重任的计算机系统或设备。
使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。
与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。
总结:网关,在网络层以上实现网络互连通,字面意思解释就是网络的关口。从技术角度来解释,就是连接两个不同网络的接口,比如局域网的共享上网服务器就是局域网和广域网的接口。
链路层:
- 中继器:
中继器(Repeater)是连接网络线路的一种装置,常用于两个网络节点之间物理信号的双向转发工作。
中继器是最简单的网络互联设备,主要完成物理层的功能,负责在两个节点的物理层上按位传递信息,完成信号的复制、调整和放大功能,以此来延长网络的长度。
它在OSI参考模型中的位置物理层。
由于存在损耗, 在线路上传输的信号功率会逐渐衰减,衰减到一定程度时将造成信号失真,因此会导致接收错误。
中继器就是为解决这一问题而设计的。它完成物理线路的连接,对衰减的信号进行放大,保持与原数据相同。
中继器是模拟设备,用于连接两根电缆段。中继器不理解帧、分组和头的概念,他们只理解电压值。
总结:位于OSI的物理层,一种信号放大器,与具体信息无关,由于信号在传输过程中有衰减,为了使其传递的更远,需要利用中继器等设备进行放大。
- 集线器:
集线器(Hub)是中继器的一种形式,区别在于集线器能够提供多端口服务,也称为多口中继器。
集线器在OSI/RM中的物理层。
总结:差不多就是个多端口的中继器,把每个输入端口的信号放大再发到别的端口去,集线器可以实现多台计算机之间的互联,因为它有很多的端口,每个口都能连计算机。
- 网桥:
网桥(Bridge)是一个局域网与另一个局域网之间建立连接的桥梁。
网桥是属于数据链路层的一种设备,它的作用是扩展网络和通信手段,在各种传输介质中转发数据信号,扩展网络的距离,同时又有选择地将现有地址的信号从一个传输介质发送到另一个传输介质,并能有效地限制两个介质系统中无关紧要的通信。
总结:网桥工作在数据链路层,将两个LAN(局域网)连起来,根据MAC地址来转发帧,可以看作一个“低层的路由器”。
- 交换机:
交换机(Swich)工作在第二层(即数据链路层),它要比集线器智能一些,它能分辨出帧中的源MAC地址和目的MAC地址,因此可以在任意两个端口间建立联系,
在数据帧的始发者和目标接收者之间建立临时的交换路径,使数据帧直接由源地址到达目的地址。
交换机通过对信息进行重新生成,并经过内部处理后转发至指定端口,具备自动寻址能力和交换作用。但是 交换机并不懂得IP地址,它只知道MAC地址。
交换机是使用硬件来完成以往网桥使用软件来完成过滤、学习和转发过程的任务。
交换机速度比HUB(集线器)快,这是由于HUB不知道目标地址在何处,发送数据到所有的端口。
而交换机中有一张MAC地址表,如果知道目标地址在何处,就把数据发送到指定地点,如果它不知道就发送到所有的端口。
这样过滤可以帮助降低整个网络的数据传输量,提高效率。但是交换机的功能还不止如此,它可以把网络拆解成网络分支、分割网络数据流,隔离分支中发生的故障,这样就可以减少每个网络分支的数据信息流量而使每个网络更有效,提高整个网络效率。
现代交换机是这样处理数据帧的:一旦目标头域(目标地址)已经进来了,尽管帧的其他部分还没有到达,则只要输出线路可以使用,交换机就开始转发该帧,而不需理会帧后面的内容,也即是说交换机并没有使用“存储—转发”交换方式。
总结: 交换机,可以理解为高级的网桥,他有网桥的功能,但性能比网桥强。交换机和网桥的细微差别就在于:交换机常常用来连接独立的计算机,而网桥连接的目标是LAN,所以交换机的端口较网桥多。
各层的协议
- 应用层:
- HTTP:超文本传送协议。是面向事务的应用层协议,它是万维网上能够可靠地交换文件的重要基础。http使用面向连接的TCP作为运输层协议,保证了数据的可靠传输。
- FTP:文件传输协议。基于TCP
- POP3:POP3(Post Office Protocol 3)协议通常被用来接收电子邮件。基于TCP
- STMP:电子邮件协议。即简单邮件传送协议。SMTP规定了在两个相互通信的SMTP进程之间应如何交换信息。SMTP通信的三个阶段:建立连接、邮件传送、连接释放。基于TCP
- Telnet:程终端协议。telnet是一个简单的远程终端协议,它也是因特网的正式标准。又称为终端仿真协议。基于TCP
- DNS:域名系统。DNS是因特网使用的命名系统,用来把便于人们使用的机器名字转换为IP地址。基于TCP+UDP
- DNS可以使用UDP或者TCP进行连接,使用的端口号都是53,大多数情况下使用UDP进行传输,可靠性靠域名解析器和域名服务器来保证。以下情况会选用TCP进行传输:
- UDP最大只支持512字节的数据,如果返回的响应超过512字节就改用TCP进行传输
- 区域传送是主域名服务器向辅助域名服务器传送变化的那部分数据,区域传送需要使用TCP进行传输
- DNS可以使用UDP或者TCP进行连接,使用的端口号都是53,大多数情况下使用UDP进行传输,可靠性靠域名解析器和域名服务器来保证。以下情况会选用TCP进行传输:
- SNMP:简单网络管理协议。由三部分组成:SNMP本身、管理信息结构SMI和管理信息MIB。SNMP定义了管理站和代理之间所交换的分组格式。SMI定义了命名对象类型的通用规则,以及把对象和对象的值进行编码。MIB在被管理的实体中创建了命名对象,并规定类型。基于UDP
- 运输层:
- TCP
- UDP
- 网络层:
- RIP:路由信息协议,是基于距离矢量算法的路由协议,利用跳数来作为计量标准。
- IP:Internet协议,负责在主机和网络之间寻址和路由数据包。
- ICMP:Internet控制报文协议,发送消息,并报告有关数据包的传送错误。
- OSPF:开放式最短路径优先,用于在单一自治系统(autonomous system,AS)内决策路由
- BGP:边界网关协议,是自治系统间的路由协议
- IGMP:Internet 组管理协议,是因特网协议家族中的一个组播协议。该协议运行在主机和组播路由器之间。
- 链路层:
- ARP:地址解析协议,获得同一物理网络中的硬件主机地址。 通过ip解析mac
- RARP:反向地址解析协议,ARP的逆向协议,通过mac解析ip
- PPP:点对点协议,为在点对点连接上传输多协议数据包提供了一个标准方法。PPP 最初设计是为两个对等节点之间的 IP 流量传输提供一种封装协议
- CSMA/CD:载波监听多点接入/碰撞检测
IP地址分类,子网划分
IP地址分类:
- A: 0.0.0.0-127.255.255,其中段0和127不可用
- 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-255.255.255.255,其中段255不可用
其中127.0.0.0~127.255.255.255为环回地址,用于本地环回测试等用途
局域网地址:
10.0.0.0~10.255.255.255;10.0.0.0/8
172.16.0.0~172.31.0.0;172.16.0.0/12
192.168.0.0~192.168.255.255;192.168.0.0/16
子网划分:
主机数 = 2^子网号位数 - 2
UDP和TCP的区别
- TCP的优点:
可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。 - TCP的缺点:
慢,效率低,占用系统资源高,易被攻击 TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的CPU、内存等硬件资源。 而且,因为TCP有确认机制、三次握手机制,这些也导致TCP容易被人利用,实现DOS、DDOS、CC等攻击。 - UDP的优点:
快,比TCP稍安全 UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,UDP是一个无状态的传输协议,所以它在传递数据时非常快。没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一些。但UDP也是无法避免攻击的,比如:UDP Flood攻击…… - UDP的缺点:
不可靠,不稳定 因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。
基于上面的优缺点,那么:
- 什么时候应该使用TCP: 当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。 在日常生活中,常见使用TCP协议的应用如下: 浏览器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件传输 …………
- 什么时候应该使用UDP: 当对网络通讯质量要求不高的时候,并且需要实时性,要求网络通讯速度能尽量的快,这时就可以使用UDP。 比如,日常生活中,常见使用UDP协议的应用如下: QQ语音 QQ视频 TFTP ……
TCP与UDP区别总结:
- TCP面向连接(如打电话要先拨号建立连接);
UDP是无连接的,即发送数据之前不需要建立连接 - TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;
UDP尽最大努力交付,即不保 证可靠交付 - TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;
UDP是面向报文的.
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等) - 每一条TCP连接只能是点到点的;
UDP支持一对一,一对多,多对一和多对多的交互通信 - TCP首部开销20字节;
UDP的首部开销小,只有8个字节 - TCP的逻辑通信信道是全双工的可靠信道,
UDP则是不可靠信道
TCP的连接与断开
三次握手
三次握手的原因:
- 第一次握手:发送请求(normal)
- 第二次握手:响应请求(normal)
- 第三次握手:为了防止失效的请求到达服务器,让服务器错误的打开连接。
客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务端发回的连接确认。客户端在等待一个超时重传时间之后,就会重新请求连接,但是这个滞留的连接请求还是会到达服务器,如果不进行三次握手,那么服务端就会打开两个连接,如果有第三次握手,客户端就会忽略服务器之后发送的对滞留链接请求的连接确认,不进行第三次握手,因此就不会再打开第二个连接。
四次挥手:
四次挥手原因:客户端发送了FIN连接释放报文之后,服务器收到了这个报文,就进入了CLOSE-WAIT状态,这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送FIN连接释放报文。
进入TIME-WAIT原因:
- 客户端收到服务器端的FIN报文后进入此状态,此时并不是直接进入CLOSED状态,还需要等待一个时间计时器设置的时间2MSL。这么做有两个理由:确保最后一确认报文段能够到达。如果B没收到A发送的确认报文段,那么就会重新发送连接释放请求报文段,A等待一段时间就是为了处理这种情况发生。
- 等待一段时间是为了让本连接持续时间内所产生的所有报文段都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文段。
TCP精髓问题:
停止等待协议
停止等待协议是tcp保证传输可靠的重要途径,”停止等待”就是指发送完一个分组就停止发送,等待对方的确认,只有对方确认过,才发送下一个分组.
停止等待协议的优点是简单,但是缺点是信道的利用率太低,一次发送一条消息,使得信道的大部分时间内都是空闲的,为了提高效率,我们采用流水线传输,这就与下面两个协议有关系了.
连续ARQ(自动重传请求)协议
它是指发送方维护着一个窗口,这个窗口中不止一个分组,有好几个分组,窗口的大小是由接收方返回的win值决定的,所以窗口的大小是动态变化的,只要在窗口中的分组都可以被发送,这就使得TCP一次不是只发送一个分组了,从而大大提高了信道的利用率.并且它采用累积确认的方式,对于按序到达的最后一个分组发送确认.
滑动窗口
之所以叫滑动窗口协议,是因为窗口是不断向前走的,该协议允许发送方在停止并等待确认前发送多个数据分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输,还可以控制流量的问题。
- 发送方接收到了对方发来的报文 ack = 33, win = 10,知道对方收到了 33 号前的数据,现在期望接收 [33, 43) 号数据。发送方连续发送了 4 个报文段假设为 A, B, C, D, 分别携带 [33, 35), [35, 36), [36, 38), [38, 41) 号数据。
- 接收方接收到了报文段 A, C,但是没收到 B 和 D,也就是只收到了 [33, 35) 和 [36, 38) 号数据。接收方发送回对报文段 A 的确认:ack = 35, win = 10。
- 发送方收到了 ack = 35, win = 10,对方期望接收 [35, 45) 号数据。接着发送了一个报文段 E,它携带了 [41, 44) 号数据。
- 接收方接收到了报文段 B: [35, 36), D:[38, 41),接收方发送对 D 的确认:ack = 41, win = 10. (这是一个累积确认)
- 发送方收到了 ack = 41, win = 10,对方期望接收 [41, 51) 号数据。
……
需要注意的是,接收方接收 tcp 报文的顺序是不确定的,并非是一定先收到 35 再收到 36,也可能是先收到 36,37,再收到 35。
以上仅仅是假设网络状况理想,所有的数据都会到达接收方的情况,如果出现数据丢失:如果一个发送的报文段在超时时间内没有收到确认,那么就重传这个报文段。具体机制采用下面的拥塞控制算法。
流量控制
流量控制是为了控制发送发的发送速率,保证接受方来得及接收
接收方发送的报文中的窗口字段可以用来控制发送方窗口的大小,从而影响发送方的发送速率,将窗口字段设置为0,则发送方不能发送数据。
拥塞控制(慢开始、拥塞避免、快重传、快恢复)
如果网络出现拥塞,分组将会丢失,此时发送方会继续重传,从而导致拥塞程度更高,因此当出现拥塞时,需要控制发送方的速率。这一点和流量控制很像,但是出发点不同:
- 流量控制是为了让接收方能来得及接收。
- 拥塞控制是为了降低整个网络的拥塞程度。
TCP主要采用四种算法来进行拥塞控制:慢开始,拥塞避免,快重传,快恢复。
发送方需要维护一个叫做拥塞窗口(cwnd)的状态变量,注意拥塞窗口与发送窗口的区别:拥塞窗口只是一个状态变量,实际决定发送方能发送多少数据的还是发送窗口。
慢开始与拥塞避免:
慢开始:主机开发发送数据报时,如果立即将大量的数据注入到网络中,可能会出现网络的拥塞。慢启动算法就是在主机刚开始发送数据报的时候先探测一下网络的状况,如果网络状况良好,发送方每发送一次文段都能正确的接受确认报文段。那么就从小到大的增加拥塞窗口的大小,即增加发送窗口的大小。
拥塞避免:为了防止cwnd增加过快而导致网络拥塞,所以需要设置一个慢开始门限ssthresh状态变量,当cwnd < ssthresh时成倍增长,即1,2,4,8....,当cwnd>=ssthresh时cwn的不再成倍增长,而是每次增加一。
如果出现了超时,ssthresh = cwnd / 2;再重新执行慢开始。
快重传与快恢复
快重传:
- 在接收方,要求每次收到的报文段都应该对最后一个已收到的有序报文段进行确认,例如已经收到M1,M2,此时收到M4,此时收到M4,应当发送对M2的确认。
- 在发送方,如果收到三个重复的确认,那么可以知道下一个报文段缺失,此时执行快重传,立即重传下一个报文段,例如收到三个M2,则M3丢失,立即重传M3
快恢复:
- 在快重传的情况下,只是丢失了个别报文段而不是网络拥塞,因此执行快恢复,令ssthresh = cwnd / 2;cwnd = ssthresh
- 注意:慢开始和快恢复的快慢指的时cwnd的设定值,而不是cwnd的增长速率。
慢开始cwnd设定为1,而快恢复cwnd设定为ssthresh
从浏览器输入某个网站域名(www.v2ex.com)到加载出页面发生了什么.
- DHCP配置主机信息(获取本机地址)
- ARP解析MAC地址(获取路由器地址)
- DNS解析域名(获取服务器地址)
- HTTP请求页面(发送TCP报文段,收取TCP报文段)
- 渲染页面
以上每一份都要了解其具体过程
GET和POST区别:
- GET在浏览器回退时是无害的,而POST会再次提交请求。
- GET产生的URL地址可以被Bookmark,而POST不可以。
- GET请求会被浏览器主动cache,而POST不会,除非手动设置。
- GET请求只能进行url编码,而POST支持多种编码方式。
- GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
- GET请求在URL中传送的参数是有长度限制的,而POST么有。
- 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
- GET参数通过URL传递,POST放在Request body中。
HTTP状态码
状态码为3位十进制数,首位用来区别类别
1** :信息,服务器收到请求,需要请求者继续执行操作
2** :成功,操作被成功接收并处理
3** :重定向,需要进一步的操作以完成请求
4** :客户端错误,请求包含语法错误或无法完成请求
5** :服务器错误,服务器在处理请求的过程中发生了错误
具体详见:http://tool.oschina.net/commons?type=5
HTTP1.0,HTTP1.1,HTTP2.0的区别
HTTP1.0 and HTTP1.1
长连接:
- HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。
- HTTP 1.1则支持持久连接Persistent Connection, 并且默认使用persistent connection. 在同一个tcp的连接中可以传送多个HTTP请求和响应. 多个请求和响应可以重叠,多个请求和响应可以同时进行. 更加多的请求头和响应头(比如HTTP1.0没有host的字段).
- HTTP 1.1的持续连接,也需要增加新的请求头来帮助实现,例如,Connection请求头的值为Keep-Alive时,客户端通知服务器返回本次请求结果后保持连接;Connection请求头的值为close时,客户端通知服务器返回本次请求结果后关闭连接。HTTP 1.1还提供了与身份认证、状态管理和Cache缓存等机制相关的请求头和响应头。
节省带宽
- HTTP/1.1加入了一个新的状态码100(Continue)。客户端事先发送一个只带头域的请求,如果服务器因为权限拒绝了请求,就回送响应码401(Unauthorized);如果服务器接收此请求就回送响应码100,客户端就可以继续发送带实体的完整请求了。100 (Continue) 状态代码的使用,允许客户端在发request消息body之前先用request header试探一下server,看server要不要接收request body,再决定要不要发request body。
host字段
- 在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。
- HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。此外,服务器应该接受以绝对路径标记的资源请求。
缓存
- HTTP/1.1在1.0的基础上加入了一些cache的新特性,当缓存对象的Age超过Expire时变为stale对象,cache不需要直接抛弃stale对象,而是与源服务器进行重新激活(revalidation)。
HTTP1.1 and HTTP2.0
多路复用
- HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。
- 当然HTTP1.1也可以多建立几个TCP连接,来支持处理更多并发的请求,但是创建TCP连接本身也是有开销的。
- TCP连接有一个预热和保护的过程,先检查数据是否传送成功,一旦成功过,则慢慢加大传输速度。因此对应瞬时并发的连接,服务器的响应就会变慢。所以最好能使用一个建立好的连接,并且这个连接可以支持瞬时并发的请求。
数据压缩
HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。
服务器推送
- 意思是说,当我们对支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常合适加载静态资源。
- 服务器端推送的这些资源其实存在客户端的某处地方,客户端直接从本地加载这些资源就可以了,不用走网络,速度自然是快很多的。
HTTPS
将原本在TCP上传输的HTTP协议,用SSL进行传输,SSL再通过TCP传输
HTTP缓存机制(cache-control、Expires之类的一系列请求与相应报头字段)
推荐:https://blog.csdn.net/byeweiyang/article/details/80127685
- private:告知缓存服务器,该缓存只允许返回给特定的用户
- public:缓存可以给任何一个用户使用
session和cookie的区别,禁用cookie后怎么办
session是存放在服务器。
cookie存放在浏览器。
session本质上是用根据传过来的cookie通过哈希表还找到对应的数据的,所以本质上没什么区别。
如果cookie被禁用,正常的session也会失效。
常用的办法有:
URL重写:把用来存储session的cookie放到url的参数里
隐藏表单:通过一个hidden的表单来存储
DNS解析的过程
宏观:
1.找缓存
2.找本机host
3.找dns服务器
具体步骤会涉及DHCP,ARP等协议对应的过程
常用协议的端口
20/tcp FTP 文件传输协议数据传输端口
21/tcp FTP 文件传输协议连接端口
22/tcp SSH 安全登录、文件传送(SCP)和端口重定向
23/tcp Telnet 不安全的文本传送
25/tcp SMTP Simple Mail Transfer Protocol (E-mail)
53/udp or TCP DNS
69/udp TFTP Trivial File Transfer Protocol
79/tcp finger Finger
80/tcp HTTP 超文本传送协议 (WWW)
88/tcp Kerberos Authenticating agent
110/tcp POP3 Post Office Protocol (E-mail)
113/tcp ident old identification server system
119/tcp NNTP used for usenet newsgroups
220/tcp IMAP3
443/tcp HTTPS used for securely transferring web pages