计算机网络通讯协议

网络通讯:

就是要把特定意义的数据通过物理介质传送给对方。

把电信号变成有意义的数据:

以字节为单位分组,标识好每一组电信号的信息特征,按照分组的顺序来依次发送。
以太网规定:一组电信号为一个数据包,就是一帧。

OSI七层、TCP\IP四层、五层协议

在这里插入图片描述

每一层的协议

在这里插入图片描述

数据链路层

数据包必须是从一块网卡传送到另一块网卡,网卡地址就是MAC地址,MAC地址采用十六进制标识,共6个字节, 前三个字节是厂商编号,后三个字节是网卡流水号。

有了MAC地址以后,以太网采用广播形式,把数据包发给该子网内所有主机,子网内每台主机在接收到这个包以后,都会读取首部里的目标MAC地址,然后和自己的MAC地址进行对比,如果相同就做下一步处理,如果不同,就丢弃这个包。

数据链路层的主要工作就是对电信号进行分组并形成具有特定意义的数据帧,然后以广播的形式通过物理介质发送给接收方。

网络层

  • 发送者如何知道接收者的MAC地址?

  • 发送者如何知道接收者和自己同属一个子网?

  • 如果接收者和自己不在同一个子网,数据包如何发给对方?

为了解决这些问题,网络层引入了三个协议,分别是IP协议、ARP协议、路由协议。

  • IP协议
    区分两台主机是否属于同一个网络
    IP地址分类:A(0 ~ 127)B(128 ~ 191)C(192 ~ 223)D(224 ~ 239) E
  • ARP协议
    地址解析协议,根据IP获取MAC地址
  • 路由协议
    提供了异构网互联的机制,就是用来确定到达目标ip的路径

网络层的主要工作是为不同的主机提供通信

传输层

链路层定义了主机的身份,即MAC地址, 而网络层定义了IP地址,明确了主机所在的网段,有了这两个地址,数据包就从可以从一个主机发送到另一台主机。

但是实际上数据包是从一个主机的某个应用程序发出,然后由对方主机的应用程序接收。
为了确定是哪个应用程序要接收这个数据包。

因此传输层引入了UDP协议来解决这个问题,为了给每个应用程序标识身份,UDP协议定义了端口,同一个主机上的每个应用程序都需要指定唯一的端口号,并且规定网络中传输的数据包必须加上端口信息。

UDP协议比较简单,实现容易,但它没有确认机制, 数据包一旦发出,无法知道对方是否收到,因此可靠性较差,为了解决这个问题,提高网络可靠性,TCP协议就诞生了。

TCP即传输控制协议,是一种面向连接的、可靠的、基于字节流的通信协议。

每发出一个数据包都要求确认,如果有一个数据包丢失,就收不到确认,发送方就必须重发这个数据包。

TCP的确认机制就是三次握手
在这里插入图片描述

三次握手与四次挥手:
为什么需要三次握手呢?

为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

比如:client发出的第一个连接请求报文段在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段,但是server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求,于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了,由于client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据,但server却以为新的运输连接已经建立,并一直等待client发来数据。所以没有采用“三次握手”,这种情况下server的很多资源就白白浪费掉了。

四次挥手

当主动关闭方发出FIN报文段时,表示主动关闭方已经没有数据要发送了,被动关闭方返回ACK报文段,表示已经知道主动关闭方没有数据发送了;当被动关闭方也发送了FIN报文段时,这时就表示被动关闭方也没有数据要发送了,如果收到主动关闭方确认报文段,被动关闭方进入关闭状态,主动关闭方在发出确认报文段后等待2MSL,在等待时间里如果没有接收到被动关闭方重新发送的FIN报文段时,主动关闭方进入关闭状态,之后彼此就会愉快的中断这次TCP连接。如果接收到重新发送的FIN报文段,则继续发送ACK确认报文。

说明:

1)SYN攻击 用众多伪造ip地址向服务器发送SYN=1(请求连接),让服务器处于SYN-RCVD状态,但都无法第三次握手(因为伪造ip不存在)

2)4次挥手中的FIN就相当于三次握手中的SYN。

3)序号seq,确认序号ack,确认标志位ACK作用还是一样的,就是确认作用(把seq加上1赋给ack,并把ACK置1)

什么是TCP连接

TCP连接是一种抽象的概念,表示一条可以通信的链路。
每个TCP连接有且仅有两个端点,表示通信的双方,且双方在任意时刻都可以作为发送者和接受者。

什么是套接字

一条TCP连接的两端就是两个套接字。
套接字 = IP地址 :端口号
因此,TCP连接 = (套接字1,套接字2)= (IP1:端口号1,IP2:端口号2)

