前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android需要知道的TCP\IP和Http知识

Android需要知道的TCP\IP和Http知识

作者头像
xiangzhihong
发布2022-11-30 11:00:35
3150
发布2022-11-30 11:00:35
举报
文章被收录于专栏:向治洪向治洪

相信大家在出去面试的时候,经常会被问到一些基础问题,这些问题,平时开发过程中我们并不会太注意,但是一些大公司在面试时会经常问,今天给大家总结下在Android/iOS开发中会被问到的关于TCP\IP和Http相关的知识。

这里写图片描述
这里写图片描述

左边是标准的OSI参考模型,共7层;右边是TCP/IP参考模型,分为4层。而TCP/IP作为实际的指导协议,在实际的开发中使用得最多。对于TCP/IP的4层模型可以简单地理解为: 网络接入层:将需要相互连接的节点接入网络中,从而为数据传输提供条件。 网络互联层:找到要传输数据的目标节点。(IP协议) 传输层:实际传输数据。(TCP 、UDP协议) 应用层:使用接收到的数据。(HTTP、HTTPS、DNS协议)

TCP/IP协议

TCP/IP协议通常放在一起来说,不过它们是两个不同的协议,所起的作用也不一样。IP协议是用来查找地址的,对应着网际互联层,TCP协议是用来规范传输规则的,对应着传输层。IP只负责找到地址,具体传输工作交给TCP来完成。 TCP在传输之前会进行三次沟通,一般称为“三次握手”,传完数据断开的时候,要进行四次沟通,一般称为“四次挥手”。要理解这个过程首先需要理解TCP中的两个序号和三个标志位的含义: seq:sequence number的缩写,表示所传数据的序号。TCP传输时每一个字节都有一个序号,发送数据时会将数据的第一个序号发送给对方,接收方会按序号检查是否接收完整了,如果没有接收完整就需要重新传送,这样就可以保证数据的完整性。

ack:asknoledgement number的缩写,表示确认号。接收端用它来给发送端反馈已经成功接收到的数据信息,它的值为希望接收的下一个数据包起始序号,也就是ack值所代表的序号前面数据已经成功接收到了。

ACK:确认位,只有ACK=1的时候ack才起作用。正常通信时ACK为1,第一次发起请求时因为没有需要确认接收的数据所以ACK为0。

SYN:同步位,用于在建立连接时同时序号。刚开始建立连接时并没有历史接收数据,所以ack也就没办法设置,这时按照正常的就无法运行了,SYN的作用就是来解决这个问题的,当接收端接收到SYN=1的报文时就会直接将ack设置为接收到的seq+1的值,注意这里面的值并不是校验后设置的,而是根据SYN直接设置的,这样正常的机制就可以运行了,所以SYN叫同步位。需要注意的是,SYN会在前面再次握手时都为1,这是因为通信的双方的ack都需要设置一个初始值。

FIN:终止位,用来在数据传输完毕后释放连接。

整个传输过程可以用下图来表示:

这里写图片描述
这里写图片描述

图中上部分为三次握手,下部分为四次挥手。TCP的传输是双全工模式,也就是说传输的双方是对等的,可以同时传输数据,所以无论连接还是关闭都需要对双方同时进行。 三次握手和四次挥手保证了连接的可靠性,不过凡事有利就有弊,这种模式也有它的缺点,首先是在传输效率上会比较低,另外三次握手的过程中客户端需要发送两次数据才可以建立连接,容易被DDOS攻击(SYN Flood攻击)。

UDP也是用于传输层的协议,和TCP的主要区别是,TCP是有连接的,UDP是没有连接的。UDP协议拿到地址后就传了,因此TCP协议传输的数据更可靠,而UDP协议传输的速度更快。

HTTP协议的底层传输默认使用的是可靠的TCP协议,不过它对互联网的高速发展带来了很大的制约,Google制定了一套基于UDP和QUIC(Quick UDP Intent Connection)协议,这种协议基于TCP和UDP之间的,但未广泛使用。

TCP/IP协议只是一套规则,并不能具体工作,而Socket是TCP/IP协议的一个具体的实现。

HTTP协议

HTTP是应用层的协议,在TCP/IP协议接收到数据之后需要通过HTTP协议来解析才可以使用。

HTTP协议中的报文结构很重要。HTTP中报文分为请求报文(request messaget)和响应报文(response message)两种类型,这两种类型都包括三部分:首行、头部和主体。模型如下图所示:

这里写图片描述
这里写图片描述

请求报文的首行是请求行,包括方法(请求类型)、URL和HTTP版本三项内容,响应请求的首行是状态行,包括HTTP版本、状态码和简短原因三项内容,其中原因可有可无。 头部保存一些键值对的属性,用冒号“:”分割。

主体保存具体内容,请求报文中主要保存POST类型的数据,响应报文中保存页面要显示的结果。首行、头部和主体以及头部的各项内容用回车换行(\r\n)分割,另外头部和主体之间多一个空行,也就是有两个连续的回车换行。

请求报文中的方法指GET、HEAD、POST、PUT、DELETE等类型。

响应报文中的状态码是reponse中的status,一共可以分为5类:

  • 1xx:信息性状态码;
  • 2xx:成功状态码,如200表示成功;
  • 3xx:重定向状态码,如301表示重定向;
  • 4xx:客户端错误状态码,如404表示没有找到请求的资源;
  • 5xx:服务端错误状态码,如500表示内部错误。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-05-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • TCP/IP协议
  • HTTP协议
相关产品与服务
云联网
云联网(Cloud Connect Network,CCN)提供全网互联服务,助力您实现各地域的云上、云下多点互联。云联网的智能调度、路由学习等特性,可帮助您构建极速、稳定、经济的全网互联,轻松满足在线教育、游戏加速、混合云等全网互联场景下的极速体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档