Android 网络编程小结

  先看看当我们在浏览器输入www.baidu.com,按下回车键后,经历了哪些过程。

  1.将域名转为IP。浏览器拿到URL的域名后去自己的缓存的查找,看缓存中是否有对应的IP,有则直接返回。如果没有去电脑缓存中查,如果还没有,则向DNS服务器发起请求,由近及到远的方式,先到你电脑附近的电信运行商服务器查…,如果一直没有查到,最后会到达全球的13台DNS根服务器去找。

  2.根据该 IP 地址和默认端口 80,和服务器建立TCP连接,经历TCP的三次握手,如果是https,则还会经历SSL或TLS握手商定交换秘钥的过程;

  3.浏览器用指定的协议样式向服务端发起请求,HTTP请求格式如下所示四部分组成,分别是请求行、请求头、空行、消息体,每部分内容占一行。

  4.服务器响应浏览器的请求,服务器接收处理完请求后返回一个HTTP响应消息给客户端。HTTP响应消息的格式包括:状态行、响应头、空行、消息体。每部分内容占一行。

  5.浏览器解析服务器返回的数据,给用户展示。

  6.与服务器断开连接,TCP四次挥手。

重点知识
一、TCP的三次握手在这里插入图片描述
三次握手过程
  (1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
  (2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
  (3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

二、TCP四次挥手

在这里插入图片描述

四次挥手过程
  (1)首先客户端请求关闭客户端到服务端方向的连接,这时客户端就要发送一个FIN=1,表示要关闭一个方向的连接(见上面四次分手的图)

  (2)服务端接收到后是需要确认一下的,所以返回了一个ACK=1

  (3)这时只关闭了一个方向,另一个方向也需要关闭,所以服务端也向客户端发了一个FIN=1 ACK=1

  (4)客户端接收到后发送ACK=1,表示接受成功

单个信号作用
SYN:代表请求创建连接,所以在三次握手中前两次要SYN=1,表示这两次用于建立连接,至于第三次什么用,在疑问三里解答。

FIN:表示请求关闭连接,在四次分手时,我们发现FIN发了两遍。这是因为TCP的连接是双向的,所以一次FIN只能关闭一个方向。

ACK:代表确认接受,从上面可以发现,不管是三次握手还是四次分手,在回应的时候都会加上ACK=1,表示消息接收到了,并且在建立连接以后的发送数据时,都需加上ACK=1,来表示数据接收成功。

seq:序列号,什么意思呢?当发送一个数据时,数据是被拆成多个数据包来发送,序列号就是对每个数据包进行编号,这样接受方才能对数据包进行再次拼接。

初始序列号是随机生成的,这样不一样的数据拆包解包就不会连接错了。(例如:两个数据都被拆成1,2,3和一个数据是1,2,3一个是101,102,103,很明显后者不会连接错误)

ack:这个代表下一个数据包的编号,这也就是为什么第二请求时,ack是seq+1。

相关问题:
1.为什么握手是3次?第2次后服务器确定可以后,客户端直接发数据可不可以?
答:三次握手的目的是确定数据传输初始序号的可靠性,因为TCP协议是通过序号来保证传输数据的连续性的,这个序号需要客户端和服务号一起确定。不可以,因为如果网路延迟,导致客户端发的第一次握手迟迟未送到服务端,这是客户端以为发送失败了,这是重新发起第二轮的握手,这时,服务端有可能会受到2次连接的请求,就会造成资源浪费。如果有了第三次,服务端就可以知道后者两次是同一次网络请求,就可以抛弃一个。

2.为什么挥手要4次?
答:因为连接是双向的,两端都有可能还有未发送完全的数据。客户端发完了数据后通知服务端,服务端回应收到,服务端发完数据后也要通知客户端,然后客户端也回应收到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值