sssl:安全套接字协议 端口号:443

层协议

http:超⽂本传输协议 --浏览⽹⻚ 端⼝号:80 /8080

Https:安全的超⽂本传输协议

S:SSL:安全套接字协议 端⼝号:443

URL https://www.nowcoder.com/jobs/recommend/campus

FTP --⽂件传输协议 端⼝号 (20/21) 控制层⾯ 数据层⾯

SMTP 端⼝号 25 POP3 端⼝号110 邮件协议

Telnet 端⼝号 23 远程登录协议

RDP --3389

DNS 端⼝号 53 域名解析服务 域名和IP地址的解析 便于记忆

110.242.68.4 对应 www.baidu.com

PDU–协议数据单元 封装和解封装

PDU–插板

上三层 --产⽣数据 —数据报⽂

四层 -----数据段

三层 -----数据包

⼆层 -----数据帧

⼀层------⽐特流

三次握⼿、四次挥⼿

传输层–提供可靠的传输 --TCP --⾯向连接的可靠传输协议

⾯向连接—通过三次握⼿、四次挥⼿机制保证的

1.三次握⼿

第⼀次握⼿ 客户端SYN —同步序列号请求 携带 序列号seq —0

ACK —代表确认 确认—序列号+1 ack —1

第⼆次握⼿服务端SYN+ACK(服务端)

第三次握⼿客户端ACK

2.四次断开(挥⼿)

客户端FIN–请求断开连接

服务端ACK–确认断开

服务端FIN–请求断开连接

客户端ACK–客户端确认断开

TCP报头 --报⽂的头部

一、TCP协议特点

TCP :Transmission Control Protocol,传输控制协议.

有连接 可靠传输 面向字节流 全双工

  1. 有连接:TCP类似于打电话,需要建立连接,才可以发送消息.

  2. 可靠传输:发送方发送的数据,并不是百分百发送给接收方,而是尽力而为,尽可能的把数据传输过去,同时,如果还是传输不过去,至少能知道.

  3. 面向字节流:数据传输与文件读写类似,是"流式"的(一次可以读一个字节或者十个字节或者一百个字节)

  4. 全双工:一个通信通道,可以双向传输.(既可以发送,也可以接收)

二、TCP协议段格式

img

source port,destinatio port:

UDP一样,都是表示源端口和目的端口

sequence number ,acknowledgement number:

任何一条数据都是有序号的,但是确认序号只有应答报文有.

32位序列号

TCP为了实现可靠性,提出了确认应答和超时重传来主要保证TCP的可靠性。32位序号就是针对TCP发送的数据按照字节进行编号(累加进行编号)。

因此只需要确定第一个字节的序号,根据数据长度就可以推算出其他字节的序号。那么在数据传输时只需要将第一个字节序号传输过去即可。

由于数据传输存在 “后发先至” 的问题,那么接收方回复的数据就不知道是针对那一条。因此在应答报文中,就可以利用序号确定对哪一条数据进行应答(回复时针对编号进行回复)。

32位确认序号

当接收方接收到数据后,按照接收到的数据最后一个字节序号 + 1 作为确认序号。如果返回的应答报文这个确认序号是上一条数据最后一字节序号加1,就证明这个序号以前的数据发送成功了。

4位首部长度:(32 bit)

一个TCP报头长度是可变的,并不是像UDP的报头一样固定8个字节.

因此,首部长度就描述了TCP报头具体多长,另外,选项部分之前的固定是20个字节.

首部长度-20字节 = 选项长度

注:首部长度这里的单位不是位,而是4字节.

eg:

首部长度:15→实际TCP报头的长度:4*15 = 60字节 选项长度: 60-20=40(字节)

data offset reserved:

保留六位,为以后的扩展提供位置,便于TCP扩展。

六位标志位

– URG: 紧急指针是否有效。
– ACK: 确认号是否有效(应答报文有效)。
– PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走。
– RST: 对方要求重新建立连接; 我们把携带RST标识的称为复位报文段。
– SYN: 请求建立连接; 我们把携带SYN标识的称为同步报文段。
– FIN: 通知对方, 本端要关闭了, 我们称携带FIN标识的为结束报文段。

