Android开发也需要了解的TCP\IP和Http知识

图1.png

左边是标准的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:终止位,用来在数据传输完毕后释放连接。

整个传输过程如图

图2.jpg

图中上部分为三次握手,下部分为四次挥手。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)两种类型,这两种类型都包括三部分:首行、头部和主体。


图3.png

请求报文的首行是请求行,包括方法(请求类型)、URL和HTTP版本三项内容,响应请求的首行是状态行,包括HTTP版本、状态码和简短原因三项内容,其中原因可有可无。

头部保存一些键值对的属性,用冒号“:”分割。

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

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

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

  • 1xx:信息性状态码;

  • 2xx:成功状态码,如200表示成功;

  • 3xx:重定向状态码,如301表示重定向;

  • 4xx:客户端错误状态码,如404表示没有找到请求的资源;

  • 5xx:服务端错误状态码,如500表示内部错误。

另外,DNS协议的作用是将域名解析为IP。它作用在应用层。

本文原创发布于公众号《Android面试专栏》,原文

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,110评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,443评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,474评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,881评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,902评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,698评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,418评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,332评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,796评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,968评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,110评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,792评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,455评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,003评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,130评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,348评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,047评论 2 355

推荐阅读更多精彩内容

  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,054评论 0 8
  • 1.这篇文章不是本人原创的,只是个人为了对这部分知识做一个整理和系统的输出而编辑成的,在此郑重地向本文所引用文章的...
    SOMCENT阅读 13,069评论 6 174
  • 24.1 引言 TCP已经在从1200 b/s的拨号SLIP链路到以太数据链路上运行了许多年。在80年代和90年代...
    张芳涛阅读 1,490评论 0 3
  • 18.1 引言 TCP是一个面向连接的协议。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。本章将...
    张芳涛阅读 3,383评论 0 13
  • TCP/IP概述 TCP/IP起源于1969年美国国防部(DOD:The United States Depart...
    zhf_Zachariah阅读 5,668评论 6 114