网络-TCP/IP的四层模型

TCP/IP四层模型中的典型协议解析以及特性讲解

1.应用层

负责应用程序之间的数据传输

知名协议:

HTTP协议

(超文本传输协议)

网址-URL

(统一资源定位符)

http://user:[email protected]:80/dir/index.htm?uid=1#ch1

协议方案名称://用户名:密码@服务器地址:端口号/请求资源路径?查询字符串#片段标识符

URL编码/解码:

查询字符串是用户提交给服务器的数据信息;

这些提交的数据中若是出现特殊字符,则有可能与URL中间隔符产生歧义导致URL解析失败,因此查询字符串中不能出现特殊字符。

若是提交的数据中真的有特殊字符需要对查询字符串中的数据进行URL编码操作;编码之后的数据在对端需要进行URL解码操作

URL编码:将特殊字符每一个字节转换为16进制数字字符串,并且为了表名这两个字符是经过了URL编码后的数据,需要在转换后的数据前加上%。'+'----->'%2B'

URL解码:当遇到'%',则认为紧跟其后的两个字符需要转码,将第一个字符转换为数字左移4位与第2个字符转换后的数据进行相加。'%2B'->('2' - '0') << 4 + ('b' - 'a' + 10) -> 43 -> '+'

一个中文:%2e%3e%4d

HTTP协议格式

首行

(1)请求首行: 请求方法 URL 协议版本

  • 请求方法:GET/POST get没有正文,提交的数据在URL的查询字符串中

  • 协议版本:HTTP 0.9/1.0/1.1/2

  • 各个版本新的特性:HTTP 2开始,服务器端可以主动向客户端发送信息

(2)响应首行: 协议版本 响应状态码 状态码描述信息

响应状态码:1** / 2 ** /3** /4** /5**

教程:https://www.runoob.com/http/http-status-codes.html

  • 1**:信息性状态码,描述信息,接收的请求正在处理;

  • 2**:成功状态码,客户端请求已经正确处理并响应;典型:200(请求成功。一般用于GET与POST请求)

  • 3**:重定向状态码,需要进行附加操作以完成请求;典型:302(临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI)

  • 4**:客户端错误状态码,服务器无法处理请求;典型:404(服务器无法根据客户端的请求找到资源(网页))

  • 5**:服务器错误状态码,服务器处理请求出错;典型:502(作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应)

头部

头部信息格式:以一个个key:val组成的键值对,并且各个键值对之间以\r\n作为间隔

HTTP常见Header

  • Content-Type:描述的是正文是什么类型的数据(text/html等)

  • Content-Length/Transfer-Encoding:正文的长度chuncked

  • Host:客户端告知服务器,所请求的资源是在那个主机的哪个端口上

  • location:搭配3**重定向状态码使用,告诉客户端接下来去哪里访问

  • User-Agent:声明用户的操作系统和浏览器版本信息

  • referer:当前的页面是从哪个页面跳转过来的

  • Cookie:用于在客户端存储少量信息,通常用于实现会话(session)的功能

    expires:Cookie 的时间信息,显示什么时候过期

  • Set-Cookie:设置和页面关联的Cookie,服务器返回的信息

     

空行

\r\n 用于间隔头部与正文

正文

 

HTTP的方法

  • GET 获取资源

  • POST 传输实体主题

  • PUT 传输文件

  • HEAD 获得报文首部

  • DELETE 删除文件

  • OPTIONS 询问支持方法

  • TRACE 追踪路径

2.传输层

负责端与端之间的数据传输(端点/端口,进程)

典型协议:TCP/UDP

2.1端口号

在一个主机上标识一个进程(标识接收到的数据应该交给哪个进程处理);

一个端口只能被一个进程占用;

一个进程可以使用多个端口;

uint16_t 无符号16位整数:端口号0~65535 0~1023不推荐使用(被知名协议使用)

面试题:在一个主机上可以启用65536个客户端

2.2五元组

在网络通信中每一条数据都必须带有一些关键信息(源IP地址/源端口/目的IP地址/ 目的端口/协议)

功能:用于标识网络中的一条通信

2.3UDP协议

(用户数据报协议)

特性:无连接,不可靠,面向数据报

无连接

通信时,不需要建立连接,只需要知道对端地址信息(IP和端口号),就可以发送数据

不可靠

没有确认机制,没有重传机制,若因网络故障无法发到对方,UDP协议层也不会返回任何错误信息;优点:简单快速,占资源少

面向数据报

数据只能一整条一整条向应用层交付

 

udp协议字段:16位源/目的端口 16位数据报长度 16位校验和(校验接收数据和发送数据是否一致)

16位数据报长度:用于指定整个udp数据报的长度(包含头部),决定了一个udp协议的数据data长度不能大于64k - 8; 8 -> udp头部长度;否则发送失败;因此当数据长度大于64k - 8时,就需要用户在应用层进行数据分包,将数据分成一个个小于64k - 8大小的数据段;

udp并不保证数据有序到达,需要用户在应用层进行包序管理;

用户每次调用发送接口发送数据的时候,udp会直接为这条数据封装udp头部信息,直接发送出去

udp总结

为了防止用户接收半条数据,导致udp剩余数据无法根据协议字段中的数据报长度确定数据长度,因此udp规定,数据只能整条交付**

基于UDP的应用层协议

  • DNS:域名解析协议

  • DHCP:动态主机配置协议

下次补充哦

3.网络层

4.链路层

你可能感兴趣的:(网络)