网络编程基础

1、 参考模型和实际的网络模型

OSI参考模型和现在实际的网络模型图分别如下:

       

         需了解网络的分层的概念,每一层分别拥有不同的功能,为上层提供服务屏蔽下层的传输细节。可以理解为相同的层面之间有虚拟的通道传输数据。下面分别详细的讲解网络层、传输层、应用层的一些典型的协议。

2、 网络层IP协议

网络层的任务是实现将分组从源端沿着网络路径送达至目标端。网络层的协议有IP协议、ARP协议、ICMP协议等。IP协议的头部各个字段的含义请查阅相关资料,这边就不再赘述。需要了解的是Ipv4协议的五大类地址如下:


         还需要了解的是子网和子网掩码。IPV4的地址是有限的,使用子网技术可以使得一个地址号分成多个子网。我们来看一个B类地址,由上所述,B类地址是由一个14位的网络号和16位的主机号组成。子网的技术的主要思想为:将一个B类地址从主机号中拿出一些位用来构成一个子网号。如下图:

                                                    

如上图,通过6位的子网号可将一个B类地址分为64个子网,每个子网可以有2的10次方个主机,这样通过子网技术相当于增加了网络地址。

3、 TCP/UDP协议

TCP和UDP协议时传输层最为重要的协议。TCP(传输控制协议)是面向连接的,而UDP(用户数据报协议)是无连接的。TCP较为复杂但可靠性高,通过TCP传输的信息是有序、正确的,UDP较为简单,网络开销较小,适合于网络视频的实时性要求较高的场景。

TCP的三步握手

1)、客户端向服务器发送连接请求(SYN),同时附上自己的初始序列号(SEQ) X;

2)、服务器接受到客户端的连接请求后,给该连接分配缓冲区和变量,同时发出一个SYN信号,并附上自身的初始序列号(SEQ)Y,同时带上确认信号(ACK)X+1;

3)、客户端接收到服务器的SYN信号后,给该连接分配缓冲区和变量,给出确认信号(ACK)Y+1;


TCP连接释放的四次挥手:

         1)、主机A向连接的对方发送FIN信号,带上序列号SEQ =X;

         2)、主机B接收到对方的FIN信号后,发送确认信息ACK= X+1;

         3)、主机B所有的信息传输完毕后向A发送FIN信号,带上序列号SEQ =Y;

         4)、主机A接收到对方的FIN信号后,发送确认信息ACK= Y + 1;

         当连接双方的FIN信号均得到确认后,连接释放。如下图

    UDP用户数据报协议为应用程序提供一种方法来发送经过封装的IP数据报,而不用建立连接。UDP并不考虑流控制、错误控制、在收到一个坏的数据段后也不会重传。其包结构如下图:

源端口和目标端口用来标识出源机器和目标机器的应用进程的端口,关于端口的概念在第4节中介绍,UDP的长度包括了8个字节的头部和数据部分,UDP的校验和是可选的。

4、 端口和SOCKET套接字

上一节说的TCP、UDP协议是为所有的应用层提供服务的,当一个数据包从网络层提交到传输层,再有传输层提交到应用层时,需要知道这个数据包是提交到哪个应用层。端口是应用进程的地址标识,数据包中带有端口的信息,传输层将数据包提交给监听该端口的应用进程。端口是一个16位号码,分为临时(>=1024)和标准(0--1023)两种。

SOCKET套接字是应用进程与网络之间的接口。Socket有32的IP地址和16位的端口号组成。在传输层上进行传输的一对套接字必须是唯一的。



5、 http/https协议

http【超文本传输协议】是一种基于响应模式的、无连接【基于TCP的连接,这里的无连接的含义是每次连接只处理一次请求,但http1.1以后就支持常连接的方式了】、无状态的应用层的面向对象的协议。目前绝大多数的web应用均是基于http的,默认的端口是80端口。

http协议的请求。请求包括请求行、消息报头、消息正文。其中请求行包括METHOD Request-URI HTTP-VERSION CRLF。即方法、统一资源定位符、协议版本。其中方法有GET、POST、HEAD、DELETE等【注意是大写】。最为常用的是GET、POST,GET方法即是请求URI资源,而POST方法则请求URI资源,并附带数据【似乎有争议】。消息报头我们放到后面详述。

http协议的响应。响应包括状态行、消息报头、消息正文。其中状态行:HTTP-Version Status-Code Reasion-Phrase CRLF[代表回车换行]。其中状态码有:

1xx:【指示信息】表示请求已接受,继续处理;

2xx:【成功】表示请求已被成功接收、理解、并接受;

3xx:【重定向】要完成请求必须进行更进一步的操作;

4xx:【客户端错误】请求有语法的错误或者请求无法实现;

5xx:【服务器端错误】服务器端无法实现请求。

比较常见的错误如200成功、404请求页面不存在、500服务器内部错误。

         http协议的消息报头。消息报头可以理解为http客户端和服务器端的对话内容。分为以下四种。每一个报头的格式为name:value。

普通报头:有少数报头用于请求和响应消息,但并不用于传输实体,只用于传输消息。如Cache-Control:no-chache(表明请求和响应不能被缓存)。

 

请求报头:请求报头允许客户端向服务器端传递附加信息和自身的信息。如:Accept、Accept-Charset、Accept-Encoding、Accept-Language、Authorization、Host、User-Agent等。

 

响应报头:传递不能放在状态行的附加信息以及服务器自身的信息。如:Location、Server。

 

实体报头:定义了实体正文和请求所标识的资源的元信息。如:Content-Encoding、Content-Language、Content-Length、Content-Type、Last-Modified、Expires等。

         Https:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值