Android开发需要了解的网络编程基础

作者:HelloLollipop
地址:https://blog.csdn.net/HelloLollipop/article/details/80745726
声明:本文来自 HelloLollipop 投稿,转发等请联系原作者授权

一、概述

网络通信需要通过协议来完成,目前所使用的网络通信协议主要由两种模型体现。

  • 因特网模型【五层】
    应用层 → 运输层 → 网络层 → 链路层 → 物理层

  • OSI/ISO模型【开放式系统互联 七层】
    应用层 → 表示层 → 会话层 → 运输层 → 网络层 → 链路层 → 物理层

  • 简化五层 → TCP/IP模型【最常见 四层】
    应用层 → 运输层 → 网络层 → 网络接口层

二、五层模型概述(不考虑物理层)

  • 应用层
    HTTP协议存在这一层(除此之外还有TELNET、FTP、SNMP、TFTP、NTP几种模型),位于应用层要传递的信息称为报文。

  • 传输层
    TCP、UDP协议存在于这一层,这两种协议把应用层的报文封装成一个新的结构,叫做报文段,在两个程序之间传递。

  • 网络层
    IP协议存在于这一层,网络层把传输层的报文段封装成一个叫做数据报的数据结构,把这个数据结构从一台主机移动到另一台主机上。

  • 链路层
    在一层把网络层的数据报再次封装,叫做帧。这一层把帧从当前节点移动到下一个节点,如从主机传输到路由器。

三、应用层概述(HTTP协议)

应用层目前主要使用两种体系结构,C/S结构(客户端/服务端结构),P2P结构(对等体系结构)。

HTTP协议,存在于应用层,契合C/S结构。用于将数据封装成请求报文发送。

请求报文,主要四部分组成:请求行,请求头,空行,请求体。

  • 请求行:由三个部分组成,请求方法+URL+协议版本,请求方法:GET、POST、PUT等共八种;URL是一个统一资源标识符(如www.baidu.com等);协议版本(如HTTP/1.1)。

  • 请求头:键值对的形式,每行一对,关键字和值用英文冒号分隔,请求头通知服务器有关于客户端请求的信息。参考资料

  • 空行符:分割请求头和请求体的作用。

  • 请求体:以GET方法和POST方法来解释:当请求方法为POST时,客户端需要填写相关的表单,与请求包体相关的最常使用的是包体类型 Content-Type 和包体长度 Content-Length。GET通常不需要请求体。
    响应报文,与请求报文对应,是服务端返回给客户端的请求结果。

响应报文由四个部分组成:状态行,响应头,空行,响应体。

  • 状态行:包含了状态码(状态码自行查询含义)。

  • 响应头:参考资料

  • 响应体:服务器返回的文本信息。

四、传输层概述(UDP/TCP协议)

在网络通信的传输层,存在两种运输协议,UDP(用户数据报协议),TCP(传输控制协议)。两种协议都可以传递应用层中的请求报文。UDP与TCP的数据报结构参考:https://juejin.im/post/5a2614b8f265da432652af7d

UDP(用户数据报协议)特点

  1. 无连接的通讯协议

  2. 传输数据有大小限制,每个被传输的数据限定在64KB之内

  3. 是一个不可靠协议,不能保证数据传输的完整性与次序

  4. 传输速度快开销较小

  5. 支持一对一、一对多、多对一、多对多通信

TCP(传输控制协议)特点

  1. 面向连接的协议

  2. 只支持点对点的通信

  3. 传输的数据没有大小限制

  4. 是一个可靠的协议,可以保证数据传输的完整性与次序

  5. 耗时较多开销较大

TCP连接相关的报文相关缩写:SYN(同步标志synchronous)、ACK(确认标志Acknowledgement)、ACK序号(Acknowledgment Number)、SEQ(序列号Sequence Number)、FIN(结束标志final)

TCP建立连接的过程(三次握手)

  1. 第一次握手:客户端发送一个请求报文段,将报文段首部的一个标志位SYN设置为1,同时,客户端会把报文段的序列号SEQ设置为一个随机值x。这个时候,客户端进入到SYN_SEND状态,等待服务器确认。

  2. 第二次握手:服务器收到报文段,对齐进行确认。把这个收到的报文段的ACK序号设置为x + 1;同时,向客户端发送一个响应请求报文段,讲这个请求的SYN标志位设置为1,序列号SEQ设置为一个随机值y。然后服务器将上述信息整合成一个报文段,一并发送给客户端,此时服务器进入SYN_RECV状态。

  3. 第三次握手:客户端收到整合后的报文段,将这个报文段的ACK序号设置为y + 1,并将ACK报文段发送给服务器进行连接确认,服务器接收到这个报文段后,客户端与服务器都进入ESTABLISHED状态。建立连接以后,SYN被置为0,接下来就可以进行数据传输了。