TCP、UDP区别:

  • TCP就是有确认机制的UDP协议

  • UDP数据包由首部和数据两部分组成,首部长度为8个字节,主要包括源端口和目标端口;数据最大为65527个字节,整个数据包的长度最大可达到65535个字节。

  • TCP 数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常 TCP 数据包的长度不会超过IP数据包的长度,以确保单个TCP 数据包不必再分割。

TCP 协议 补充

  • 使用滑动窗口机制来进行流量控制。
    建立连接时,各端分配一个缓冲区用来存储接收的数据,并将缓冲区的尺寸发送给另一端。接收方发送的确认消息中包含了自己剩余的缓冲区尺寸。剩余缓冲区空间的数量叫做窗口。其实就是建立连接的双方互相知道彼此剩余的缓冲区大小。

  • 拥塞控制
    拥塞控制:防止过多的数据注入到网路中,这样可以使网络中的路由器或链路不至于阻塞。拥塞控制是一个全局性的过程,和流量控制不同,流量控制是点对点的控制。
    1、慢开始:发送方维持一个叫做拥塞窗口cwnd(congestion window)的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态的变化。发送方让自己的发送窗口等于拥塞窗口,另外考虑到接收方的接收能力,发送窗口可能小于拥塞窗口。思路就是:不要一开始就发送大量的数据,先试探一下网络的拥塞程度,也就是说由小到大增加拥塞窗口的大小。

传输层的主要工作是定义端口,标识应用程序身份,实现端口到端口的通信,TCP协议可以保证数据传输的可靠性。(为不同的进程提供通信)

应用层

理论上讲,有了以上三层协议的支持,数据已经可以从一个主机上的应用程序传输到另一台主机的应用程序了,但此时传过来的数据是字节流,不能很好的被程序识别,操作性差。

因此,应用层定义了各种各样的协议来规范数据格式,常见的有 HTTP、FTP、SMTP 等,HTTP 是一种比较常用的应用层协议,主要用于B/S架构之间的数据通信。

HTTP VS HTTPS

HTTP特点:

无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作
无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量。
基于请求和响应:基本的特性,由客户端发起请求,服务端响应
简单快速、灵活
通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性

HTTPS特点:

基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护

内容加密:采用混合加密技术,中间者无法直接查看明文内容
验证身份:通过证书认证客户端访问的是自己的服务器
保护数据完整性:防止传输的内容被中间人冒充或者篡改

Https协议握手阶段比较费时, Https连接缓存不如Http高效
HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用,但是会增加攻击成本

应用层的主要工作就是定义数据格式并按照对应的格式解读数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/440021.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CodeForces - 518D】Ilya and Escalator(概率dp,数学期望)

题干: Ilya got tired of sports programming, left university and got a job in the subway. He was given the task to determine the escalator load factor. Lets assume that n people stand in the queue for the escalator. At each second one of the tw…

Apollo进阶课程 ② | 开源模块讲解(上)

目录 1)无人驾驶车介绍 2)高精地图 3)定位 4)感知 5)轨迹规划 6)控制 7)云端 原文链接:Apollo进阶课程 ② | 开源模块讲解(上) Apollo自动驾驶进阶课…

由浅到深理解ROS(9)- 几个基本概念的理解 坐标系 包

1.坐标系 最常用的就是map,odom,base_link,base_laser坐标系,这也是开始接触gmapping的一些坐标系。 map:地图坐标系,顾名思义,一般设该坐标系为固定坐标系(fixed frame)&#xff…

【POJ - 1698】Alice's Chance(网络流最大流,建图)

题干: Alice, a charming girl, have been dreaming of being a movie star for long. Her chances will come now, for several filmmaking companies invite her to play the chief role in their new films. Unfortunately, all these companies will start mak…

由浅到深理解ROS URDF教程

创建自己的URDF文件 1.1创建树形结构文件 在这部分教程中要创建的将是下面的图形所描述的机器人的urdf文件 图片中这个机器人是一个树形结构的。让我们开始非常简单的创建这个树型结构的描述文件,不用担心维度等的问题。创建一个my_robot.urdf文件,内容如…

wireshark基本使用及介绍

Wireshark使用 注:本文中使用的wireshark是3.2.2版本 捕获过滤器表达式 下面是常用的捕获过滤器,wireshark中:捕获->捕获过滤器 除此外,还可以指明传输方向,如:src(源方向), …

1.2)深度学习笔记------神经网络的编程基础

