TCP/IP四层模型:
应用层、传输层、网络层、链路层
应用层(程序员自己定义)
功能:负责应用程序之间的数据沟通
自定制协议:
网络版计算器:客户端发送两个数字以及一个运算符到服务器,服务端进行计算打印结果
序列化:将数据对象按照指定的协议在内存中排列成为可持久化存储/数据传输时的二进制数据串
反序列化:将持久化存储/数据传输获取到的二进制数据串按照指定的协议解析得到对象数据
知名协议:http协议(超文本传输协议)
HTTP协议
URL:俗称的“网址”,统一资源定位符
协议方案://用户名:密码@服务器IP地址:端口/资源路径?查询字符串#片段标识符
URL编码/解码:为什么要编码?如何编码?如何解码?
在URL中,必须先对特殊字符进行转义
转义规则:
将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每两位做一位,前面加上%,编码成%XY格式
例:“+”被转义成了“%2B”
HTTP协议格式:
首行:
1.请求首行:请求方法+URL+协议版本
请求方法:GET/POST GET请求没有正文,提交的数据在URL中;POST提交的数据在正文中
URL:请求资源路径
协议版本:0.9/1.0/1.1/2-->调研版本之间的新增特性
2.响应首行:协议版本+响应状态码+状态码描述信息
响应状态码:1**/2**/3**/4**/5**
头部:
以一个个 key:val 的键值对组成,并且键值对之间以/r/n进行间隔
Content-Length(正文长度)/Content-Type(正文类型)/Location(重定向)/Referer/Transfer-Encoding/Cookie/Set-Cookie
空行:间隔头部与正文
正文:传递的数据
传输层
负责端与端之间的数据传输:TCP/UDP
端口:unit16_t 0-65535
注意:0-1023 不推荐使用
端口号标识了一个主机上进行通信的不同的应用程序
知名端口号:
UDP:
特性:无连接、不可靠、面向数据报
协议端格式:
- 无连接:只需要知道对端的地址信息,就可以直接发送数据,但是数据不保证可靠到达
- 面向数据报:用户(sendto)给多少数据就一次传输多少数据
- 协议字段:16源/目的端口,16位数据报长度,16位校验和
- 16位数据报长度,限制了一个UDP协议发送的数据最大长度不能大于64K-8;一但超过,则发送失败。因此,若数据长度大于64k-8,则需要用户在应用层进行分包操作。
- UDP不保证数据有序到达,需要用户在应用层进行包序管理
- UDP面向数据报:数据都是整条接收,不会出现接收半条数据的情况,数据是整条交付