网络通信

1.TCP 三次握手: TCP/IP协议 , TCP协议 提供可靠的连接服务, 采用三次握手建立一个连接 .
所谓三次握手( Three-Way Handshake)即建立 TCP连接,就是指建立一个 TCP连接时,需要客户端和服务端总共发送 3个包以确认连接的建立。在 socket编程中,这一过程由客户端执行 connect来触发,整个流程如下图所示:

2 TCP三次握手

1 )第一次握手: Client 将标志位 SYN 置为 1 ,随机产生一个值 seq=J ,并将该数据包发送给 Server Client 进入 SYN_SENT 状态,等待 Server 确认。
2)第二次握手: Server收到数据包后由标志位 SYN=1知道 Client请求建立连接, Server将标志位 SYNACK都置为 1ack=J+1,随机产生一个值 seq=K,并将该数据包发送给 Client以确认连接请求, Server进入 SYN_RCVD状态。
3)第三次握手: Client收到确认后,检查 ack是否为 J+1ACK是否为 1,如果正确则将标志位 ACK置为 1ack=K+1,并将该数据包发送给 ServerServer检查 ack是否为 K+1ACK是否为 1,如果正确则连接建立成功, ClientServer进入 ESTABLISHED状态,完成三次握手,随后 ClientServer之间可以开始传输数据了。
2. 四次挥手
所谓四次挥手( Four-Way Wavehand)即终止 TCP连接,就是指断开一个 TCP连接时,需要客户端和服务端总共发送 4个包以确认连接的断开。在 socket编程中,这一过程由客户端或服务端任一方执行 close来触发,整个流程如下图所示:

3 TCP四次挥手

由于TCP 连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个 FIN 来终止这一方向的连接,收到一个 FIN 只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个 TCP 连接上仍然能够发送数据,直到这一方向也发送了 FIN 。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。
1)第一次挥手: Client发送一个 FIN,用来关闭 ClientServer的数据传送, Client进入 FIN_WAIT_1状态。
2)第二次挥手: Server收到 FIN后,发送一个 ACKClient,确认序号为收到序号 +1(与 SYN相同,一个 FIN占用一个序号), Server进入 CLOSE_WAIT状态。
3)第三次挥手: Server发送一个 FIN,用来关闭 ServerClient的数据传送, Server进入 LAST_ACK状态。
4)第四次挥手: Client收到 FIN后, Client进入 TIME_WAIT状态,接着发送一个 ACKServer,确认序号为收到序号 +1Server进入 CLOSED状态,完成四次挥手。
上面是一方主动关闭,另一方被动关闭的情况,实际中还会出现同时发起主动关闭的情况,具体流程如下图:

4 同时挥手

3.HTTP 协议中GETPOST

HTTP 定义了与服务器交互的不同方法,最常用的有4种,GetPostPutDelete,如果我换一下顺序就好记了,Put(增),Delete(删),Post(改),Get(查),即增删改查,下面简单叙述一下:

1Get, 它用于获取信息,注意,他只是获取、查询数据,也就是说它不会修改服务器上的数据,从这点来讲,它是数据安全的,而稍后会提到的Post它是可以修改数据的,所以这也是两者差别之一了。

2Post,它是可以向服务器发送修改请求,从而修改服务器的,比方说,我们要在论坛上回贴、在博客上评论,这就要用到Post了,当然它也是可以仅仅获取数据的。

3Delete 删除数据。可以通过Get/Post来实现。用的不多,暂不多写,以后扩充。

4Put,增加、放置数据,可以通过Get/Post来实现。用的不多,暂不多写,以后扩充。

下面简述一下GetPost区别:

1GET请求的数据是放在HTTP包头中的,也就是URL之后,通常是像下面这样定义格式的,(而Post是把提交的数据放在HTTP正文中的)。

login.action?name=hyddd&password=idontknow&verify=%E4%BD%E5%A5%BD

a,以 ? 来分隔URL和数据; 

b,以& 来分隔参数;

c,如果数据是英文或数字,原样发送;

d,如果数据是中文或其它字符,则进行BASE64编码。  

2GET提交的数据比较少,最多1024B,因为GET数据是附在URL之后的,而URL则会受到不同环境的限制的,比如说IE对其限制为2K+35,而POST可以传送更多的数据(理论上是没有限制的,但一般也会受不同的环境,如浏览器、操作系统、服务器处理能力等限制,IIS4可支持80KBIIS5可支持100KB)。

3Post的安全性要比Get高,因为Get时,参数数据是明文传输的,而且使用GET的话,还可能造成Cross-site request forgery攻击。而POST数据则可以加密的,但GET的速度可能会快些。

4. 网络通信的关键类和方法
1)重要的网络访问类 HttpUrlConnection

2get请求的全流程:

 

Post请求:

 

3HTTP请求报文和HTTP响应报文

HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的。HTTP有两类报文:请求报文和响应报文。

HTTP请求报文

一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成,下图给出了请求报文的一般格式。

 

request-line
headers
blank line
[ request-body

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

如下所示,HTTP 响应的格式与请求的格式十分类似:
status-line
headers
blank line
[ response-body ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhwadezh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值