TCP关闭连接的过程(四次挥手)

  1. 第一次挥手:客户端向服务器发送一个特殊的报文段,这个报文段的首部标志位FIN设置为1,这个时候客户端进入FIN_WAIT_1状态,表示客户端没有数据要发送给服务器了。

  2. 第二次挥手:服务端收到客户端发送的报文段后,向客户端发送了一个ACK报文段,客户端收到后进入FIN_WAIT_2状态,服务器告诉客户端,同意关闭请求。

  3. 第三次挥手:服务器再次向客户端发送一个FIN报文段,FIN标志未设置为1,请求关闭连接,同时服务器进入LAST_ACK状态;

  4. 第四次挥手:客户端收到这个FIN报文段后,向服务器发送AKC报文段,客户端此时进入TIME_WAIT状态。服务器收到这个ACK报文段后,就关闭连接。此时客户端等待2ms后没有收到回复,说明服务器已经关闭连接,那么客户端也关闭连接。

(0)

相关推荐

  • 计算机网络原理 笔记精整理 对线面试官

    计算机网络知识点整理 一.计算机网络体系结构 OSI的七层协议体系结构的概念清除,理论也比较完整,但它既复杂又不实用. TCP/IP是一个四层体系结构,TCP/IP体系结构虽然简单,但它现在却得到了非 ...

  • 这可能是你见过最全面的网络安全面试题了——入门篇

    防范常见的 Web 攻击 什么是 SQL 注入攻击 攻击者在 HTTP 请求中注入恶意的 SQL 代码,服务器使用参数构建数据库 SQL 命令时,恶意SQL 被一起构造,并在数据库中执行. 用户登录, ...

  • 计算机网络常用知识总结!

    OSI七层模型 「物理层」 首先解决两台物理机之间的通信需求,具体就是机器A往机器B发送比特流,机器B能收到比特流. 物理层主要定义了物理设备的标准,如网线的类型,光纤的接口类型,各种传输介质的传输速 ...

  • 王道考研 计算机网络笔记 第五章:传输层

    第五章 一.传输层概述 1. 功能 2. 传输层两个协议 3. 传输层的寻址与端口 二.UDP协议 1. 概述 2. UDP首部格式 3. UDP校验 三.TCP协议 1. 慢开始&拥塞避免 ...

  • C# Socket网络通信基础教程

    本来哥们儿是Java开发,何奈公司需要开发机器人后台,用C#.就简单分享一下C#通讯的编程,希望可以帮到大家! 一:什么是SOCKET socket的英文原义是"孔"或" ...

  • 老曹眼中的网络编程基础

    我们是幸运的,因为我们拥有网络.网络是一个神奇的东西,它改变了你和我的生活方式,改变了整个世界. 然而,网络的无标度和小世界特性使得它又是复杂的,无所不在,无所不能,以致于我们无法区分甚至无法描述. ...

  • 全栈必备——网络编程基础

    我们是幸运的,因为我们拥有网络.网络是一个神奇的东西,它改变了你和我的生活方式,改变了整个世界. 然而,网络的无标度和小世界特性使得它又是复杂的,无所不在,无所不能,以致于我们无法区分甚至无法描述. ...

  • Python网络编程基础及socket之TCP收发消息及文件

    网络编程必须了解的基本概念 MAC地址:是全球唯一标示的网络接口,每一个网卡接口.交换机接口.路由器接口的mac地址均不相同.mac地址是通信子网内部相互通信的标识,交换机根据mac地址区分用户.ma ...

  • 迅为4412开发板Qt网络编程-UDP实现服务器和客户端

    UDP 协议是开放式,无连接,不可靠的传输层通信协议,但它收发数据的速度相对于 TCP 快很多,常用在传输音视频等数据量非常大的场合.udp 网络编程只需要使用一个类 QUdpSocket. 本实验中 ...

  • 4412开发板Qt网络编程-TCP实现服务器和客户端

    网络编程有 TCP 和 UDP,TCP 编程需要用到俩个类:QTcpServer 和 QTcpSocket. 1 TCP 实现服务器和客户端 TCP 协议(Transmission Control P ...

  • 【Linux网络编程】Nginx -- 模块开发(基本模块解析)

    [1]处理流程图示 Nginx 一次常规的请求和响应的处理流程 典型的 HTTP 模块在 Nginx 中调用的简化流程 [2]模块开发示例 [2.1]将模块编译进入 Nginx 将模块源代码文件放到一 ...

  • Android NDK 开发之旅 3 -- C 语言基础--内存分配

    Android NDK 开发之旅 3 -- C 语言基础--内存分配

  • vba编程基础1

    在主要的编程语言中, 结构体是用大括号来表示 代码段的 范围 界定的. 但是在一些比较'老的'语言中,由于历史原因, 还是使用的 是: 关键字来进行界定代码 的 结构段, 如vba中的 语法结构: i ...

  • 《颜色开发培训讲义》4.色度学基础:CIE-L*a*b*颜色空间

    通过第三节的介绍,了解到颜色感知三要素,下面开始介绍它应用--色度学 研究颜色测量的学科叫做色度学,色度学的任务就是用数量化来表征色觉特性. "色度"中的"度" ...