网络基础2

网络基础2----各层中的协议

应用层的协议:
有自定制协议和知名协议

1.自定制协议–程序员自己设计的数据传输格式;

使用例子:网络计算器(客服端将两个数字和运算符传输到服务端,由服务端计算并返回返回结果)
结构化的数据传输(定义了一个结构体来组织数据),使得数据的组织和解析变得很方便
结构体在内存中,前四个字节就是int a,其次就是int b,接下来就是运算符,另一端以这种方式来解析

序列化:在发送时,将(此处为结构体数据)数据转换成二进制序列(客户端)
反序列化:解析二进制序列为结构化数据/对象(服务端)

学习它的目的:使用结构体序列化来组织数据,不单单拘泥于传输字符串,用处较多

应用层的协议
  1. 知名协议:知名协议http,ftp,ssh,smtp,DNS
    http(超文本传输协议,知名协议是大牛自己定义的好用且使用频率较高的应用层协议,http就是其中一个)。
    http是一个明文传输协议,https非明文传输,是http的加密版,即有加密网站的作用(面试:如何加密的?)。

  2. URL----统一资源定位符(俗称网址,即http://www.baidu.com//不加端口,默认80)
    协议://认证信息@服务端地址:端口号… 协议://认证信息@服务端地址:端口号…

早期URL格式(现在基本不用):F
http(协议)?/user(服务器地址):(端口号,由协议来确定)pass@www.example.jp(服务器地址):80(端口)/dir/index.htm(请求资源的文件路径 )?(查询的字符串)#片段标识符
以上格式中的内容不是必须都有,但是请求资源路径之前的内容必须有。

URL格式总结:协议 域名 端口 资源路径 ? 参数

https 默认443
urlencode—url的编码
urldecode-----url的解码。
c++=c%2b%2b
主要是查询字符串的一个转义------搜索的东西被转义
因为在url中特殊字符在很多地方中都有特殊含义,因此为了防止提交的数据中也有这些特殊字符而造成歧义,因此对提交的数据进行url编码操作。
url编码:将特殊字符高四位转换为16进制数字,低四位转换为16进制数字,为了告诉对方这是编译过得字符,因此在转移后的两个16进制字符前加上一个%。

http协议格式

协议:数据按照什么格式传输,什么格式来解析。

http请求格式(客户端向服务端发起请求)
请求行:请求方法  URL  协议和版本版本
请求报头(header):若干行键值对,这些键值对之间用: (:后面还有个空格) 来间隔,这些键值对之间是以\n
空行:
body( 正文):数据格式取决于header中的content-Type,数据格式的长度取决于header中的content-Length。

请求报头中包含的数据是什么?
包含的是一些请求报头我的属性:accept(我客户端接收什么类型的数据),Cookie,Refer(表示请求是从哪个url过来的),content-Type,content-Length ,Cache-Control(一个请求希望响应的内容能在客户端被缓存,或者不被缓存),code是状态码
正文中携带的是请求参数我的数据
在这里插入图片描述

http响应格式(服务端向客服端发送响应)
  状态行:版本号 状态码 状态码描述
  响应报头 :每一行是一个键值对,键值对之间用:隔开
   空行:header的结束标志
   body(正文):数据格式取决于header中的content-Type,数据格式的长度取决于header中的content-Length。
   
   响应报头中的属性:
   正文:
   ![在这里插入图片描述](https://img-blog.csdnimg.cn/2019081711323416.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3J1b19iaW5n,size_16,color_FFFFFF,t_70)
http状态码

2xxxx--------成功
3xxxx--------重定向(自动从旧的跳转到新的)
4xxxx-------客户端错误
5xxxx-------服务端错误

http协议下的一个简单服务器的实现

传输层中的协议(传输层负责端与端之间的传输)

tcp和udp两个协议
端口号:标识某台主机上的某个进程,一个进程可以有多个端口,但是,一个端口只能被一个进程使用(065535)01023不推荐使用,因为被知名协议占用。

深入理解tcp和udp

udp理解
  • 无连接
  • 不可靠
  • 面向数据报(数据不能灵活的控制发送数量和大小,因为数据是一整条一整条的接收或发送)这个是因为在udp头部中定义了udp数据包的长度,所以每条数据数据都是完整发送或接收的,而且因为固定了长度,所以不会产生粘包问题,若超过64K则直接丢弃数据(包的大小为64k)。
    udp对数据进行原样发送,不会拆分,不会合并,因此如果数据过长,需要我们用户在应用层用层进行分包。
    udp无法保证包序,可能先发送的后接收了,需要我们在应用层进行排序。
    udp传输速度快,实时性要求高但是安全性要求不高的操作,比如传输视频
    udp协议头:
    源端口 目的端口 长度 校验和(验和的理解)
    在这里插入图片描述
tcp的理解:
  • 有连接
  • 可靠传输
  • 面向字节流
    tcp协议头
    在这里插入图片描述
    连接管理机制:
    建立连接是可靠传输的前提,tcp三次握手建立连接,四次挥手断开连接。
    在这里插入图片描述

状态解释:
CLOSE_WAIT,服务器收到断开连接请求,返回ACK,

TIME_WAIT的作用:TIME_WAIT状态是主动关闭方出现的,主动关闭方在最后一次发送ack之后(即上述图中的最后一个ack),有可能这个ack会丢失,被动方等待一段时间之后,没有接收到ack会认为fin请求没有发送过去,然后重新发送一个fin到主动方,TIME_WAIT的等待式为了保护主动关闭方。谁主动断开连接,谁就先进入TIME_WAIT状态。
在这里插入图片描述
在四次挥手断开连接之后开始重新进入 监听
面向连接:
为什么是三次握手?不是四次或两次?
两次:三次意味着连接成功,两次不能建立可靠连接
四次:没必要
为什么是三次握手,四次挥手??
如果三次握手第三次失败了,服务端如何处理?syn泛洪攻击。

tcp如何保证可靠传输?

  1. 确认应答机制:-----发送的每条数据都要确认回复一下。
  2. 超时重传机制:------发送等待一段时间后还没有收到回复,就认为传输失败了,将数据重传,这个超时间是递增的,次数有限制,超过了重传次数就认为网络断开了。
  3. 序号/确认信号:保证数据的可靠传输(避免先发送的后接收到,后发送的先接收等问题)。
    tcp要保证可靠传输,因此性能有很大的消耗,为了提高性能,又需要其他一些机制(如滑动窗口机制(快速重传):)。
如何 保证tcp可靠传输性能:
  1. 确认应答机制:成功建立连接后,发送的每条数据也可能会丢失,因此就需要确认应答机制
    2.序列号,确认序列号在确认应答机制中,只单纯的发送数据出去,就然后对方进行一个回复数据就可以了吗?不行
    对发的数据进行了一个编号,对方回复消息的时候,有一个 确认序列号。以此类推,“一问一回答”,使得确认应答机制更加完善,也是使tcp可靠传输的一种保障。每一个ACK都带有一个确认序列号,来告诉发送者,数据已经收到了,下次你从哪里开始发送。

这里的序列号是按照字节来编的,比如以下的图片,前1000个字节是第一个系列号,发送出去的时候,对方也有一个“第一个”序列号对此进行回应。下图第二幅图中的1001是确认应答序号(是对应的确认序号字节尾数+1)在这里插入图片描述在这里插入图片描述
udp无法保证数据的有序性,但是tcp可以,与协议头中的32序列号和32位确认序号有关系

例子–qq聊天,一问,一回答

在这里插入图片描述

  1. 超时重传机制:发送出去的数据,可能发送的数据包丢失,也可能对方返回的ACK 丢失,那么一段时间后,主机A没有收到主机B的应答,A方就会在重新发送一次,还没有得到回应,就在发送一次,这种机制叫超时重传机制。

在这里插入图片描述

如何利用序列号去重?

在这里插入图片描述

系统重传策略:超时的时间 是如何确定?每次超时重发一次之后,tcp再次重传的时间就会变长(比如第一次在三分钟后重发一次,第二年此就可能在6分钟后重复一次…),系统以500ms为单位重发
在这里插入图片描述

  1. 面向连接

提高tcp的传输性能,因为为保证可靠传输,确定了很多机制,降低了传输效率,所以要提高传输效率

1.滑动窗口机制
对于以上所说的确认应答机制,每次发送数据之后,收到一个确认应答后才开始发送下一条数据,那么这种机制其实是效率就很低了,尤其是数据往返的的时间较长,因为需要等待到ACK后才能发送数据。
解决方法:一发一收的效率低,那就一次发送多条数据,批量的发送,批量的接收,这就是滑动窗口机制。
下图为例:一次A发送4条信息,B 接收第1,2,3,后直接发送出去,发送完第4条的时候,B在发送ACK, A接收到ACK后在批量发送数据,也就是说发送了4条消息,只等待了一次ACK。所以压缩了等待ACK的时间,提高tcp效率,这种机制就是滑动窗口机制。
如何理解窗口?
对方收到的数据 就不管了,往后滑动
在这里插入图片描述
在这里插入图片描述

以上图为例,主机A给主机B发送数据,主机A的窗户,窗户前的是已经发送且已经接受到确认的数据,格子窗户中是已经发送单并未确认的数据,格子之后是等待被发送的数据,所以“窗户是个缓冲区,发送缓冲区”,意思就是一旦发送未成功,发送缓冲区就再次发送一次,滑动窗口最大是多大?收对端接收能力大小的影响,对端能力强,则缓冲区相对较大
滑动窗口也有缺陷:窗口大,效率高,但也增加了额开销。接收端需要开辟缓冲区用来接收数据,所以窗口越大,需要的缓冲区就越大。而且,当发送端速度较快,接收端处理数据较慢时,缓冲区就会堆积很多数据,发送过来的数据放不下了,可能导致后面发送的数据丢包。所以发送方的窗口也不是越大越好。

滑动窗口机制也可能会丢包:丢包情况也有两种–发送的数据包丢失和ACK 丢失

粘贴滑动1图片在这里插入图片描述
5000之前的数据丢失了,5001ACK返了回来,就可以发送成功
在这里插入图片描述
只需要把丢失的数据重新发送一次即可(快速重传–超时重传和滑动窗口的结合)

流量控制:根据接收方的能力,来确定大小发送的速度
流量控制是如何做到的?协议头窗口大写信息,
反馈一下剩余空间—比如当前大小为4000,放入数据1000后剩余3000,在放一直到0,应答过的数据就会从缓冲区中删除。那么 缓冲区就有位置了
流量控制窗口探测:反应到
**拥塞控制:**根据当前网络拥堵程度,来确定发送速度。慢启动,由小到大发送,试探性的,慢慢加大传送速度。按指数速度来增长。
拥塞窗口:双方进行窗口大小协商之后,发送方还有一个东西叫窗口,并且拥塞窗口。小速度发送,指数增长,在慢点增长,直到出现丢包,说明网络比较拥堵。拥塞窗口骤减,在慢速度,在指数增长。循环过程
停止等待协议。
流量控制窗口和拥塞窗口都是取小的
2.延时应答机制:对处理数据速度比较自信,对接收到的数据能够快速处理,只要稍微延迟一下进行ack应答,在稍微延迟的时间内,接收方处理数据,处理完之后再返回给发送方,那么这个时候返回的窗口,就比没有延迟时要大。那么能设置的窗口大小就尽可能大,一直保证tcp的最大吞吐量。如果立即进行应答,那么有可能回复的窗口可能较小。
如何进行延迟:
数量限制:每隔N个包就应答一次
时间限制:超过最大延迟时间就应答一次
**3.捎带应答机制:**将确认应答直接标记在即将发送的数据包内,那么这样不仅传输了数据还对上一次接收的数据进行应答。
发送方发过去一个“how are you
接收端先回一个:ACK
接收端在回一个:fine
(接收端得回两条数据)
捎带应答:fine和ACK一起回应(在应用层回应ACK时,稍等一会,捎带上内容)
面向字节流,收发数据灵活,接收的数据都会放到一个缓冲区,这些数据无边界,所以会造成粘包问题
tcp粘包问题的解决?
发送端:为了提高传输性能,因此将多个小包合到一起,造成粘包
接收端:接收到数据后放到接收缓冲区,导致数据在缓冲区淤积合并。
数据定长,特殊字符间隔,tlv格式数据。
tcp的异常情况:进程终止(关闭文件描述符,四次挥手正常进行),机器重启(和进程终止时一样的),机器断电/网线断开(四次挥手无法进行,因为是瞬间断掉的)------tcp保活定时器,确定对方存在,一旦发现对方不存在了,就自动释放连接
总结:可靠传输,尽量提高效率
可靠传输:
连接管理,确认应答,超时重传

网络层协议(网络层功能:地址管理和路由选择)

网络层协议很多,不仅仅是ip协议。
网络层要解决的是不同主机跨网段传输,可以在同一个局域网,也可以不在,只要两个主机都有网它代表的是A主机到B 主机的传输能力,但是是否可靠,需要上一层tcp来保证,

1)
数据报路由的时候
网段划分:
网段可以标识一个局域网
1.ip地址可分为两个部分,网络号和主机号
网络号 :用于划分网络,相互连接的两个网络不能拥有相同的网络号。
主机号:同一个网段内,不同主机具有相同的网络号,但必须有不同的主机号

在这里插入图片描述
ip协议怎么分离怎么交付
分离:有四位首部长度,16位总长度,所以能区分报头和有效载荷
交付:8位协议,告诉服务哪个协议
NAT技术和桥接模式
1)私有ip:一般都是10、172、192开头,局域网ip地址可以重复(在宿舍,在小区,虚机地址发生变化),私有ip只在局域网,路由器和-------------NAT技术,
2)桥接模式:winfdows,linux就是独立平等的,

