各种协议浅析
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网站这么频繁的成千上万亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,每个用户都占用一个连接的话,那就可想而知。所以并发量大,但每个用户无需频繁操作的情况下,用短连接好。
应用层: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网站这么频繁的成千上万亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,每个用户都占用一个连接的话,那就可想而知。所以并发量大,但每个用户无需频繁操作的情况下,用短连接好。
相关文章推荐
- Android SDK 目录详解
- Python学习之路-初学篇之Python的基本数据类型(一)
- XAlign - Xcode插件 - 对齐代码
- Spring MVC 数据绑定(四)
- fmdb 简单使用
- python excel操作
- Lua学习笔记1--基本变量类型
- 寻找web根目录
- 进程丶线程丶CPU关系简述
- Redis+Jedis简单应用
- jquery中的过滤操作详细解析
- Instant Complexity - POJ1472
- java -D參数简化增加多个jar【简化设置classpath】
- 学习Slim Framework for PHP v3 (五)--route怎么被调用的?
- 实习
- C# 特性
- 通知 listview刷新
- Instant Complexity - POJ1472
- C代码对比,走心和不走心的程序猴
- Android系统启动过程