网络协议
网络的五层划分是什么?
- 应用层,常见协议:HTTP、FTP
- 传输层,常见协议:TCP.UDP
- 网络层,常见协议:IP
- 链路层
- 物理层
TCP 和 UDP 的区别是什么
- TCP/UDP 都属于传输层的协议
- TCP 是面向
连接
的传输层协议,能够准确可靠
的把数据传递给对方,当数据有丢包情况会重发,但是需要在建立和断开连接需要至少7次的发包和收包,会浪费网络流量
,主要用在对可靠性要求较高的地方。 - UDP 是面向
无连接
的传输层协议,意思是只负责传输数据,不能确保
对方是否收到数据和数据的正确顺序,数据的正确性由应用层来校验。主要用于高速传输和实时性要求较高的场合如音视频会议,广播。
TCP 三次握手和四次挥手
- 先来张图
- 来张 wireShark 抓取的
tcp
图
TCP 三次握手
- TCP 三次握手图
- 第一次握手:客户端向服务器端发起请求,在请求中携带一个
SYN=1
标志,并携带一个随机数 seq = x,这时客户端进入 SYN_SENT 状态,等待服务器确认
- 第二次握手: 服务器端收到了该消息,由 SYN=1 可以知道客户端请求建立连接,服务器将 SYN 和 ASK 都置为1,ask=x+1,随机产生一个值 seq =k,并将数据包发送给客户端以确认连接请求,服务器端进入 SYN_RCVD 状态
- 第三次握手: 客户端接收到了该消息,检查 ACK 是否为1,ack 是否为 x+1 , 如果正确则将标志位 ACK 置为1, ack = k+1,并将该数据包发送给服务器端,服务器端检查 ACK 是否为1,ack 是否为 k+1,如果正确则连接建立成功,服务器端和客户端进入 ESTABLISHED 状态,完成三次握手,随后服务器端和客户端可以开始传输数据。
- 为什么需要三次握手才能建立连接,两次不可以吗?
TCP 四次挥手
- 第一次挥手:client 发送报文,标志位 FIN =1,seq = n,此时客户端进入到 FIN_WAIT_1 状态,表示客户端没有数据要发送给服务器
- 第二次挥手:服务端收到客户端发送的 FIN 报文,向客户端回一个 ACK =1 的报文,
- 第三次挥手:
- 第四次挥手:
https://blog.csdn.net/sssnmnmjmf/article/details/68486261
https://blog.csdn.net/oney139/article/details/8103223
- 针对本人对 TCP 三次握手和四次挥手不了解,还有网络上各种文章充斥甚至于两篇文章都矛盾,所以使用 wireShark 对 Android 通讯进行了抓包,然后根据抓到的数据学习下 TCP 三次握手和四次挥手
- 环境
- whireShark: 2.6.1
- Android device: HTC D820U
- Android Version: 6.0
- Android IP : 192.168.123.103
- Destination IP : 183.192.196.182