您的位置:首页 > 其它

各种协议浅析

2016-01-27 17:51 211 查看
1.TCP/IP把网络分为四层:应用层,传输层,网络层,链路层。

  应用层:HTTP,FTP,DNS。FTP文件传输协议,DNS域名系统

  传输层:TCP,UDP。TCP传输控制协议,UDP用户数据报协议

  网络层:IP

  链路层:网卡

  IP协议的作用是把各种数据包传送给对方。

  IP地址指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址。IP可变,MAC不可变。

  ARP协议是一种用以解析地址的协议,根据通信方的IP地址反解析出对应的MAC地址。

  TCP协议将大块数据分割成以报文段为单位的数据包进行管理。

  DNS提供域名和IP之间的解析服务

2.各个协议之间作用:

  发送时:

  HTTP协议的职责,生成针对目标服务器的HTTP请求报文

  TCP 协议的职责,将HTTP请求报文按序号分割成多个报文段,把每个报文段可靠的传送给对方

  IP  协议的职责,搜索对方的地址,一边中转,一边传送

  接收时:

  TCP 协议的职责,从对方那里接收到的报文段,并按序号以原来的顺序重组请求报文

  HTTP协议的职责,对服务器请求的内容的处理

3.TCP的三次握手和四次分手

  三次握手:

  ①客户端首先发送一个带SYN标志的数据包给对方

  ②服务端收到后,回传一个带有SYN/ACK标志的数据包传达确认信息。

  ③客户端再回传一个带ACK标志的数据包。代表“握手”成功

  如果在握手过程中,某个阶段莫名其妙的断了,TCP协议会再次以相同的顺序发送相同的数据包

  

  SYN 建立连接

  ACK 确认

  PSH 传送

  FIN 结束

  RST 重置

  URG 紧急

  Sequence number 顺序号码

  Acknowledge number 确认号码

  第一次握手:Client端发送一个SYN=1,随机产生seq number=X的数据包到Server端

  第二次握手:Server端收到请求后要确认联机信息,向Client发送ack number=(Client的seq+1),SYN=1,ACK=1。并随机产生一个seq number = Y的包

  第三次握手:Client收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ACK是否为1,如果正确,Client

                       会再次发送ack number=(Server的seq+1),ACK=1。Server端收到后确认Seq值与ACK=1则建立连接。

  四次挥手:

  第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

  第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1,Server进入CLOSE_WAIT状态。

  第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

  第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server

                       进入CLOSE状态。四次挥手完成。

4.为什么连接的时候需要三次握手,而断开的时候需要四次挥手?

  连接时:因为Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的,

  断开时:当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了",

                 只有当我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一次发送,所以需要四次挥手。
5.为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

 因为网络是不可靠的,有可能最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。在host1向host2发送ACK=1后,host1会把自己设置成 TIME_WAIT状态并启动定时器,如果host2没有收到ACK,host2TCP的定时器到达后,会要求host1重新发送ACK,当host2收到ACK后,host2就断开连接,当host1等待 2MLS(2倍报文最大生存时间)后,没有收到host2的重传请求后,他就知道host2已经收到了ACK,所以host1此时才关闭自己的连接。

6.长连接和短连接

  短连接:

  连接-->传输数据-->关闭连接

  HTTP是无状态的。浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。也可以这么说:短连接是指SOCKET连接后发送后接收完数据后马上断开连接。

  

  长连接

  连接-->传输数据-->保持连接-->传输数据。。-->关闭连接

  长连接是建立SOCKET连接后不管是否使用都保持连接,但安全性较差。

  HTTP的长连接

  HTTP也可以建立长连接的,使用Connection:keep-alive,HTTP1.1默认进行长连接。这也是和HTTP1.0最大的区别但还是无状态的,也就是不可以信任的。

  什么时候用长连接,短连接?

  长连接多用于操作频繁,点对点的通讯,而且连接不能太多的情况。每个TCP连接都需要三次握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低 很多,所以每个操作完后都不断开,再次处理时直接发送数据包就可以了。例如:数据库的连接用长连接,如果用短连接频繁的通信会造成socket操作,而且频繁的socket 创建也是对资源的浪费。

  而像WEB网站的http服务一般都是用短连接,因为长连接对于服务端来说会消耗一定的资源,而像WEB网站这么频繁的成千上万亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,每个用户都占用一个连接的话,那就可想而知。所以并发量大,但每个用户无需频繁操作的情况下,用短连接好。

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: