一文带你走进网络编程

时间:2022-12-11 11:52:32

网络编程

什么是网络编程:

就是用来实现网络互通的不同计算机运行程序之间进行数据的交换的编程

网络模型

OSI(模型):七层协议

应用层: 如: HTTP协议 主要解决如何包装数据,用于通信的应用程序和用于消息传输的底层网络提供接口,提供常见的网络应用服务
表示层: Linux给window发包,两个系统语法不一致,就像安装包一样,exe是不能在linux下用的,shell在window下也是不能直接运行的。于是需要表示层,帮我们解决不同系统之间的通信语法问题
会话层: 要建立一个自动收发包,自动寻址的功能。会话层的作用就是建立和管理应用程序之间的通信,自动调用TCP去打包
传输层: 如: TCP协议 保证传输大量文件时的准确性。于是,对发出去的数据进行封装。就像发快递一样,一个个地发。
网络层: 如: IP协议 即路由器,交换机那些具有寻址功能的设备所实现的功能。这一层定义的是IP地址,通过IP地址寻址。所以产生了IP协议
数据链路层:通过无线电波,通过其它介质来传输。然后我还要保证传输过去的比特流是正确的,要有纠错功能。
物理层: 主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等它的主要作用是传输比特流,

TCP五层模型

一文带你走进网络编程

TCP/IP协议中的应用层处理七层模型中的第五层、第六层和第七层的功能。TCP/IP协议中的传输层并不能总是保证在传输层可靠地传输数据包,而七层模型可以做到。TCP/IP协议还提供一项名为UDP(用户数据报协议)的选择。UDP不能保证可靠的数据包传输

HTTP(超文本传输协议)

是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式

HTTP请求

由三部分组成,分别是:请求行、消息报头、请求正文。

请求行

Method Request-URI HTTP-Version(三部分空格隔开)

其中:

Method表示请求方法
      GET       请求获取Request-URI所标识的资源
      POST       在Request-URI所标识的资源后附加新的数据(GET请求往往把自制
                  数据放在quary_string中,POST请求往往把自定制数据放在body中)
      HEAD      请求获取由Request-URI所标识的资源的响应消息报头
      PUT      请求服务器存储一个资源,并用Request-URI作为其标识
      DELETE     请求服务器删除Request-URI所标识的资源
      TRACE      请求服务器回送收到的请求信息,主要用于测试或诊断
      CONNECT     保留将来使用
      OPTIONS     请求查询服务器的性能,或者查询与资源相关的选项和需求
​
Request-URI是一个统一资源标识符;
      请求的地址 
HTTP-Version表示请求的HTTP协议版本。
现在大多都是1.1的
​

消息报头(header)

若干个键值对,每个键值对占一行,每个键和值之间使用:分割

请求正文(body)

 一般GET请求没有body,POST请求才有

HTTP响应格式

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

状态行

HTTP-Version表示服务器HTTP协议的版本;

Status-Code表示服务器发回的响应状态代码;

Reason-Phrase表示状态代码的文本描述。

状态码: 1xx:指示信息–表示请求已接收,继续处理; 2xx:成功–表示请求已被成功接收、理解、接受; 3xx:重定向–要完成请求必须进行更进一步的操作; 4xx:客户端错误–请求有语法错误或请求无法实现; 5xx:服务器端错误–服务器未能实现合法的请求。

消息报头(header)

任然是一组键值对,每个键值对占一行每个键和值之间用:分割

Content-Type:描述了body的数据格式类型; Content-Length:描述了body的数据长度(字节Byte); Host:描述了访问的主机名(域名/ip); Referer:当前页面是从哪个页面跳转过来的; Cookie:字符串,浏览器的本地存储的能力之一,中经常会包含一种叫做“身份标识”的信息(session id); Session:服务器端维护的一个数据结构,记录了用户的身份信息,session id就是session对象的唯一身份标识,session id 存在浏览器中,浏览器后续在访问服务器的时候,就会自动带着session id,从而让服务器知道当前请求是哪个用户发来的。

User-Agent:会告诉网站服务器,访问者是通过什么工具来请求的,手机还是电脑等。

响应正文(body)

响应中的正文格式也有很多种,比如可以是一个html,也可以是一个css,也可以是一个JavaScript,还可以是一个图片数据,还可以是一个json数据

常用的命令(重点)

ping ,ipconfig ,telnet

本机地址(重点)

127.0.0.1 代表自己的电脑主机

localhost 代表本机

端口

用于标识进程的逻辑地址,不同的进程端口不同。

netstat -ano

比如说QQ,微信,是通过ip:端口发送数据到对应好友的电脑上。

QQ 端口 10.1.1.2:1010

微信 端口 10.1.1.2:10080

TCP和UDP(重点)

常见的两种协议:

UDP:将数据源和目的地封装到数据包中,不需要建立连接

每个数据包的大小有限制

因为不用建立连接,所以安全性差,但是速度快

应用场景:

游戏

TCP: 建立连接形成传输数据的通道,然后再传输数据,通过三次握手。安全性高,效率低

Socket

Socket是网络编程提供的一种机制,通信的两端都要有socket,网络通信其实就是socket间的通信,数据在socket间的io流上通信

TCP通信

服务端

一文带你走进网络编程

客户端

一文带你走进网络编程