ACK这位如果为1证明就是应答报文,如果为0就不是。确认序号只有在应答报文中才有意义。其他几位后续的十种核心机制中会提到。

六位标志位,就是为了确定了这个报文是哪一类。

windows(16位窗口大小)

后面的滑动窗口中详细介绍。

checksum(16位校验和)

这里和UDP原理一样。根据一些算法计算出校验和,在接收的数据再计算一遍,然后对比是否相等,来确定数据是否准确。UDP这里有详细介绍。

urgentpinger(16位紧急指针)

标识了那部分数据为紧急数据。

option padding(选项)

TCP报头除过选项其他固定20位,即:首部长度 - 20 = 选项长度。TCP报头大小是可变的,就是因为选项的存在,选项对TCP报文一些属性进行解释说明。

UDP报头

一、UDP特点

1、无连接

UDP传输的过程类似于寄信,知道对端的IP和端口号就可以直接进行数据报传输,不用像TCP协议需要建立连接。

2、不可靠

UDP没有任何安全机制,发送端发送数据报以后,如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息。

3、面向数据报

UDP通过数据报的形式进行传输,用户的请求或响应都会从数据报转换成字符串

应用层交给UDP多长的报文,UDP原样发送,既不会拆分也不会合并

例:用UDP传输100个字节的数据,如果发送端一次发送100个字节,那么接收端也必须一次接收100个字节,而不能循环接收10次每次接收10个字节。

4、全双工通信

UDP的Socket既能读也能写,客户端和服务器都可以发送请求/接受响应。

二、UDP报文的格式

在这里插入图片描述

1. Source Port(源端口)

这个字段占据 UDP 报文头的前 16 位,通常包含发送数据报的应用程序所使用的 UDP 端口。接收端的应用程序利用这个字段的值作为发送响应的目的地址。这个字段是可选的,所以发送端的应用程序不一定会把自己的端口号写入该字段中。如果不写入端口号,则把这个字段设置为 0。这样,接收端的应用程序就不能发送响应了。

2.Destination Port (目的端口)

接收端计算机上 UDP 软件使用的端口,占据 16 位。

3.Lengh (长度)

该字段占据 16 位,表示 UDP 数据报长度,包含 UDP 报文头和 UDP 数据长度。因为 UDP 报文头长度是 8 个字节,所以这个值最小为 8。

4. Checksum(校验值)

该字段占据 16 位,可以检验数据在传输过程中是否被损坏。

IP报头

一、IP地址分类

从使⽤范围来讲:公有地址、私有地址

公有地址:全球唯⼀,付费使⽤

私有地址:本地唯⼀,免费使⽤

从版本分类:IPv4、IPv6

IPv4地址 192.168.1.1 32位的⼆进制数,以点分⼗进制的表示⽅ 法/书写⽅法表示 192.168.1.1 点分⼗进制 —由点区分的⼗进制

二、IP报文的格式

在这里插入图片描述
IP报头大小为固定20字节(20B*8=160bit),总共由12部分组成。

1. version---------版本(占4b,指IP协议的版本)。
2. Header Length—头部长度。

(头部长度是指IP报头的总长度,因为有Option可选部分,通常为20字节,在20–60字节)。

该字段单位为32位字(1个32位字为4字节),因此当ip报头长度为1111时是最大60字节;

IP报头长度不是4字节的整数倍是,就需要对填充域进行填充;

3.Differentiated Services Field(type of service)

用来指定特殊的报文处理方式

4. Total Length----总长度(占16b)

标示此IP报头和数据的之和的总长度。

总长度16位,一个数据最大长度65535字节;

链路只允许1500字节,超过的话需要进行MTU分片。

一个数据包由IP报头和数据两部分组成,而IP报头为20—60字节,所以不会有一个数据包里纯数据超过1480字节的。

5. Identification----ID标识符(占16b)

与标记字段和偏移字段用于IP报文分片。

Idertification(标识字段):

源站没发送一个分组,标识值+1

6. Flag----标记(占3b)

占3位,目前只有2位具有意义;

第一位没有被使用

第二位D时不分片为(DF),当DF位置为1时表示路由器不能对报文进行分片处理。

第三位M–More fragment—多分片(MF)

