iOS知识梳理之移动开发网络篇TCP/IP

1.OSI七层 TCP/IP五层

1.1 OSI七层参考模型
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层

对于OSI七层参考模型,我想说只有这七个词条.任何与实际生产脱钩的东西都需要硬性记忆.
TCP/IP五层模型我不需要硬性记忆,就可以根据应用逻辑复述出来.

1.2 TCP/IP五层模型

TCP/IP五层模型

应用层
传输层
网络层
数据链路层
物理层

TCP/IP是一组通信协议的代名词,是由一系列协议组成的协议簇.


上图是TCP/IP五层模型前四层对应的协议.(图片来源自网络,部分翻译与本文有出入)

接下来我们就按顺序来说说每一层.

2.应用层

应用层的协议有:HTTP,FTP,DNS等.他们都是有自己对应端口的,
所谓端口就是:数据由网络到达终端(手机,PC),然后交给谁.QQ聊天的数据就交给QQ,网页浏览的数据就交给浏览器.QQ,浏览器等进程都是有对应端口的.但端口分为不同类型:

IANA:互联网地址编码分配机构(Internet Assigned Numbers Authority)

熟知端口(著名端口):0-1023,由IANA指派和控制.(如:FTP:21,SSH:22,SMTP:25,DNS:53,HTTP:80,HTTPS:443等)
注册端口:1024-49151,IANA不指派也不控制,但须注册.
动态端口(短暂端口):49152-65535,IANA不指派也不控制,无须注册.通常被用来在主动发起连接时随机分配使用.

接下来我们会用HTTP,DNS来走完TCP/IP的五层结构.用这两个因为:
1.HTTP对应TCP,DNS对应UDP,这样可以囊括传输层的两个重要协议.
2.HTTP与DNS在真实的应用场景下有穿插.

2.1 HTTP

如上图所示就是我打开简书首页时用HTTP的GET方式发出的请求.(字段有些多,看上去复杂,其实我们做的只是输入一个网址,其他参数浏览器自己会配置好的)
到HTTP的各个字段全都配置好后,其实HTTP的'发'工作也就已经完成了,下面就该把数据交给传输层的TCP了.(数据传入TCP前还有个小插曲,请看2.2 DNS)

2.2 DNS

我在打开网页的时候输入的是http://www.jianshu.com/,这是域名.但在真实的网络环境下是不会用域名进行通信的.通信时数字的效率永远是最快的,这也就是IP地址(就像生活中的邮编与门牌号).

四川成都温江柳台大道555号     邮编:611130

但完全让我们这些凡夫俗子用输入IP的方式来访问网页也不现实!

www.baidu.com  119.75.217.109
www.163.com  114.80.143.193

DNS(Domain Name System)也就是一个折中.
DNS就是一个域名换IP应用协议.

这也就是上面说的插曲.HTTP请求数据准备完毕后,不是往www.jianshu.com域名上发,而是往www.jianshu.com对应的IP上发.以下就是用DNS,以域名为参数,请求对应的IP地址.


而且这个DNS请求是直接向IP地址发的,我们在终端(手机,PC)上都会配置DNS服务器的IP地址,就是用在这的.当然DNS的请求数据准备好后,其实DNS'发'的工作也就已经完毕了,数据会交给下层传输层的UDP.

以下就是DNS收到的回复:



DNS缓存:当然不可能每回用浏览器打开www.jianshu.com都要用DNS询问下DNS服务器简书的域名对应的IP地址是什么.操作系统本身有DNS缓存,浏览器自己也有DNS缓存.有兴趣请戳:主流操作系统、浏览器DNS缓存时间

3.传输层

前文说到:
DNS将数据准备好后交给UDP.
DNS收到回复,获取到域名对应的IP地址,HTTP也会将准备好数据交给TCP.

UDP与TCP同属于传输层.他们的关系就好像邮政和顺丰一样.都是快递公司,但由于工作属性,模式,态度的不一样,被不同的应用层协议所用.

TCP---传输控制协议,提供的是面向连接,可靠的字节流服务.当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据.TCP提供数据包重发,丢弃重复数据,检验数据,流量控制,拥塞控制等功能,保证数据能从一端传到另一端.

UDP---用户数据报协议,是一个简单的面向数据报的传输层协议.UDP不提供可靠性,它只是把应用层提供的数据发送出去,但是并不能保证它们能到达目的地.由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有数据包重发等机制,故而传输速度很快.

TCP UDP
正式通信前先建立连接,结束后断开连接 无连接
流量控制 没这回事
数据包重发 没这回事
丢弃重复数据 没这回事
拥塞控制 没这回事

说那么多,简单些的描述就是:
TCP是面向连接,可靠的数据传输协议
UDP是无连接,不可靠的数据传输协议

接下来我们也会由连接可靠这两块来对TCP和UDP进行对比分析.

3.1 TCP

在说TCP的面向连接可靠之前,我们先来看看TCP报文段的格式,因为无论是面向连接还是可靠都依赖于TCP报文段的格式.

3.1.1 TCP报文段的格式

很清楚的能看到TCP报文段大体分为两部分:TCP首部,TCP数据部分.
HTTP的数据交给TCP就放在TCP数据部分.

TCP首部:

源端口和目的端口:上面已经说过了应用层协议都有对应的端口号(HTTP:80)

序号(seq):TCP连接中传送的数据流中的每一个字节都编上一个序号.序号字段的值则指的是本报文段所发送的数据的第一个字节的序号.

确认号(ask):是期望收到对方的下一个报文段的数据的第一个字节的序号.

首部长度:它指出TCP首部共有多少个4字节,首部长度可以在20~60字节之间.因此,这个字段值可以在5(5X4=20)至15(15X4=60)之间.

标记位:URG,ACK,PSH,RST,SYN,FIN.标记该TCP报文段的意图(如:ASK==>确认).

窗口:窗口用来控制对方发送的数据量,单位为字节.TCP连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限.

检验和:检验和检验的范围包括首部和数据这两部分.在计算检验和时,要在TCP报文段的前面加上12字节的伪首部.

紧急指针:紧急指针指出在本报文段中的紧急数据的最后一个字节的序号.

选项:长度可变.TCP只规定了一种选项,即最大报文段长度 MSS(Maximum Segment Size).MSS告诉对方TCP:
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值