网络协议
Willem Zhang Lv6

OSI参考模型 七层 (参考,并分都要按照这个来做,只是将协议按照功能分了层)

iso将进行网络通信的协议根据底层到上层进行分层,每一层的协议指明了当前层的作用。(协议分层)
分层并非绝对,有的协议可以同时被划分到两个层。协议分层只是为了明确协议功能。

协议栈中的协议彼此相互独立,下层协议为上层协议提供支持 上层协议在使用时不需要考虑底层的实现

TCP/IP协议 四层 (实际能用的网络通信模型 DOD)

Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议
TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。
 通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台电脑规定一个地址。

DOD模型:网络接入层->因特网层->主机到主机层->应用层

IP协议

无连接、不可靠
数据单位为数据包 Packet(数据包)
点到点的网络级传输协议
IPv4和IPv6
ipv4 32位,ip资源有限,所以不同的在要在不同的时间共享一个ip
ipv6 128位 可以做到给每个接入互联网的设备一个ip,实现网络实名制下的互联网身份证/VIeID
IPV6号称可以为全世界的每一粒沙子编上一个网址。

TCP协议

面向连接、可靠
基于IP的传输层协议
单位为数据段 Segment(数据段)

数据的发送和接收其实就是数据的封装和解封装的过程。 (经过osi7层模型)

TCP协议的三次握手

tcp为传输层协议,目的是可靠的数据传输,在传输前总要先建立连接,建立可靠的连接
三次握手的目的是同步连接双方的序列号和确认号并交换TCP窗口大小信息

TCP协议的四次分手

确认通信双方都交流完毕再确认断开连接

SYN seq=x、FIN seq=x和seq=x都为主动发送,对方接受到就会被动应答ACK=x+1;
但是当使用syn和fin的时候,对方在被动应答的同时,也会追加自己的主动发送syn和fin;
就好比建立连接的时候,b问了s一个问题,然后s回答并反问了一个问题,b收到问题必定回答。(回答为seq的值加一)
而断开连接的时候,b问了s一个问题,s回答并反问,然后b回答。

问题来了:为什么分手时候,s不能将ack和fin同时发送呢 而握手的时候是ack和syn同时发送的。

建立和分手是双方的事情,所以双方都要表明自己的意向。
但是握手后分手前之间的时间段,一方发问,另一方只要回答seq的值加一即可。有问有答,不反问。

通过三次握手四次分手可以建立可靠的连接,通过三次握手可以使双方确认有接收和发送的能力的时候才发送数据,避免了资源的浪费;通过四次分手可以防止链接轻易的断开而从失去双方的连接使得数据丢失。

UDP协议

无连接
由于无连接所以不需要维护连接状态,包括收发状态等
面向报文

TCP的粘包和UDP的丢包

粘包

Nagle算法
收集多个小分组,在一个确认到来时一起发送
粘包出现原因:(传输层的原因)

  • 发送时:nagle算法
  • 接收时:接收分组过快,超过应用读取分组速度,导致分组被存到缓存里
    处理:
  • 发送端:发送端导致:使用TCP_NODELAY选项来关闭Nagle算法。
  • 接收端:暂无

从应用层解决粘包问题:循环处理 应用程序循环读取数据,而不是一次读取整个缓存然后处理,然后再读取整个缓存。
循环读取数据的时候有两种方式获得数据长度来能够进行循环读取:1. 格式化数据(设定数据的开始符和结束符)2. 发送长度(发送数据时加上数据长度)

丢包

原因:
发送端:包太大导致的无法分割或者超过缓存设置
接收端:处理时间过长
其他: 网络问题

HTTP协议 (超文本传输协议)

面向对象
应用层协议
基于TCP/IP通信协议来传递数据

最初的目的是为了提供一种发布和接收HTML页面的方法

通过HTTP或者HTTPS协议(HTTP协议+SSL协议)请求的资源由统一资源标示符(Uniform Resource Identifiers)(或者,更准确一些,URLs)来标识。

特点:
简单快速 只需提供请求方法和路径就能获得响应
灵活 可以传输任意类型的数据对象 正在传输的类型由Content-Type加以标记
无连接 意思不是不会连接,而是每次连接只处理一次请求,请求完后就断开这次连接
无状态 无状态是指协议对于事务处理没有记忆能力??

http的URL地址

UniformResourceLocator 不同于URI identifier 标识
统一资源定位符

组成:
协议 域名 端口 虚拟目录 参数 文件名 锚

从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分
从“?”开始到“#”为止之间的部分为参数部分
从域名后的最后一个“/”开始到后面一个“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分;文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名(index)。
从“#”开始到最后,都是锚部分。

HTTP请求request

请求报文格式(由请求行、请求头、空行、请求体组成)

Http响应response

报文格式(包含状态行、响应头、空行、消息体)

状态码

1XX 信息 2XX 成功 3XX重定向 4XX 客户端错误 5XX 服务器错误
301永久 302临时

Socket编程

一些重要的计算机网络协议(IP、TCP、UDP、HTTP)

四次挥手为什么不是三次,为什么被动方的FIN和ACK不合并

  • Post title:网络协议
  • Post author:Willem Zhang
  • Create time:2021-11-28 09:03:31
  • Post link:https://ataraxia.top/2021/11/28/网络协议/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
 Comments