Tcp通信原理了解吗?
Tcp连接需要进行三次握手,断开需要四次挥手。
Tcp连接三次握手过程
Tcp断开连接四次挥手过程
为什么TCP连接需要三次握手分开需要四次握手?
TCP连接是全双工的(即数据可双向传递),所以进行关闭时每个方向上都要单独进行关闭(单方向的关闭称为半关闭)。
关闭过程:一方完成它的数据传输后,发送一个FIN通知另一方将要终止这个方向的连接,被通知方收到一个FIN,会通知应用层TCP连接已终止了这个方向的数据传送。
当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。
为什么不能两次握手能进行连接?
3次握手完成两个重要的功能:双方做好发送数据的准备工作(双方都知道彼此已准备好);双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。
把三次握手改成仅需要两次握手,可能会发生死锁。
作为例子,考虑计算机S和C之间的通信,假定C给S发送一个连接请求分组,S收到了这个分组,并发送了确认应答分组。按照两次握手的协定,S认为连接已经成功地建立了,可以开始发送数据分组。可是,C在S的应答分组在传输中被丢失的情况下,将不知道S是否已准备好,不知道S建立什么样的序列号,C甚至怀疑S是否收到自己的连接请求分组。在这种情况下,C认为连接还未建立成功,将忽略S发来的任何数据分组,只等待连接确认应答分组。而S在发出的分组超时后,重复发送同样的分组。这样就形成了死锁。
Http协议你了解吗?Http协议的工作流程和详细内容都熟悉吗?
Http常见的状态码了解吗?
Http header 你们都用过哪些?如何使用的?
- Cache-Control:no-cache。客户端对于数据查询实时性要求较高的请求禁用缓存。当客户端未指定缓存要求时,服务端可以通过指定该请求Url的缓存策略(Cache-Control:public,响应可以被任何对象(包括:发送请求的客户端,代理服务器,等等)缓存;private,响应只能被单个用户缓存,不能作为共享缓存(即代理服务器不能缓存它);no-cache,强制所有缓存了该响应的缓存用户,在使用已存储的缓存数据前,发送带验证器的请求到原始服务器)。
- Cookie:Skin=new。保存该域名网站的数据(会话信息、登录记录信息)时可以通过响应头中的Cookie将数据保存到客户端。
- Referer: http://www.zcmhi.com/archives/71.html。通过Referer检查请求来源防范CSRF攻击。
- Content-Type:application/x-www-form-urlencoded。通过Content-Type指定请求body数据内容类型供服务端区分解析(表单数据、Json、xml等)。
TCP/IP协议的工作流程了解吗?
- 在源主机上,应用层将一串应用数据流传送给传输层。
- 传输层将应用层的数据流截成分组,并加上TCP报头形成TCP段,送交网络层。
- 在网络层给TCP段加上包括源、目的主机IP地址的IP报头,生成一个IP数据包,并将IP数据包送交链路层。
- 链路层在其MAC帧的数据部分装上IP数据包,再加上源、目的主机的MAC地址和帧头,并根据其目的MAC地址,将MAC帧发往目的主机或IP路由器。
- 在目的主机,链路层将MAC帧的帧头去掉,并将IP数据包送交网络层。
- 网络层检查IP报头,如果报头中校验和与计算结果不一致,则丢弃该IP数据包;若校验和与计算结果一致,则去掉IP报头,将TCP段送交传输层。
- 传输层检查顺序号,判断是否是正确的TCP分组,然后检查TCP报头数据。若正确,则向源主机发确认信息;若不正确或丢包,则向源主机要求重发信息。
- 在目的主机,传输层去掉TCP报头,将排好顺序的分组组成应用数据流送给应用程序。这样目的主机接收到的来自源主机的字节流,就像是直接接收来自源主机的字节流一样。
网友评论