网络编程基础简述
网络编程基础
-
网关:
每台机关及都需要正确配置IP地址和子网掩码,根据这两个就可以计算网络号,即 IP&子网掩码 ,如果两台计算机的网络号相同则在同一个网络,则可以直接通信,如果不同则不能直接通信,他们之间必须通过路由器或者交换机网络设备来间接通信,这种设备就是网关
2.路由
网关的作用是连接多个网络,负责把来自一个网络的数据包发送到另一个网络,这个过程就是路由
3.域名
因为直接记忆IP地址比较困难,所以通常使用域名来访问某个特定的服务。域名解析服务器DNS负责把域名翻译成对应的IP来进行访问;在CMD窗口中可以使用nslookup来查看对应域名的IP地址,本机域名是localhost,对应IP地址为127.0.0.1
4.网络模型
- 应用层:提供应用程序之间的通信
- 表示层: 处理数据格式,加密解密等
- 会话层: 负责建立和维护会话
- 传输层: 负责提供端到端的可靠传输
- 网络层: 负责根据目标地址选择路由来传输数据
- 链路层和物理层: 负责把数据进行分片并且真正的通过物理网络传输,例如无线网,光纤等
上层模型是建立在下层模型的基础上的
5.HTTP编程
HTTP 即Hyper Text Transfer Protocol 超文本传输协议
-
HTTP请求的格式: 请求的格式是固定的,由HTTP Header和HTTP Body 两部分组成,第一行总是 请求方法 路径 HTTP版本,例如 GET / HTTP/1.1,然后后续的每一行都是固定的Header: Value的格式,这就是HTTP Header,服务器依靠某些特定的Header来识别客户端,例如:
- Host:表示请求的域名,因为一台服务器上可能有多个网站,因此有必要依靠Host来识别请求是发给哪个网站的;
- User-Agent:表示客户端自身标识信息,不同的浏览器有不同的标识,服务器依靠User-Agent判断客户端类型是IE还是Chrome,是Firefox还是一个Python爬虫;
- Accept:表示客户端能处理的HTTP响应格式,
*/*
表示任意格式,text/*
表示任意文本,image/png
表示PNG格式的图片; - Accept-Language:表示客户端接收的语言,多种语言按优先级排序,服务器依靠该字段给用户返回特定语言的网页版本。
-
对于POST请求,则需要在header中设置Content-Type表示body的类型,content-type行表示body的长度,这样服务器才可以根据请求的header和Body做出正确的响应
POST /login HTTP/1.1 Host: www.example.com Content-Type: application/x-www-form-urlencoded Content-Length: 30 username=hello&password=123456
POST /login HTTP/1.1 Content-Type: application/json Content-Length: 38 {"username":"bob","password":"123456"}
-
HTTP响应 也是由Header和Body组成,例如:
HTTP/1.1 200 OK Content-Type: text/html Content-Length: 133251 <!DOCTYPE html> <html><body> <h1>Hello</h1> ...
- 响应的第一行总是HTTP版本 响应代码 响应说明 ,例如 HTTP/1.1/ 200 OK ,其中HTTP是1.1版本,响应代码是200,响应说明是OK,客户端只依赖响应代码来判断HTTP请求是否响应成功,响应代码类型和说明如下:
- 1XX 表示一个提示性响应,例如101表示将切换协议,常见于webSocket连接
- 2XX表示一个成功的响应,200表示成功,206表示只发送了部分内容
- 3XX表示一个重定向响应,例如301表示永久重定向,303表示客户端应该按照指定路径重新发送请求
- 4XX表示一个因为客户端问题导致的错误响应,例如400表示因为content type等原因导致的无效请求,404表示指定的路径不存在
- 5XX表示因为服务端问题导致的错误响应,例如500表示服务器内部故障,503表示服务器暂时无法响应
- 响应的第一行总是HTTP版本 响应代码 响应说明 ,例如 HTTP/1.1/ 200 OK ,其中HTTP是1.1版本,响应代码是200,响应说明是OK,客户端只依赖响应代码来判断HTTP请求是否响应成功,响应代码类型和说明如下:
-
HTTP协议版本
- HTTP/1.0 最早期的超文本传输协议,每次发送一个请求之前都需要先建立TCP连接,收到服务器响应后,再关闭连接
- HTTP/1.1 在1.0的基础上允许在建立TCP连接后,反复的发送—响应请求,大大提高了效率
- HTTP /2.0 由于在1.0、1.1协议中,客户端发送请求后必须等待接受到服务器响应后才会发送下一个请求,如果某个响应太慢,则将导致后面的请求被堵塞,在2.0协议中,允许客户端在没有接收到服务器响应的情况下,继续发送多个HTTP请求,并且服务器不一定要按照顺序返回响应,只要双方能识别出那个响应对应哪个请求即可,可以做到 并行发送和接受
参考自廖雪峰的官方网站