计算机网络方面的知识
get和post的区别
1.get请注意,查询字符串(名称/值对)是在get请求的url中发送的,
1,get请求可被缓存
2,get请求保留在浏览器历史记录中
3,get请求可被收藏为书签
4,get请求不应在处理敏感数据时使用
5,get请求有长度限制
6,get请求只应当用于取回数据post方法
2.post请注意 查询字符串(名称/值对)是在post请求的http消息主题发搜的
1,post请求不会被缓存
2,post请求不会保留在浏览器历史记录中
3,post不能被收藏为书签
4,post请求对数据长度没有要求
DNS使用的协议
即使用TCP又使用UDP
首先了解一下tcp与udp传送字节的长度限制:
1.udp报文的最大长度为512字节,而tcp则允许报文长度超过512字节,
当dns查询超过512字节时,协议的tc标志出现删除标志,这时使用tcp发送,
通常传统的udp报文一般不会大于512字节
2.tcp是一种可靠的连接,保证了数据的准确性
域名解析时使用udp协议
1.客户端向dns服务区查询域名,一般返回的内容都不会超过512字节,用udp传授即可,
不用经过tcp三次握手没这样dns服务器负载更低,响应更快,虽然理论上说,
客户端也可以指定向dns服务器查询的时候使用tcp,但事实上很多dns服务器进行配置的时候
仅支持udp查询包
幂等:
一个幂等操作的特点是其任意多次执行所产生影响均与一次执行的相同,
幂等函数,或幂等方法,是指可以使用相同的参数重复执行,并能获得相同结果的函数,
这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变,
例如“getUsername()和setTrue()”函数就是一个幂等函数
Cookies和session区别
1.Cookies是一种能够让网站服务器把数据存储到客户端的硬盘或内存,
或是从客户端的硬盘读取数据的一种技术,Cookies是当你浏览某网站时,由web服务器
置于你硬盘的一个非常小的文本文件,他可以记录你的用户ID密码,浏览过的网页,
停留的时间等信息,
2.session:当用户请求来自应用程序的web页时,如果该用户还没有回话,则web服务器将自动创建一个
Session对象,当会话过去或被放弃后,服务器将终止该会话,
机制:
cookie机制:采用在客户端保持状态的方案,而session机制采用的时服务端保持状态的方案,
同时我们看到由于服务器端保持状态的方案在客户端也需要保存一个表示,所有session机制可能需要借助
cookie机制来表达保存标识的目的
2.session是服务器用来跟踪用户的一种手段,每个session都有一个唯一的标识:session ID。
当服务器创建额session时,给客户端发送的响应报文包含了Set-cookie字段,其中有一个名为sid的键值对,
这个键值对,Session ID。客户端收到后就把Cookie保存浏览器,并且之后发送的请求报表都包含SessionID,
HTTP就是通过Session和Cookie这两个发送一起合作来实现跟踪用户状态,
Session用具服务器,Cookie用于客户端
TCP粘包和超薄产生的原因
1.应用程序写入数据的字节大小大于套接字发送缓冲区的大小,
2进行mss大小的tcp分段,mss是最大报文段长度的缩写,mss是tcp报文段中的数据字段的最大长度,数据字段加上TCP
首部才等于整个的tcp报文段。所以mss并不是tcp报文段的最大长度,而是:mss=tcp报文段长度-tcp首部长度
3.以太网的payload大于mtu进行ip分片,mtu指:一种通信协议的某一层上面所能通过的最大数据包大小,如果ip层
有一个数据包要穿,而且数据的长度比链路层的mtu大,nameip层就会进行分片,把数据包分成若干片,
让每一篇都不超过mtu,注意,ip分片发生在原始发送端主机上,也可以发生在中间路由器上。
tcp粘包和超薄的解决策略
1.消息定长,如100字节。
2.在包尾部增加回车或者空格符等特殊字段进行风格,典型的如FTP协议
3。将消息分为消息头和消息尾,
4.其它复杂的协议,如RTMP协议等
三次握手
第一次握手:建立连接时,客户端发送syn包到服务器,并进行SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到SYN包,必须确认客户的SYN(ack=j+1),同时自己也发送一个syn包,即syn+ack包,
此时服务器进入syn_recv状态;
第三次握手:客户端收到服务器的syn+ack包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,
客户端和服务器进入ESTABLISHED(established)状态,完成三次握手,
完成三次握手,客户端与服务器开始传送数据
四次挥手:
1.客户端先发送fin,进入fin_wait1状态
2.服务器收到fin,发送ack,进入colse_wait状态,客户端收到这个ack,进入fin_wait2状态。
3.服务端发送fin,进入last_ack状态,
4.客户端收到fin,发送ack,进入time_wait状态,服务端收到ack进入close状态,
注:time_wait的状态就是主动断开的一方(这里是客户端),发送完最后一次ack之后进入的状态。
并且持续时间还挺长的,客户端time_wait持续2倍msl时长,在linux体系中大概60s,转换成close状态。
注1:time_wait是主动关闭链接时形成的,等待2msl的时间,约4分钟,主要是防止最后一个ack丢失,
由于time_wait的时间会非常长,因此server端应尽量减少主动关闭链接
注2:close_wait 是被动关闭链接时形成的,根据tcp状态机,服务器收到客户端发送fin,则按照tcp实现发送ack,
因此进入close_wait状态,但如果服务端不执行close(),就不能由close_wait迁移到last_ack,
则系统中会存在很多close_wait状态的连接,此时可能是系统忙于处理读写操作,而伟江已收到fin的连接,
进行close,因此,recv/read已收到fin的连接socket,会返回0.
注3:为什么time_wait状态需要保持2msl这么长时间?
如果time_wait状态保持时间不足够长(小于2msl),第一个连接就正常终止了,
第二个拥有相同相关元祖的连接出现,而第一个连接的重复报文到达,干扰了第二个连接,
tcp实现必须防止某个连接的重复报文在连接终止后出现,所以让time_wait状态保持时间足够长,
连接相应方向上的tcp报文要么完全响应完毕,要么被丢弃,建立第二个连接的时候,不会混淆。
注4:time_wait和close_wait状态socket过多
如果服务器出现异常,百分之八九十出现以下两种情况
1.服务器保持了大量time_wait状态
2,服务器保持了大量的close_wait状态,简单来说close_wait数目过大是由于被动关闭链接出来不当导致的。
一次完整的HTTP请求过程
域名解析--->发起TCP的3次握手--->建立TCP链接后发起http请求-----> 服务器响应http请求,
浏览器得到html代码--->浏览器解析html代码,并请求html代码中的资源(如js,css,图片等)-->浏览器对页面进行渲染呈现给用户
长连接
一 基于http协议的长连接
1.在http1.0和http1.1协议中都有对长连接的支持,其中http1.0需要在request中增加“Connection”;
keep-alive header才能够支持,而http1.1默认支持。
http1.0请求与服务端的交互过程
1.客户端发送带有包含一个header:"connection": keep-alive 的请求
2.服务端接受到这个请求后,根究http1.0和Connection:keep-alive 判断出这事一个长连接
就会在response的header中也增加connection:keep-alive,同时不会关闭建立的tcp连接,
3.客户端收到服务端的response后,发现其中包含connection:keep-alive,就认为是一个长连接,
不关闭这个连接并用该连接在发送request,转到a
二:发心跳包,每隔鸡母岙就发一个数据包过去
TCP如何保证可靠传输?
1.三次握手
2.将数据截断为合理的长度,应用数据被分割成TCP认为最合适发送的数据块(按字节编号,合理分片)
3.超时重发,当TCP发出一段后,它启动一个定时器,如果不能及时收到一个确认就重发,
4.对于收到的请求,给出确认响应
5.校验出包有错,丢弃报文段,不给出响应
6.对失序数据进行重新排序,然后交给应用层
7.对于重复数据,能够丢弃重复数据。
8.流量控制,TCP连接的每一方都有固定大小的缓冲空间,TCP的接受端只允许晾一段发送接受缓冲区所能接纳的数据量
浙江纺织较快主机致使较慢主机缓冲区溢出。
9.拥塞控制,当网络拥塞时,减少数据的发送。
详细介绍http
HTTP协议是hyper test transfer Protocol(超文本传输协议)的缩写,是用于从万维网服务器传输超文本到本地浏览器的传送协议
特点:
1.简单快捷:客户想服务器请求服务时,只需传送请求方法和路径,请求方法常用的有get head post。
每种方法规定了客户与服务器联系的类型不同。由于http协议简单,是的http服务器的程序规模小,因而通信速度很快
2.灵活:http允许传输任意类型的数据对象,正在传输的类型有content-type加以标记。
3.无线连接:无连接的含义是限制每次连接只处理一个请求,服务器处理完客户的请求,
并收到客户的应答后,即断开连接,采用这种方式可以节省传输时间
4.无状态:http协议是无状态协议,无状态是指协议对于事物处理没有记能力,缺少状态意味着如果后续处理需要前面的信息,
则它必须重传,这样可能导致每次连接传送的数据量增大,另外一方面,在服务器不需要先前信息时他的应答就较快
5.支持B/S及C/S模式
请求消息Request
1.请求行,用来说明请求类型,要访问的资源以及所以用的HTTP版本,
2.请求头部,紧接着请求行(即第一行)之后的部分,用来说明服务器要使用附加信息从第二行起为请求头部,host将指出请求的目的地,
User-Agent,服务端和哭护短脚本都能访问它,它是浏览器类型检测逻辑的重要基础,该信息有你的浏览器来定义,
并且在每个请求中自动发送等等
3.空行,请求头部后面的空行是必须的
4.请求数据也叫主体,可以添加任意的其他数据。
响应消息Response
1.状态行,有HTTP协议版本号,状态码,状态消息,三部分组成
2.消息报头,用来说明客户端要使用的一些附加信息,
3.空行,消息报头后面的空行是必须的,
4.响应正文,服务器返回给客户端的文本信息
状态码:
200 OK //客户端请求成功
301 Moved Permanenty //永久重定向,使用域名跳转
302 Found 零时重定向,未登陆的用户访问用户中心重定向到登陆页面
400 Rad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器接受请求,但是拒绝提供服务,
404 Not Found //请求资源不存在,eg:输入额错误的URl
500 internal Server Error //服务器发生不可预期的错误,
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
http的方法
1.get:客户端向服务端发起请求,获得资源,请求获得URL处所在的资源
2.post:向服务端提交新的请求字段,请求URL的资源后添加新的数据
3.head:请求获取Url资源的响应报告,即获得URL资源的头部,
4.patch:请求局部修改URL所在资源的数据项
5.put: 请求修改URl所在资源的数据元素。
6.delete: 请求删除url资源的数据
URI和URL的区别
URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源,web上可用的每种资源如HTML文档,
图像,视频片段,程序等都是一个来URI来定义的,
URI一般有三部分组成,
1.访问资源的命名机制
2.存放资源的主机名
3.资源自身的命名,由路径标识,着重强调于资源。
URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源
URL是internet上用来秒数信息资源的字符串,主要用于在各种www客户程序和服务器程序上,特别是著名的mosaic,
采用URL可以用一种统一的格式来藐视各种信息资源,包括文件,服务器的地址和目录等。
URL一般由三部分组成:
1.协议(或者称为服务方式)
2.存有该资源的主机IP地址(有时也包括端口号)
3.主机资源的具体地址,如目录和文件名等
HTTPS和HTTP的区别
1.https协议需要到CA申请证书,一般免费证书很少,需要交费
2.http是超文本传输协议,信息是明文传输,https则是有安全新的ssl加密传输协议。
3.http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443
4.http的连接很简单,是无状态的;https协议是有ssl+http协议构建的可进行加密传输的,身份认证的网络协议,比http协议安全
5.http默认使用80端口,https默认使用443端口
http是如何保证数据传输的安全
https实际就是tcp层与http层之间加入了ssl/tls来为上层的安全保驾护航,只要勇于对称加密,非对称加密,整数,等技术进行客户端
与服务器的数据加密传输,最终达到保证整个通信的安全性。
SSL/TLS协议的作用
1.认证用户和服务器,确保数据发送到正确的库户机和服务器;
2.加密数据以防止数据中途被窃取;
3.维护数据的完整性,确保数据在传输过程中不被改变。