当路由器对报文进行分片时,除了最后一个分片的MF位设置为0外,其他所有分片MF位置为1,以便接收者直到收到MF位为0的分片为止。

7. Fragmentation offset----分片偏移(13b)

标识分片在分组中的位置。

片偏移以8个字节为偏移单位,分片的长度为8字节的整数倍;

注意:

MTU不是固定1500,这要取决现场物理环境;

MTU不包含帧头帧尾。

8. Time to live–TTL----生存时间(8b)

跳数大小,即数据包能传多少跳,

不同操作系统TTL的默认最大值会有所不同(linux-255;win98–225;win7/8/10–64);

表示数据包在网络中的寿命(最初以秒为单位,现在以跳数为单位,最大225);

路由设备每此转发将TTL值减1,TTL为0时丢弃该分组。

9. Protocol----协议(8b)

标识数据携带的数据是何种协议,标识传输层地址或协议号

如1代表ICMP,6代表TCP,17代表UDP

10.Header checksum----报头校验和(16b)

用于校验检查IP报头是否有出入。

只校验IP报头部,数据部分由高层协议校验(TCP头的校验字段包含IP头和数据的校验)

无需重复校验数据部分;

缩短路由器转发分组时的处理时间,数据部分由终端用高层协议校验。

1- 发送方先把校验和字段置为0,对首部中没个16bit(切割多个16b)进行二进制反码求和,结果存在校验和字段中。

2- 收到一份IP数据包后同样对首部中每个16b进行二进制码反求和,接收方计算中包含了发送方存在的首部校验和。

3- 如果传输过程无错误,接收方结算结果全为1,传输中出现错误或数据丢失校验和结果为非全1,接受者第丢弃校验未通过数据。

4- 不生成错误报文,由上层发现丢失数据进行重传。

11.source ip address----源IP地址(32b)

此数据发起者的IP地址。

12.Destination ip address----目的IP地址(32b)

此数据的接收者IP地址。

13.Option----可选字段(0–40B)

Option字段很少使用,用于控制,转发要求,测试等。

常用IP报头长度为20字节—显示为1010。

三次握手 四次挥手

作业:⾃⾏查找三次握⼿为什么是三次,四次挥⼿为什么是四次!(⾯试 官经典问题)

  • 三次握手才可以阻止重复历史连接的初始化(主要原因)
  • 三次握手才可以同步双方的初始序列号
  • 三次握手才可以避免资源浪费

原因一:避免历史连接

简单来说,三次握手的首要原因是为了防止旧的重复连接初始化造成混乱。

我们考虑一个场景,客户端先发送了 SYN(seq = 90) 报文,然后客户端宕机了,而且这个 SYN 报文还被网络阻塞了,服务端并没有收到,接着客户端重启后,又重新向服务端建立连接,发送了 SYN(seq = 100) 报文(注意!不是重传 SYN,重传的 SYN 的序列号是一样的)。

客户端连续发送多次 SYN (都是同一个四元组)建立连接的报文,在网络拥堵情况下:

  • 一个「旧 SYN 报文」比「最新的 SYN 」 报文早到达了服务端,那么此时服务端就会回一个 SYN + ACK 报文给客户端,此报文中的确认号是 81(80+1)。
  • 客户端收到后,发现自己期望收到的确认号应该是 200+1,而不是 80 + 1,于是就会回 RST 报文。
  • 服务端收到 RST 报文后,就会释放连接。
  • 后续最新的 SYN 抵达了服务端后,客户端与服务端就可以正常的完成三次握手了。

原因二:同步双方初始序列号

TCP 协议的通信双方, 都必须维护一个「序列号」, 序列号是可靠传输的一个关键因素,它的作用:

  • 接收方可以去除重复的数据;
  • 接收方可以根据数据包的序列号按序接收;
  • 可以标识发送出去的数据包中, 哪些是已经被对方收到的(通过 ACK 报文中的序列号知道);

可见,序列号在 TCP 连接中占据着非常重要的作用,所以当客户端发送携带「初始序列号」的 SYN 报文的时候,需要服务端回一个 ACK 应答报文,表示客户端的 SYN 报文已被服务端成功接收,那当服务端发送「初始序列号」给客户端的时候,依然也要得到客户端的应答回应,这样一来一回,才能确保双方的初始序列号能被可靠的同步。

