iOS 面试 - 网络

七层模型

应用层:用户接口、应用程序

表示层:数据表示、压缩和加密

会话层:会话的建立和结束

传输层:端到端控制

网络层:路由、寻找

数据链路层:保证无差错的忽略链路的data link

物理层:传输比特流

TCP和UDP的区别

TCP(传输控制协议):面向连接,提供可靠的数据传输,用于传输大量数据,使用数据流模式,速度慢,建立连接是开销较大。

UDP(用户数据协议):非面向连接,传输不可靠,用于传输少量的数据,速度快。

UDP可以实现一对多??

HTTP、HTTPS

1、HTTP是超文本传输协议,信息是明文传输,HTTPS是具有安全性的SSL加密传输协议。

2、HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

3、HTTP连接简单,无状态;HTTPS协议是由HTTP+SSL协议构成的可进行加密传输、身份认证的网络协议。

HTTP为什么底层是TCP不是UDP ?

TCP是基于流式传输的,怎么设计协议,进行协议的解析?

TCP为什么是三次握手和四次挥手?

TCP三次握手:

        1、由客户端发送一个叫做SYN(SYN=J)包到服务器,并进入SYN_SEND状态,然后等待服务器响应。

        2、服务器接收到SYN包,必须确定客户端的SYN(ACK=J+1),同时也发送一个SYN(SYN=K)包,也就是SYN+ACK,进入SYM_RECV状态 。

        3、接收到服务器发来的SYN+ACK包,并向服务器发送确认包ACK(ACK=K+1),发完之后,客户端和服务器进入ESTABLISHED状态,完成三次握手

TCP四次挥手(客户端关闭):

        1、客户端发送一个FIN的报文给服务器之后,进入等待服务器的响应

        2、服务器收到FIN后,并确认是由客户端发起的,同时也会发送一条ACK=X+1的报文

        3、等到客户端接收到ACK报文之后,服务器关闭了与客户端的连接,会发送一个FIN报文给客户端

    4、客户端收到由服务器发送的FIN报文后,就会关闭与服务器的连接,并且发送ACK给服务器

为啥是三次握手,四次挥手?

        1、连接时,服务端收到了客户端的SYN连接请求的报文之后,可以直接发送SYN+ACK报文,其中ACK报文是用来响应,SYN报文是用来同步的。

        2、关闭时,服务端收到FIN报文后,很可能并不会马上就关闭Socket连接,所以只能先回复一个ACK报文,告诉客户端,你发的FIN报文我收到了,只有等到服务器的所有报文发送完了,服务器才会发送FIN报文,所以才需要四次挥手。

TCP是如何保证可靠的?

拥塞控制

TCP 的拥塞控制主要是四个算法:慢启动、拥塞避免、拥塞发生、快速恢复。

慢启动算法:

        慢启动的算法如下(cwnd 全称 Congestion Window):

                1、连接建好的开始先初始化 cwnd = 1,表明可以传一个 MSS(Max Segment Size)大小的数据。

                2、每当收到一个 ACK,cwnd++; 呈线性上升。

                3、每当过了一个 RTT,cwnd = cwnd*2; 呈指数上升。

                4、还有一个 ssthresh(slow start threshold),是一个上限,当 cwnd >= ssthresh时,就会进入「拥塞避免算法」。

拥塞避免算法:

        前面说过,还有一个 ssthresh(slow start threshold),是一个上限,当 cwnd >= ssthresh 时,就会进入拥塞避免算法。一般来说 ssthresh 的值是 65535 字节,当 cwnd 达到这个值时后,算法如下:

                1、收到一个 ACK 时,cwnd = cwnd + 1/cwnd。

                2、当每过一个 RTT 时,cwnd = cwnd + 1。

        这样就可以避免增长过快导致网络拥塞,慢慢的增加调整到网络的最佳值。很明显,是一个线性上升的算法。

拥塞状态时的算法:

当丢包的时候,会有两种情况:

        1、等到 RTO 超时,重传数据包。TCP 认为这种情况太糟糕,反应也很强烈。

                    sshthresh = cwnd/2。

                    cwnd 重置为 1。

                    进入慢启动过程。

        2、快速重传(Fast Retransmit)算法,也就是在收到 3 个 duplicate ACK 时就开启重传,而不用等到 RTO 超时。

                    TCP Tahoe 的实现和 RTO 超时一样。

                    TCP Reno的实现是:

                            cwnd = cwnd/2。

                            sshthresh = cwnd。

                            进入快速恢复算法(Fast Recovery)。

上面我们可以看到 RTO 超时后,sshthresh 会变成 cwnd 的一半,这意味着,如果 cwnd<=sshthresh 时出现的丢包,那么 TCP 的 sshthresh 就会减了一半,然后等 cwnd 又很快地以指数级增涨爬到这个地方时,就会成慢慢的线性增涨。我们可以看到,TCP 是怎么通过这种强烈地震荡快速而小心得找到网站流量的平衡点的。  

