-
TCP/IP协议
-
计算机网络osi七层和 tcp/ip四层,每层的主要作用和对应的协议
物理层:物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流,而不考虑具体的数据媒体
计算机的硬件设备和传输设备种类繁多,物理层的作用就是屏蔽掉这些差异化,为上层的数据链路层提供统一的服务数据链路层:网络层中考虑的是如何将分组从一个网络通过路由器转发到另一个网络
而链路层考虑的是在同一个局域网中,分组怎样从一个主机传送到另一个主机(不经过路由器)。
数据链路层把网络层交下来的ip数据报添加首部,尾部,封装成帧发送到链路上,
以及将接受到的帧中的数据取出,如果帧无差错,则上交给网络层,如果有差错则丢弃。封装成帧:在一段数据的前后分别要加首部和尾部,这样可以进行帧定界,如果一个帧还未发送完全是出错了,接收方可以凭借首部和尾部
来确定是否是一个完整的帧。帧的开始和结束标记使用的是特殊的控制字符
透明传输:如果传输的数据内容中恰好有跟帧的开始和结尾标记相同的字符时,接收方就会错误的判定帧边界,导致传输不完整
解决方法是发送方在这些控制字符前加转义字符。
差错检验:可能会出现比特差错,即0变成1,1变成0,在链路层解决这个问题通常使用CRC,循环冗余检验
链路层的差错检测只是检测比特差错,并不检测传输差错,比如帧丢失,帧重复等等,所以链路层并不保证可靠传输
可靠传输现在一般都在运输层(TCP)解决点对点信道,PPP协议:用户和ISP通信时使用的链路层协议,特点就是简单,每收到一个帧就CRC检查,没错误就收下,错误就丢弃
广播信道,一对多,CSMA/CD:广播信道可以进行一对多的通信,在局域网里应用最多。
适配器:其实就是网卡,负责局域网之间的串行通信,以及同计算机的并行通信。帧的封装和检验都是在适配器中进行的。
CSMA/DA协议:最早的以太网是将许多计算机接到一根总线上,当主机发送数据时,总线上的所有计算机都可以收到这个数据、
但是有些情况我们只要需要一对一的通信。CSMA/DA协议就是解决这种问题的
1.多点接入:说明是总线网络
2.载波监听:检测发送数据的主机
3.碰撞检测:保证只有一台主机在发送数据,其余主机暂停发送。mac地址:固定在网卡rom中的48位硬件地址。mac地址指出那个资源在何处,路由(ip)告诉我们如何去那里。
集线器:工作在物理层,接线器就相当于一个多接口的转发器,还是总线网络,并不具有mac转发表和学习能力,
但是可以将信号放大,扩大传输距离。
网桥:工作在数据链路层,扩展以太网,根据mac目的地址对帧进行转发和过滤。当网桥收到一个帧时并不是广播,而是检查此帧的
目标MAC地址,然后确定该发往哪个接口。之后被交换机取代。
交换机:工作在链路层,同时具有集线器和网桥的功能,既能集中连接,又有交换功能。性能各种提高
路由器:网络层,交换机是根据mac地址转发,路由器是根据ip地址转发。交换机工作在局域网,可以广播数据,路由器是连接不同的子网,
广播数据无法跨过路由器
网关:网关(Gateway)又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是最复杂的网络互连设备,
仅用于两个高层协议不同的网络互连,网关既可以用于广域网互连,也可以用于局域网互连。
网关是用于连接网络层之上执行不同协议的子网,组成异构的互连网,网关能实现异构设备之间的通信,
对不同的传输层、会话层、表示层、应用层协议进行翻译和变换。网关具有对不兼容的高层协议进行转换的功能。
当连接两个完全不同结构的网络时,必须使用网关。网关工作在OSI模型的最高层应用层。
网关的主要功能:把一种协议变成另一种协议,把一种数据格式变成另一种数据格式,把一种速率变成另一种速率,以求两者的统一。
从根本上说,网关不能完全归为一种网络硬件。用概括性的术语来讲,它们应该是能够连接不同网络的软件和硬件的结合产品。
特别地,它们可以使用不同的格式、通信协议或结构连接起两个系统。网关实际上通过重新封装信息以使它们能被另一个系统读取。
为了完成这项任务,网关必须能运行在OSI模型的几个层上。网关必须同应用通信,建立和管理会话,传输已经编码的数据,
并解析逻辑和物理地址数据。
网关一个大概念,不具体特指一类产品,只要连接两个不同的网络的设备都可以叫网关;
而‘路由器’么一般特指能够实现路由寻找和转发的特定类产品,路由器很显然能够实现网关的功能。
当然电信行业说的‘路由器’又和家用的‘路由器’两个概念,这个暂且不表。
默认网关是什么?
默认网关是什么,默认网关事实上不是一个产品而是一个网络层的概念,PC本身不具备路由寻址能力,
所以PC要把所有的IP包发送到一个默认的中转地址上面进行转发,也就是默认网关。
这个网关可以在路由器上,可以在三层交换机上,可以在防火墙上,可以在服务器上,所以和物理的设备无关。
网关 VS 路由器
网关和路由器最大的区别是是否连接相似的网络。如果连接相似的网络,则称为路由器。而连接不相似的网络,称为网关。
相似的网络和不相似的网络有两种不同的含义。逻辑层面:相似的网络:如果都是互联网上的两个网络,我们称为相似的网络。
不相似的网络:如果一个是私网,一个是公网。我们称为不相似的网络。物理层面:相似的网络:都是以太网或者同一种介质的网络。
不相似的网络:一边是以太,一边是SDH或者ATM等。网络层:使用了和电话网完全不同的设计,网络层只向上提供简单灵活的,无连接的,尽最大努力交付的数据报,不承诺质量
质量交给运输层来负责。
IP协议族:IP, ARP, ICMP, IGMP。ip协议到底有什么用?不同的网络往往具有不同的结构
那么如何将异构的网络用同一的协议来处理,看起来就像是同一个网络呢?这就是ip协议的作用
IP地址:二级的,分为网络号和主机号,
三类:A类,0开头,B类10开头(128), C类,110开头(192)
划分子网:将二级ip地址变为三级,从主机号中借用几位作为子网号
子网掩码:与ip地址做 & 操作就可以得到网络号,而不需要提前知道是几类ip。ARP:当路由器找到了目标网络的时候,就需要这个arp协议来将ip地址解析成mac地址了。每个主机都有arp缓存,刚开始的时候缓存是空的
先广播一下,目标主机收到后会回复,这样双方缓存中都有了各自的ip与mac地址转换表,下次就不用广播,可以直接用了。
这个缓存表还是动态更新的。ICMP:为了更有效的转发ip数据报,提高交付成功的机会,分为两种:差错报告和询问报告
差错报告就是看哪儿出了问题,导致数据报发送失败
询问报告就是先检测一下是否有问题,最常用的就是ping这个命令RIP和BGP:因为好多单位不愿意外部了解自己内部的路由选择协议,但同时又想连接到互联网,所以因特网将互联网划为了好多个小的
自治系统,称为AS,现在每个ISP就是一个AS。每个AS内部使用内部网关协议(RIP),不同的AS之间使用外部网关协议 (BGP)IGMP:叫什么网络组管理协议,用来管理IP多播的
由于IP地址的紧缺,可以让一个网络内的计算机使用只在内网能用的ip,而不需要申请全球唯一IP。
但是这样,可能会出现内网的ip地址和因特网中的ip重叠的情况,这就会产生二义性,为了解决这个问题
专门从ip地址中划分出来一些作为专用的本地地址
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
因特网中的路由器看到这些ip是不会转发的,只能用于内网使用,这样,不同网络内部可以使用相同的ip地址,大大节省了资源
但是问题又来了,如果这些本地机器有想接入互联网的怎么办?再为其申请共有IP吗?显然不是,而是转换,这就是NAT
NAT:网络地址转换,每个专用网必须要至少有一个共有IP,这个IP一般是在这个网络的路由器上,而且必须安装NAT软件才行,这样内部主机
需要接入互联网的时候就转换成这个共有IP。运输层:ip层提供主机到主机的通信,但真正进行通信的是主机之间的进程在通信,所以传输层提供的是端到端,进程到进程之间的通信
复用和分用:复用是指发送方不同的进程可以使用同一个协议传输数据,分用是指接收方在剥去首部之后可以将数据分发到不同的进程
端口:不同的操作系统有不同的进程标识,端口的作用就是统一拿出16位数字来标记这些进程,
分为3类,0~1023是常用的熟知端口号,之后还有登记端口号和临时端口号,我们自己启的一些进程基本都会用临时端口号UDP:用户数据报协议,就比IP服务增加了,复用和分用,还有差错检测的功能
无连接,尽最大努力交付:不保证可靠,不需要建立连接,只管交付就好,所以不需要维护复杂的连接状态
面向报文的:也就是应用层传下来的报文,既不合并,也不拆分,加了udp首部之后就向下交付给网络层。即,应用层的报文多长
udp就照样发送,所以udp报文是固定长度的,不能太长也不能太短,长了要分片,短了要加的首部太多,都不好。
没有拥塞控制:即使网络拥塞也不会降低发送效率,所以对实时服务很有用,能接受一些数据丢失,但不能接收长延时。
开销小:首部只有8个字节,不像TCP有20个
首部格式:源端口号,目的端口号,报文长度,检验和。这个检验和有点特殊,是临时在首部加了12个字节的伪首部,然后计算检验和
相同就留下,不同就丢弃。还有一种错误是端口号错误,直接有ICMP发送端口号错误TCP:
- 面向连接的:使用tcp协议之前必须要建立tcp连接,传输数据完毕之后必须要关闭连接,就像电话一样
- 端到端,点对点:每一条tcp连接只能是点对点的
- 可靠传输:用tcp传输的数据,无差错,无丢失,无重复,按顺序到达
- 全双工:通信双方都能互发数据,通信双方都有发送缓存和接收缓存,发送方发给缓存后就做其他事去了
tcp会在合适的时候将缓存中的数据发送出去,上层应用会在合适的时候从接收方缓存中读取数据 - 面向字节流:tcp传输数据是长度不固定的字节流,而并不是像udp那样固定的长度。
虽然应用程序和tcp交互是一次一个数据块(大小不等),但tcp仅仅把这些数据当是一连串无结构的字节流。
tcp并不知道这些字节流的含义。tcp发送方和接收方数据块大小并无对应关系,但是最后内容是一样的,接收方有能力识别收到的字节流
tcp并不关心应用程序一次把多长的报文发送到tcp缓存中,而是根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段
应该包含多少个字节。缓存中太长,可以划分短一些再传,太短的话等积累长一些再传。
socket:tcp连接是两个端点,这个端点不是主机,不是ip,不是进程,不是端口,而是套接字socket
socket是ip+端口,每一条tcp连接都会固定两个socket,同一个ip可以绑定多个端口,同一个端口也可出现在多个ip中可靠传输工作原理:停止等待协议和连续ARQ协议
理想的通信状况应该是这样的:传输无差错,不管发送方发送速度多块,接收方总是可以正确接收停止等待协议:发送完每发完一个分组就停止,等待接受方的确认分组到达时再发送第二个分组
1.发送方出现差错:接收方收不到分组,或者收到错误的分组,都不会发送确认报文,这样发送方就会超时重传
2.超时重传:每发送完一个分组,就要设置一个超时计时器,而且必须保留分组的副本,以便进行重传。
每个分组和确认都要编号。重传时间是不确定的,根据网络情况来看
3.接收方的确认报文丢失,或者延时:发送方会超时重传,接收方已经接受过这个分组,那怎么对待重新接收到的分组呢?
先将重复的分组丢弃,接着再次向发送方发送确认。
延时呢?已经重传了,也收到确认了,结果早先的那个确认延时到达了,那接收方直接丢弃就是了
这种自动重传协议的信道利用率很低,因为发送方在发送之后,一直在等待连续ARQ协议:就是为了解决信道利用率低的问题,采用滑动窗口来发送分组,窗口内的分组可以连续发送,收到某个分组的确认后
就可以使窗口向前移动。一般接收方都是对按顺序到达的最后一个分组进行确认,这样窗口就可以直接移动一个窗口长度了
这样做的缺点:接收到的分组可能是一部分,那么后一部分就得重传可靠传输的实现就是靠滑动窗口:发送方有三个指针,分别指向前后边界和当前已发送和未发送的边界,发送方已经发送单未收到确认的分组
先保存着,防止超时重传。
接收方如果收到
按序到达的分组,就会积累之后回复最后到达的那个分组编号,表示这个序列以收到。接收方如果收到的是未按序到达的分组,就先存起来,
等其他分组到了,顺序接上了,再回复。流量控制:虽然总是希望数据传输能快一些,但是发送方也要考虑接收方的接收能力,如果发的太快,接收方可能都来不及接收,就会出现丢失分组
的情况,所谓流量控制,就是让发送方按照接收方的接收能力来调整发送速率
怎么实现?仍然是滑动窗口
在连接建立初始,接收方就告诉了发送方我的窗口大小,这样发送方的窗口就不能超过接收方的窗口大小。当然这个窗口大小是动态的,根据
已收到的分组动态调整。那么考虑这种情况,发送方在收到接收方发来的窗口大小为0的反馈时,就得停止发送,等待新的窗口值到来
假设接收方发送了新的窗口值,但是丢了,发送方没收到怎么办?这个时候,发送方会提前设置一个计时器,只要等待时间超过这个时间,就发送
一个测试分组,看看接收方窗口值的大小。拥塞控制:申请的资源大于实际能提供的资源,网络就会出现拥塞,比如某个节点缓存容量太小,某段链路的带宽不够等等。
拥塞控制和流量控制是两个概念,流量控制只是指端到端的抑制数据传输速率的问题,而拥塞控制是整个网络的资源问题,不在一个层面上
但是某些拥塞控制算法和流量控制算法相似,所以容易搞混。拥塞控制非常复杂,现在解决这个问题主要有四种方法。发送方维持一个拥塞窗口,
这个窗口的大小取决于网络拥塞的程度,那如何知道网络出现拥塞了呢?当路由器因为拥塞丢弃分组时,tcp发送方就收不到接收方的反馈
这时就可以认为出现拥塞了,拥塞窗口就变小一些。这四种方法都是对这个窗口大小的调整。- 慢开始:当主机一开始发送数据时,如果一下发送过多的字节极有可能造成拥塞,因为并不清楚现在的网络情况。
较好的方法是,先检测一下,即由小到大的增加窗口值的大小,先设置一个较小的窗口值(一般是一个报文段的大小),每收到一个反馈,
就把窗口值加1。所以,如果连续收到几个反馈,窗口就会成倍增大。当然,还需要设置一个慢开始门限,防止窗口增长过大。 - 拥塞避免:这种算法是每经过一个RTT,窗口值加1,匀速的,而不是成倍,比慢开始的增长速率慢的多。
无论是慢开始,还是拥塞避免,当发生拥塞时,立马把门限调整为当前值的一半,然后让窗口大小为初始大小,接着按照慢开始算法增大,当
值超过门限值,但是拥塞还没有发生时,改用拥塞避免算法来匀速增加。 - 快速重传:之前说过,如果接收方收到失序的报文段时,可以什么也不做,也可以在适当的时机发送一次对失序报文的重传反馈
但是快速重传规定,一旦出现失序的分组,要你立即给出反馈,而不用等待重传倒计时。一般是连续收到3个对失序报文的重传反馈后,
发送方就会重新发送一次。由于发送方能够尽早重传未被确认的报文,可以提高吞吐量 - 快恢复: 当出现拥塞时,之前的方法是立马把门限减半,并且将窗口值置1,然后用慢开始算法。
而快恢复认为,既然还能连续收到3个反馈报文,说明现在可能并没有发生拥塞,所以同样将门限减半,
但是窗口值并不置1,而是设置为当前门限的大小,接着直接使用拥塞避免算法。
三次握手:为什么三次,考虑这种情况,如果两次的话,假设A发送了两个请求建立连接的报文给B,第一个没收到,第二个收到了,建立了连接。
等这次连接结束了之后,没收到的那个,因为各种延时,现在才到了服务端,那服务端以为客户端又要建立连接,
发送一个反馈给客户端,虽然连接又建立起来了,但是并没有数据要发,浪费了资源。
四次挥手:主动关闭方 establish fin-wait1 fin-wait2 time-wait closed
被动关闭方 establish close-wait last-ack closedtime-wait状态要等待2MSL时间,为何?两个原因 1. 为了防止这种,最后一个last-ack没收到怎么办,接收方会重传 这样最大不会超过两个msl时间。 2. 还有一个用处就是,让之前失效的连接报文全部消失,不会出现三次握手时那种失效连接又到达的情况。
应用层:运输层只是提供了端到端的通信服务,但是不容的网络应用有不同的通信规则,因此还需要应用层,每个应用层协议都是为了解决一类
问题。常用的有FTP,HTTP,DNS,SMTP,DHCP等等DNS:域名解析协议,域名是层次的树型结构。顶级域名:像cn,gov,org,net。二级域名像,cctv,ibm,hp等等
低级域名可以由高级域名来决定。
dns服务器一般分为4类:根域名服务器,顶级域名服务器,权限域名服务器,本地域名服务器
那域名解析的时候怎么解析的呢?查询一般分为两种,递归或者迭代,使用哪种都可以
比如 m.xyz.com 要访问 y.abc.com需要经历8个步骤:- 主机向本地dns服务器查询 dns.xyz.com
- 本地dns向根服务器查询
- 根服务器告诉本地服务器应该从哪个顶级服务器查询
- 本地服务器查询顶级服务器 dns.com
- 顶级服务器告诉本地服务器应该从哪个权限服务器查询
- 本地服务器再向这个权限服务器查询 dns.abc.com
- 权限服务器告诉本地服务器ip地址 y.abc.com
- 本地服务器向主机发送解析后的ip地址 y.abc.com
不管是递归还是迭代,都需要8次udp报文发送,效率有点差,所以一般都会设置dns缓存
如果缓存里有,直接从缓存里拿出对应的ip地址,而不用在一层一层的访问了。当然缓存应该设置过期时间0.
DHCP:动态主机配置协议,计算机在初始加入到某个网络之前是没有ip地址的,就是靠这个DHCP协议来分配ip地址
1. 主机向dhcp服务器发送广播发送发现报文(255.255.255.255),因为还不知道dhcp服务器的地址,所以要广播
2. 本网络上的所有主机都能收到这个广播,但是只有dhcp服务器才能回应
3. dhcp服务器从ip地址池中取出一个ip发送给目标主机,这样就有ip地址了
这个ip只是临时ip,时间由dhcp服务器决定,目标主机还可以更新这个租用期
一般来说每个网络都应该有一个dhcp服务器,但是这样dhcp服务器数量就太多了,于是dhcp服务器只有一个总的
而每个网络都有一个dhcp代理,每次都是目标主机和代理通信,代理再和主服务器通信。是用udp报文
- ip怎么完成路由的
同子网掩码做&操作 - 怎么解决IPv4地址的不足(说了NAT)
本地地址 - RIP BGP
RIP:内部网关协议 BGP:外部网关协议
- 手写TCP server和client的几个步骤的代码
客户端 服务器
socket socket
bind
listen
connect accept
send recv
recv send
close close
-
TCP的三次握手,哪一次可以携带数据
最后一次。前两次是SYN报文,规定SYN报文不能携带数据 -
socket编程:recv返回收到包是真的收到包了吗?
这个真不知道 -
用TCP发大包会出现什么情况?UDP会吗?
粘包? udp不会出现,因为udp长度固定,有边界
为什么会发生TCP粘包、拆包
应用程序写入的数据大于套接字缓冲区大小,这将会发生拆包。
应用程序写入数据小于套接字缓冲区大小,网卡将应用多次写入的数据发送到网络上,这将会发生粘包。
进行MSS(最大报文长度)大小的TCP分段,当TCP报文长度-TCP头部长度>MSS的时候将发生拆包。
接收方法不及时读取套接字缓冲区数据,这将发生粘包。使用带消息头的协议、消息头存储消息开始标识及消息长度信息,服务端获取消息头的时候解析出消息长度,
然后向后读取该长度的内容。
设置定长消息,服务端每次读取既定长度的内容作为一条完整消息,当消息不够长时,空位补上固定字符。 -
UDP报文的大小,TCP呢?
MTU最大传输单元,这个最大传输单元实际上和链路层协议有着密切的关系,
EthernetII帧的结构DMAC+SMAC+Type+Data+CRC由于以太网传输电气方面的限制,
每个以太网帧都有最小的大小64Bytes最大不能超过1518Bytes,
对于小于或者大于这个限制的以太网帧我们都可以视之为错误的数据帧,一般的以太网转发设备会丢弃这些数据帧。
由于以太网EthernetII最大的数据帧是1518Bytes这样,刨去以太网帧的帧头
(DMAC目的MAC地址48bits=6Bytes+SMAC源MAC地址48bits=6Bytes+Type域2Bytes)14Bytes
和帧尾CRC校验部分4Bytes那么剩下承载上层协议的地方也就是Data域最大就只能有1500Bytes这个值我们就把它称之为MTU。UDP 包的大小就应该是 1500 - IP头(20) - UDP头(8) = 1472(Bytes)
TCP 包的大小就应该是 1500 - IP头(20) - TCP头(20) = 1460 (Bytes)
一般tcp默认为556;
-
Epoll为什么要用红黑树不用hashmap,Java的NIO有哪些著名的bug(Epoll空转)
-
网络数据包传输
-
三次握手,四次挥手,time_wait状态,fin_wait,time_wait状态有什么副作用,time_wait如何避免?出现大量的time_wait怎么办
close_wait状态
负作用:之所以TIME_WAIT能够影响系统的扩展性是因为在一个TCP连接中,一个Socket如果关闭的话,它将保持TIME_WAIT状态大约 4分钟 (一个msl是2分钟)。
如果很多连接快速的打开和关闭的话,系统中处于TIME_WAIT状态的socket将会积累很多,由于本地端口数量的限制,
同一时间只有有限数量的socket连接可以建立,如果太多的socket处于TIME_WAIT状态,你会发现,由于用于新建连接的本地端口太缺乏,
将会很难再建立新的对外连接。
如何避免:端口不够就增加端口呗,或者将这个msl时间缩短,将tcp短连接改为长连接。 -
tcp窗口滑动,拥塞控制和流量控制,快速重传,快恢复,拥塞避免,慢启动
-
tcp和udp的区别,都适用于哪些业务场景
对比了TCP、UDP的内部数据结构。首部不同
TCP基于数据流传输,UDP基于包传输。tcp长度不固定,udp固定
TCP可靠的。有三次握手和四次挥手。udp没有,只管发
TCP有流量控制和拥塞控制。tcp适用于传输正确率要求较高的环境,udp试用与延时要求高,但正确性要求不是很高的情况,比如视频
-
socket通信
分为三个阶段:连接建立,传输数据,连接释放
客户端 服务器socket socket
listen
connect accept
send recv
recv send
close close -
TCP程序与UDP程序是否可以共用一个端口号
当然可以,不同的协议端口号互相独立,不存在冲突 -
基于tcp,udp的协议有哪些,icmp协议位于哪一层(网络层)
UDP: DNS(53),TFTP(69),DHCP(67, 68),SNMP(161,162)
TCP: FTP(21, 20), TELNET(远程终端控制23),HTTP(80),SMTP(25,发送),POP3(接收),IMAP(接收) -
如何区分Tcp跟Udp的数据包
长度?udp长度一般比较小?或者包头看一看? -
如何用udp实现tcp
只能在应用层用类似tcp的机制来实现了,比如连续传送,滑动窗口,超时重传等等 -
什么情况下使用get什么情况下使用post
GET用于信息获取,而且应该是安全的和幂等的
所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。
就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。POST表示可能修改变服务器上的资源的请求。继续引用上面的例子:还是新闻以网站为例,读者对新闻发表自己的评论应该通过POST实现,
因为在评论提交后站点的资源已经不同了,或者说资源被修改了GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连
POST把提交的数据则放置在是HTTP包的包体中。POST的安全性要比GET的安全性高。注意:这里所说的安全性和上面GET提到的“安全”不是同个概念。
上面“安全”的含义仅仅是不作数据修改,而这里安全的含义是真正的Security的含义,比如:通过GET提交数据,
用户名和密码将明文出现在URL上,因为登录页面有可能被浏览器缓存Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求
-
HTTP1.0和1.1区别,能不能传输二进制,HTTP2是如何压缩的
http协议是无状态的,服务器不会记住客户端的地址,所以客户端每次请求一个文档都需要建立释放tcp,开销太大
1.1之后解决了这个问题,使用了持续连接,流水线的方式去访问,在服务器响应之后tcp连接还持续一段时间,大大提高了效率http传输的是ascall字符,但是也可以传输二进制数据
-
RPC与HTTP服务的区别
-
http和https的区别
安全啊,https是加密后传输的 -
cookie和session的区别和联系
-
Cookie存储在客户端阅读器中,对客户端是可见的,客户端的一些程序可能会窥探、复制以至修正Cookie中的内容。
而Session存储在服务器上,对客户端是透明的,不存在敏感信息泄露的风险。 -
Session是保管在服务器端的,每个用户都会产生一个Session。假如并发访问的用户十分多,会产生十分多的Session,
耗费大量的内存。因而像Google、Baidu、Sina这样并发访问量极高的网站,是不太可能运用Session来追踪客户会话的。 -
而Cookie保管在客户端,不占用服务器资源。假如并发阅读的用户十分多,Cookie是很好的选择。
关于Google、Baidu、Sina来说,Cookie或许是唯一的选择。 -
假如客户端浏览器不支持Cookie(可以认为关闭),需要运用Session以及URL地址重写。
-
Cookie支持跨域名访问,例如将domain属性设置为“.biaodianfu.com”,则以“.biaodianfu.com”为后缀的一切域名均能够访问该Cookie。
跨域名Cookie如今被普遍用在网络中,例如Google、Baidu、Sina等。而Session则不会支持跨域名访问。
Session仅在他所在的域名内有效
-
-
http状态码
1xx:请求正在进行
2xx:请求成功
200:请求成功
204:请求成功但是没有数据返回,浏览器也不更新
206:请求的是资源的一部分
3xx:重定向
301:永久重定向,表示请求的资源已经换了地方了,书签会更新
302:暂时重定向,资源只是暂时换了地方,之后还可能变,书签先不用更新
304:请求方法带一些条件,比如If-Match,If-Modified-Since,但是服务器并不满足要求
4xx:客户端错误
400:请求报文存在语法错误
401:用户认证失败
403:请求被服务器拒绝
404:服务器找不到请求的资源
5xx:服务端错误
500:服务器代码出错
503:服务器停机维护或者超负荷了,无法再写入请求
-
输入url按下回车的全过程(http://www.bjut.edu.cn:80/cwjbest/index.html)
- 浏览器分析这个url是否合法
- 浏览器像dns服务器发出这个域名,请求解析
- dns服务器解析出ip地址
- 浏览器与服务器建立tcp连接
- 浏览器使用http协议发送get请求:GET:/cwjbest/index.html
- 服务器将这个文件发送给浏览器
- 释放tcp连接
- 浏览器渲染这个html页面
-
DNS
网友评论