目录 1)Binary Classification 2)Logistic Regression 3)Logistic Regression Cost Function 4)Gradient Descent 5)Logistic Regression Gradient Descent(重点) 6)Gradient …

IP、TCP、UDP、HTTP头部信息

IP头部信息 ip报文段格式 版本: 占4位,表明IP协议实现的版本号,当前一般为IPv4,即0100。报头长度 : 占4位,因为头部长度不固定(Option可选部分不固定),所以需要标识…

ROS技术点滴 —— MoveIt!中的运动学插件

MoveIt!是ROS中一个重要的集成化开发平台,由一系列移动操作的功能包组成,提供运动规划、操作控制、3D感知、运动学等功能模块,是ROS社区中使用度排名前三的功能包,目前已经支持众多机器人硬件平台。 MoveIt!中的众多功能都使用插件…

1)机器学习基石笔记Lecture1:The Learning Problem

网上关于机器学习的课程有很多,其中最著名的是吴恩达老师的课程,最近又发现了NTU林轩田老师的《机器学习基石》课程,这门课也很好。课程总共分为4部分,总共分为16节课,今天来记录第一节课。 When Can Machines Learn?…

Apollo进阶课程 ③ | 开源模块讲解(中)

目录 1)ISO-26262概述 2)ISO-26262认证流程 3)ISO-26262优点与缺陷 原文链接:Apollo进阶课程 ③ | 开源模块讲解(中) Apollo自动驾驶进阶课程是由百度Apollo联合北京大学共同开设的课程,邀请…

【CodeForces - 1047C】Enlarge GCD(数学,枚举,预处理打表,思维)

题干: F先生有n个正整数,a1,a2,...,an 他认为这些整数的最大公约数太小了,所以他想通过删除一些整数来扩大它 您的任务是计算需要删除的最小整数数,以便剩余整数的最大公约数大于所有整数的公约数. Input 3 1 2 4…

TS解析文档

TS格式解析 简介: ts文件为传输流文件,视频编码主要格式h264/mpeg4,音频为acc/MP3。 ts的包是一个一个188字节的包组成,这188字节里面由一个0x47开头的包作为同步。 也就是说,如果你找到了0x47,如果与它相…

2)机器学习基石笔记Lecture2:Learning to Answer Yes/No

目录 0.上节回顾 1. Perceptron Hypothesis Set 2. Perceptron Learning Algorithm(PLA)(重点) 3. Guarantee of PLA(难点) 4. Non-Separable Data 0.上节回顾 第一节课主要讲述了机器学习的定义及机器学习的过程&#xff0…

Google Colab——谷歌免费GPU使用教程

Google Colab简介 Google Colaboratory是谷歌开放的一款研究工具,主要用于机器学习的开发和研究。这款工具现在可以免费使用。Google Colab最大的好处是给广大的AI开发者提供了免费的GPU使用!GPU型号是Tesla K80!你可以在上面轻松地跑例如&am…

pyecharts简单使用

pyecharts 是一个用于生成 Echarts 图表的类库。 Echarts 是百度开源的一个数据可视化 JS 库。可以生成很多效果很棒的图表。 pycharts文档 |分割| echarts官网 本文主要介绍pycharts的简单使用 安装 # 安装 1.0.x 以上版本 (需要python3.6及以上) $ …

Ubuntu16.4(64位)下gcc-linaro-arm-linux-gnueabihf交叉编译环境安装

1. 下载压缩包 文件分享 2. 新建目录并解压 3. 配置环境变量 sudo gedit /etc/bash.bashrc 添加路径并更新路径:(PATH$PATH之间无空格) PATH$PATH://linaro-arm/gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux/binexport P…

Apollo进阶课程 ④ | 开源模块讲解(下)

目录 1)Apollo平台技术框架 2)Apollo版本迭代 原文链接:​Apollo进阶课程 ④ | 开源模块讲解(下) 上周,阿波君与大家讨论了自动驾驶的核心问题——安全性。本期,我们将为大家具体介绍百度Apo…

SM4 简介

SM4 我国国家密码管理局在20012年公布了无线局域网产品使用的SM4密码算法——商用密码算法。它是分组算法当中的一种,算法特点是设计简沽,结构有特点,安全高效。数据分组长度为128比特,密钥长度为128 比特。加密算法与密钥扩展算法…

九大内置对象

指在JSP的<%%> 和<% %>中可以直接使用的对象&#xff1a;没有特别说明可以开关的默认是开启的 一servlet理论上可以处理多种形式的请求响应形式http只是其中之一所以HttpServletRequest HttpServletResponse分别是ServletRequest和ServletResponse的之类 二 Http…