概念:
主机:有Ip地址,但不能发送信息。
路由器:有ip地址,也能发送信息
节点:主机和路由器的统称
- IP协议:
ip地址,数据分片,ttl,数据包总长度,协议版本,协议类型
协议头:封装过程—把ip单独放大,ip就是一个字符串
片偏移:
认识了解即可
特殊的ip地址:

主机号为0-----局域网
主机号全为1-----局域网的广播地址

网络号:ip地址按位与子网掩码

私有地址和公网ip地址

路由选择:一台pc插入网线连到路由器上,通过dhcp动态获取一个ip地址,子网掩码,网管地址。
主机发送数据时 首先将数据发送到网管地址上(路由地址上)路由器对数据进行分析,拿目的地址和路由表中的各个信息进行比对,选择通过那个网卡进行发送,如果比对出来的网络号和自己组建的局域网网络号相同,则通过

为什么地址管理这么 复杂?
因为ip地址不够用,dhcp–动态地址分配,谁上网就给谁分配地址。ipv6,没有推广起来

数据链路层协议(负责相邻设备节点之间的数据帧传输)

以太网协议:
如何解包,如何交付--------------定长报头加帧类型来解包,交付
mac地址:物理硬件地址,长度6 字节,
以太网帧协议中包含了:源mac地址、目的mac地址
数据帧:从源mac地址传输到目的mac地址中

数据帧(Frame):数据链路层,传递的单位是frame 帧,就是数据链路层的协议数据单元,它包括三部分:帧头,里面有mac地址,通过这个地址可以在底层的交换机这个层面里顺着网线找到你的计算机。数据部分,ip数据包,意思是使用ip地址定位的一个数据包。帧尾。其中,帧头和帧尾包含一些必要的控制信息,比如同步信息、地址信息、差错控制信息等;数据部分则包含网络层传下来的数据,比如ip数据包。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值