四次握手其实也能够可靠的同步双方的初始化序号,但由于第二步和第三步可以优化成一步,所以就成了「三次握手」。

而两次握手只保证了一方的初始序列号能被对方成功接收,没办法保证双方的初始序列号都能被确认接收。

原因三:避免资源浪费

如果只有「两次握手」,当客户端发生的 SYN 报文在网络中阻塞,客户端没有接收到 ACK 报文,就会重新发送 SYN ,由于没有第三次握手,服务端不清楚客户端是否收到了自己回复的 ACK 报文,所以服务端每收到一个 SYN 就只能先主动建立一个连接,这会造成什么情况呢?

如果客户端发送的 SYN 报文在网络中阻塞了,重复发送多次 SYN 报文,那么服务端在收到请求后就会建立多个冗余的无效链接,造成不必要的资源浪费。

TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双工模式

  • 这就意味着,关闭连接时,客户端向服务端发送 FIN 时,仅仅表示客户端不再发送数据了,但是客户端还能接收服务端的数据。
  • 服务端收到客户端的 FIN 报文时,先回一个 ACK 应答报文,但此时服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送 FIN 报文给客户端来表示同意现在关闭连接。

从上面过程可知,服务端通常需要等待完成数据的发送和处理,所以服务端的 ACKFIN 一般都会分开发送,因此是需要四次挥手。

简单地说,前 2 次挥手用于关闭一个方向的数据通道,后两次挥手用于关闭另外一个方向的数据通道

注意:在特定情况下,四次挥手是可以变成三次挥手的

⾃⾏查找CDN原理 --CDN(内容分发⽹络)

CDN 原理

CDN 就是内容分发网络的意思,其英文全称为 Content Delivery Network。

简单地说,CDN 可以提前把数据存在离用户最近的数据节点,从而避免长途跋涉经过长途骨干网,最终达到减少骨干网负担、提高访问速度的目的。

CDN 工作原理

加入了 CDN 之后,浏览器的网络请求就变成如下图所示的情况。

img

CDN 基本工作过程

  1. 浏览器发起图片 URL 请求,经过本地 DNS 解析,会将域名解析权交给域名 CNAME 指向的 CDN 专用 DNS 服务器。
  2. CDN 的 DNS 服务器将 CDN 的全局负载均衡设备 IP 地址返回给浏览器。
  3. 浏览器向 CDN 全局负载均衡设备发起 URL 请求。
  4. CDN 全局负载均衡设备根据用户 IP 地址,以及用户请求的 URL,选择一台用户所属区域的区域负载均衡设备,向其发起请求。
  5. 区域负载均衡设备会为用户选择最合适的 CDN 缓存服务器(考虑的依据包括:服务器负载情况,距离用户的距离等),并返回给全局负载均衡设备。
  6. 全局负载均衡设备将选中的 CDN 缓存服务器 IP 地址返回给用户。
  7. 用户向 CDN 缓存服务器发起请求,缓存服务器响应用户请求,最终将用户所需要偶的内容返回给浏览器。

CDN 基本工作过程

  1. 浏览器发起图片 URL 请求,经过本地 DNS 解析,会将域名解析权交给域名 CNAME 指向的 CDN 专用 DNS 服务器。
  2. CDN 的 DNS 服务器将 CDN 的全局负载均衡设备 IP 地址返回给浏览器。
  3. 浏览器向 CDN 全局负载均衡设备发起 URL 请求。
  4. CDN 全局负载均衡设备根据用户 IP 地址,以及用户请求的 URL,选择一台用户所属区域的区域负载均衡设备,向其发起请求。
  5. 区域负载均衡设备会为用户选择最合适的 CDN 缓存服务器(考虑的依据包括:服务器负载情况,距离用户的距离等),并返回给全局负载均衡设备。
  6. 全局负载均衡设备将选中的 CDN 缓存服务器 IP 地址返回给用户。
  7. 用户向 CDN 缓存服务器发起请求,缓存服务器响应用户请求,最终将用户所需要偶的内容返回给浏览器。

使用 CDN 服务的网站,只需要将域名解析权交给 CDN 服务商,接着将需要分发的内容上传到 CDN,就可以实现内容加速了!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值