快速恢复算法:

        TCP Reno 这个算法定义在 RFC5681。快速重传和快速恢复算法一般同时使用。快速恢复算法是认为,你还有 3 个 Duplicated Acks 说明网络也不那么糟糕,所以没有必要像 RTO 超时那么强烈。注意,正如前面所说,进入 Fast Recovery 之前,cwnd 和 sshthresh 已被更新:  

                cwnd = cwnd /2。

                sshthresh = cwnd。

        然后,真正的 Fast Recovery 算法如下:

                cwnd = sshthresh + 3 * MSS (3 的意思是确认有 3 个数据包被收到了)。

                重传 Duplicated ACKs 指定的数据包。

                如果再收到 duplicated ACKs,那么 cwnd = cwnd + 1。

                如果收到了新的 ACK,那么 cwnd = sshthresh,然后就进入了拥塞避免的算法了。

为什么要使用HTTP?为什么不直接用TCP?

如何保证HTTP传输到达?

HTTP头部有哪些内容?

TCP头部多长,IP呢

HTTP有哪些部分

HTTP协议GET、 POST的区别

HTTP超文本传输协议,是短连接,是客户端主动发送请求,服务器做出响应,服务器响应之后,链接断开。HTTP是一个属于应用层面向对象的协议,HTTP有两类报文:请求报文和响应报文。

HTTP请求报文:一个HTTP请求报文由请求行、请求头部、空行和请求数据4部分组成。

HTTP响应报文:由三部分组成:状态行、消息报头、响应正文。

区别:

        1、GET请求:参数在地址后拼接,没有请求数据,不安全(因为所有参数都拼接在地址后面),不适合传输大量数据(长度有限制,为1024个字节)。

                GET提交、请求的数据会附在URL之后,即把数据放置在HTTP协议头<requestline>中。以分割URL和传输数据,多个参数用&连接。如果数据是英文字母或数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密。

            POST请求:参数在请求数据区放着,相对GET请求更安全,并且数据大小没有限制。把提交的数据放置在HTTP包的包体<request-body>中。

        2、GET提交的数据会在地址栏显示出来,而POST提交,地址栏不会改变。

        GET提交时,传输数据就会受到URL长度限制,POST由于不是通过URL传值,理论上书不受限。

        POST的安全性要比GET的安全性高;

        通过GET提交数据,用户名和密码将明文出现在URL上,比如登陆界面有可能被浏览器缓存。

HTTPS:安全超文本传输协议(Secure Hypertext Transfer Protocol),它是一个安全通信通道,基于HTTP开发,用于客户计算机和服务器之间交换信息,使用安全套结字层(SSI)进行信息交换,即HTTP的安全版。

HTTP请求的哪些方法用过?什么时候选择GET、POST、PUT?

HTTP中的同步和异步

Http协议30x的错误是什么

Ping是什么协议

Http2.0如1.x的区别?

HTTP1.0:客户端的每次请求都要建立一次单独的连接,在处理完本次请求后,就自动释放连接

HTTP1.1:可以在一次连接中处理多个请求,并且多个请求可以叠加进行,不需要等待一次请求结束后再发送下一个请求

HTTP2.0:兼容HTTP1.1(貌似是优化版本,提高了Web性能)

Cookie

因为 Http 无状态的特性,如果需要判断是哪个用户,这时就需要 Cookie 和 Session。

Cookie 存储在客户端,用来记录用户状态,区分用户。一般都是服务端把生成的 Cookie 通过响应返回给客户端,客户端保存。

Session 存储在网络端,需要依赖 Cookie 机制。服务端生成了 Session 后,返回给客户端,客户端 setCookie:sessionID,所以下次请求的时候,客户端把 Cookie 发送给服务端,服务端解析出 SessionID,在服务端根据 SessionID 判断当前的用户。  

修改 :

        1、相同 Key 值得新的 Cookie 会覆盖旧的 Cookie。

        2、覆盖规则是 name path 和 domain 等需要与原有的一致。

删除:

        1、相同 Key 值得新的 Cookie 会覆盖旧的 Cookie。

        2、覆盖规则是 name path 和 domain 等需要与原有的一致。

        3、设置 Cookie 的 expires 为过去的一个时间点,或者 maxAge = 0。

如何保证 Cookie 的安全?

1、对 Cookie 进行加密处理。

2、只在 Https 上携带 Cookie。

3、设置 Cookie 为 httpOnly,防止跨站脚本攻击。

NSCache

自己设计一个缓存器

怎么实现LRU

MTU?

发送一个HTTP请求的过程

socket异常断开时,设计一个合理的重连机制。

断点续传怎么实现?需要设置什么?

断点续传可以分为两部分:一部分是断点,一部分是续传。断点续传实质就是能记录上一次已下载完成的位置。

1、断点续传需要在下载过程中记录每条线程的下载进度。

2、每次下载开始之前先读取数据库,查询是否有未完成的记录,有就继续下载,没有则创建新记录插入数据库。

3、在每次向文件中写入数据之后,在数据库中更新下载进度。

4、下载完成之后删除数据库中下载记录。

描述下IM系统如何保证消息不丢

IM数据库如何设计表

抓包工具抓取HTTPS的原理




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

推荐阅读更多精彩内容